总结了一些写的好的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命令时,
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次保存模型。