paper:Efficient RGB-D Semantic Segmentation for Indoor Scene Analysis
本文主要贡献在以下:
结合深度图像,提升仅用RGB图像分割的mIOU
设计一种结构,可用tensorRT实现,进而可在NX板上提升分割效率,比如有限计算能力和电池量的机器人场景
改进的ResNet-based encoder和decoder. 降低计算量,提升效率
本文的语义分割结合了RGB图像和深度图像 as input, 主要针对室内场景,
RGB图像和深度图在encoder中进入两个不同的branch, 然后再合并,结构如下图:
看起来很复杂的样子,其实分解开来也没那么复杂,
因为如果feature在多个stage中进行fuse,分割结果会提升,所以可以看到深度图和RGB图的特征在中间多个stage都有RGB-D Fusion.
encode以ResNet作为backbone, 为了提升效率,并没有像deepLabv3那样用空洞卷积,而是用strided convolution.
在encoder的末尾,feature map的size会比input image 缩小32倍,用的是ResNet34,
但是每个3x3卷积被替换成图中紫色部分的block, 即把3x3分解成了3x1 和 1x3, 加ReLU在中间,
这个模块叫做Non-Bottleneck-1D-Block,说是这样可以缩短推断时间,提高performance。
RGB Fusion用的是Squeeze and Excitation模块。具体在图中左下角绿色模块。
Context module是解决ResNet的有限感受野问题,把不同scales的feature结合,类似Pyramid Pooling Module in PSPNet,
而且修改了Avg Pooling,因为TensorRT只支持固定size的pooling, 所以用与input resolution相关的pooling size取代adaptive pooling.
因此,根据数据集的不同,pooling size会有不同。
Decoder
有3个decoder 模块
并没有用转置卷积用于上采样,因为计算量较大,且会产生gridding artifacts, 如下图
本文用了learned upsampling方法,在图1的墨绿色方块里,
用NN upsampling来加大resolution, 再用一个3x3 depthwise卷积层来连接相邻的feature.
但是上采样后会损失一些细节,因为细节在encoder的downsampling中会丢失,
所以作者设计了skip connections,把encoder的特征连接到相同resolution的decoder中,
为了确保channel相同,用了1x1卷积,
这样做可以恢复一些细节。
在恢复到比input image小4x的图像后,跟一个3x3卷积层,再用2个上采样层恢复到input image的resolution.
一般算loss都是用结果和ground truth比较,作者为了避免只用最后的结果,会在每个decoder模块输出一个结果,
和相应的ground truth缩放后的图像计算loss,这样就可以多尺度地计算loss.
参数
训练用了500个epoch, batch size为8,
SGD优化器,momentum=0.9, 学习率为{0.00125, 0.0025, 0.005, 0.01, 0.02, 0.04}
Adam学习率为{0.0001, 0.0004}
weight decay为0.0001,
学习率用pytorch的one-cycle learning rate scheduler调节
在AGX上的帧率
mIOU
可以看到本文的ESANet的mIOU在mobile(SwiftNet, BiSeNet)和非mobile模型之间,