rcnn(2014) ref
主要思路:生成候选区域,然后对每个区域用深度网络提取特征,送到 N 个 SVM 分类器判断是否属于某一类,用回归器对位置进行精修。
精修的方式:用一个线性脊回归器(就是普通线性回归加 L 2 L_2 L2 norm,ref)来预测偏移和缩放值
fast-rcnn(2015) ref & ref
基本上从整个网络的设计和实现思路上都进行了大幅的修改;还是需要离线 selective search 候选框的过程(2s),把原先对每个候选框做特征提取的过程改成 直接对全图做卷积,生成的如 40 * 60 的特征图,其上的每个点映射到原图上对应的候选框,因此所有的候选框都能共享特征图;
而每个候选框的特征图尺寸通常不一致,需要做一个 roi pooling 来归一化尺寸再输入到全连接层;
如何做 roi pooling? 将特征图均匀的划分成 M * N 块,每个块做 max pooling ,生成的就是相同尺寸的特征图;这里的输入层的一个节点可能跟输出层的多个节点相连。。
多任务训练(multi-task): 在深度网络的最后输出1 * 4096的特征向量,分别训练一个类别分类器 + 一个 bbox 回归器,loss 是各自 loss 的加权和。
faster-rcnn(2015) ref
将 selective search 的候选框生成法改为 加一个 RPN(Region proposals network),实现 end-to-end.
主要介绍这里的 RPN 怎么工作的:如上的 40 * 60 的特征图,每个点对应原图对应位置 9 种尺寸(3种尺寸 * 3种长宽比)的候选框(具体如何映射的细节 todo),由此生成 40 * 60 * 9个候选框,RPN 通过一个分类任务和回归任务来确定哪些 候选框是前景还是背景,以及是否是 candidate 物体。最终选出128 或者 256 个候选框,继续后面的步骤。
yolov1 参考
核心思路是将448*448的图像通过 VGG(特征提取过程) 转化成 7 * 7 * 30 的featuremap,7 * 7可以理解成网格划分,每个 Cell 预测2个 bounding box,一个 bbox 包含 (x1,y1,w1,h1, score1,x2,y2,w2,h2, score2, 20个类分别的概率) 总计30个元素组成的向量。所有的 cell 预测的 bbox (共 7 * 7 * 2个) 根据 nms 算法进行去重和择优,依据是每个 bbox 的score & 该 box 属于各个类别的概率。
细节:采用 pRelu,非 Relu。损失函数用 sum-squared error,整合定位和分类的误差,这里注意,定位的误差被归一化到0-1,方法是 x,y 定义为 bbox 中心距 grid cell 中心的相对距离,w&h 定义为 bbox 宽高/image 宽高;
其他的值本身属于概率,0-1之间。
损失函数由3部分组成:定位 error(包含 x,y, w,h)+ bbox 置信度 error(bbox 的打分)+ 分类 error(20个类别纵的分类误差和)
同时损失函数中,w&h 的计算做了 sqrt 取根号,原因是宽高对于小目标的影响比大的目标要大,缩小这个差距
。
box 包含 object 和不包含 object的权重是不一样的,不含object 的bbox 需要降低置信度权重
缺点:精确性差,小目标检测不好(一个 grid cell 只能最终最多确定一个bbox);降低了误检率,也降低了召回率;输入尺寸固定,只能 resize 到一个固定尺寸
yolov2 (2017)参考
解决上面的缺点
先简述一下思路:输入图像经过 Darknet-19 得到51 * 39 * 256 的 featuremap,然后对于 51 * 39 的单通道,对每个点进行两种预测,先找到每个点对应原图中的点作为中心点,假定每个点都取9种尺寸的 anchor box
(尺寸、比例和面积都不一样):
最后怎么用,筛选出最终的目标?todo
改进:
yolov3 参考 & ref2
改进:
softmax默认只分一类
);参考 & ref2
核心的思路: