learning region features for object detection

     北大和MSRA合作的paper。

    首先要明确的是,region feature这个概念指的是region proposal所对应的特征块,必须知道,只有two stage method中才有region proposal的概念(两个阶段的检测器输出的位置坐标是级联的预测形式,先对anchor微调得到region proposal,再对region proposal微调得到prediction bounding boxes),而one stage method只有anchor的概念,直接基于anchor 回归,故而只有两个阶段的检测器才需要提取ROI特征块的操作。而由于RPN输出的region proposal尺寸会各不相同,为了实现对后续fast RCNN的batch训练,需要将不同region  proposal对应的特征块归一化到相同的分辨率上,这个过程通常要用ROI Pooling,或者精度较高的ROI Align。

一、RPO Pooling in region based object detection method

     基于区域的物体检测模型(region based object detection method,也就是two stage method)主要有以下五个步骤:
     (1)对输入图像进行特征提取

     (2)产生region proposal

      (3)提取region proposal(ROI)的特征

      (4)对region proposal进行识别和分类

       (5)将网络模型预测的位置偏移量解码到输入图像的绝对坐标值

      以faster RCNN(with ROI Pooling)为例:对输入图像进行特征提取使用的是CNN backbone,提取输入图像的卷积特征,而生成region proposal也是通过生成anchor的机制再通过卷积网络预测出位置偏移量,对region proposal进行识别也是使用卷积网络,只有提取region proposal的特征块这一个步骤使用的不是深度学习模型的特征,而是很强的手工提取特征的操作,通常使用的是ROI Pooling/align在RPN和Fast RCNN的shared convolutional feature map上根据region proposal的位置坐标进行特征块的抠取(共享特征图的空间分辨率在faster RCNN中是output stride=16,num_channels=256,通常batch size设置为1),注意这里并不需要对于所有的refined anchor boxes进行ROI Pooling,而是只需要抠取出需要传输到后面Fast RCNN的2000个region proposal在特征图上对应的特征块,一般送入Fast RCNN中训练ROI的batch size=128,抠取到某一块ROI 的特征块之后再进行7*7的pooling(即将特征图划分成7*7个网格,注意这里并不是均等化分,而是希望划分后的每个子网格中尽可能都包含有特征图上的整数坐标点,然后再每个子网格中使用max pooling),得到[128,256,7,7]的torch.tensor,作为训练Fast RCNN网络的输入特征图,然后再进行classification prediction(1*1卷积网络,输出128*num_classes) 和regression prediction(1*1卷积网络,输出128*4 bbox_deltas)。ROI Pooling是SPP (spatial pyramid pooling空间金字塔池化)中的一种特殊形式,ROI Pooling只是在一个尺度上将特征图(ROI对应的特征块)pooling成7*7,而SPP则是先从特征图上抠取出region proposal所对应的特征块,然后分别进行4*4,2*2,1*1的ROI Pooling,ROI Pooling具体操作:对于抠取下来的特征块(因为region proposal的坐标不同,不同ROI的面积大小也都不一样,而为了保证输入到Fast RCNN卷积网络的输入特征图size相同,所以引入了ROI Pooling),首先划分成7*7个网格,再对每个网格中所有整数点位置的特征向量进行max pooling,在每个子网格中得到1*256维的特征向量。

     ROI Pooling的过程完全是手工(hand-crafted)暴力抠取,并没有任何学习的过程,在代码实现过程中,也是用C语言实现。

    本论文的创新点在于:(1)对于每个region proposal,同样也是希望它最后能输出K*K*256的bins,每个bins里面的特征向量不再仅仅与region proposal在共享特征图上抠取下来的特征块有关系,而是与整个特征图上的所有位置点都有关系,可以认为是(2)既然建模为:K*K个bins中,每个bin的特征向量都可以看作是特征图上所有位置点特征向量的加权求和,那么权值如何确定呢?作者认为权值由两个部分确定:ROI与特征图中位置点的相对位置坐标,和图像的特征向量。位置坐标的关系来源于《attention is all you need》中的位置编码,而第二个部分表现在对整个特征图进行卷积变换

 

二、region feature extraction

    从共享特征图上提取region proposal的特征块,最常见的三种方式:ROI Pooling,SPP Pooling,ROI Align。

    将RPN和Fast RCNN的共享特征图记作,通常特征图的分辨率是输入图像分辨率的1/16,通道数记作Cf,通过proposal target layer.py生成了region proposal在输入图像上的绝对坐标值rois,four dimension,假设包围框的坐标,假设提取到的region proposal特征块记作y(b),b是region proposal坐标信息

     y(b)的特征维度是K*Cf——(14*14)*256,也就是说,从特征图上裁剪得到的region proposal特征块的通道数不变,K表示将region proposal划分成多少个grid,表示K个特征网格中的第k个网格上的特征向量:1*256,作者认为region proposal输出的特征块中第k个grid cell中的特征向量并不需要仅仅与特征图上region proposal所对应的特征块有关,而是与整个特征图都有关系,这将意味着,将K个grid cell中的特征向量联合在一起得到的特征块将比直接从整幅图像的特征图上抠取出region proposal对应位置的特征块,能获得更多的信息(以前进行ROI Pooling的时候,第k个grid cell中的特征向量只与region proposal在特征图上对应位置的那部分特征块有关系,而并没有包含特征图中的全局信息),从整张图像特征图x中抠取出region proposal位置为b的公式的一般形式可以写成:

  

其中表示当前的region proposal的相关联区域,即在特征图上找出哪些位置点与当前的region proposal最有关系,对于传统的ROI Pooling,这个区域只包含特征图上的ROI,而它实际上可以包含整张特征图,其中b表示region proposal的位置,而p表示support region 中的每个位置。

1.ROI Pooling:其中的权值只与region proposal在特征图上的空间位置相关,与输入特征图无关。而与第k个网格中相关联的区域也就是将region proposal对应到特征图上,划分成K个网格后,第k个网格所包含的位置点区域。

    

ROI Pooling的一个明显缺点就是小物体的特征会被模糊,实际上,任何output stride比较大(输出特征图相比于输入图像分辨率的比例),将特征图缩放地太小的网络,都会导致小物体的特征模糊,比如有两个像素点在输入图像的间距小于16,则经过output stride=16的下采样操作后,他们将对应到特征图上的同一个点,如果在一个grid cell中刚好采用max pooling采样到它,则它们将会具有完全相同的ROI 特征。这个问题看似是由于对输入图像的过采样导致,实际上是因为ROI Pooling的机制,试想,如果在生成ROI特征块中每个网格的特征向量的时候,并不是考虑局部的特征而是考虑了整张特征图的全局语义信息,则这种模糊效应就会减弱。

2.SPP Pooling

之前介绍过,ROI Pooling是单个尺度的SPP Pooling。

3.ROI Align

来自于kaiming大神的Mask RCNN,它是将特征块均匀划分(注意ROI Pooling并不是均匀划分,而是基于一定准则)成K个网格,在每个网格中固定地选择N个采样点(N=4),这些采样点的位置在每个子网格中的相对位置是固定的,为了求出每个子网格中每个采样点处的256维特征向量,使用了双线性插值,就是说,找到距离当前采样点最近的4个整数点坐标位置,然后将在4整数点坐标位置的特征向量加权求和,权值由双线性插值策略决定。在每个小网格中得到4个位置的特征向量之后,再在每个小网格中进行global average/max pooling,得到一个特征向量。

4.位置敏感得分图(position sensitive score map)

来自于R-FCN,这也是two stage method的经典,有时间要好好总结下。它的新颖之处在于网格中不同的位置是从特征图的不同通道上抠取特征块的,然后再将这些特征块拼接成ROI的特征块。

三、基于attention的region feature extraction

对于region  proposal对应到输入图像分辨率上的绝对坐标值  (xmin,ymin,xmax,ymax) 进行位置编码,每个维度对应到下面公式中的z,每个z可以得到一个C_e维度的特征向量,则对于当前的一个region proposal的位置编码后,将得到4*C维特征向量,然后对于特征图上的每个像素点(enumerate all position pixel on feature map)p,给出p的geometry position(就是p的坐标 x,y),分别对x和y也进行位置编码,得到2*C维的特征向量,然后分别通过两个矩阵,将这两个向量都转换成C_g维的向量,再进行向量内积,得到一个数值Gk(b,p),要注意,对于不同的k(k=1,2,3,……K-1),具有不同的转移矩阵Wimg和Wbox,就是说,为了得到region proposal对应的K特征图上的每个网格上的特征向量:首先对region proposal和特征图上的每个像素位置p进行位置编码(正余弦函数),这个编码操作对于每个region proposal只用进行一次,然后,为了计算出每个小网格上最终的特征向量,都需要遍历特征图上的所有位置p,用Wimg_k对p处位置编码后的特征向量矩阵乘法,之后相当于得到了,为了求出每个小网格最终的特征向量,特征图上每个像素点位置所贡献的权重大小,这只是给出了位置编码所占据的权重。

 

要注意的是,对于不同的region proposal,三套权重矩阵W都是相同的,每个权重矩阵又包含了K个位置处不同的权重数值,也就是说,权重矩阵只区分不同的位置k,并不区分不同的region proposal,为了得到不同的region proposal所对应的特征块,使用的是相同的一套3个权重矩阵,每个权重矩阵分为K种不同的情形,也就是说,代码实现过程中,可以先将特征图上每个位置点的位置编码写好(区分不同的k),在当前权重参数的设置下,这一些位置编码对于不同的region  proposal是完全相同的数值,也就是 H*W*C_g的特征图,特征图H*W每个位置上都有C_g维的位置编码,然后将当前region proposal的坐标位置编码成一个C_g维的特征向量,这个特征向量需要与H*W*C_g每个位置的特征向量进行内积操作,得到位置相似度的得分H*W的矩阵,但是根据公式(7),当前region proposal还会与卷积特征图相关,故而还要对特征图进行1*1的卷积操作,输出通道数为K,两个支路得到的权值图进行逐元素相加之后,得到的权重图再进行softmax操作,才能满足公式(7)中的权值与和的指数次幂成正比。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值