Yolov3复现与预测精度测试

只是尝试和记录

Yolov3复现

任务目标:使用yolov3实现目标检测,并达到论文的精度要求,包括 MAP等

参考论文:https://pjreddie.com/media/files/papers/YOLOv3.pdf

参考代码:https://github.com/bubbliiiing/yolo3-pytorch

数据集:voc2007,voc2012

博客解读:https://blog.csdn.net/weixin_44791964/article/details/105310627

RCNN(对DPM的改进)

https://blog.csdn.net/scythe666/article/details/82624650
?训练深度网络进行提取
流程:
—一张图像生成1k-2k个候选区域
—对每个候选区域进行特征提取,使用深度网络
—特征送入每一类的SVM分类器,判别是否属于该类(识别分类)
—使用回归器精细修正候选框的位置
(位置精修:使用一个线性脊回归器进行精修【输入为深度网络pool5层的4096维特征,输出为xy方向的缩放和平移。 训练样本判定为本类的候选框中,和真值重叠面积大于0.6的候选框。】)

YOLO (对RCNN等的改进)

https://zhuanlan.zhihu.com/p/25236464

mAP :利用mAP计算目标检测精确度

基础:https://blog.csdn.net/weixin_44791964/article/details/104695264
置信度:置信度高的话,预测结果与结果很符合,置信度低的话,预测结果与实际有很多误差
可以接受的置信度“:人为设置的,假如设置可以接受的置信度为0.95,那置信度高于0.95的就被分到了正样本,反之则为负样本

序号 实际标签 置信度
1 正样本 0.99
2 负样本 0.96

如上表:TP=1,TN=0,FP=1,FN=0
【T或者F代表的是该样本 是否被正确分类。
P或者N代表的是该样本 原本是正样本还是负样本。】
精确度(precision)=TP/(TP+FP)=1/2
召回率(recall)=TP/(TP+FN)=1【**召回率:**分类器认为是正类并且确实是正类的部分占所有分类器认为是正类的比例
IOU衡量预测框与真实框的重合程度
IOU=S交/S并
一般IOU>=0.5时,被认为是正样本
AP:(对于目标检测精确度进行衡量的话,单独精确度和召回率这两个指标比较单一,因此需要进行结合,而AP就是因为这个存在的。)AP实际上指的是,利用不同置信度下的不同的准确率(Precision)和召回率(recall)的点的组合,画出来的曲线下面的面积。
Yolov3复现与预测精度测试_第1张图片
mAP就是所有的类的AP值求平均。

代码应用(对https://github.com/bubbliiiing/yolo3-pytorch中已经训练好的模型,进行目标检测精确度测试)

.pth文件的详解:
https://www.jianshu.com/p/946d1ce9c149

  1. 先将VOC2007补全,源代码不做改变

  2. 修改voc2yolo3.py中的trainval_percent=0.9然后运行,会在VOCdevkit/VOC2007/ImageSets/Main/下生成一个test.txt,打开后有内容说明这一步正确,这个txt中存放的是训练文件的索引

  3. 运行get_dr_txt.py:用来检测测试集里面的图片,获得预测框的数据
    运行成功截图:
    Yolov3复现与预测精度测试_第2张图片
    此时会在yolo3-pytorch-master\input\detection-results\下生成一堆的txt。如果开启被作者注释的下面一句代码,可以进行mAP的可视化,同时会将测试集的xml图像信息读取为jpg然后保存在:D:\master\yolo3-pytorch-master\input\images-optional
    Yolov3复现与预测精度测试_第3张图片

  4. 运行get_gt_txt.py:读取测试集中的xml,获得真实框的数据

运行成功的截图:

之后与运行get_dr_txt.py类似,会在D:\master\yolo3-pytorch-master\input\ground-truth\下生成一堆txt。

  1. 运行get_map.py
    这里其实有一个bug,需要将yolo3-pytorch-master\model_data\coco_classes.txt下面的traffic light修改为traffic_light,可视化得到mAP的过程,会显示每个测试图片的真实框和预测框:
    Yolov3复现与预测精度测试_第4张图片
    最终输出结果:

遇到的问题与解决

  1. Python3.5 does not support a 'F’prefix
    Yolov3复现与预测精度测试_第5张图片
    报错:Python3.5 does not support a 'F’prefix
    解决:
    在这里插入图片描述
  2. 运行train.py (https://github.com/bubbliiiing/yolo3-pytorch)报错:CUDA out of memory. Tried to allocate 170.00 MiB (GPU 0; 2.00 GiB total capacity; 488.86 MiB already allocated; 157.06 MiB free; 5.14 MiB cached
    解读:显存太小两个解决办法:
    (1)在服务器上跑,一劳永逸
    (2)在代码中找到设置训练时Batch_size和Freeze_Epoch的地方
    调整Batch_size=8 为 Batch_size=1
    调整Freeze_Epoch = 50 为 Freeze_Epoch = 10
    就可以进行训练了:
    Yolov3复现与预测精度测试_第6张图片

你可能感兴趣的:(python,深度学习,机器学习,人工智能,计算机视觉)