利用小型数据集m2nist进行语义分割——(二)分割网络框架设计
微信公众号:幼儿园的学霸
目录
前言
有了数据集,接下来需要针对数据集设计神经网络框架便于后续代码的编写。由于在工作项目中是以MobileNet
为基础,自然而然在设计语义分割网络框架时便复用了MobileNeV2
的倒残差网络结构,另外由于第一次编写分割网络,对网络结构部分没有太多经验,参考了LinkNet
网络结构。
网络结构
整体结构
LinkNe
网络结构如下图所示:
该网络有什么优点,为什么有效没有研究过。在练手的项目中,拿来就用罢了。
从图中可以看到LinkNet分为编码和解码两个阶段。编码阶段用于提取图像特征,其作用和图像分类以及目标检测时的backbone一致;解码阶段是将encoder输出的特征图上采样恢复至原始输入尺寸,从而恢复图像的原始信息,上采样可以采用转置卷积、resize、unpooling等方式实现。
LinkNet网络结构中一共有4个编码器和4个解码器。pictures/features经过1次编码器后,输出尺寸变为输入尺寸的1/2,因此经过编码阶段后,输出特征尺寸变为原来的1/(2*2*2*2)=1/16
。而解码器对输入进行一次上采样,输入经过解码器后,其尺寸变为原来的2倍。因此输入经过4次编码及4次解码,输出尺寸和原始输入一致。
借鉴LinkNet网络,我设计的分割网络框架如下图所示:
该网络和LinkNet相比,进行了部分修改:1)编码器进行了重新设计,稍后会介绍;2)原始的LinkNet网络中,编码阶段的特征和解码阶段的特征是采用叠加(add)的方式,我将其修改为特征融合(concatenate)的方式。
需要注意的是,由于网络进行了4次下采样,因此该网络的输入尺寸是(64,96)
而非(64,84)
,这点在编写代码时需要小心。
编码器设计
MobileNetV2的倒残差网络结构如下图所示:
基于此,我随便写了一个编码器,以替换LinkNet中的编码器,结构如下图所示:
编码器由下采样模块和倒残差模块两部分组成。下采样模快采用深度可分离卷积实现,减少计算量。
解码器设计
解码器和LinkNet中的解码器设计一致,结构如下所示: