Paper name
Line Segment Detection Using Transformers without Edges
Paper Reading Note
URL: https://arxiv.org/pdf/2101.01909.pdf
TL;DR
Introduction
Background
- 线段检测对于中层视觉任务十分有效,比如分割、三维重建、图片匹配与配准、深度估计、场景理解、目标检测、图像编辑和形状分析等任务。
- 尽管密集像素级别的边缘检测以及实现了不错的效果,但是提取出具有语义和感知意义的线段仍然具有挑战,因为自然场景中的感兴趣的线段通常在杂乱的背景中具有局部模糊或遮挡的异质结构。基于形态学算子的方法的线段提取一般是次优解,其他如格式塔定律与语境信息等中层表示在感知聚类中重要性很强,但是难以集成到端到端的线段检测算法中。目前已有的深度学习方法也都包含了启发式引导模块,比如边缘、连接、区域检测等,线组合和后处理,限制了线检测性能提升及进一步发展。
Related Works
- 传统方法:
- 基于梯度的边缘检测,然后通过感知聚类(perceptual grouping)来自下而上地聚合低级别线索形成线段
- 霍夫变换方法:统计参数空间中的投票结果来检测线段
- NN based 方法:
- junction-based pipelines:基于 junction proposal module 先检测得到 junction heatmap,然后将检测到的交叉节点转换到线proposals,然后再通过一个线段验证分类模型来移除 false-positive 线段。这些方法都依赖于一个很好的交叉点检测结果
- dense prediction 加后处理:AFM 基于 NN 提出一个中间表示特征图,其中包含指向关联线的二维投影向量,然后再用一个 squeeze module 从上述特征图恢复出矢量化线段,但这些方法一般效果较差
Summary
- 所以作者提出了一种基于 transformer 的端到端线段检测网络,主要算法流程就是在 DETR 基础加上部分改进,文章主要贡献如下:
- 设计一种端到端的线段检测算法,无需边缘、连接、区域检测和启发式引导的视觉编组过程,在 Wireframe 和 YorkUrban 数据集上取得了 SOTA 效果
- 使用 transformer 进行线段检测,实现了通过一个整体的 encoder-decoder、self attention、joint query inference 来实现tokenized entity 建模、感知聚类、联合检测。
- 在 DETR 基础上提供了两个算法创新:
- 一个多尺度的encoder/decoder 策略
- 提出了直线端点的距离损失
Dataset/Algorithm/Model/Experiment Detail
数据集
- ShanghaiTech Wireframe dataset
- 5000 训练数据和 462 测试图片
- 主要是室内场景
- YorkUrban
- 102 张测试图片,包括室内和室外场景
- 数据增广主要有随机水平/垂直翻转、随机 resize、crop 和图片色彩抖动。
- 训练阶段将图片随机 resize 到短边在 480-800 范围内,最大长边不超过 1333, 在测试阶段,将图片resize到短边至少有 1100
实现方式
-
传统的目标检测用于线段检测可以采用将 bounding box 的对角线表示为线段,但对于几乎与坐标轴平行的线段会有与预设定 anchor 差异过大的问题。
-
作者设计的 LETR 分为4个检测步骤
- 图像特征提取:图片经过 resnet50 或 resnet101 之类的网络后生成 x ∈ R H ∗ W ∗ C x \in \mathbb{R}^{H*W*C} x∈RH∗W∗C 的特征图,然后与位置编码 concat
- 图像特征编码:flatten 后的 x ∈ R H W ∗ C x \in \mathbb{R}^{HW*C} x∈RHW∗C 的特征会被编码为 x ′ ∈ R H W ∗ C x^{'} \in \mathbb{R}^{HW*C} x′∈RHW∗C,童工一个 multi-head self-attention module 和一个 fead forward network module 接着一个标准的 transformer encoder 结构
- 线段检测:在 transformer 的解码网络中,N 个可学习的线段实体 l ∈ R N ∗ C l \in \mathbb{R}^{N*C} l∈RN∗C 通过 cross-attention module 的输出交互得到
- 线段预测:线段实体(line entity) l l l 从 transformer 的 decoder 出来后会送入两个预测头: 线段坐标会经过一个 3 层的 multi-layer perceptron(MLP)预测加一个 Sigmoid 得到;线段预测置信度会经过一个线性层预测得到
-
训练得到的 line entity 每个会关注不同的区域、长度和旋转角,如下图第一行的 line entity 关注的是图像中间的横线,第二行的 line entity 关注的是不同长度的垂直的线段
-
Coarse-to-Fine Strategy
- 和目标检测不一样的是线段定位对于端点位置准确性要求较高,这里设计了一种分两个 stage 训练的 coarse-to-fine 的网络结构
- Coarse decoding: encoder-decoder 结构使用了 resnet 的 Conv5( 1 32 \frac{1}{32} 321下采样)特征作为 transformer 的输入
- fine decoding: fine decoder 继承了 coarse decoder 的 line entities 输出和高分辨率的特征(resnet 的 Conv4( 1 16 \frac{1}{16} 161下采样))
-
二分图匹配(匈牙利算法): 因为训练过程中设定的预测 line entities 数量一般大于线段的 gt 数量,所以需要利用二分图匹配将预测的线段分配到对应的 gt 线段上用于计算损失;匹配的损失通过预测线段与 gt 线段的 L1 距离和预测线段的置信度来衡量
-
线段检测损失设计
由分类损失与距离损失组成
- 分类损失:就是普通的交叉熵损失,考虑到难样本在训练后期随着学习率降低优化困难,引入了 focal loss
- 距离损失:直接是 L1 距离损失
- 分类损失:就是普通的交叉熵损失,考虑到难样本在训练后期随着学习率降低优化困难,引入了 focal loss
实验结果
-
评价指标
- 两个在 LSD 任务中常用的 heatmap-based 指标: A P H AP^{H} APH and F H F^{H} FH,预测和 gt 都先通过栅格化转换到 heatmaps,然后通过对比每个 pixel 的置信度生成 precision-recall 曲线,然后计算出以上指标
- Structural Average Precision (sAP) :这是 L-CNN 提出的指标。对于预测的线段( L ′ L^{'} L′)和 gt 线段( L L L),通过 L2 距离小于预设定阈值(10,15 pixel)来将预测线段匹配到 gt 线段上;对于匹配到 L L L 的线段,选择置信度最高的作为 TP,其他的作为 FP;如果 L L L 没有匹配到的预测线段,这个会被视为 FN;对于没有与任何 gt 线段( L L L)匹配的预测线段( L ′ L^{'} L′)会被视为 FP。不同置信度阈值计算得到的 precision-recall 曲线能够用于计算 sAP,为了更平衡的指标,作者也是用了 sAP 的 F-score,标记为 sF
-
效果上大部分指标超过了所有传统算法
-
明显超过了 Faster RCNN 和 naive 的 DETR
-
多阶段训练的有效性
-
一些多 stage 和单 stage 的消融实验,看起来 transformer 的层数还能稍微降低一些
-
测试阶段上采样带来的精度提升,LETR 对于高分辨率的上采样能够获得更大的收益
-
预训练的重要性,可以看出来使用在 COCO 上预训练的 DETR 的权重还是十分重要的,因为wireframe数据量较少
-
coarse-to-fine 的解码过程的 attention heatmaps 可视化,可以看到 Fine 阶段的图像空间有更多的细节关联
Thoughts
- cvpr 的 oral 文章实验扎实程度还是毋庸置疑的,评价指标和实验的设定都值得参考
- 对于 transformer 来说,多 stage 的训练方式十分耗时,如果能够优化成单 stage 训练有接近的精度也是一个研究方向