DeepLabV3+创新点

最近终于从FCN读完了DeepLab系列,算是对计算机语义分割有了一个初步的认识。在DeepLabV3中作者通过使用ASPP可以获得任意分别率(理论上是这样的,但是有GPU计算内存的限制)的特征图,然后通过线性插值上采样得到最后输出。但是在经过多层的卷积后,最后的特征图仍然会损失很多图像边缘的细节,如果进一步提高ASPP最后输出的特征图分辨率会导致backbone中更多的block使用膨胀卷积,使得计算的难度和复杂度急速上升。原文中这样说道:

Taking ResNet-101 [25] for example, when applying atrous convolution to extract output features that are 16 times smaller than input resolution, features within the last 3 residual blocks (9 layers) have to be dilated. Even worse, 26 residual blocks (78 layers!) will be affected if output features that are 8 times smaller than input are desired. Thus, it is computationally intensive if denser output features are extracted for this type of models.

所以,在DeepLabV3+中作者做出的改进就是在原有的DeepLabV3模型的基础上增加一个decoder模块,将V3模型作为encoder,并从restnet中提取第一个block的输出作为包含边缘信息的浅层特征,在decoder的过程中与最后ASPP的特征图融合,增加最后的分割准确率。

Pixel2mesh的损失函数 deeplabv3+损失函数_Pixel2mesh的损失函数

DeeLabV3+关键点

个人觉得这篇文章没啥关键点,如果能够理解到DeepLabV3的模型结构和U-net的模型结构的话。如果非要说,我只能说感叹于作者详细的模型试验。举例来说,作者为了研究怎么样才能从浅层的网络中提取边缘信息,对restnet的四个block的输出做了排列组合,最后才选择的Block1的输出。这里放上作者给出的网络结构图。

Pixel2mesh的损失函数 deeplabv3+损失函数_卷积_02

总结

虽然看完了整个DeepLab系列,但还是一知半解的。对空洞卷积,CRF条件随机场,多级联合,ASPP,编码解码结构都是模模糊糊的。对于代码的了解也是这样,只知道大概,对里面的具体编码过程还是存在很多的疑惑,有很多的地方不清楚为什么要这么编码,今天尝试自己复现V3+的代码,但是训练结果却很差,不知道是自己复现的有问题还是没有使用预训练参数自己从头训练导致权重震荡的问题。然后还有就是对里面的一些指标也是知之甚少.除此之外,对于网络模型中图像的尺寸变化也还是不懂,即代码还要进一步的debug学习。啊,越来越不懂了。