2022CVPR边缘检测——EDTER: Edge Detection with Transformer文章阅读

EDTER: Edge Detection with Transformer文章阅读

今天阅读了一篇文章,名为EDTER: Edge Detection with Transformer,作者将ViT运用在图像边缘检测任务中,实现了SOTA。

论文地址:https://arxiv.org/abs/2203.08566

代码地址:https://github.com/mengyangpu/edter(还未上传代码)

本文为本人观看论文总结 ,能力有限,有不对的地方还请各位在评论区批评指正,后续会进行更正。

边缘检测目的:提取准确的对象边界和视觉上显著的边缘。

边缘检测与图像背景和语义线索密切相关。获得适当的特征以捕捉高水平和低水平的视觉线索是至关重要的。

(1)论文出发点:

​ 作者认为边缘检测虽然是计算机视觉最基本的问题之一,但是由于复杂的环境、不一致的注解等诸多因素,仍然是一个挑战性的问题。

​ 由于传统方法大多数基于底层局部特征进行边缘提取,例如:颜色和纹理信息。

​ 传统CNN卷积深度学习方法:在CNN中,通过不断下采样以获得较大的感受野,随着感受野的扩大,CNN可以逐渐捕捉到全局信息以及语义分类信息,但同时许多必要的细节不可避免地逐渐消失了。 为了获得更多的细节信息,许多方法通过密集连接或者跳跃连接等方法将浅层细节和深层语义信息进行融合,以获取更好的性能。但是浅层细节信息主要反映的是局部信息而不能更多的反映全局信息,没有考虑到上下文语义信息,从而出现了噪声边缘

​ 基于上述问题,论文主要解决的是两个问题:

​ ①使用transformer进行全局上下文信息的提取,使用大的patch获得粗的边缘图,使用小的patch获得精细的边缘。

​ ②提供一个有效的解码器结构,针对小目标物体的边缘提取,以获得高分辨率的边缘图

(2)核心思想:

总体网络结构图如下图所示:

2022CVPR边缘检测——EDTER: Edge Detection with Transformer文章阅读_第1张图片

该算法的核心步骤分为两步(two-stage):

stage Ⅰ:将输入图像分割成一系列粗粒度的patch(我的理解是用一个较大的窗口(文章中叙述是16 X 16)去分割一张图,即patch的长宽较stage Ⅱ大),并使用一个全局transformer作为编码器encoder学习全局上下文信息。然后通过一个Bi-directional Multi-Level Aggregation (BiMLA)作为解码器(decoder)去生成高分辨率的特征图。

stage Ⅱ:通过非重叠滑动窗口进行采样,将整个图像分割为多个细粒度块序列(我的理解与上面类似,即使用一个较小的窗口去将一张图像分割成更多的patch, patch多了则计算力增加)。然后依次对每个序列执行一个局部transformer来获得更多的局部信息,将输出的局部信息进行整合后输入到一个局部的BiMLA解码器中生成一个像素级特征图。

Finally:通过特征融合模块(FFM)对上面stage Ⅰ全局特征和stage Ⅱ 局部特征进行融合,最后输入到边缘提取模块head, 生成最终边缘概率图(即原文章中的边缘图edge maps)

(3)具体实现

​ ①transformer编码器:
Global Transformer Encoder模块与ViT结构类似,不过将ViT中的block个数由12提升为24,在粗粒度的patch使用的窗口是16 X 16。
​ Local Transformer Encoder模块:细粒度的patch先将图像分割成4 X 4大小的窗口,然后使用的patch窗口大小是 8X8 。最终每个窗口的patch数量是H/8 * W/8,分别在四个窗口计算attention,最后将四个窗口得到的结果进行拼接cat, 注意:四个windows计算attention使用的是共享的transformer模块。其中ViT中的block个数修改为原来的12

​ ② BiMLA解码器:

​ BiMLA的网络结构图如下图所示:
2022CVPR边缘检测——EDTER: Edge Detection with Transformer文章阅读_第2张图片

​ stage Ⅰ:将Global Transformer Encoder中的24个block分为四组,每组有6个输出。取四组中最后一个block的输出 ( z g 6 , z g 12 , z g 18 , z g 24 ) (z_g^6, z_g^{12}, z_g^{18}, z_g^{24}) (zg6,zg12,zg18,zg24) 进行reshape成3D特征图 ( H 16 , W 16 , C ) (\frac{H}{16}, \frac{W}{16},C) (16H,16W,C)的形式。对于top-down path,通过一个 1X1 卷积和一个 3X3 卷积,得到四个输出特征图( t 6 , t 12 , t 18 , t 24 t^6,t^{12},t^{18},t^{24} t6,t12,t18,t24),同理对于down-top path,采用类似的方法得到四个输出特征图( b 6 , b 12 , b 18 , b 24 b^6,b^{12},b^{18},b^{24} b6,b12,b18,b24)。最后将每个输出特征图(总共8个)分别使用kernels大小为 4X4 和 16X16 的两个逆卷积层(ConvTranspose2d)进行上采样,每个逆卷积层后都接有一个BN层和ReLU层。最后将得到的8个特征图进行concat拼接成一个tensor, 并使用三个 3X3 卷积和一个1X1卷积进行融合,其中每个卷积层均包含了BN层和ReLU层,得到最终的一个粗边缘图。

​ stage Ⅱ: 由于上文说到Local Transformer Encoder模块中transformer block只有12个。采用与上述相同的方法生成特征图,只不过BiMLA输入不在是 ( z g 6 , z g 12 , z g 18 , z g 24 ) (z_g^6, z_g^{12}, z_g^{18}, z_g^{24}) (zg6,zg12,zg18,zg24),而是 ( z g 3 , z g 6 , z g 9 , z g 12 ) (z_g^3, z_g^{6}, z_g^{9}, z_g^{12}) (zg3,zg6,zg9,zg12)。与Global Transformer Encoder中的BiMLA不同之处在于,此处的BiMLA将最后的三个 3X3 卷积全部替换成 1X1 卷积。以避免因填充操作而造成的人工边缘。

​ ③ FFM特征融合模块:

​ 最后,文章通过一个特征融合模块(FFM)结合来自两个stage的上下文线索,并通过 Local Refinement 决策头head预测边缘图。FFM将Global Context Modeling作为先验知识,对Local Refinement 进行调整,生成包含全局上下文和细粒度局部细节的融合特征。

​ FFM 包含一个空间特征变换块和两个带有BN层和ReLU层的3X3卷积层,前者作用是调制,后者作用是平滑。得到的最后融合特征图将输入到Local Refinement 中head模块进行边缘概率图生成。

Local Refinement 中head模块:包含一个1X1卷积层和一个sigmoid层,主要用于生成边缘概率图。

(4)模型训练

关于模型训练,作者先训练stage Ⅰ,然后修正stage Ⅰ的参数并训练stage Ⅱ的参数。损失函数与BDCN、DexiNed等边缘提取网络使用的损失函数差不多,都是用的类别平衡交叉熵损失函数。

在这里插入图片描述

有一处尚不清楚,即论文中作者在上述是将head得到的边缘图与ground truth得到的损失是 ζ r E \zeta_r^E ζrE ,那么 ζ r s i d e \zeta_r^{side} ζrside 表示的是哪一部分损失?由于作者并未开源代码,如果有清楚的麻烦在评论区指出。

你可能感兴趣的:(计算机视觉,深度学习,人工智能)