一、安装必要的依赖库 matio

安装方法1: 
sudo apt-get install libmatio-dev 
安装方法2: 
下载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 
make install 
sudo ldconfig 
二、下载Deeplabv2并编译 
deeplab_v2官方源码地址如下:https://bitbucket.org/aquariusjay/deeplab-public-ver2/overview 

1.下载deeplab源码进行编译。

mkdir deeplab
cd deeplab
git clone https://bitbucket.org/aquariusjay/deeplab-public-ver2.git
然后进行编译,其实deeplab-public-ver2就是caffe,所以编译方法和caffe相同
make all -j16
make pycaffe
make test
如何存在问题可以参看 https://blog.csdn.net/ziyouyi111/article/details/79358401和 https://blog.csdn.net/ziyouyi111/article/details/80274528

2.依次建立存放设置文件夹,预测结果文件夹,数据集txt文件夹,log文件夹,model文件夹,evaluation文件夹,并将

官方给的txt文件夹,以及预训练的model和网络结构文件放到相应的文件夹中。这里省略比较繁琐的步骤使用 https://github.com/xmojiao/deeplab_v2.git 中voc12文件夹即可。


3.deeplab2的script文件run_pascal.sh 解析
#!/bin/sh
## MODIFY PATH for YOUR SETTING
ROOT_DIR=    #数据路径设计为空载train.txt和test.txt文件中需要写成全路径
CAFFE_DIR=../code #设置为deeplab-public-ver2的caffe路径
CAFFE_BIN=${CAFFE_DIR}/.build_release/tools/caffe.bin
EXP=.  #设为当前路径
if [ "${EXP}" = "." ]; then
NUM_LABELS=2  #分割类别一定要修改
DATA_ROOT=${ROOT_DIR} #VOC数据目录,修改为你的数据目录
else
NUM_LABELS=0
echo "Wrong exp name"
fi
## Specify which model to train
########### voc12 ################
NET_ID=deelab_largeFOV  ##此处文件名有问题应该改为deeplab_largeFOV
## Variables used for weakly or semi-supervisedly training
#TRAIN_SET_SUFFIX=
#TRAIN_SET_SUFFIX=_aug   #此处应该取消注释,当你run training 1时
#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} #此处目录为/voc12/config/deeplab_largeFOV
MODEL_DIR=${EXP}/model/${NET_ID}
mkdir -p ${MODEL_DIR} #创建MODEL_DIR目录为/voc12/model/deeplab_largeFOV
LOG_DIR=${EXP}/log/${NET_ID}
mkdir -p ${LOG_DIR}
export GLOG_log_dir=${LOG_DIR}
## Run
RUN_TRAIN=1 #为1 0说明执行train
RUN_TEST=0  #为0 1说明执行test
RUN_TRAIN2=0
RUN_TEST2=0
## Training #1 (on train_aug)
if [ ${RUN_TRAIN} -eq 1 ]; then  #r如果RUN_TRAIN为1
#
LIST_DIR=${EXP}/list
TRAIN_SET=train${TRAIN_SET_SUFFIX}
if [ -z ${TRAIN_SET_WEAK_LEN} ]; then #如果TRAIN_SET_WEAK_LEN长度为零则为真
TRAIN_SET_WEAK=${TRAIN_SET}_diff_${TRAIN_SET_STRONG}
comm -3 ${LIST_DIR}/${TRAIN_SET}.txt ${LIST_DIR}/${TRAIN_SET_STRONG}.txt > ${LIST_DIR}/${TRAIN_SET_WEAK}.txt #comm -3 指令为不输出两个文件共有的行,此处即为除去train.txt文件中train_aug.txt的数据,其他都输出到train_aud_diff_train.txt
else
TRAIN_SET_WEAK=${TRAIN_SET}_diff_${TRAIN_SET_STRONG}_head${TRAIN_SET_WEAK_LEN}
comm -3 ${LIST_DIR}/${TRAIN_SET}.txt ${LIST_DIR}/${TRAIN_SET_STRONG}.txt | head -n ${TRAIN_SET_WEAK_LEN} > ${LIST_DIR}/${TRAIN_SET_WEAK}.txt
fi
#
MODEL=${EXP}/model/${NET_ID}/init.caffemodel #下载的vgg16或者ResNet101中的 model
#
echo Training net ${EXP}/${NET_ID}
for pname in train solver; do
sed "$(eval echo $(cat sub.sed))" \
${CONFIG_DIR}/${pname}.prototxt > ${CONFIG_DIR}/${pname}_${TRAIN_SET}.prototxt #复制文件train.prototxt到train_train_train_aug.prototxt,slove同理
done #此部分运行时如以下命令
CMD="${CAFFE_BIN} train \
--solver=${CONFIG_DIR}/solver_${TRAIN_SET}.prototxt \
--gpu=${DEV_ID}"
if [ -f ${MODEL} ]; then
CMD="${CMD} --weights=${MODEL}"
fi
echo Running ${CMD} && ${CMD}  
fi
#train部分运行时,即以下运行命令 ../deeplab-public-ver2/.build_release/tools/caffe.bin train --solver=volab_largeFOV/solver_train_aug.prototxt --gpu=0 --weights=voc12/model/deeplab_largeFOV/init.caf   femodel
#上述命令中,solver_train_aug.prototxt由solve.prototxt文件复制而来,init.caffemodel为原始下载了的VGG16的model
## Test #1 specification (on val or test)
if [ ${RUN_TEST} -eq 1 ]; then
#
for TEST_SET in val; do
TEST_ITER=`cat ${EXP}/list/${TEST_SET}.txt | wc -l` #此处计算val.txt文件中测试图片个数,共1449个
MODEL=${EXP}/model/${NET_ID}/test.caffemodel
if [ ! -f ${MODEL} ]; then
MODEL=`ls -t ${EXP}/model/${NET_ID}/train_iter_*.caffemodel | head -n 1`
fi
#
echo Testing net ${EXP}/${NET_ID}
FEATURE_DIR=${EXP}/features/${NET_ID}
mkdir -p ${FEATURE_DIR}/${TEST_SET}/fc8
mkdir -p ${FEATURE_DIR}/${TEST_SET}/fc9
mkdir -p ${FEATURE_DIR}/${TEST_SET}/seg_score
sed "$(eval echo $(cat sub.sed))" \
${CONFIG_DIR}/test.prototxt > ${CONFIG_DIR}/test_${TEST_SET}.prototxt
CMD="${CAFFE_BIN} test \
--model=${CONFIG_DIR}/test_${TEST_SET}.prototxt \
--weights=${MODEL} \
--gpu=${DEV_ID} \
--iterations=${TEST_ITER}"
echo Running ${CMD} && ${CMD}
done
fi
#test部分运行时,即以下运行命令../deeplab-public-ver2/.build_release/tools/caffe.bin test --model=voc12/config/deeplab_largeFOV/test_val.prototxt --weights=voc12/model/deeplab_largeFOV/train_iter_20000.caffemodel --gpu=0 --iterations=1449
#上述命令中,test_val.prototxt由test.prototxt文件复制而来,train_iter_20000.caffemode由第一部分train得到的model
## Training #2 (finetune on trainval_aug)
if [ ${RUN_TRAIN2} -eq 1 ]; then
#
LIST_DIR=${EXP}/list
TRAIN_SET=trainval${TRAIN_SET_SUFFIX}
if [ -z ${TRAIN_SET_WEAK_LEN} ]; then
TRAIN_SET_WEAK=${TRAIN_SET}_diff_${TRAIN_SET_STRONG}
comm -3 ${LIST_DIR}/${TRAIN_SET}.txt ${LIST_DIR}/${TRAIN_SET_STRONG}.txt > ${LIST_DIR}/${TRAIN_SET_WEAK}.txt
else
TRAIN_SET_WEAK=${TRAIN_SET}_diff_${TRAIN_SET_STRONG}_head${TRAIN_SET_WEAK_LEN}
comm -3 ${LIST_DIR}/${TRAIN_SET}.txt ${LIST_DIR}/${TRAIN_SET_STRONG}.txt | head -n ${TRAIN_SET_WEAK_LEN} > ${LIST_DIR}/${TRAIN_SET_WEAK}.txt
fi
#
MODEL=${EXP}/model/${NET_ID}/init2.caffemodel
if [ ! -f ${MODEL} ]; then
MODEL=`ls -t ${EXP}/model/${NET_ID}/train_iter_*.caffemodel | head -n 1`
fi
#
echo Training2 net ${EXP}/${NET_ID}
for pname in train solver2; do
sed "$(eval echo $(cat sub.sed))" \
${CONFIG_DIR}/${pname}.prototxt > ${CONFIG_DIR}/${pname}_${TRAIN_SET}.prototxt
done
CMD="${CAFFE_BIN} train \
--solver=${CONFIG_DIR}/solver2_${TRAIN_SET}.prototxt \
--weights=${MODEL} \
--gpu=${DEV_ID}"
echo Running ${CMD} && ${CMD}
fi
## Test #2 on official test set
if [ ${RUN_TEST2} -eq 1 ]; then
#
for TEST_SET in val test; do
TEST_ITER=`cat ${EXP}/list/${TEST_SET}.txt | wc -l`
MODEL=${EXP}/model/${NET_ID}/test2.caffemodel
if [ ! -f ${MODEL} ]; then
MODEL=`ls -t ${EXP}/model/${NET_ID}/train2_iter_*.caffemodel | head -n 1`
fi
#
echo Testing2 net ${EXP}/${NET_ID}
FEATURE_DIR=${EXP}/features2/${NET_ID}
mkdir -p ${FEATURE_DIR}/${TEST_SET}/fc8
mkdir -p ${FEATURE_DIR}/${TEST_SET}/crf
sed "$(eval echo $(cat sub.sed))" \
${CONFIG_DIR}/test.prototxt > ${CONFIG_DIR}/test_${TEST_SET}.prototxt
CMD="${CAFFE_BIN} test \
--model=${CONFIG_DIR}/test_${TEST_SET}.prototxt \
--weights=${MODEL} \
--gpu=${DEV_ID} \
--iterations=${TEST_ITER}"
echo Running ${CMD} && ${CMD}
done
fi

4.训练数据train.txt文件中的图像和标签,label图盘为二值图,如下图所示。

5.deeplab网络训练

将run_pascal.sh中的设置为run模式:
RUN_TRAIN=1 
RUN_TEST=0  
运行程序

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

6.deeplab网络测试
RUN_TRAIN=0 #为1 0说明执行train
RUN_TEST=1  #为0 1说明执行test
sh run_pascal.sh 2>&1|tee test.log
7.mat转png图片 
python create_labels_21.py 注意修改好路径

参考文献:
https://blog.csdn.net/ruotianxia/article/details/78331964
https://github.com/xmojiao/deeplab_v2
https://blog.csdn.net/Xmo_jiao/article/details/77897109?locationNum=11

deeplabv2实现并训练自己的数据相关推荐

  1. YOLO-v5训练自己的数据+TensorRT推理部署(2)

    YOLO-v5训练自己的数据+TensorRT推理部署(2) 代码下载地址:下载地址 YOLO v5转TensorRT模型并调用 0.pt模型转wts模型 python3 gen_wts.py # 注 ...

  2. YOLO-v5训练自己的数据+TensorRT推理部署(1)

    YOLO-v5训练自己的数据+TensorRT推理部署(1) 代码下载地址:下载地址 YOLO v5在医疗领域中消化内镜目标检测的应用 YOLO v5训练自己数据集详细教程

  3. YOLOv3: 训练自己的数据(绝对经典版本1)

    为什么80%的码农都做不了架构师?>>>    windows版本:请参考:https://github.com/AlexeyAB/darknet linux       版本:请参 ...

  4. DL之LSTM之MvP:基于TF利用LSTM基于DIY时间训练csv文件数据预测后100个数据(多值预测)状态

    DL之LSTM之MvP:基于TF利用LSTM基于DIY时间训练csv文件数据预测后100个数据(多值预测)状态 目录 数据集csv文件内容 输出结果 设计思路 训练记录全过程 数据集csv文件内容 输 ...

  5. DL之LSTM之UvP:基于TF利用LSTM基于DIY时间训练1200个数据预测后200个数据状态

    DL之LSTM之UvP:基于TF利用LSTM基于DIY时间训练1200个数据预测后200个数据状态 目录 输出结果 设计思路 训练记录全过程 输出结果 设计思路 训练记录全过程 INFO:tensor ...

  6. Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用))

    Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用)) 目录 数据增强步骤 数据增强实现代码 ...

  7. 5招训练你的数据敏感度,数据高手都在用

    真正的数据分析大神是怎样的?有人说能轻松玩转各种分析工具,有人说能从海量数据中找到关联,有人说能一眼识别出报告中的数据异常,还有人说能够撰写一份经典的数据分析报告. 其实对于一个数据大神,这些都是必备 ...

  8. Yolov3:win10下训练自己的数据(GPU版)(详细步骤)

    前言       最近在做用yolov3进行目标识别,关于前期已经成功检测成功了,大家有兴趣的可以看我之前写的一篇博客:VS2015+opencv3.4.2+yolov3成功检测,这篇博客主要介绍如何 ...

  9. mysql实验训练2 数据查询操作_实验训练2:数据查询操作

    <实验训练2:数据查询操作>由会员分享,可在线阅读,更多相关<实验训练2:数据查询操作(6页珍藏版)>请在人人文库网上搜索. 1.实验训练2:数据查询操作请到电脑端查看实验目的 ...

最新文章

  1. POJ 1006 Biorhythms 中国的法律来解决剩余的正式
  2. 【翻译】关于vertical-align所有你需要知道的
  3. 瞧瞧 Fog Creek 软件公司办公环境
  4. Fireflow 终于发布啦!
  5. 互联网50周年!这有它的一张“出生证明”
  6. 【C语言进阶深度学习记录】七 C语言中的循环语句
  7. 实现Github和Coding仓库等Git服务托管更新
  8. activeMQ入门安装
  9. 零基础带你学习MySQL—字符串相关的函数(十三)
  10. Objectove-c单例模式
  11. 力扣--125验证回文串/680验证回文字符串II
  12. mysql 多个网卡_seriver -- 多个网卡只能认到一个网卡的解决方法
  13. python完全支持面向对象编程_Python 面向对象编程概要
  14. 【JS跨域取XML】之——借助AS的URLLoader
  15. Latex学习笔记 (8) 字体样式之衬线字体与无衬线体字体
  16. 中央网信委印发《“十四五”国家信息化规划》,​网络安全市场进入快速增长期
  17. 打砖块游戏源文件_2020年10月手游海外买量分析: 多款RPG游戏上新,休闲厂商霸占Top 推广榜...
  18. DGIOT 工业物联网开源平台简介
  19. php商城添加加入购物车,php添加购物车,php购物车
  20. MAC10.11 Python3.6 安装Scrapy

热门文章

  1. 简单实现Popup弹出框添加数据
  2. css3中的变形(transform)、过渡(transtion)、动画(animation)
  3. MVVM 下 ContextMenu的命令绑定
  4. 技术博客么?开始每天一更
  5. FAT32和NTFS的区别
  6. 完成css的切图 图片任意,css切图是什么意思
  7. android launcher分析和修改10,Android Launcher分析和修改10——HotSeat深入进阶
  8. java json返回null_java-JSON jsonObject.optString()返回字符串“ null”
  9. 优酷 米兔机器人_ONEBOT积木机器人上手评测,寓教于乐的反履机甲让孩子爱不释手...
  10. 信息学奥赛一本通 1156:求π的值