mask rcnn 召回率_物体检测-YOLO V1-V3

本文介绍了目标检测模型YOLO的原理和优化,包括YOLO V1-V3的网络结构、损失函数、多尺度检测以及特征金字塔。同时,讨论了召回率和精度的概念,并提到了Mask R-CNN在物体检测中的应用。通过调整配置文件和数据集,可以训练自定义的YOLO模型。
摘要由CSDN通过智能技术生成

目标检测常识two-stage:Faster-Rcnn、Mask-Rcnn (5FPS)

one-stage:YOLO (类似回归任务,速度快,效果没上边的好)

recall =

equation?tex=%5Cfrac%7BTP%7D%7BTP%2BFN%7D%5C%5C (查全率、召回率、覆盖率) 基于置信度阈值计算

precision =

equation?tex=%5Cfrac%7BTP%7D%7BTP%2BFP%7D%5C%5C (精度、信噪比) 基于置信度阈值计算

AP:PR 曲线下边的面积,mAP:所有类别的平均 AP

YOLO V1网络架构

输出中每个结果的意义(S 为网格大小,B 为先验框个数)损失函数测试时对 iou 大于一定值的预测框进行置信度 NMS

问题:难以检测重叠物体(小物体检测不到)

多标签物体无法检测(只能二分类)

YOLO V2舍弃了 dropout(一般用在全连接层,V2 中也舍去了全连接层),每个卷积层后加 BN 层

v1 中训练时用 224*224 大小的图片,测试时用的是 448*448 的图片。在 v2 中训练时又额外进行了 10 次 448*448 的微调

网络结构 darknet:没有 FC 层,5 次降采样(实际输入 416*416,5 次降采样后特征图大小 13*13),使用 1*1 的卷积改变通道数(减少了参数)

聚类提取先验框:先验框的大小由标注框 k-means 聚类得到(5 类),k-means 中的距离 d=1-IoU,mAP 略微下降 0.3,recall 提升 7%

位置预测:预测偏移量时 相对 grid cell

最后输出的特征图融合前一层的特征

多尺度:迭代一定次数后改变输入图像的大小

YOLO V3聚类得到 3 个尺度(每个尺度 3 种)的先验框

在多个 scale 上检测,并使用特征金字塔进行特征融合

网络结构:全卷积网络,无池化和全连接层,下采样通过 stride =2 实现

softmax 层改进,用来预测多标签任务

源码阅读训练时修改 data/coco/ images、labels、5k.txt、trainvalno5k.txt,dataset.py 中 ListDataset 类中__getitem__方法中,修改 img_path 和 label_path

config 包含 所有网络结构 , shortcut 残差连接 ,route 层 拼接特征图,shortcut 层 直接相加

梯度累加:梯度累加就是,每次获取 1 个 batch 的数据,计算 1 次梯度,梯度不清空,不断累加,累加一定次数后,根据累加的梯度更新网络参数,然后清空梯度,进行下一次循环。一定条件下,batchsize 越大训练效果越好,梯度累加则实现了 batchsize 的变相扩大,如果 accumulation_steps 为 8,则 batchsize '变相' 扩大了 8 倍,是解决显存受限的一个不错的 trick,使用时需要注意,学习率也要适当放大。

总体步骤:

1.加载配置参数 2.构造模型(网络定义、前向传播) 3.读入预训练模型和数据 4.训练模型

读入图像后转换成 tensor 格式,并进行图像增强(此处用了水平翻转,注意标签也要跟着变)

损失函数中的置信度损失有两部分,有目标的损失+无目标的损失

训练网络时,可先聚类生成 9 种先验框大小,并在 cfg 文件最后的 yolo 层中更改

构建自己的数据集

基于 YOLO-V3 训练自己的数据与任务: (一)数据打标签安装 labelme 工具

标注数据

(二)写好模型所需的配置文件打开 config 文件夹

bash create_custom_model.sh 2 (后面的数字表示你的任务的类别个数)

自动生成 yolov3-custom.cfg

(三):标签格式转换:用 json2yolo.py 来把标签转换成 yolo 所需的格式(labelme --->x1,y1,x2,y2,YOLO-V3---->Cx,Cy,W,H 相对位置(取值范围 0-1))

(四):写好数据和标签的路径转换好的输出路径:data\custom\labels json_floder_path:labelme 生成标签的文件夹

(五):完全其他配置操作数据放到相应位置,注意名字和 label 的得一致

classes.names 改成你任务里有的类别名字

在 train.txt 与 val.txt 中写好对应的路径

custom.data

(六):训练代码更改train.py 需要设置的参数--model_def config/yolov3-custom.cfg

--data_config config/custom.data

--pretrained_weights weights/darknet53.conv.74 #如果需要修改网络

(七):预测操作--image_folder data/samples/ #预测的数据

--checkpoint_model checkpoints/yolov3_ckpt_100.pth #训练好模型的路径

--class_path data/custom/classes.names #画图时候要把框上显示出来 name

额外注意:create_custom_model.sh 不能重复执行,要先把 yolov3-custom.cfg 删除掉才可以

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值