PaddleX
PaddleX copied to clipboard
训练产生的错误
Checklist:
- 查找历史相关issue寻求解答
- 翻阅FAQ常见问题汇总和答疑
- 确认bug是否在新版本里还未修复
- 翻阅PaddleX API文档说明
描述问题
复现
-
您是否已经正常运行我们提供的教程?
-
您是否在教程的基础上修改代码内容?还请您提供运行的代码 `
解压文件
!mkdir work/data !unzip -oq data/data115729/VisDrone2019-DET-train.zip -d work/data !unzip -oq data/data115729/VisDrone2019-DET-val.zip -d work/data
import os import cv2 import numpy as np from PIL import Image
这里只检测这11个类
category_list = ['pedestrain', 'people', 'bicycle', 'car', 'van','truck', 'tricycle', 'awning-tricycle', 'bus', 'motor']
生成对应的xml文件
from xml.etree import ElementTree as et import xml.dom.minidom as minidom
import os import cv2 import numpy as np from PIL import Image
for mode in ['train', 'val']: i = 0 all_img_path = '/home/aistudio/work/VisDrone_PascalVOC/VisDrone2019-DET-{}/images'.format(mode) img_list = os.listdir(all_img_path) for img_name in img_list: anno_path = "/home/aistudio/work/VisDrone_PascalVOC/VisDrone2019-DET-{}/annotations".format(mode) +'/'+ img_name[:-4] + ".txt" if not os.path.isfile(anno_path): print('File is not exist!', anno_path) continue img_path = os.path.join(all_img_path, img_name) img = cv2.imread(img_path) h, w, c = img.shape # 创建根节点 root = et.Element('annotation') # 添加子节点 et.SubElement(root, 'folder').text = all_img_path et.SubElement(root, 'filename').text = img_name source = et.SubElement(root, 'source') et.SubElement(source, 'database').text = "unKnown"
size = et.SubElement(root,'size')
et.SubElement(size,'width').text = str(w)
et.SubElement(size,'height').text = str(h)
et.SubElement(size,'depth').text = str(c)
et.SubElement(root,"segmented").text = '0'
with open(anno_path, 'r') as f:
o = et.SubElement(root, "object")
for lineStr in f.readlines():
try:
if ',' in lineStr:
xmin, ymin, w, h, score, category, trunc, occlusion = lineStr.split(',')
else:
xmin, ymin, w, h, score, category, trunc, occlusion = lineStr.split()
except:
# print('error: ', anno_path, 'line: ', lineStr)
continue
if int(category) in [0, 11] or int(w) < 4 or int(h) < 4:
continue
et.SubElement(o, "name").text = category_list[int(category) - 1]
et.SubElement(o, "pose").text = "Unspecified"
et.SubElement(o,"truncated").text = '0'
et.SubElement(o,"difficult").text = '0'
bndbox = et.SubElement(o,"bndbox")
et.SubElement(bndbox,'xmin').text = xmin
et.SubElement(bndbox,'ymin').text = ymin
et.SubElement(bndbox,'xmax').text = str(int(xmin) + int(w) - 1)
et.SubElement(bndbox,'ymax').text = str(int(ymin) + int(h) - 1)
if i % 500 == 0:
print("处理到第{}张图片".format(i))
i += 1
# 将根目录转化为树行结构
tree = et.ElementTree(root)
rough_str = et.tostring(root, 'utf-8')
# 格式化
reparsed = minidom.parseString(rough_str)
new_str = reparsed.toprettyxml(indent='\t')
xml_root_path = "/home/aistudio/work/VisDrone_PascalVOC/Annotations_{}".format(mode)
if not os.path.exists(xml_root_path):
os.makedirs(xml_root_path)
xml_path = os.path.join(xml_root_path, img_name[:-4] + ".xml")
f = open(xml_path, 'w', encoding='utf-8')
# 保存
f.write(new_str)
f.close()
print("{}集处理完毕".format(mode))
生成train_list.txt
生成val_list.txt
for mode in ['train', 'val']: i = 0 all_img_path = '/home/aistudio/work/VisDrone_PascalVOC/VisDrone2019-DET-{}/images'.format(mode) img_list = os.listdir(all_img_path) print(len(img_list)) all_anno_path = "/home/aistudio/work/VisDrone_PascalVOC/Annotations_{}".format(mode) anno_list = os.listdir(all_anno_path) with open("/home/aistudio/work/VisDrone_PascalVOC/{}_list.txt".format(mode),'w') as f: for i in range(len(anno_list)): img_path = os.path.join(all_img_path, img_list[i]) xml_path = os.path.join(all_anno_path, anno_list[i]) f.write(img_path+ " "+ xml_path + '\n')
生成dataSet
import paddlex as pdx from paddlex.det import transforms
train_transforms = transforms.Compose([ transforms.Normalize() ])
eval_transforms = transforms.Compose([ transforms.Normalize() ])
train_dataset = pdx.datasets.VOCDetection( data_dir='/home/aistudio/work/VisDrone_PascalVOC', file_list='/home/aistudio/work/VisDrone_PascalVOC/train_list.txt', label_list='/home/aistudio/work/VisDrone_PascalVOC/labels.txt', transforms=train_transforms) eval_dataset = pdx.datasets.VOCDetection( data_dir='/home/aistudio/work/VisDrone_PascalVOC', file_list='/home/aistudio/work/VisDrone_PascalVOC/val_list.txt', label_list='/home/aistudio/work/VisDrone_PascalVOC/labels.txt', transforms=eval_transforms)
num_classes = len(train_dataset.labels) model = pdx.det.YOLOv3(num_classes=num_classes, backbone='DarkNet53') model.train( num_epochs=20, train_dataset=train_dataset, train_batch_size=8, eval_dataset=eval_dataset, learning_rate=0.000125, lr_decay_epochs=[210, 240], save_interval_epochs=5, save_dir='output/yolov3_darknet53', use_vdl=True)
`
- 您使用的数据集是?
VisDrone2019-DET-无人机视角数据集
- 请提供您出现的报错信息及相关log
C++ Traceback (most recent call last):
0 std::thread::_State_impl<std::thread::_Invoker<std::tuple<ThreadPool::ThreadPool(unsigned long)::{lambda()#1}> > >::_M_run()
1 std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool)
2 paddle::framework::details::FastThreadedSSAGraphExecutor::RunOp(paddle::framework::details::OpHandleBase*, std::shared_ptr<paddle::framework::BlockingQueue
Error Message Summary:
FatalError: Segmentation fault is detected by the operating system.
[TimeInfo: *** Aborted at 1677570357 (unix time) try "date -d @1677570357" if you are using GNU date ***]
[SignalInfo: *** SIGSEGV (@0x7f4c32a37d80) received by PID 16238 (TID 0x7f4a627fc700) from PID 849575296 ***]
环境
- 请提供您使用的PaddlePaddle和PaddleX的版本号
PaddlePaddle 2.4.0 paddlex 1.3.0
-
请提供您使用的操作系统信息,如Linux/Windows/MacOS linux
-
请问您使用的Python版本是? 3.7.4
-
请问您使用的CUDA/cuDNN的版本号是? 11.2
paddlex 1.3.0 配套的版本PaddlePaddle 2.4.0 太高了,可以降低PaddlePaddle版本试试。如1.8.4,或者升级paddlex 到2.0以上,PaddlePaddle使用2.3
可是当我把 paddlex 换成2.0
paddlepaddle 换成 2.1.2
就会提示我
Your running script needs PaddleX<2.0.0, please refer to https://github.com/PaddlePaddle/PaddleX/tree/release/2.0-rc/tutorials/train#%E7%89%88%E6%9C%AC%E5%8D%87%E7%BA%A7 to solve this issue.
接口有一些变化,把训练的代码按照新版本文档修改一下