我一直在尝试在自定义数据集上重新训练YOLOv3。我将jpg图像及其对应的txt注释文件保存在同一目录下。我设置了我的。Data文件,.names文件和.cfg文件适当地按照许多在线教程的建议。非常令人沮丧的是,我遇到了这个问题,上面写着Couldn't open file: <some-path>/labels/<some file>.txt
。这里令人恼火的是,它似乎在一些标签目录中寻找.txt文件,这些文件既不存在,我也没有在任何地方提到它。我所有的.jpg和.txt文件都在一个名为images的目录中,该目录与系统查找的labels目录位于同一级别。
更烦人的是,如果我把.txt文件分开到标签目录,这是yolo暗网正在寻找的,这个错误消失了,但训练永远不会开始。
我尝试了许多不同的方法来指定路径,使用不同的模型,cfg文件等,但都是徒劳的。请帮帮别人。
经过多方尝试,我终于找到了正确的方法。关于组织图像和标签的第一个问题的答案与大多数在线教程的建议相反。标签应该与图像放在一个单独的目录中。每个.txt文件的路径应该与其对应的.jpg不同,只是在images这个单词中。例如,镜像文件的路径为"<path/to/somewhere/images/somewhere/xyz.jpg>
",则对应的标签文件路径应为"<path/to/somewhere/labels/somewhere/xyz.txt>
"。
作为第二部分训练不开始的答案,确保在暗网训练命令的末尾使用参数-clear 1
,即./darknet detector train cfg/data_file.data cfg/cfg_file.cfg yolov3.weights -clear 1
。
记住,在你的*。数据文件,您有以下设置:
classes = [Your number of classes]
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = backup/
您应该有data/train.txt
和data/test.txt
,这是一个包含您的图像目录列表的文本文件。
例如,如果您将所有的图像和txt文件放在data/obj中,则txt文件应包含:
data/obj/1.jpg
data/obj/2.jpg
.
.
(and so on)
然后,YOLO将自动检查图像的相应标签,它们应该具有相同的名称(在本例中:1.txt, 2.txt,…)
参考:(https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects中第3、4条)