前言:
✌ 作者简介:CC++Edge淇,大家可以叫我--斯淇。(CSDN优质博主建议加这一条!)
个人主页:CC++Edge淇主页
如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
如果感觉博主的文章还不错的话,还请不吝关注、点赞、收藏三连支持一下博主哦
人生格言:这世界形形色色,做好自己才是真!-——从入门到现在不容易~
每日推荐书:《opencv基础教程》
YOLO系列是one-stage且是基于深度学习的回归方法,而R-CNN、Fast-RCNN、Faster-RCNN等是two-stage且是基于深度学习的分类方法。
016年,Joseph Redmon、Santosh Divvala、Ross Girshick等人提出了一种单阶段(one-stage)的目标检测网络。它的检测速度非常快,每秒可以处理45帧图片,能够轻松地实时运行。由于其速度之快和其使用的特殊方法,作者将其取名为:You Only Look Once(也就是我们常说的YOLO的全称),并将该成果发表在了CVPR 2016上,从而引起了广泛地关注。
YOLO 的核心思想就是把目标检测转变成一个回归问题,利用整张图作为网络的输入,仅仅经过一个神经网络,得到bounding box(边界框) 的位置及其所属的类别。
ONE-stage:
最核心的优势:速度非常快,适合做实时检测任务!
但是缺点也是有的,效果通常情况下不会太好!
个人理解:这个算法衡量的(两个指标)1.FPS的速度是快还是慢,2.mAP值的好坏!
map指标:综合衡量检测效果;单看精度和recall不太行!
TP的意思:true positives (TP正类判定位正类)
FP就是负类判定为正类“存伪”
FN:正类判断为负类“去真”,明明是小狗偏给判断为小猫!
TN:负类判定为负类!
基于置信度阈值来计算,例如分别计算0.9;0.8;0.7
0.9时:TP+FP = 1,TP = 1 ;FN = 2;Precision=1/1;Recall=1/3;
把检测问题转化成回归问题,一个CNN就搞定了!
可以对视频进行实时检测,应用领域非常广!
YOLOv1采用的是“分开使用的”的策略,将一张图片平均分成7×7个网格,每个网格分别负责预测中心点落在该网格内的目标。通过这种方式,我们就不需要再额外设计一个RPN网络,这正是YOLOv1作为单阶段网络的简单快捷之处!
1.10 =(X,Y,H,W,C)*B(2个)
2.当前数据集中有20个类别
3.7*7表示最终网格的大小
4.(S*S)*(B*5+C) 给出最终预测结果等于多少!
损失由三部分组成,分别是:坐标预测损失、置信度预测损失、类别预测损失
定位误差比分类误差更大,所以增加对定位误差的惩罚,使λ c o o r d = 5 λ。
YOLO-V1 (V1 内容介绍一遍)
优点:快速,简单!
问题1:每个Cell只预测一个类别,如果重叠无法解决
问题2:小物体检测效果一般,长宽比可选的但单一
具体说明一点优点:
局限:
更快!更强!
YOLO-V2-Batch Normalization
V2版本舍弃Dropout,卷积后全部加入Batch Normalization(如果不加这个Batch Normalization,则数据似乎不可控制!)
网络的每一层的输入都做了归一化,收敛相对更容易
经过Batch Normalization处理后的网络会提升2%的mAP
从现在的角度来看,Batch Normalization已经成网络必备处理
YOLO-V2-更大的分辨率
V1训练时用的是224*224,测试时使用448*448 (版本原因:测试时候使用了改进448*448
可能导致模型水土不服,V2训练时额外又进行了10次448*448 的微调
使用高分辨率分类器后,YOLOv2的mAP提升了约4%
DarkNet,实际输入为416*416
没有FC层,5次降采样,(13*13)
1*1卷积节省了很多参数
与第一代半版本相比足足大大了一倍的数据
在YOLOv1中,作者设计了端对端的网路,直接对边界框的位置(x, y, w, h)进行预测。这样做虽然简单,但是由于没有类似R-CNN系列的推荐区域,所以网络在前期训练时非常困难,很难收敛。于是,自YOLOv2开始,引入了 Anchors box 机制,希望通过提前筛选得到的具有代表性先验框Anchors,使得网络在训练时更容易收敛。
在 Faster R-CNN 算法中,是通过预测 bounding box 与 ground truth 的位置偏移值 t x , t y t_x
这个公式是无约束的,预测的边界框很容易向任何方向偏移。因此,每个位置预测的边界框可以落在图片任何位置,这会导致模型的不稳定性。
因此 YOLOv2 在此方法上进行了一点改变:预测边界框中心点相对于该网格左上角坐标( C x , C y ) (C_x, C_y)的相对偏移量,同时为了将bounding box的中心点约束在当前网格中,使用 sigmoid 函数将tx,ty归一化处理,将值约束在0—1,这使得模型训练更加稳定
下图为 Anchor box 与 bounding box 转换示意图,其中蓝色的是要预测的bounding box,黑色虚线框是Anchor box。
faster-rcnn系列选择的先验比例都是常规的,但是不一定完全适合数据集
K-means聚类中的距离:
K=5刚好取到折中的数据!
YOLO-V2-Anchor Box
通过引入anchor boxes,使得预测的box数量更多(
13*13*n)
跟faster-rcnn系列不同的是先验框并不是直接按照长宽固定比给定
Recall(的值越高,检测出来的可能性就越大)
bbox:中心为(xp,yp);宽和高为(wp,hp),则:
tx=1,则将bbox在x轴向右移动wp;tx=−1则将其向左移动wp
这样会导致收敛问题,模型不稳定,尤其是刚开始进行训练的时候
V2中并没有直接使用偏移量,而是选择相对grid cell的偏移量(不会飘逸)
(越大的广视野外,看到的范围就越大)相当于原始区域的感受数据!!
但是市面上却没有大的(卷积和),并没有太多小的卷积和!
假设输入大小都是h*w*c,并且都使用c个卷积核(得到c个特征图),可以来计算
一下其各自所需参数:
这一步看起来三个卷积和的参数更加省,更有效率!
4.很明显,堆叠小的卷积核所需的参数更少一些,并且卷积过程越多,特征提取
也会越细致,加入的非线性变换也随着增多,还不会增大权重参数个数,这就
是VGG网络的基本出发点,用小的卷积核来完成体特征提取操作。
最后一层擅长找大物体!最好做到大小通吃!!!
都是卷积操作可没人能限制我了!一定iterations之后改变输入图片大小
2018年,作者 Redmon 又在 YOLOv2 的基础上做了一些改进。特征提取部分采用darknet-53网络结构代替原来的darknet-19,利用特征金字塔网络结构实现了多尺度检测,分类方法使用逻辑回归代替了softmax,在兼顾实时性的同时保证了目标检测的准确性。
对此进行说明:
DBL: 一个卷积层、一个批量归一化层和一个Leaky ReLU组成的基本卷积单元。
终于到V3了!!!
(V2的缺点需要改进,所以来到了V3来做到了最大的改进!)
多scale类型,YOLO3为了检测不同大小的物体,设计3个scale
三种不同大小的特征图,可以检测的时候更好的使用!
分别13,26.,52
下列解释两个图片:金字塔,右图:单一的输入
金字塔的数据依次输入,比较好控制图像的变换!(换到其他算法当中还行,因为他并不考虑其速度!,但是再scale算法当中确是不合适的!!!)
右图的单一输入:单一的输出结果!!
左图:对不同的特征图分别利用;右图:不同的特征图融合后进行预测;
右图做完上采样,实现一个大,中,小目标的实现!
1.残差连接-为了更好的特征
2.从今天的角度来看,基本所有网络架构都用上了残差连接的方法
3.V3中也用了resnet的思想,堆叠更多的层来进行特征提取
(这里说白了就是一个思想的集合点,说白了yolo就是把当年一些最优秀的思想,例如resnet融合进来,做了一个整合!)
1.没有池化和全连接层,全部卷积
2.下采样通过stride为2实现
3.3种scale,更多先验框
4.基本上当下经典做法全融入了
1.YOLO-V2中选了5个,这回更多了,一共有9种
2.13*13特征图上:(116x90),(156x198),(373x326)
3.26*26特征图上:(30x61),(62x45),(59x119)
4.52*52特征图上:(10x13),(16x30),(33x23)
以上的数据(术业有专攻,大的数据就交给大的处理特征图上)
YOLO-V2中选了5个,这回更多了,一共有9种
最后一点!!!
1.物体检测任务中可能一个物体有多个标签
2.logistic激活函数来完成,这样就能预测每一个类别是/不是