ubuntu16.04,yolo_v3训练过程出现全是-nan错误

最近忙于搞毕设,解决到什么比较恶心的问题或者网上不好搜的问题就写篇文章记录下,希望能帮到后来人。

一、问题

训练过程中,出现了所有参数全为-nan的情况。
我下的是FLIR的数据集,用的里面thermal_8_bit的图,即jpeg格式图片(此为伏笔)。一开始以为是标注文件的问题,因为我在labels文件夹中存放.txt标注文件时,一训练结果提示在labels文件夹中未见测到xxxxx.jpeg文件,训练失败。将所有图片复制一份进labels文件夹后就没再报错,于是理所当然以为yolo没有检测到.txt文件或者里头的坐标等有问题。自查发现txt文件中也没用逗号,自己手动用labelImg标注了1000张训练了一波还是报错,多次尝试无果只能像无头苍蝇继续查。

二、“jpeg和JPEG”

最后无意间看到自己曾经看过的一篇文章,链接:目标检测:yolov3训练自己的数据模型,避免踩坑(包含常见问题集锦),(非常感谢这位大神),其中提到过全-nan是由于该博主图片格式问题(他是bmp格式),虽然之前看到过很多篇文章都说yolo支持jpg、jpeg和png格式,以防万一还是查查看。

进入data.c

进yolo文件夹中darknet/src/data.c,使用ctrl+h快捷键寻找find_replace如下:

    find_replace(path, "images", "mask", labelpath);
    find_replace(labelpath, "JPEGImages", "mask", labelpath);
    find_replace(labelpath, ".jpg", ".txt", labelpath);
    find_replace(labelpath, ".JPG", ".txt", labelpath);
    find_replace(labelpath, ".JPEG", ".txt", labelpath);

源代码中有很多这样的片段,细看才发现yolo支持JPEG格式,但并没有jpeg格式(虽然在文档最后的一个片段中出现了jpeg),尝试照猫画虎在每个这样的片段最下边加上jpeg,再一训练结果还是不行。为了验证图片格式是否真有问题,我拿手动标的1000张图做格式转换的尝试。

解决办法:将jpeg格式转换成jpg格式

这里参考了博客:ubuntu图片格式批量转换,批量处理
直接终端里操作:

mogrify -path newdir -format jpg  *.jpeg
//代码含义为将目录中所有jpeg格式文件转换为jpg格式并存放于newdir目录中
//-format 指定输出的文件格式,而 -path 则指定输出的文件目录。

将所有文件格式转换完后,记得将train.txt 和 val.txt 文档中那些图片名的后缀全改了(直接ctrl+h,搜jpeg改成jpg全部替换就完事了)

再次尝试训练,结果成功!

结语

yolo真是坑……支持JPEG格式不支持jpeg格式?
当然应该是我境界不够,而且改源代码的操作也没成功,不知道是还需要改什么其他地方
有什么问题欢迎评论交流

版权声明:本文为CSDN博主「hlblbxx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hlblbxx/article/details/114227778

hlblbxx

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

【模型压缩】Yolov3目标检测模型蒸馏实验

PaddleDetection知识蒸馏 知识蒸馏主要是让让新模型(通常是一个参数量更少的模型)近似原模型(模型即函数)。注意到,在机器学习中,我们常常假定输入到输出有一个潜在的函数关系,这个函数是未知的:从头学习一个新模型就是从有限的数据中近

无人驾驶目标检测算法测试

目的 在无人驾驶项目开发中测试了几个目标检测算法模型,使用的数据是速腾聚餐32线激光雷达采集得到的点云,使用的显卡是RTX2060,采集的场地是停车场和道路环境。 1 PointPillars 使用的