论文阅读学习 - AffordanceNet for Object Affordance Detection

AffordanceNet - Object Affordance Detection

[Paper]

[Code-Caffe]

摘要: AffordanceNet, 主要用于从 RGB 图片中同时检测多种 objects 以及其 affordance. 网络主要有两个分支:object 检测分支来对 object 进行定位和分类;affordance 检测分支来对 object 的每个像素归类到其最可能的 affordance label. 针对 affordance 任务的多分类问题,其主要特点:

  • deconvolutional layers
  • 鲁棒的 resizing 策略
  • multi-task loss 函数

由于其网络结构类似于 Mask R-CNN,关注了下.

1. 问题阐述

  • 目标: 同时学习图片中的 object 位置、类别及 affordance. 理想情况下,能检测到图片内所有相关的 objects,并将 object 的每一个像素划分到最可能的 affordance 标签.
  • object 位置: 相对于图片左上角的方框位置;
  • object 类别: 方框内 object 类别;
  • object affordance: 方框内每一个像素的 object 类别. 具有相同功能的 object 像素区域被作为一个 affordance.

2. AffordanceNet 网络结构

主要包括:

  • CNN backbone - 如VGG,用于提取图片特征;
  • RPN - 与 CNN backbone 共享权重参数,并输出 RoIs;
  • RoI alignment(RoIAlign) 层- Mask R-CNN中的 RoI 对齐层,对于每个 RoI,RoIAlign 从图片 feature map(如,VGG 的 conv5_3 层的输出) 中提取和池化特征,得到固定尺寸 7×77×77×7 的 feature map.
  • object 检测网络分支 - 采用两个全连接层来回归 object 位置,并分类;
  • object affordance 检测分支 - 包括一序列的 conv-deconv 层,以得到平滑精确的 affordance map;其最后一层接 softmax 层以输出 multiclass affordance mask.

2.1 RoIAlign

基于 Mask R-CNN.

Faster R-CNN-RPN,RPN 与 backbone 网络共享权重,并输出在不同 size 的 bounding boxes(RoI/object proposal);

对于每个 RoI,采用 RoI Pool 层得到 image feature map 的小的固定尺度(7×7) 的feature map;

RoI Pool 层通过将每个 RoI 划分为规则网格,再采用 max-pooling 对每个网格单元的 feature map values 进行处理.

由于将 RoI 坐标从输入图像空间映射到图像 feature map 空间,以及将 RoI 划分规则单元格时,存在严格的舍入操作(harsh rounding operations),导致 RoI 和提取的特征间的不对齐.[ This quantization, however, causes misalignments between the RoI and the extracted features due to the harsh rounding operations when mapping the RoI coordinates from the input image space to the image feature map space and when dividing the RoI into grid cells.]

对此,Mask R-CNN 提出 RoIAlign 层来准确对齐 RoI 提取的特征.

与 RoI Pool 的不同在于, RoIAlign 不是采用 rounding 操作,而是采用双线性插值(bilinear interpolation),对于每个 RoI 单元格,采样其四个规则化的位置,计算输入特征的插入值,再采用 max 处理.

RoIAlign 对于像素级任务,如图像分割,十分重要.

2.2 高分辨率 Affordance Mask 的 Deconvolution

Mask R-CNN 和 FCIS 等实例分割方法,采用固定尺寸 mask (如,14×1414×1414×14,28×2828×2828×28) 来表示 object 的 segmentation mask. 对每个 RoI 预测的 mask 的像素值都是二值,前景或背景,是可行的.

但是,对于 affordance 检测问题,小尺寸的 mask 可能效果不理想,因为每个 object 有多种 affordance 类别.

因此,这里采用一序列的 deconvolutional 层来处理高分辨率的 affordance mask.

假设输入 feature map 尺寸为 SiSiS_i,deconv 层输出一个更大尺寸 SoSoS_o 的 map,其关系是:

So=s∗(Si−1)+Sf−2∗dSo=s∗(Si−1)+Sf−2∗dS_o = s * (S_i - 1) + S_f - 2*d

其中,SfSfS_f 是 fliter 尺寸,sss 和 ddd 分别是步长 stride 和 补零 padding 参数.

RoIAlign 层输出的 feature map 尺寸是 7×77×77×7. 如图 Fig 3,采用三个 deconv 层可以上采样到更高的分辨率 244×244244×244244 × 244.

  • deconv1 - d=1,s=4,Sf=8d=1,s=4,Sf=8d=1, s=4, S_f = 8
  • deconv2 - d=1,s=4,Sf=8d=1,s=4,Sf=8d=1, s=4, S_f = 8
  • deconv3 - d=1,s=2,Sf=4d=1,s=2,Sf=4d=1, s=2, S_f = 4

2.3 Robust Resizing Affordance Mask

类似于 Mask R-CNN 和 FCIS,AffordanceNet affordance 检测分支也输出固定尺寸 244×244244×244244×244 的 affordance mask.

前两者,训练时,是将每个 RoI 的原始 groundtruth mask resized 到预定义的 mask 尺寸,以计算 loss. resized 处理后输出的 mask 的值范围是 [0, 1],然后设定阈值(如 0.4)来判断像素是前景还是背景.

由于每个 object 存在多种 affordance 类别,单一阈值的方法对于 affordance 检测任务不适用.

对此,提出一种 multi-thresholding 的方法.

给定原始 groundtruth mask,记 P={c0,c1,...,cn−1}P={c0,c1,...,cn−1}P = \{c_0, c_1,...,c_{n-1}\} 为该 mask 中 nnn 个独立标签集合,

首先,将 PPP 线性的映射到 P^=0,1,...,n−1P^=0,1,...,n−1\hat{P} = {0, 1, ..., n-1},并采用该映射,将原始 mask 转化为一种新的 maks.

然后,resize 转化后的新 mask 到预定义的 mask 尺寸,并采用以下阈值方法对 resized mask 进行处理:

如果 p^−α≤ρ(x,y)≤p^+αp^−α≤ρ(x,y)≤p^+α\hat{p} - \alpha \leq \rho(x, y) \leq \hat{p} + \alpha, 则 ρ(x,y)=p^ρ(x,y)=p^\rho(x, y) = \hat{p}; 否则,ρ(x,y)=0ρ(x,y)=0\rho(x, y) = 0. 其中,ρ(x,y)ρ(x,y)\rho(x, y) 是 resized mask 中的像素值; p^p^\hat{p} 是 P^P^\hat{P} 中的值 ; αα\alpha 是超参数,这里设为 0.005.

最后,采用 P^P^\hat{P} 到 PPP 的映射,将阈值 mask 重新映射到原始 label 值,以训练.

2.4 End-to-End 网络结构

两大分支—— object 检测和 affordance 检测.

给定输入图片,采用 VGG16 作为 backbone 网络来提取深度特征;

RPN 与 backbone 网络共享权重参数,并输出候选 bounding boxes(RoIs);

对于每个 RoI,采用 RoIAlig 层来提取和池化其对应特征到 尺寸为7×77×77×7 的 feature map.

object 检测分支,采用两个全连接层,其输出均为 4096,其后接 classification 层和回归层,对 object 进行分类并回归 object 位置;

affordance 检测分支,将 7×77×77×7 的feature map 多重 deconv 上采样到 244×244244×244244 ×244 的分辨率;然后,采用 softmax 层对 244×244244×244244×244 map 内的每个像素划分到最可能的 affordance 类别.

采用 multi-task loss 实现了 end-to-end 的训练.

3. Mulit-task Loss

  • classification 分类层输出 K+1K+1K+1 个 object 类别的概率分布 p=(p0,...,pK)p=(p0,...,pK)p = (p_0,...,p_K);
  • regression 回归层输出 K+1K+1K+1 个 bounding boxes 偏移值,每个偏移值包括 box center 和 box size:tk=(tkx,tky,tkw,tkh)tk=(txk,tyk,twk,thk)t^k = (t_x^k, t_y^k,t_w^k,t_h^k). 每一个偏移值 tktkt^k 对应一个类别 kkk.
  • affordance 检测分支输出RoI内每个像素的概率分布集合 m={mi}i∈RoIm={mi}i∈RoIm = \{m^i\}_{i \in RoI},其中,mi=(mi0,...,miC)mi=(m0i,...,mCi)m^i = (m_0^i, ...,m_C^i),是关于 C+1C+1C+1 个 affordance labels,softmax 层的输出. 包括 background.

Multi-task Loss:

L=Lcls+Lloc+LaffL=Lcls+Lloc+LaffL = L_{cls} + L_{loc} + L_{aff}

  • LclsLclsL_{cls} - 分类层的输出
  • LlocLlocL_{loc} - 回归层的输出
  • LaffLaffL_{aff} - affordance 检测的输出

对于每个 RoI,预测目标是 groundtruth object 类别 uuu,groundtruth bounding box offset vvv 以及 target affordance mask sss.

uuu 和 vvv 是训练数据集提供的,mask sss 是 RoI 和其对应的 groundtruth mask 的交集. 将不属于 RoI 中不属于该交集的像素,标记为 background.

target mask 被 resized 到固定尺寸,如 244×244244×244244 × 244,因此 Loss 可以转化为:

L(p,u,tu,v,m,s)=Lcls(p,u)+I[u≥1]Lloc(tu,v)+I[u≥1]Laff(m,s)L(p,u,tu,v,m,s)=Lcls(p,u)+I[u≥1]Lloc(tu,v)+I[u≥1]Laff(m,s)L(p, u, t^u, v, m, s) = L_{cls}(p, u) + I[u \geq 1] L_{loc}(t^u, v) + I[u \geq 1] L_{aff}(m, s)

  • Lcls(p,u)Lcls(p,u)L_{cls}(p,u) - 分类任务,多项式交叉熵损失函数(multinomial cross entropy loss): Lcls(p,u)=−log(pu)Lcls(p,u)=−log(pu)L_{cls}(p, u) = -log(p_u) 其中,pupup_u 是真实类 uuu 的 softmax 输出;
  • Lloc(tu,v)Lloc(tu,v)L_{loc}(t^u, v) - 回归任务,Smooth L1 loss,计算回归的 box offset tutut^u(对应于groundtruth object 类别 uuu) 与 groundtruth box offset vvv 间的 smooth l1 loss 值: Lloc(tu,v)=∑i∈{x,y,w,h}SmoothL1(tui−vi)Lloc(tu,v)=∑i∈{x,y,w,h}SmoothL1(tiu−vi)L_{loc}(t^u, v) = \sum_{i \in \{x, y, w, h\}} Smooth_{L1}(t_i^u - v_i) 其中,如果 |x|<1|x|<1|x| < 1,则 SmoothL1(x)=0.5x2SmoothL1(x)=0.5x2Smooth_{L1} (x)= 0.5 x^2;否则,SmoothL1(x)=|x−0.5|SmoothL1(x)=|x−0.5|Smooth_{L1}(x) = |x-0.5|.
  • Laff(m,s)Laff(m,s)L_{aff}(m, s) - affordance 检测,多项式交叉熵损失函数: Laff=−1N∑i∈RoIlog(misi)Laff=−1N∑i∈RoIlog(msii)L_{aff} = \frac{-1}{N} \sum _{i \in RoI} log(m_{s_i}^i) 其中,misimsiim_{s_i}^i 是对于真实 label sisis_i 像素 iii 的 softmax 输出;NNN 是 RoI 内像素总数.
  • I[u≥1]I[u≥1]I[u \geq 1] - 如果 u≥1u≥1u \geq 1 则其值 为 1;否则,为0. 即: 仅在 positive RoIs 上计算 LlocLlocL_{loc} 和 LaffLaffL_{aff}. 分类 LclsLclsL_{cls} 在 positive 和 negative RoIs 均进行计算.

affardance 检测分支的 loss 与实例分割 loss 是不同的.

实例分割中,分类层的输出决定 object label;因此,每个 RoI 的分割可以看做是二值分割,foreground 和 background,可以使用 per-pixel sigmoid 层和 binary cross entropy loss.

affordance 检测中,affordance labels 与 object labels 是不同的. 每个 RoI 中的 affordace 数是不是二值的,往往大于2,.

因此,这里采用 per-pixel softmax 和 multinomial cross entropy loss.

4. 网路训练 Train 和推断 Inference

训练

  • SGD,momentum=0.9,weight_decay=0.005
  • Titan X GPU
  • 200k 次迭代,前 150k 次 learning_rate=0.001,后 50k 次learning_rate=0.0001
  • 输入图片 resized 短边长度为 600 个像素;长边长度不超过 1000 个像素;超过 1000 个像素的,设置为 1000.
  • RPN 采用 15 个 anchors(5 scales,3 aspect rations);RPN 输出的前 2000 个 RoIs(positive : negative = 1:3) 用于计算 multi-task loss. 如果 RoI 与 groundtruth box 的 IoU 大于 0.5,则为 positive;其它为 negative.

推断

  • 选取 RPN 输出的前 1000 个 RoIs,结合 NMS 进行 object 检测;
  • 选取分类 score 大于 0.9 的输出 boxes 作为最终的检测 objects;如果没有满足条件的 boxes,则选取最大 score 作为唯一检测 object.
  • 采用检测到的 object 作为 affordance 检测分支的输入, 来预测每一个像素的 C+1C+1C+1 个 affordance 类别. 取每个像素对于 affordance 类别的最大值作为 affordance label.
  • 最后,预测得到每个 object 的 244×244244×244244×244 的 affordance mask,根据提出的 resize 方法, 被 resized 到object 的 box 尺寸. 检测到的不同 object 间会有重叠(overlap),最终的 affordance label 是由 affordance 优先次序来决定的. 例如,由于 “contain(箱子)”上会放有很多其它物体,那么它会被认为比其他 affordances 具有较低的优先权.

5. Results

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券