基于deeplab v2的语义分割
来源:互联网 发布:交互设计师软件 编辑:程序博客网 时间:2024/06/05 11:12
我们可能会用到:数据集、预训练模型(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/srcLIBRARY_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_datasetcd ~/DL_dataset #save datasets 为$DATASETSwget http://www.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/semantic_contours/benchmark.tgz # 1.3 GBtar -zxvf benchmark.tgzmv benchmark_RELEASE VOC_aug# 原始pascal voc2012数据集wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar # 2 GBtar -xvf VOCtrainval_11-May-2012.tarmv VOCdevkit/VOC2012 VOC2012_orig && rm -r VOCdevkit
数据集格式转换因为pascal voc2012增强数据集的label是mat格式的文件,所以我们需要把mat格式的label转为png格式的图片.
cd ~/DL_dataset/VOC_aug/datasetmkdir cls_pngcd ~/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_origmkdir SegmentationClass_1Dcd ~/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_pngcp ~/DL_dataset/VOC2012_orig/JPEGImages/* ~/DL_dataset/VOC_aug/dataset/img/
进行文件名的修改cd ~/DL_dataset/VOC_aug/datasetmv ./img ./JPEGImagesmv ./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_v2git clone https://bitbucket.org/aquariusjay/deeplab-public-ver2.gitcd deeplab-public-ver2make allmake pycaffe #你可能需要下载安装pycaffemake test # NOT mandatory make runtest # NOT mandatory
注:可能会提示只有Makefile.confile.example无Makefile.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.zipunzip prototxt_and_model.zipmv *caffemodel ~/deeplab_v2/model/deeplab_largeFOVrm *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/voc2012sh 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图片,大功告成啦!!
- 基于deeplab v2的语义分割
- 基于deeplab v2的语义分割参考博文
- 【译】DeepLab V2:基于深度卷积网、孔洞算法和全连接CRFs的语义图像分割
- DeepLab:语义图像分割
- 语义分割DeepLab v2--DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolut
- 图像分割 DeepLab v2
- 【译】DeepLab V1:基于Deep CNNs和全连接CRFs的语义图像分割
- 图像语义分割:从头开始训练deeplab v2系列之四【nyu v2数据集】
- 图像语义分割:从头开始训练deeplab v2系列之一【源码解析】
- 图像语义分割:从头开始训练deeplab v2系列之二【VOC2012数据集】
- 【图像语义分割】DeepLab V2: CNN + Atrous Convolution + Fully Connected CRF
- 图像语义分割:从头开始训练deeplab v2系列之三【pascal-context数据集】
- 深度学习之DeepLab用于语义分割
- 几分钟看完语义分割经典论文:DeepLab
- 基于卷积神经网络的图像语义分割
- 基于光流的视频语义分割和物体检测
- 基于深度学习技术的语义分割综述
- DeepLab:深度卷积网络,多孔卷积 和全连接条件随机场 的图像语义分割 Semantic Image Segmentation with Deep Convolutional Nets, Atro
- python笔记001--python介绍
- Lock和synchronized的区别和使用
- 井字棋AI
- iOS二维码代码实现
- queyHTML和HTML5的区别?
- 基于deeplab v2的语义分割
- 编写函数,输入一个十六进制数,输出相应的十进制数;
- BZOJ1031: [JSOI2007]字符加密Cipher
- 群赛15----2017.9.25
- 第四周-项目二 建立单链表算法库
- rem自适应布局-移动端自适应必备:flexible.js
- Python 赋值、浅拷贝、深拷贝的区别?
- hdu1081 To The Max(最大子矩阵和)
- 建造者模式