注意事项一:
在制造自己数据集的时候,使用Labelimg时,类别标签切记要使用英文小写,不然在把xml文件转为txt文件时,会出现txt文件无内容(空白)情况。错误如下所示:
AssertionError: train: No labels found in \darknet\scripts\2007_train.cache, can not start training.
若遇到此类问题,一个方法可以重新标注,另一个方法可以用python语言批量化修改xml文件里面的标签。(虽然代码比较简单,但是本人却花了整整一个上午时间)代码如下所示,你可以把中文改为英文,也改为小写。
# coding=utf-8
import os
import os.path
import xml.dom.minidom
path="F:/pyProject/yolov5-master/yolov5-master/darknet/scripts/VOCdevkit/VOC2007/Annotations1/"
files = os.listdir(path) # 得到文件夹下所有文件名称
for xmlFile in files: # 遍历文件夹
if not os.path.isdir(xmlFile): # 判断是否是文件夹,不是文件夹才打开
print(xmlFile)
# TODO
# xml文件读取操作
# 将获取的xml文件名送入到dom解析
dom = xml.dom.minidom.parse(os.path.join(path, xmlFile))
###最核心的部分,路径拼接,输入的是具体路径
root = dom.documentElement
# 获取标签对name/pose之间的值
name = root.getElementsByTagName('name')
for i in range(len(name)):
if name[i].firstChild.data == '凹凸':
name[i].firstChild.data = 'sunken'
if name[i].firstChild.data == '划痕':
name[i].firstChild.data = 'scratch'
if name[i].firstChild.data == '孔洞':
name[i].firstChild.data = 'hole'
if name[i].firstChild.data == '脏污':
name[i].firstChild.data = 'sully'
# 修改
# 打印输出
# print('修改后的 name')
print('~~~~~')
with open(os.path.join(path, xmlFile), 'w') as fh:
dom.writexml(fh)
print('写入name/pose OK!')
注意事项二:
在对数据加载时,遇到问题,需要去dataloader.py或者dataset.py文件中,修改数据加载路径如下图所示(“Ctrl+F”进行搜索比较快):注意事项三:
进行运行前,如果显卡比较差,直接运行会出现以下错误提示:
AttributeError: 'NoneType' object has no attribute '_free_weak_ref'
那么,就需要定位到dataloader.py和train.py文件里面,把workers的参数,都设置为0。
还有不少问题,目前记得以上这些,希望能为第一次使用Yolo的小白提供帮助,谢谢大家。