基於deeplab v2的語義分割

語義分割程序調試

我們可能會用到:數據集、預訓練模型(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

caffeMakefile.config中的INCLUDE_DIRS中添加matiosrc路徑,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

2txt文件:訓練數據集和測試數據集的名字列表

預訓練好的模型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.exampleMakefile.config,所以在make all 之前需要

Cp 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圖片,大功告成啦!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章