YOLO V1
置信度(confidence):当前点所对应的候选框,是否是物体。
√网络架构
注:
- 7*7*30:7*7的格子,每个格子当中有30个值,每个格子产生两种候选框(x,y,w,h,confidence)共10个值,为相对图像的归一化结果,剩下20个值为20类(属于每一类的概率是多少)。
- 10=(x,y,h,w,c)*B;当前数据集中有20个类别
- 最终实际大小:(S*S)*(B*5+C)
√预测过程
输入:488*488*3图像
输出:7*7*30张量
具体步骤:
- 图像分为7*7(s*s)网格(grid cell)
- 通过卷积神经网络得到7*7*30的张量(上面已解释相关数据的含义 每个网格先经验得到2(B)个bounding box,一共98个bounding box,每个bounding box带有5个参数 :置信度(confidence)、框的左上角X与Y坐标、框的长宽H和W【98*5+49*20=7*7*(5*2+20)】
- 这样的话用置信度*每种类别的概率就是每个bounding box对应各个类别的概率
- 一般情况下框的粗细代表置信度大小,框的颜色代表种类
- 过滤低置信度的框,并且把重复的框去掉,只保留一个,从而得到最终的检测结果
- 相当于98个bounding box对应20个类别的全概率
- 假设这98个张量的1号位置元素是表示物体位置是“狗”的概率,那么针对狗这个类别:
- 设置一个概率值p,将98个张量的1号位置小于p的全部置为0,相当于这些框不可能是狗
- 将这98个张量按照1号元素的大小(是狗的概率)依次排序
- 进行非极大值抑制
非极大值抑制:主要是为了去除重复的框
- 我们已经将按照狗概率最大的排好序了,那么我们将排在第一位的拿出来,依次和后面的框做IoU(交并比,可以体现两个框重合部分大小)
- 设置一个阈值,如果两者IoU大于阈值,说明重合度很高,那我们就保留概率大的,概率小的概率值设置为0,直接淘汰
- 第一位和第二位比较完,第二位再按照相同规则依次类推
- 我们已经将狗的情况过滤完成,后面就要将剩余19个分类按照以上步骤完成
√损失函数
注:
- 系数λ相当于权重项
- 第一行:每个网格的B(论文中为2)种预选框,中心位置误差
- 第二行:w与h的误差;同等w和h的变化,物体较小时较为敏感,较大时不太敏感,所以采用此种根号形式
- 第三行:object是前景时是1,是背景是是0(IoU>0.5可能是前景,多候选框重叠时选择IoU最大的候选框)不加权重,容易被背景影响,而我们的误差更多的时前景影响的
- 第四行:分类误差
NMS(非极大值抑制):会有很多候选框重叠,按照置信度进行排序,选择最大值保存,其它删掉
优缺点:
- 快速简单
- 每个cell只可预测一个类别,重合在一起的前景很难检测
- 一小物体检测一般,长宽比可选的单一,个前景多个标签时也会出现问题
YOLO V2
(Dropout可以防止过拟合,杀死一些神经元)
主要变YOLO-V2-Batch NormalizationV2版本舍弃Dropout,卷积后全部加入Batch Normalization
-
- 网络的每一层的输入都做了归一化,收敛相对容易
- 经过Batch Normalization处理后的网络会提升2%的mAP
- YOLO-V2-更大的分辨率
- V1训练时使用的是224*224,测试时使用448*448
- 可能导致模型会出现问题,V2训练时额外又进行了10次448*448的微调
- 使用高分辨率分类器后,YOLOv2的mAP提升了约4%
- YOLO-V2-网络结构
- DarkNet/DarkNet19,实际输入为416*416(可以整除32,最后得到的最好是奇数,好确定中心点)
- 没有FC全连接层,5次降采样(Maxpool,2^5=32,则图像变化为h/32,w/32大小,最终得到图像结果为13*13)
- 1*1卷积节省了很多参数(传递信息)
- YOLO-V2-聚类提取先验框
- faster-rcnn系列选择的先验比例9(3*3)种都是常规的,但是不一定完全适合数据集
- K-means聚类中的距离d(box,centroids)=1-IOU(box,centroids)【分类后,找出每一类的实际中心点,这样还可以限制了范围,并且与物体小无绝对直接关系,论文中k=5】
- YOLO-V2-Anchor Box
- 通过引入anchor boxes,使得预测的box数量更多(13*13*n)
- 跟faster-rcnn系列不同的是先验框并不是直接按照长款固定比给定的
- YOLO-V2-Directed Location Predicition
- v1直接预测得到直接偏移量可能会偏移太多
- YOLO-V2-Fine-Grained Features
- 感受野:概述来说就特征图上的点能看到原始图像多大区域
- 最后一层时感受野太大了,小目标可能丢失了,需要融合之前的特征
- YOLO-V2-Multi-Scale
- 都是卷积操作,最小的图像尺寸为320*320,最大的图像尺寸为608*608,特征图的拆分融合
YOLO-V3
1.优缺点
- 最大的改进就是网络结构,使其更适合小目标的检测
- 特征做的更加细致,融入多持续特征图信息来预测不同规格物体
- 先验框更丰富了,3种scale,每种三个规格,一共9种
- softmax改进,预测多标签任务
2.主要变化
- 多scale
- 为了检测到不同大小的物体,设计了3个scale
- 最后一次特征图上采样(线性插值等),
- 残差连接
- V3中也用了resnet的思想,堆叠更多的层来进行特征提取,至少不比原来差
- 核心网络架构
-
- 没有池化和全连接层,全部卷积(池化压缩特征)
- 下采样通过stride为2实现
- 3种scale,更多先验框
- 先验框设计
- softmax层替代
- 物体检测任务中可能一个物体有多个标签
- logistic激活函数来完成,就能预测每一个类别是/不是
YOLO V5
1.主要改变
- 输入端:Mosaic数据增强、自适应锚框计算、自适应图片缩放
- 数据增强:随机缩放、随机裁剪、随机排布
- 自适应锚框计算:在Yolov3、Yolov4中,训练不同的数据集时,计算初始锚框的值是通过单独的程序运行的。但Yolov5中将此功能嵌入到代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值。
- 自适应图片缩放:在Yolov5的代码中datasets.py的letterbox函数中进行了修改,对原始图像自适应的添加最少的黑边。
- backbone:Focus结构,CSP结构
- Focus结构:主要是切片操作
- Neck:FPN+PAN结构
- Yolov5的Neck结构中,采用借鉴CSPnet设计的CSP2结构,加强网络特征融合的能力。
- Prediction:GIOU_Loss
YOLO-V5复现
1.win10+CUDA11.6+cuDNN+pytorch+anaconda
2.yolov5项目地址:https://github.com/ultralytics/yolov5/releases/tag/v3.1
- 下载好yolov5项目
- 安装所需库
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simpe
- 下载权重文件,例:yolov5s.pt,并放置在weights文件夹下
- 安装测试,在yolov5的路径下执行
python detect.py --source ./inference/images/ --weights weights/yolov5s.pt --conf 0.4
- 下载项目文件夹(所用数据集为voc2007和voc2012)
- 生成训练集和验证集文件
python get_voc_windows.py
(可以看到在VOC devkit / VOC2007和VOC devkit / VOC2012目录下生成了文件夹labels;在VOC目录下生成了images和labels文件夹
- 修改配置文件
- 新建文件data/voc_new.yaml(可以复制data/voc.yaml再根据自己的情况修改,注释掉download: bash data/scripts/get_voc.sh)
- 新建文件models/yolov5s-voc.yaml(可以复制models/yolov5s.yaml再根据自己的情况修改)
- 训练自己的数据集命令
python train.py --data data/voc_new.yaml --cfg models/yolov5s-voc.yaml --weights weights/yolov5s.pt --batch-size 16 --epochs 200
- 训练过程可视化
tensorboard --logdir=./runs
- 测试图片
python test.py --source ./VOC/images/val/000001.jpg --weights runs/exp0/weights/best.pt --conf 0.4
- train.py数据加载器旨在兼顾速度和准确性
- test.py旨在获得验证数据集上的最佳mAP
- detect.py旨在真实世界中获得最佳的推理结果
标签:box,py,voc,--,YOLO,V2,学习,算法 From: https://www.cnblogs.com/bonel/p/16652368.html