BCNet 阅读笔记
Deep Occlusion-Aware Instance Segmentation with Overlapping BiLayers(CVPR 2021)
- 文章的 Related Work 可以当一篇综述,有很多关于 Occlusion Handling 的论文,可以参考
- Amodal Instance Segmentation:模态实例分割。传统实例分割只能 focus 可见区域,但是模态实例分割可以预测被遮挡的部分
摘要
- 动机:高度重叠目标难以进行实例分割
- 方法:
- 将图像建模(解耦)为两个重叠层,并提出双层卷积网络(BCNet),其中顶部的GCN层检测遮挡物体(遮挡者),底部的GCN层推断被部分遮挡的物体(被遮挡者)
- BCNet 在模态和非模态设置中使用不同的backbone和对象检测器在整体分割性能上实现了一致的收益
引言
- 原理图
- BCNet 在 ROI 提取后同时回归 遮挡者 和 被遮挡者,使用两个不同的层将它们的像素进行分组,将目标的边界进行解耦,最后在mask 回归阶段将两者进行 interaction
- BCNet 在 ROI 提取后同时回归 遮挡者 和 被遮挡者,使用两个不同的层将它们的像素进行分组,将目标的边界进行解耦,最后在mask 回归阶段将两者进行 interaction
- 传统方法的局限
- 传统方法通过 NMS 或 后处理 来解决相邻物体之间的掩码冲突,因此,它们的结果是 沿边界过度平滑 或 相邻物体的差别很小
- ROI 中的感受野可以观察到属于同一类别的多个物体,因此当 遮挡者 的一部分被判定在 被遮挡者 中时,传统的 mask head 不能解决这种问题,导致误差
- BCNet 对比其他 mask head 的结构
Occlusion-Aware Instance Segmentation(遮挡感知实例分割)
- 网络结构图
GCN 相关
- 给定邻接图 g = < V , E > \mathcal g=<\mathcal V, \mathcal E> g=<V,E>,图卷积操作定义如下:
Z = σ ( A X W g ) + X \bold Z=\sigma (\bold A \bold X \bold W_g)+\bold X Z=σ(AXWg)+X
其中 X ∈ R N × K \bold X\in R^{N×K} X∈RN×K 是输入特征, N = H × W N=H×W N=H×W 是 ROI 区域中的像素数量, K K K 是每一个 node(每个像素就是一个 node)的特征维度, A ∈ R N × N \bold A\in R^{N×N} A∈RN×N 是从特征相似度而来的定义图结点邻接关系邻接矩阵, W g ∈ R K × K ′ \bold W_g\in R^{K×K'} Wg∈RK×K′ 是用来将 output 进行变换的可学习权重矩阵,其中 K ′ = K K'=K K′=K。 - 输出特征 Z ∈ R N × K ′ Z\in R^{N×K'} Z∈RN×K′ 包括通过全局信息传播在整个图层内更新的节点特征,这是在非线性函数 σ ( ⋅ ) σ(·) σ(⋅) 之后得到的,包括归一化和ReLU函数。最后在 GCN 层添加一个残差链接
- 为了构造邻接矩阵 A \bold A A ,通过点积相似度定义每两个图节点 x i , x j x_i,x_j xi,xj 之间的成对相似度为
A i j = s o f t m a x ( F ( x i , x j ) ) , F ( x i , x j ) = θ ( x i ) T ϕ ( x j ) \bold A_{ij}=softmax(F(x_i, x_j)),\\ F(x_i,x_j)=\theta(x_i)^T\phi (x_j) Aij=softmax(F(xi,xj)),F(xi,xj)=θ(xi)Tϕ(xj)
其中 θ , ϕ \theta ,\phi θ,ϕ 是两个通过 1 × 1 1×1 1×1 卷积实现的可训练变换函数,如 Figure 4 ,两个结点之间的高置信度边缘对应较大的特征相似度 - 定义 G i \mathcal G^i Gi 表示第 i 个图, X r o i X_{roi} Xroi 表示输入 ROI 特征, W f \bold W_f Wf 表示FCN 层的权重,整个表达式如下:
Z 1 = σ ( A 1 X f W g 1 ) + X f X f = Z 0 W f 0 + X r o i Z 0 = σ ( A 0 X r o i W g 0 ) + X r o i \bold Z^1=\sigma (\bold A^1\bold X_f \bold W_g^1) + \bold X_f \\ \bold X_f = \bold Z^0 \bold W_f^0+\bold X_{roi}\\ \bold Z^0=\sigma (\bold A^0\bold X_{roi}\bold W_g^0)+\bold X_{roi} Z1=σ(A1XfWg1)+XfXf=Z0Wf0+XroiZ0=σ(A0XroiWg0)+Xroi
为了连接两个 GCN 块,第一个 GCN 的表示遮挡者的输出特征 Z 0 \bold Z^0 Z0 直接加到了 X r o i \bold X_{roi} Xroi 上面来融合 occlusion-aware 特征 X f \bold X_f Xf ,它是第二个 GCN 层的输入,用来获得 被遮挡者 的mask Z 1 \bold Z^1 Z1
- 给定邻接图 g = < V , E > \mathcal g=<\mathcal V, \mathcal E> g=<V,E>,图卷积操作定义如下:
损失函数
- 遮挡者的 边界 损失函数
- 遮挡者的 mask 损失函数
- 多任务损失
- Detect 损失
- 遮挡者的 边界 损失函数
实验结果
- 第一个 GCN 层的作用
第二个 GCN 层有无 第一个 GCN 层
GCN 和 FCN 的差别
使用不同的检测器
可视化结果
不同数据集、不同SOTA方法的结果