YOLOv3学习笔记

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

一、学习YOLOv3

YOLOv3论文

YOLOv3:An Incremental Improvement全文翻译

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

语言生动易懂,适合新手学习,有很多实测的图,效果非常好,展示了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命令时,文件中batch和subdivisions两项必须为1。否则会出现测试检测不到目标、计算recall为0,验证没有产生结果文件。训练时候根据GPU情况调大batch和subdivisions,官方cfg中两者值分别为64和16。

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

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

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

    int i,j;

    for(i = 0; i < num; ++i){
        char labelstr[4096] = {0};
        int class = -1;
	char possible[2];//存放检测的置信值
        for(j = 0; j < classes; ++j){
	  sprintf(possible,"%.2f",dets[i].prob[j]);//置信值截取小数点后两位赋给possible
            if (dets[i].prob[j] > thresh){
                if (class < 0) {
                    strcat(labelstr, names[j]);
		    strcat(labelstr, possible);//标签中加入置信值
                    class = j;
                } else {
                    strcat(labelstr, ", ");
                    strcat(labelstr, names[j]);
		    strcat(labelstr, possible);//标签中加入置信值
                }
                printf("%s: %.0f%%\n", names[j], dets[i].prob[j]*100);
            }
        }
///////////////////////////后面保持不变//////////////////////////////////////////////

修改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次保存模型。




你可能感兴趣的:(深度学习,目标检测)