FCN 全卷积网络
FCN Fully Convolutional Networks for Semantic Segmentation 是2015年语义分割里程碑。后续SegNet,DeepLab v1,v2,v3,v3+, RefineNet, PSPNet。将学习要点归纳总结。
语义分割, 实例分割, 全景分割
首先需要明确概念:
语义分割:对每一类别使用不同颜色进行区分。
实例分割:实例分割只关注目标对象,不关注背景。类别和每个实例都需要不同颜色区分。
全景分割:可以看做语义分割 + 实例分割。
下面的图可以很好解释他们间的不同:
FCN 的网络结构
FCN 的网络结构比较简单,可以分为两个部分:卷积 + 上采样。 卷积时采用不同深度的跳级结构,和卷积提取的特征进行累加。我们代码实现是可以尝试不同的基础网络(例如:VGG, Inception, ResNet)进行特征提取。
上采样一般2种:1. Resize 2. 反卷积。他们的功能都是讲小尺寸图片特征映射到大尺度的特征。
FCN 训练技巧:
- 卷积特征加载预训练模型
- bilinear初始化反卷积参数
- 至少175 epoch 迭代
- 学习率在100次后调整
-
pool3 之前的特征图不需要融合。
代码
基于https://github.com/pochih/FCN-pytorch修改了一版可运行的程序,代码地址为: https://github.com/shanyiWang/FCN-pytorch
- 1. 数据集准备:
701_StillsRaw_full.zip 下载链接:
http://web4.cs.ucl.ac.uk/staff/g.brostow/MotionSegRecData/files/701_StillsRaw_full.zip
LabeledApproved_full 下载链接:
http://mi.eng.cam.ac.uk/research/projects/VideoRec/CamVid/data/LabeledApproved_full.zip
label_colors 链接:
http://mi.eng.cam.ac.uk/research/projects/VideoRec/CamVid/data/label_colors.txt
注意:label_colors 最后有一个空行
- 2. 生成数据集:
python3 python/CamVid_utils.py
- 3. 训练生成模型:
python3 python/train.py CamVid
- 4. 推理代码:
python3 python/inference.py
参考内容:
https://zhuanlan.zhihu.com/p/31428783