YOLO是基于回归模型的目标检测算法,具有准确率低,但是检测速度快的特点。
YOLOv1
下面具体介绍Yolo的UnifiedDetection过程
首先将一副图像分为7*7个窗格,一个窗格预测2个boundingbox (x1,y1,w1,h1,x2,y2,w2,h2),yolov2中透露了预测box是随机初始化的。2个boundingbox的confidence score(cs1,cs2),如果预测boundingbox中有物体则confidencescore=。一个grid需要预测当前grid属于哪种类别的概率Pr(Classi|Object)(p1,p2,…),
在test阶段,可以得到每个box的类别confidence
Confidence=
IOU为groundtruth和预测box的交集比。我理解的Pr(Object)为预测box中有目标的概率。
最后需要预测7*7*(2*5+20)个
损失函数使用的sum-square-error,见下式。
关于损失函数的几项设置,
1) 增加包含目标的boundingbox的权重,减少不包含目标的boundingbox的权重,
2) 计算box的loss时,大目标box和小目标的box偏离groundtruth相同的距离,小目标的loss会比较大,由此计算loss时对w和h进行开方计算。
3) 将boundingbox回归中预测偏移量
上式中 loss function 在只有当一个 grid cell 中存在 object 时,才会对 classification error 进行惩罚。
上式中 lossfunction 也只有在当 box predictor 对 groundtruth box 负责的时候,才会对 bounding box coordinate error 进行惩罚。
YOLOv2
1)将dropout层去掉,在每个卷积层添加了bach-normalization,mAP提高了2%。
2)高分辨率分类器,输入为高分辨率数据由224*224变为448*448,mAP提高了4%。
3)删除一个pooling层,得到高分辨率数据,在卷积层之后使用anchor代替全连接层,把输入448*448转为416*416,这样得到的feature map为奇数,feature map会有一个中心单元,物体落在中心位置的可能是比较大的,这样可以使用一个中心单元代替四个来预测物体。
4)anchorbox是使用K-mean聚类来确定,聚类的距离计算使用来代替欧式距离。
5)不像YOLOv1使用grid来预测每个grid属于哪种类别的概率Pr(Classi|Object),YOLOv2预测物体类别选用anchorbox的来预测。
6) 预测box坐标是延续YOLOv1预测boundingboxes相对栅格左上角的坐标, 为了确保bounding boxes的中心落在栅格中(即坐标落在0到1之间),boundingbox中心送入到激活函数中来。
对于每个边框预测5个坐标值,tx、ty、tw、th、to。若单元相对图像左上角的偏移为(cx,cy),并且窗口的先验宽高为pw、ph。
7)添加一个passthrough层提高对小物体的检测,此层将高分辨率的feature和低分辨率的feature进行信息融合,通过堆叠不同通道中相邻的特征而非空间位置实现融合高低分辨率的特征,使得26×26×512的特征图转换为与原始特征相连接的13×13×2048的特征图,mAP值提高了1%。
8)YOLOv2网络只用到了卷积层和池化层,因此可以进行动态调整输入图像的尺寸。根据自己的要求调节精度和速度。
附上参考的blog
http://blog.csdn.net/hrsstudy/article/details/70767950
http://blog.csdn.net/u014593748/article/details/77149773
SSD
SSD比faster rcnn快,比yolov1准确率高,和yolov2相比?
SSD的原理:SSD是从基础网络层(basenetwork)层网络中,
在conv4(每个点有4个default box),fc7(6),conv6_2(6),conv7_2(6),conv8_2(4),conv9_2(4)后提取feature map,计算每个层featuremap的default box,每个default box,需要预测20个类别和4个offset,每个feature需要预测的为(20+4)*k*m*n。
关于default box,default box是和fasterrcnn中的anchor box比较相似,就是一系列的预选框,每一个default box,宽度、高度、中心点计算如下:
sk为default box的尺度,计算如下,
ar为default box的宽高比aspectratios:{1, 2, 3,1/2,1/3},额外增加一个default box,该box的尺度为 ,从而使每个特征图位置有6个默认框。
提取出defaultbox之后将groundtruth与具有最大jaccard overlap的defalult box进行匹配,则一个groundtruth box可能对应多个default box。步骤就是先计算的defalut box的jaccard overlap,然后和groundtruth进行匹配重叠大于0.5,设为true 否则为false。
经过matching后,很多defaultbox是负样本,这将导致正样本、负样本不均衡,训练难以收敛。因此,该论文将负样本根据置信度进行排序,选取最高的那几个,并且保证负样本、正样本的比例为3:1。
将conv4_3,fc7,conv6_2,conv7_2,conv8_2,conv9_2中得到的正负defaultbox分别送入到各个location,confidence,default box的预测层中。
通过softmax和boundingbox进行分类和回归获得各层的预测的location,confidence,default box,将各层的数据分别合并起来,计算损失函数,
confidenceloss:
localizationloss (loc) :
其中,(gcx, gcy,gw, gh)表示groundtruth box,(dcx, dcy, dw, dh)表示default box,(lcx, lcy, lw, lh)表示预测的box相对于default box的偏移量。
最后,回归部分的loss是希望预测的box和default box的差距尽可能跟groundtruth和default box的差距接近,这样预测的box就能尽量和ground truth一样。
附上参考的blog
http://blog.csdn.net/u014380165/article/details/72824889
http://blog.csdn.net/u013989576/article/details/73439202
中文翻译的论文:http://lib.csdn.net/article/deeplearning/57860
文章是我看原论文和各个大神的博客,按照自己的理解总结的,理解如有偏差还请指正!