SegNet【1】是FCN 的一个改进版,由 Cambridge 提出,旨在解决自动驾驶或智能机器人的图像语义分割
图1. SegNet 分割效果
这里是官方的项目主页,上面介绍了 SegNet 的两个版本(标准版 + 实现准度预估的贝叶斯版【2】)
标准版SegNet
与 FCN 一样,SegNet 也基于 VGG-16。不同的是,SegNet 将后面 3 个全连接层删掉而不是像 FCN 一样,将其转换为卷积层
此外,SegNet 明确将反卷积(上采样)组织为 解码器,将卷积(下采样)组织为 编码器。提出了一个结构上很有对称美感的网络(图2)
图2. 网络左边由卷积+池化组成,右边由反卷积+卷积(same卷积,不改变尺寸)
1)卷积单元(图2蓝色)
可以看到,SegNet 的编码和解码都有卷积模块
这个卷积模块包含:same 卷积(卷积前后尺寸不变)、BN批归一化、ReLU激活
其中关于 same 卷积可以参考文章《 卷积神经网络CNN(1)——图像卷积与反卷积(后卷积,转置卷积)》,里面总结了 same 卷积、full 卷积和 valid 卷积 3 种形式
Batch Normalisition 通过对输入激活函数的数据做归一化处理可以在一定程度上改善梯度弥散的问题。详细分析推荐这篇文章
同样,作为 Sigmoid 的改进版,ReLU 可以通过避免输出进入饱和区域而改善梯度弥散问题
2)池化与上采样
编码与解码模块最大的不同在于,前者通过池化缩小尺寸,后者通过上采样恢复尺寸
SegNet 中使用最大池化,并且同时输出最大点的 index。同一层次的上采样根据 index 确定池化前