face++ eccv2008的paper,主要提出bisenet,用于实时语义分割。感觉写的还是蛮不错的,结构清晰,通俗易懂。自己需要学习的是怎么说这个story,怎么create出创新点,其实架构很简单,但是说的特别好,为什么要这么做,还给了每一个部分起了一个好title.主要设计了BiSeNet,其中spatial path 负责保留空间信息并且生成高分辨率特征(三个卷积),context path 获取足够的感受野(用了快速的下采样,用FFM模块(feature fusion module)对特征进行融合,还add了类似与senet的注意力机制对特征进行加权。该网络在titian xp 上105FPS 且MIOU为0.684(cityscape数据集)。
首先,先介绍了现有加速的方法:1.crop或者resize图片 2. 减少特征通道数,尤其在网络的早期3.丢弃网络的最后阶段(ENet),使模型变得紧凑。三种方式的缺点如下 1.损失了空间细节,特别是边缘 2.弱化了空间信息 3. 少了最后阶段的下采样,感受野变小,影响大物体的分割(对自己来说特别重要)这些方法为了速度牺牲了acc,在实际中处于劣势。为了弥补空间信息,u-shape结构被提出来,粗暴的对特征进行融合。但是这种方法计算太慢而且不能还原通过剪裁和resize的空间信息。so,还是我家提出的BiSeNet好。
main contribution:
Spatial Path
在语义分割任务中,空间分辨率和感受野很难两全,尤其是在实时语义分割的情况下,现有方法通常是利用小的输入图像或者轻量主干模型实现加速。但是小图像相较于原图像缺失了很多空间信息,而轻量级模型则由于裁剪通道而损害了空间信息。
本文提出 Spatial Path来保留原输入图像的空间尺度,并编码丰富的空间信息。Spatial Path为三个(stride为 2 的卷积+bn+ ReLU)。因此,该path输出的feature map为原图像 1/8 。其含有丰富的空间信息due to 巨大的size。
Context path
用来获取足够的感受野,在语义分割中,感受野十分重要,现有的增大感受野的方式 pyramid pooling, atrous spatial pyramid pooling,large kernel等,消耗内存和计算,降低速度。
Context path 通过初始化轻量模型与global average pooling 来提供大的感受野并加速。轻量模型(xception) 快速下采样。全局均匀池化,获取全局语义信息。然后借鉴unet,融合最后两个阶段的语义信息。
还添加了特征优化模块Attention refinement module(就是senet的特征加权)
Network architecture
Context path用的是xception39,Spatial Path用的是三层卷积。用FFM来融合。具体结构如上图所示。FFM不是简单的特征相加,是先concacte,然后bn,在后类似与senet reweight特征。
损失函数:有辅助损失 两个辅助损失和一个主损失,用参数 α来平衡。辅助损失在Context path模块的两个出口那里。都是softmax。
实现细节
(SGD)batch size 16, momentum 0.9 and weight decay 1e −4“poly” learning rate strategy power 0.9. The initial learning rate is 2.5e .
Data augmentation: mean subtraction, random horizontal flip
and random scale on the input images to augment the dataset in training process.
The scales contains { 0.75, 1.0, 1.5, 1.75, 2.0}. Finally, we randomly crop the
image into fix size for training.
experiment:
采用改版的 Xception39(不知道改哪里了,据说code会公开),并在 Cityscapes,CamVid 和 COCO-Stuff 三个数据集进行评估。具体实验结果就不一一列出。
给自己的思考:
自己是个二分类问题,然后道路占比又大,属于大物体,那么自己crop的时候是否要注意,最好能够cover整个道路,然后,感受野确实也要大。没有小物体,所以,特征融合模块估计不太需要。