问题描述
我一直在尝试在自定义数据集上重新训练 YOlov3。我将 jpg 图像及其相应的 txt 注释文件保存在同一目录中。我已经按照许多在线教程的建议适当地设置了我的 .data 文件、.names 文件和 .cfg 文件。非常令人沮丧的是,我遇到了显示 Couldn't open file: <some-path>/labels/<some file>.txt
的问题。这里有什么烦人的,它似乎在一些 labels 目录中寻找 .txt 文件,这些文件既不存在,我也没有在任何地方提到它。我所有的 .jpg 和 .txt 文件都位于一个名为 images 的目录中,该目录与系统正在查找的目录位于同一级别labels 目录。
更烦人的是,如果我将 .txt 文件分离到 labels 目录中,这是 yolo 暗网正在寻找的目录,此错误会消失,但训练永远不会开始。
我尝试了许多不同的方式来指定路径,使用不同的模型、cfg 文件等,但都是徒劳的。请帮助某人。
解决方法
从不同的角度进行了多次尝试后,我找到了正确的方法。组织图像和标签的第一个问题的答案与大多数在线教程的建议相反。 labels 应该位于与 images 不同的目录中。每个.txt 文件的路径应该与其对应的.jpg 不同,只是在images 这个词上。例如,如果图像的路径为 <path/to/somewhere/images/somewhere/xyz.jpg>
,则其对应标签文件的路径应为 <path/to/somewhere/labels/somewhere/xyz.txt>
。
作为第二部分没有开始训练的答案,确保在darknet训练命令的末尾使用参数-clear 1
,即./darknet detector train cfg/data_file.data cfg/cfg_file.cfg yolov3.weights -clear 1
。
请记住,在您的 *.data 文件中,您有以下设置:
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 位)