目标检测的框架根据ROI pooling 层可以分为两个子网络: - 共享的,全卷积子网络,独立于ROI; - 各个ROI子网络,不共享计算
图像分类中,要求网络对于平移不变性越强越好,比如图像中的猫,不管平移到图像的哪个位置,仍是猫; 目标检测则要求网络对平移变化越敏感越好,需要平移变化来定位图像中目标位置.
一般假设在图像分类网络中,网络卷积层越深, 网络的加深,使得其对位置信息的保留越来越少,对平移变化越不敏感. 但目标检测需要对图像中目标的位置信息能较好的感知.
在ResNet-101做目标检测的框架中,是将ROI pooling层插入到前面的卷积层,其后面的卷积层不共享计算,降低了平移不变性,ROI后的卷积层对不同的区域块不再具有平移不变性. 该方法引入了相当数量的逐区域层.
提出R-FCN(Region-based Fully Convolutional Network )框架,解决目标检测任务: - R-FCN是共享的、全卷积网络结构 - 采用指定的卷积层的输出,来构建 position-sensitive score maps 集合. 各个score map分别编码了对于某个相对空间位置的位置信息,如物体的左边(to the left of an object). - 在FCN网络层的上面,添加一个位置敏感的ROI pooling 层,来处理来自score maps的信息, 后面不需要权重层(conv/fc). - End-to-end - 所有的训练层都是卷积层,在整张图像上共享计算
two-stage 目标检测策略: - region proposal 候选区域 - region classification 区域分类
采用RPN(Region Proposal Network)网络提取候选区域,RPN是全卷积网络结构. R-FCN和RPN共享特征.给定候选区域(ROIs),R-FCN网络将ROIs分类到不同的物体类别和背景. R-FCN所有学习权重的层都是卷积层,并在整张图像上共享计算R-FCN的最后一个卷积层对每一类别产生 k2 k 2 position-sensitive score maps,得到 k2(C+1)−channel k 2 ( C + 1 ) − c h a n n e l 的输出层( C C 个物体类别和1个背景类别). k2k2 score maps对应 k×k k × k 空间网格(grid),分别描述了相对位置信息. 例如, k×k=3∗3 k × k = 3 ∗ 3 时,得到的 9 个score maps分别描述了一个物体类别的 [top-left, top-center, top-right, …, bottom-right] 相对位置信息. R-FCN的最后一层是 position-sensitive RoI pooling 层,该层统计了最后一个卷积层的输出,并生成各个 ROI 的 score. position-sensitive RoI pooling 层进行选择性 pooling, k×k k × k 单元格中的每一个bin都只对 k×k k × k 个score maps中一个score map进行相应. 如Figure 2,选择性pooling图解:看图中的橙色响应图像 (top−left),抠出橙色方块 RoI,池化橙色方块 RoI 得到橙色小方块 (分数);其它颜色的响应图像同理。对所有颜色的小方块投票 (或池化) 得到1类的响应结果。position-sensitive RoI pooling 层根据最后一个卷积层来学习特定的position-sensitive score maps. 如Figure 1所示. 产生score map之后,再根据proposal产生一个长宽各为k,channel数目为C+1的score map。具体产生score map的方法是,假如k=3,C=20,那么score map的20个类每个类都有3×3的feature,一共9个格子,每一个格子都记录了空间信息。而这每一个类的每一个格子都对应前面那个channel数为3×3×21的大map的其中一个channel的map。现在把score map中的格子对应的区域的map中的信息取平均,然后这个平均值就是score map格子中的值。最后把score map的值进行vote(avg pooling)来形成一个21维的向量来做分类即可. 当分类正确时,该类通道的位置敏感分数图 (中间) 的大多数橙色实线网格内的响应在整个 RoI 位置范围内最强. [忘了从哪里看到的了,找到了补上参考链接]. Figure3 和 Figure4 给出了一个示例.在ROI上进行 k2 k 2 个 position-sensitive scores 投票.
这里通过平均scores来进行简单投票,得到各个ROI的 (C+1) ( C + 1 ) 维向量: γc(Θ)=∑i,jγc(i,j∣Θ)) γ c ( Θ ) = ∑ i , j γ c ( i , j ∣ Θ ) ) .计算各类别的 softmax 响应: sc(Θ)=eγc(Θ)/∑Cc′=0eγc′(Θ) s c ( Θ ) = e γ c ( Θ ) / ∑ c ′ = 0 C e γ c ′ ( Θ ) . 被用来计算训练过程中的 cross-entropy loss,在推断时用来对ROIs进行排名.对于bounding box regression,只需要把 C+1 C + 1 改为4即可.
除了 k2(C+1) k 2 ( C + 1 ) -d 的卷积层之外,又添加了一个 4k2 4 k 2 -d 的卷积层,用于边界框回归. 在 4k2 4 k 2 个maps上,进行 position-sensitive RoI pooling 操作,得到各个 ROI 的 4k2 4 k 2 -d 向量;通过 average voting,得到 4-d 向量,参数化边界框 t=(tx,ty,tw,th) t = ( t x , t y , t w , t h ) .如Figure 2 所示. - 输入图像是单尺度的,尺寸为 600×600 - RPN和R-FCN的 feature map是计算是共享的 - RPN 提取 ROIs,R-FCN 估计各个类的 scores,以及回归边界框. - 最后进行 NMS(non-maximum suppression) 后处理,IoU 阈值为 0.3.
如 Figure 3 和Figure 4,图示了当 k×k=3×3 k × k = 3 × 3 时,由 R-FCN 学习得到 position-sensitive score maps. - 这些得到的 maps 应该对于物体的相对位置具有较强的响应. 例如,“top-center-sensitive” 对于物体的 top-center 附近的位置应该具有high socre. - 如果候选 box 能够与真实物体重叠较精确,如Figure 3, 则ROI的 k2 k 2 个单元格中的大部分被激活,且得到的投票分数较高. - 如果候选 box 与真实物体不能正确重叠,如Figure 4,则ROI 的 k2 k 2 个单元格中的一些是不被激活的,且投票分数较低.