在YOLOv3训练自己的数据集,最后一步验证时,出现段错误(核心已转储),要么就是不报错但是没有标签,被这个问题卡了几天,终于解决了,激动地写下第一篇优快云作为纪念。
首先检查配置文件 my_voc.data,检查路径是否正确,可以把backup文件夹与images,xmls,labels放在同一级,如下。backup存放权重文件,尤其注意。
注意这里并没有使用验证集,因此 valid 的值和train一样。
然后检查yolov3-tiny.cfg的参数设置。因为是yolov3-tiny,只有两个yolo层,在这里两个[yolo]层和上方的[convolutional]层,均按自己的数据集情况修改。
random=1表示开启多尺度训练。
训练文件cfg和验证文件cfg应保持一致性,即除了batch和subdivisions不一样,其他的参数(如classes,filters,random)均一致。
还有注意是Training(训练)还是Testing(验证)模式。现在修改的训练文件cfg。“#”后面的内容表示被注释掉了。训练的命令如下,注意my_voc.data和yolov3-tiny.conv.15的路径是否符合自己的数据集。
./darknet detector train data/star/my_voc.data data/star/yolov3-tiny.cfg data/star/yolov3-tiny.conv.15
最后检查输入验证的命令是否正确。(本人在这里出错过,写错了yolov3-tiny_final.weights的路径)
./darknet detector test data/star/my_voc.data data/star/yolov3-tiny_test.cfg data/star/backup/yolov3-tiny_final.weights
把这一条指令看成三段,注意三部分直接不要打换行。
./darknet detector test
data/star/my_voc.data data/star/yolov3-tiny_test.cfg
data/star/backup/yolov3-tiny_final.weights
第一部分表示现在是test模式,第二部分和第三部分表示这两个文件相对darknet文件夹的路径。
其实改到这里,本人的问题还是没有解决,仍然出现段错误 (核心已转储)。受yolov3---报"段错误"的可能原因及解决方法 - 码上快乐 (codeprj.com)启发,又重新训练一次权重文件(不要怕麻烦!),终于成功了。
(忽略为什么要给一个star打上rope标签这件事)
也感谢以下网址的启发。