https://blog.csdn.net/litt1e/article/details/88814417
https://blog.csdn.net/qq_14845119/article/details/80335225?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.highlightwordscore&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.highlightwordscore
RPN:::https://blog.csdn.net/lanran2/article/details/54376126
v3网络还没有太明白,正在看链接:https://zhuanlan.zhihu.com/p/76802514
YOLOv1,每个cell都预测2个boxes,每个boxes包含5个值:x, y, w, h, c;每个cell只预测一套分类概率值(class predictions,其实是置信度下的条件概率值),供2个boxes共享。
v1 最后采用的是全连接层直接对边界框进行预测,其中边界框的宽与高是相对整张图片大小的;
也就说,抛弃RCNN系列的RPN先验框 先入为主的下意识思想,yolov1最后对特征图划分格子,进行bbox系列的预测(全连接层);
将YOLO用于PASCAL VOC数据集时:
S=7,即将一张图像分为7×7=49个栅格,每一个栅格预测B=2个boxes;
(每个box有 x, y, w, h, confidence,5个预测值),
同时C=20(PASCAL数据集中有20个类别)。
因此,最后的prediction是7×7×30 { 即S×S×( B×5 + C) }的Tensor。
得到98个bbox的信息后,首先对阈值小于0.2的score清零;
然后重新排序,最后再用NMS算法去掉重复率较大的bounding box。
最后每个bounding box的20个score取最大的score,如果这个score大于0,那么这个bounding box就是这个socre对应的类别(矩阵的行),如果小于0,说明这个bounding box里面没有物体,跳过即可。
(NMS:针对某一类别,选择得分最大的bounding box,然后计算它和其它bounding box的IOU值,如果IOU大于0.5,说明重复率较大,该得分设为0,如果不大于0.5,则不改;这样一轮后,再选择剩下的score里面最大的那个bounding box,然后计算该bounding box和其它bounding box的IOU,重复以上过程直到最后)
v2使用了RPN的思想,不过先验框的尺寸 —使用了k-means对训练集的框进行聚类得到的,非手动设定;
v2移除了v1中的全连接层,而采用了卷积和anchor boxes来预测边界框。
v2沿用v1的方法,预测边界框中心点相对于对应cell左上角位置的相对偏移值。
为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,这样预测的偏移值在(0,1)范围内(每个cell的尺度看做1)。
和v1一样,对于训练图片中的ground truth,若其中心点落在某个cell内,那么该cell内的5个先验框所对应的边界框负责预测它,具体是哪个边界框预测它,需要在训练中确定,即由那个与ground truth的IOU最大的边界框预测它,而剩余的4个边界框不与该ground truth匹配。
YOLOv2使用anchor boxes来预测bbox的坐标。
YOLOv2同样需要假定每个cell至多含有一个grounth truth;