一.深度学习经典检测方法
1.two-stage(两阶段):Faster-rcnn Mask-Rcnn系列,先有预选,预选完之后再通过预选得到最终结果。速度通常较慢,但效果不错
2.one-stage(单阶段):YOLO系列,普通回归任务。最核心的优势,速度非常快,适合做实时检测任务,但效果通常情况不会太好
二.指标分析
map指标:综合衡量检测效果。精度:检测到的一个东西跟实际是否吻合。recall:有没有一些没检测到。IOU:(真实值和预测值)交集/并集
precision=tp/(tp+fp)
recall=tp/(tp+fn
tp:在做对的情况下判断成正例.本来是正例,并且预测成了正例
fp:做错的情况下把它判断成了正例。本身是一个负例,错误地判断成正例
fn:错误地把它判断成了负例,本来是一个正例,错误判断成了正例
tn:错误地判断成了正例,本身是一个负例,正确判断成了负例
置信度:比如当前这个框是一个人脸的可能性
三.YOLO-v1
经典的one-stage方法,You Only Look Once
把检测问题转化为回归问题 比如经典检测问题中,我们需要起始位置,再需要一个长,宽(x,y,w,h),一个CNN搞定(卷积神经网络)
提出两种候选框,那个IOU大就选哪个微调
需要预测Bounding boxes(x,y,w,h) + confidence(置信度,这个点对应的是物体的可能性是多大)
核心思想:
分为s*s的格子,在每一个格子中产生两种候选框,每个格子要预测一个置信度,置信度大于我们所设置的阈值留下。再对留下的格子产生的两种候选框做一个筛选,IOU大的那一个留下,算出xywh,即把这个框算出来了
整体网络架构解读:
首先第一步我们拿到一个输入图像(v1版本中指定输入大小为448*448*3)
卷积神经网络都有
conv1 conv2 conv3 Fc1 Fc2 x
因为全连接层,所以我们必须限制输入数据的大小
最终的7*7*30 (7*7)表示格子大小,30=5+5+20
5=x1,y1,w1,h1,c1(置信度) ------第一个框的
5=x2,y2,w2,h2,c2(置信度) ------第二个框的
20=可能是各种事物的概率(是狗的概率,是汽车的概率,是自行车的概率.......)
计算机凭什么这么去做:我们会指定一个损失函数,在损失函数中我们会告诉它我们希望的值是什么的时候损失函数最小,计算机在做的时候就能逐渐地去猜到你每个值到底要表示什么意思,怎么样去做能迎合你这个损失值,让损失最小
一个算法主要关注两点:网络结构最终输出值你希望得到什么,损失函数该怎么定义
前景:感兴趣地物体
背景:不感兴趣地物体
所以confidence 得分两种情况讨论,一种情况下预测的是前景的,一种情况下预测的是背景的损失函数主要由三个误差,第一个是位置的误差(位置上的偏移),第二个是置信度(预测前景和背景是不是一个物体的误差),最终的分类误差(这个物体是什么)
NMS(非极大值抑制)
很多框都是重叠的时候,IOU满足一定值的时候,把最大值拿出来,其他的不要了
YOLO-v1问题
1.重合在一起的东西很难进行检测的
2.小物体检测不到
3.多标签不好预测
四.YOLO-v2
YOLO-v2与YOLO-v1可以说整体的一个网络架构和整体的一个基本思想这些是没有变的,只不过说在网络的一些细节,实践的一些小细节这些方面做了一些改进
1.YOLO-V2-Batch Normalization
V2版本舍弃Dropout(在实验网络当中,我们一般情况下在全连接层的时候,经常用到dropout,使得这个网络别太过拟合),卷积后全部加入Batch Normalization(当我们做每一层的时候,我为了使得他最终的结果别跑偏了,每一层都限制限制)
dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。dropout是CNN中防止过拟合提高效果的一个大杀器,但对于其为何有效,却众说纷纭。
网络的每一层的输入都做了归一化,收敛相对更容易
经过Batch Normalization处理后的网络会提升2%的MAP
从现在的角度来看,Batch Normalization已经成网络必备处理
2.YOLO-V2-更大的分辨率
V1训练时用的是224*224,测试时使用448*448(为了使得测试时大物体,小物体能检测好一点)
可能导致模型水土不服,V2训练时额外又进行了10次448*448的微调(不考虑训练时间了)
使用高分辨率分类器后,YOLO-v2的MAP提升了约4%
3.YOLO-V2-网络结构
DarkNet(借鉴了VGG,Restnet),实际输入为416*416
没有FC层(好处:全连接层容易过拟合,,全连接层训练慢(全连接层参数多),因为最终的母的不就是提特征吗),5次降采样(w/2^5,h/2^5),(13*13)
1*1卷积(只改变了特征层个数,没有去改变其他东西)节省了很多参数
优势:1.网络模型全是卷积的,不需要全连接了,省参数也比较快
2.卷积核小,感受野大
4.YOLO-V2-聚类提取先验框
faster-rcnn系列选择的先验比例都是常规的,但是不一定完全适合数据集
将许多个真实数据中的框使用K-means做出来5类结果
K-means聚类中的距离 d=1-IOU
5.偏移量计算方法
bbox:中心为(xp,yp);宽和高为(wp,hp),则
x=xp+wp*tx
y=yp+hp*ty
tx=1,则bbox在x轴向右移动wp;tx=-1则将其向左移动wp
这样会导致收敛问题,模型不稳定,尤其时刚开始进行训练的时候
V2中并没有直接使用偏移量,而是选择相对gird cell的偏移量
这样中心点无论如何都不会飘出中间那个格子
6.对感受野的新的认识
概述来说就是特征图上的点能看到原始图像多大区域(相当于卷积核大小区域(前一个特征图))
很明显,堆叠小的卷积核所需的参数更小一些,并且卷积过程越多,特征提取也会越细致,加入的非线性变换也会随着增多,还不会增大权重参数个数,这就是VGG网络的基本出发点,用小的卷积核来完成体特征提取操作
最后一层感受野太大了,擅长去找一些大物体,小目标可能丢失了,所以可以把前面的特征图拿过来,它的感受野没那么大
需融合之前的特征
7.YOLO-V2-Multi-Scale
没有全连接层,都是卷积层,所以什么样的输入都能去玩
一定iterations(迭代次数)之后改变输入图片大小
五.YOLO-V3
YOLO-V3相对于YOLO-V2就一点,整体的核心网络架构能不能再进行升级,YOLO-V3不论是速度还是MAP值都比当年其他算法强太多
V3最大的改进就是网络结构,使其更适合小目标检测
特征做的更细致,融入多持续特征图信息来预测不同规格物体
先验框更丰富了,3种scale,每种3个规格,一共9种
softmax改进,预测多标签任务
多scale方法改进与特征融合
为了能检测到不同大小的物体,设计了3个scale
之前将1.最后一个特征图与2.前面的特征图相融合以检测不同大小的物体可能会导致这两部分相互干扰,作用不好。既然我们的目标是有大,中,小这三种不同的物体,那就术业有专攻。那就让感受野大的预测大目标,感受野中的预测中目标,感受野小的预测小目标
即再感受野大,中,小的特征图上分别产生3中候选框box1,box2,box3
预测中目标的26会从预测小目标的13上借鉴一些思想
scale经典变换方法
左图将图像分辨率resize,自然可以得到不同大小特征图,但是速度慢
13要给26做一个融合,首先尺度不匹配,上采样,把13*13的特征图变成26*26与自身26*26的特征图融合,同理,26*26的特征图做上采样与本来52*52的特征图融合
残差连接-为了更好的特征
56层的卷积层效果比20层的还差,为了使得能把好的利用起来,坏的不用,使用残差链接,使得网络提特征效果至少不比原来差
核心网络架构
没有池化(特征图做压缩反而效果不好)和全连接层,全部卷积(省时省力,效果好)
下采样通过stride为2实现
3种scale,更多先验框
基本当下经典做法全融入了
YOLO-V2聚类提取5个先验框,而 YOLO-V3聚类提取9个先验框
且把大的先验框交给 13*13的,其他同理
softmax层替代
物体检测可能一个物体有多个标签
logistic激活函数来完成,这样就能预测每一个类别是/不是
标签:卷积,物体,YOLO,网络,v1,V2,特征,快速 From: https://blog.csdn.net/2301_80355452/article/details/140469067