项目实践中对语义分割网络DeepLabV3+的改进

概述

最近用DeepLabV3+做了一些语义分割的工作,从github上下载了别人实现的tensorflow实现。发现速度不能满足需求,所以本人对DeepLabV3+做了一些改进。

原始的网络结构

下图左侧是DeepLabV3的结构,中间是U-Net风格的编解码结构,最右侧就是DeepLabV3+的结构。和V3相比,V3+融合了一次底层特征图(主干网络也换了,但是这里体现不出来)。

项目实践中对语义分割网络DeepLabV3+的改进

改进方向

替换backbone

DeepLabV3+论文里的backbone是Xception, 我下到的工程里用的是ResnetV2-50和ResnetV2-101。

整体的模型保存为PB有一百多M, 在CPU上的运行时间是1秒多。

为了加快网络速度,将backbone替换为MobileNetV2。

使用深度分离卷积替换普通卷积

ASPP部分和decoder部分的参数数量同样吓人,为此把所有的普通卷积替换为深度分离卷积。

同时ASPP和decoder部分的通道数量也做了一定的删减。

增加一次对底层特征的融合

在做身份证部件解析的时候发现细节切分效果较差。为了改善细节,将1/2大小的特征图和decoder特征进行融合,最终取得了不错的效果。

项目实践中对语义分割网络DeepLabV3+的改进

最终效果

整个模型保存为PB固化文件后只有2.5M, 300x400的图片解析时间在CPU上0.2秒左右。

图片效果见《基于语义分割的身份证部件解析和文字检测

参考资料

DeeplabV3+:Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation

基于语义分割的身份证部件解析和文字检测

这就是神经网络 12:深度学习-语义分割-DeepLabV1、V2、V3和V3+

人脸解析(Face Parsing)和人体解析Human Parsing:方法、数据集和论文