利用YOLOv5训练数据的时候,一直提示找不到标签。
1.首先检查图片文件和标签文件的位置,这两个文件要在同一个路径下。如下:
2.文件夹位置OK,再检查下yaml配置文件中的信息是否正确。看起来也没有问题。
3.但是依旧提示找不到标签╮(╯▽╰)╭,仔细看下数据加载、处理的文件datasets.py,发现有一句会根据第2步中images文件夹的位置找到对应labels文件夹:
# Define labels
self.label_files = [x.replace('images', 'labels').replace(os.path.splitext(x)[-1], '.txt') for x in self.img_files]
这个替换不仅替换了文件夹的名称,顺便把文件名也改了(O_o)??
我的图片文件命名都是images(1).jpg、images(2).jpg、images(3).jpg、images(4).jpg、images(5).jpg…
对应的标签文件就是images(1).txt、images(2).txt、images(3).txt、images(4).txt、images(5).txt…
但是经过这个转变就变成了labels(1).txt、labels(2).txt、labels(3).txt、labels(4).txt、labels(5).txt…
这能找到才有鬼啊!!!
想了一下最简单的方法就是把文件名批量改一下了Python 批量修改文件名
import os
#输入要更改文件的上级目录,我的话就是images和labels这两个文件夹下的train文件夹和val文件夹,以下以images/train文件夹为例。
path = "H:/data/fire_data/images/train"
#需要被替换的字符images
originalname = 'images'
#替换的字符串fire
replacename = 'fire'
def main1(path1):
files = os.listdir(path1) # 得到文件夹下的所有文件名称
for file in files: #遍历文件夹
if os.path.isdir(path1 + '\\' + file):
main1(path1 + '\\' + file)
else:
files2 = os.listdir(path1 + '\\')
for file1 in files2:
if originalname in file1:
#用‘’替换掉 X变量
n = str(path1 + '\\' + file1.replace(originalname,replacename))
n1 = str(path1 + '\\' + str(file1))
try:
os.rename(n1, n)
except IOError:
continue
main1(path)