YOLOv3问题总结

1、运行test,recall,vaild命令时,文件中batch和subdivisions两项必须为1。否则会出现测试检测不到目标、计算recall为0,验证没有产生结果文件。训练时候根据GPU情况调大batch和subdivisions,官方cfg中两者值分别为64和16

2、测试标签上如何添加置信值
修改src/image.c文件draw_detections函数
修改src/image.c文件draw_detections函数中get_label函数调用的参数
image label = get_label(alphabet, labelstr, (im.h*.02));
源码中为0.03,修改为0.02后,标签文字减小,可以根据需要调整。
修改代码后需要使用make clean,make重新编译。
加入置信值,减小标签大小后的检测效果图!
3、迭代n次数之后的模型保存。

修改example/detector.c文件中的第148行。源代码为:if(i%100000 || (i<1000 && i%100))//迭代小于1000次,每100次保存模型,大于1000次,每10000次保存模型。可以根据需要修改训练多少轮保存一个模型,if(i%10000 || (i<1000 && i%1000)),大于1000次,每1000次保存模型。

4、卷积层得来的特征:

1313 一个特征点代表3232像素的图像,检测大目标,最小检测3232的图像
26
26 一个特征点代表1616的图像,检测中目标,最小检测1616的图像
5252 一个特征点代表88的图像 检测小目标,最小检测8*8的图像

5、
从Darknet-53网络结构看出yolov3较yolov2网络深度推至106层,其中引用ResNet、FPN网络结构思想,同时采用多尺度预测来弥补初始划分13*13网格细粒度不够问题,同时yolov3网络仍然采用yolov2中数据增强、批归一化等操作。

6、linux下编译darknet 出现空间不足解决办法
gcc -Iinclude/ -Isrc/ -Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -c ./src/gemm.c -o obj/gemm.o
./src/gemm.c:166:1: fatal error: error writing to /tmp/ccGeIVxY.s: No space left on device

在这里插入图片描述
主要是系统 /tmp/空间不足引起的,tmp文件夹空间不足了,不能满足编译的需求,编译的中间文件不能写入。
解决办法 mkdir 文件夹——你可以使用的文件夹 比如说 mkdir /home/sunlh/zzzz/tmp
然后只要export TMPDIR= /home/sunlh/zzzz/tmp
这样就不会出现 tmp文件夹不够用的情况。

YOLOv3问题总结_第1张图片

7、数据集格式
A.制作VOC格式的xml文件
工具:LabelImg
B.将VOC格式的xml文件转换成YOLO格式的txt文件
脚本:voc_label.py,根据自己的数据集修改就行了。

按照上面的流程,每张图像都生成了对应的txt文件来保存其归一化后的位置信息,如下图对应生成的txt如下:

0 0.250925925926 0.576388888889 0.1 0.0263888888889
0 0.485185185185 0.578125 0.0685185185185 0.0201388888889

图中共有车牌两个,每行保存一个车牌的信息,第一个0表示检测object的label,因为我只有一类,所以都是0
后面的四位即为归一化后的中心点坐标和位置框的长和宽
最后将图像和对应txt的文件名统一,并拷贝到同一个文件夹(a.jpg对应的txt为a.txt),如图:

YOLOv3问题总结_第2张图片

txt和对应jpg文件的名称除了最后.jpg,.txt的后缀不一样,其他的必须完全一样,且需要保存在同一文件夹,训练过程中会直接将a.jpg的名称替换为a.txt来寻找该图像对应的gt。对应的gt文件也不一定必须是txt格式,如果不是txt格式可以去源码中将这部分代码进行修改,将.jpg替换为你需要的格式后缀

你可能感兴趣的:(YOLOv3)