基于v2版本的deeplab,使用VGG16模型,在VOC2012,Pascal-context,NYU-v2等多个数据集上进行训练。
好记性不如烂笔头, 最近用Deeplab v2跑的图像分割,现记录如下。
官方源码地址如下:https://bitbucket.org/aquariusjay/deeplab-public-ver2/overview
但是此源码只是为deeplab网络做相应变形的caffe,如果需要fine tuning微调网络,还需要准备以下文件:
txt文件:文件中有数据集的名字列表的txt文件,训练测试集列表
训练好的init.caffemodel: 针对deeplab v2,作者有已经预训练好的两个模型参数:DeepLabv2_VGG16 和DeepLabv2_ResNet101
网络结构prototxt文件: train.prototxt和solver.prototxt,分别在:DeepLabv2_VGG16 和 DeepLabv2_ResNet101
- 官网脚本文件: 三个sh文件,建议使用脚本文件,初看虽不懂,但是比python版本的运行简单很多
注:本博客只涉及脚本版本的训练
准备工作
1.必要工具
下载安装matio,下载地址
2.数据集准备
文章中使用的数据集并不全是pascal-voc2012,而是由voc2012和另外一个数据集合并而成
数据下载
# augmented PASCAL VOC
mkdir -p ~/DL_dataset
cd ~/DL_dataset #save datasets 为$DATASETS
wget http://www.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/semantic_contours/benchmark.tgz # 1.3 GB
tar -zxvf benchmark.tgz
mv benchmark_RELEASE VOC_aug
# original PASCAL VOC 2012
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar # 2 GB
tar -xvf VOCtrainval_11-May-2012.tar
mv VOCdevkit/VOC2012 VOC2012_orig && rm -r VOCdevkit
数据转换
因为pascal voc2012增强数据集的label是mat格式的文件,所以我们需要把mat格式的label转为png格式的图片.
cd ~/DL_dataset/VOC_aug/dataset
mkdir cls_png
cd ~/deeplab_v2/voc2012/
./mat2png.py ~/DL_dataset/VOC_aug/dataset/cls ~/DL_dataset/VOC_aug/dataset/cls_png
pascal voc2012原始数据集的label为三通道RGB图像,但是caffe最后一层softmax loss 层只能识别一通道的label,所以此处我们需要对原始数据集的label进行降维
cd ~/DL_dataset/VOC2012_orig
mkdir SegmentationClass_1D
cd ~/deeplab_v2/voc2012
./convert_labels.py ~/DL_dataset/VOC2012_orig/SegmentationClass/ ~/DL_dataset/VOC2012_orig/ImageSets/Segmentation/trainval.txt ~/DL_dataset/VOC2012_orig/SegmentationClass_1D/