YOLOv3全部训练测试学习笔记

 

总结了一些写的好的YOLOv3的文章与自己使用中的问题,便于学习与回顾

一、学习YOLOv3

YOLOv3论文

YOLOv3:An Incremental Improvement全文翻译

【目标检测简史】进击的YOLOv3,目标检测网络的巅峰之作

扫描二维码关注公众号,回复: 5767259 查看本文章

语言生动易懂,适合新手学习,有很多实测的图,效果非常好,展示了YOLOv3的强大!

总结了YOLOv3的改进之处,并对下一代YOLO提出展望

【目标检测简史】YOLOv3的实景大片儿(含源码)

实测看效果,用YOLOv3检测一段视频,截取部分帧展示YOLOv3在小物体或者远处的物体识别、重叠遮挡物体的识别、运动模糊物体的识别、高密度汽车的识别、密集人群识别的效果。

目标检测网络之 YOLOv3

具体讲解了YOLOv1到v2到v3的改进之处,值得学习

如何评价最新的YOLOv3?

知乎话题,一些回答挺好的,各种总结、图表、文章链接

二、实践YOLOv3

YOLOv3官方Linux代码

YOLOv3官方网站

图表展示了YOLOv3的优势,讲解了如何搭建Darknet、下载预训练模型、测试图像、测试视频、用VOC数据集训练模型、用COCO数据集训练模型

YOLOv3: 训练自己的数据

详细讲解了如何制作VOC格式的数据集,将VOC格式的xml文件转换成YOLO格式的txt文件,修改训练相关的配置文件,如何训练自己的模型,如何进行测试,论文阅读

YOLO配置文件理解

详细讲解了YOLOv3配置文件每个参数的意义,以及源码中如何使用这些参数

三、修改YOLOv3

YOLOv3批量测试图片并保存在自定义文件夹下

讲解了如何批量测试图片并保存在自定义文件夹下,给出了代码

YOLOv3使用笔记——计算mAP、recall

讲解了YOLOv3如何计算mAP、recall来衡量模型效果

四、自己使用问题总结

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

2、测试标签上如何添加置信值

由于官方代码测试只标注了类别,标签文字较大。使用过程中希望减小标签,并加上检测的置信值。

修改src/image.c文件draw_detections函数,前面部分代码修改如下:

 
  1. int i,j;

  2.  
  3. for(i = 0; i < num; ++i){

  4. char labelstr[4096] = {0};

  5. int class = -1;

  6. char possible[2];//存放检测的置信值

  7. for(j = 0; j < classes; ++j){

  8. sprintf(possible,"%.2f",dets[i].prob[j]);//置信值截取小数点后两位赋给possible

  9. if (dets[i].prob[j] > thresh){

  10. if (class < 0) {

  11. strcat(labelstr, names[j]);

  12. strcat(labelstr, possible);//标签中加入置信值

  13. class = j;

  14. } else {

  15. strcat(labelstr, ", ");

  16. strcat(labelstr, names[j]);

  17. strcat(labelstr, possible);//标签中加入置信值

  18. }

  19. printf("%s: %.0f%%\n", names[j], dets[i].prob[j]*100);

  20. }

  21. }

  22. ///////////////////////////后面保持不变//////////////////////////////////////////////

修改src/image.c文件draw_detections函数中get_label函数调用的参数

image label = get_label(alphabet, labelstr, (im.h*.02));

源码中为0.03,修改为0.02后,标签文字减小,可以根据需要调整。

修改代码后需要使用make clean,make重新编译。

加入置信值,减小标签大小后的检测效果图!

                              

3、使用多GPU训练时,由于并行处理,训练迭代次数会一次跳过几轮,导致某些整数次迭代的模型没有保存。

修改example/detector.c文件中的第148行

源代码为:if(i%10000==0 || (i<1000 && i%100==0))//迭代小于1000次,每100次保存模型,大于1000次,每10000次保存模型。

可以根据需要修改训练多少轮保存一个模型,if(i%1000==0 || (i<1000 && i%100==0)),大于1000次,每1000次保存模型。

猜你喜欢

转载自blog.csdn.net/duanyajun987/article/details/88551731
今日推荐