YOLOv3 学习笔记:大神好贴汇总+自身经验记录

转载自可爱的实验室大神师姐,原文地址:https://blog.csdn.net/u011649150/article/details/81038645


一、学习 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 命令时,<test_cfg> 文件中 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 次保存模型。
 

猜你喜欢

转载自blog.csdn.net/Gentleman_Qin/article/details/84425294
今日推荐