基于deeplab v2的语义分割

  • Post author:
  • Post category:其他



语义分割程序调试


我们可能会用到:数据集、预训练模型(vGG 16为例)

、txt文件、prototxt文件、sh文件、deeplab-public-ver2工具箱。

一、准备工作




1




)下载安装




matio,




地址




https://sourceforge.net/projects/matio/files/matio/1.5.2



安装步骤:










tar zxf matio-1.5.2.tar.gz





cd matio-1.5.2





./configure





make





make check





(sudo)make install








若无权限则加





sudo








caffe









Makefile.config




中的




INCLUDE_DIRS




中添加




matio









src




路径,




LIBRARY_DIRS




中添加




src/.libs




的路径。


INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include/home/turtlebot/matio-1.5.2/src





LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib/home/turtlebot/matio-1.5.2/src/.libs







2









txt




文件:训练数据集和测试数据集的名字列表


预训练好的模型




init.caffemodel




、网络结构




prototxt




文件、三个




sh




脚本文件





https://github.com/xmojiao/deeplab_v2/tree/master/voc2012/list







(3)数据集




pascal-vco2012 原始数据集








http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar







pascal-voc2012




增强数据集






http://www.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/semantic_contours/benchmark.tgz








(4)工具箱




deeplab-public-ver2







https://bitbucket.org/aquariusjay/deeplab-public-ver2.git








(5)预训练模型和网络结构prototxt文件





http://liangchiehchen.com/projects/released/deeplab_aspp_vgg16/prototxt_and_model.zip



二、数据集准备   关于pascal 数据集的信息,我会在下一篇博客中介绍
微笑

数据集下载

#    增加的pascal voc2012数据集
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

#  原始pascal voc2012数据集
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

三、数据融合

此时,~/DL_dataset/VOC2012_org是原始pascal voc2012数据集的文件夹

images:文件名是JPEGImages,  jpg图片的个数是17125;

labels:文件名三SegmentationClass_1D, png图片的个数是2913张。



~/DL_dataset/VOC_aug/dataset是pascal voc2012增强数据集的文件夹

images:文件名是img, jpg图片的个数是11355;

labels:文件名是cls , mat 的个数也是11355.



然后将原始pascal voc2012数据集中的图片inages和标签labels复制到增强pascal voc2012数据集中,如果重复则覆盖。












cp ~/DL_dataset/VOC2012_orig/SegmentationClass_1D/* ~/DL_dataset/VOC_aug/dataset/cls_png
cp ~/DL_dataset/VOC2012_orig/JPEGImages/* ~/DL_dataset/VOC_aug/dataset/img/


进行文件名的修改

cd ~/DL_dataset/VOC_aug/dataset
mv ./img ./JPEGImages
mv ./cls_png ./SegmentationClassAug


此时,VOC_aug/dataset数据集中

images:文件名是JPEGImages,jpg图片的个数变成17125张;

labels:文件名是cls_png, png图片的个数是12031张。




















四、下载安装deeplab-public-ver2


deeplab_v2文件夹需要做如下工作:










mkdir -p ~/deeplab_v2/voc2012/config/deeplab_largeFOV #
















存放












prototxt
















文件















mkdir -p ~/deeplab_v2/voc2012/features/labels #
















存放提取到的特征















mkdir-p ~/deeplab_v2/voc2012/features2/labels

















mkdir-p ~/deeplab_v2/voc2012/list #
















存放












txt
















文件















mkdir-p ~/deeplab_v2/voc2012/log

















mkdir-p ~/deeplab_v2/voc2012/model/deeplab_largeFOV #
















存放预训练好的模型















mkdir-p ~/deeplab_v2/voc2012/res



























然后:



cd deeplab_v2
git clone https://bitbucket.org/aquariusjay/deeplab-public-ver2.git
cd deeplab-public-ver2
make all
make pycaffe   #你可能需要下载安装pycaffe
make test # NOT mandatory 
make runtest # NOT mandatory














可能会提示只有

















Makefile.confile.example































Makefile.config















,所以在















make all















之前需要


















C











p Makefile.config.example  Makefile.config









如果,最后一步make runtest出现断错误(core dumped)也不用担心,因为不会影响后面程序的运行,只要没有failure就可以。



五、下载预训练模型和prototxt文件

wget http://liangchiehchen.com/projects/released/deeplab_aspp_vgg16/prototxt_and_model.zip
unzip prototxt_and_model.zip
mv *caffemodel ~/deeplab_v2/model/deeplab_largeFOV
rm *prototxt


六、对deeplab_v2/voc2012/pascal.sh,我们接下来要运行的脚本文件进行路径的补充





改动了以下几个地方:





#!/bin/sh








## MODIFY PATH for YOUR SETTING





#ROOT_DIR=





ROOT_DIR


=/home/turtlebot/DL_dataset  #自己数据集的路径








#CAFFE_DIR=../code





CAFFE_DIR


=~/deeplab_v2/deeplab-public-ver2  #deeplab-public-ver2的路径





CAFFE_BIN=${CAFFE_DIR}/.build_release/tools/caffe.bin








#EXP=voc12





EXP=.  # 改不改都可以








#if [ “${EXP}” = “voc12” ]; then





if [ “${EXP}” = “.” ]; then  #

改不改都可以








NUM_LABELS=21





# DATA_ROOT=${ROOT_DIR}/rmt/data/pascal/VOCdevkit/VOC2012







DATA_ROOT


=${ROOT_DIR}/VOC_aug/dataset     #自己的dataset的路径





else





NUM_LABELS=0





echo “Wrong exp name”





fi













## Specify which model to train





########### voc12 ################





NET_ID=deeplab_largeFOV


#官方程序这里是错误的











## Variables used for weakly or semi-supervisedly training





#TRAIN_SET_SUFFIX=





#TRAIN_SET_SUFFIX=_aug





TRAIN_SET_SUFFIX=_aug    #取消注释








#TRAIN_SET_STRONG=train





#TRAIN_SET_STRONG=train200





#TRAIN_SET_STRONG=train500





#TRAIN_SET_STRONG=train1000





#TRAIN_SET_STRONG=train750








#TRAIN_SET_WEAK_LEN=5000








DEV_ID=0








#####








## Create dirs








CONFIG_DIR=${EXP}/config/${NET_ID}





MODEL_DIR=${EXP}/model/${NET_ID}





mkdir -p ${MODEL_DIR}





LOG_DIR=${EXP}/log/${NET_ID}





mkdir -p ${LOG_DIR}





export GLOG_log_dir=${LOG_DIR}








## Run








RUN_TRAIN=1  %为1表示训练

RUN_TEST=0

%为1表示测试








RUN_TRAIN2=0





RUN_TEST2=0





其他部分没有改动











好啦,如果前面比较顺利运行程序就ok啦!





训练:

cd ~/deeplab_v2/voc2012
sh run_pascal.sh 2>&1|tee train.log






还有每次迭代的Loss,lr,accuracy等信息












训练20000次后,就可以进行测试了





令RUN_TEST=1,

sh run_pascal.sh 2>&1|tee train.log


将test的结果从mat文件转换成png文件。




test结束,你会在~/deeplab_v2/voc2012/features/deeplab_largeFOV/val/fc8目录下跑出mat格式的结果。


这里写图片描述


mat转png图片


-修改creat_labels.py中文件目录

cd ~/deeplab_v2/voc2012/
vim create_labels.py

-在此目录运行creat_labels.py

python create_labels.py

就可以看到最后的结果啦!jpg图片、labels和分割之后的png图片,大功告成啦!!







版权声明:本文为weixin_38437404原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。