**
参考:
**
1.使用 deeplabv3+ 训练自己的数据集经验总结
2.window环境下进行deeplab_tensorflow实验之第一阶段
3.window环境下进行deeplab_tensorflow实验之第二阶段
4.deeplab_v3 实现 制作并训练自己的数据集——个人采坑
**
一、前期环境准备
**
1.环境配置
我的环境为win10+tensorflow1.12+cuda9.0+cudnn7.3.1,使用python3.6.2-0,配置环境使用Anaconda4.7.10。
2.下载对应版本的tensorflow模型库,1.12对应库链接https://github.com/tensorflow/models/tree/r1.12.0
3.安装依赖库(详见deeplab介绍:https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/installation.md)
· Numpy
· Pillow 1.0
· tf Slim (which is included in the “tensorflow/models/research/” checkout)
· Jupyter notebook
· Matplotlib
4.Windows系统中添加tf.slim的路径至系统
windows 系统下要在py脚本中动态添加地址,即将 deeplab 文件夹下的 train.py, eval.py, vis.py, export_model.py ,model_test.py这5个脚本的开头加如下语句,且必须加在 import deeplab 语句之前。
import sys
sys.path.append(r'D:\Code\tf-models\research')
sys.path.append(r'D:\Code\tf-models\research\slim') # 以上两处的路径请按照真实的路径添加
5.环境测试
在tensorflow/models/research/下运行model_test.py
python deeplab/model_test.py
如果环境正确,则提示:
Ran 5 tests in 10.758s
6.发生错误怎么办
大多数问题在网上都可找到答案,“错啥搜啥,缺啥装啥”。至此,前期工作结束。
**
二、制作数据集
**
仿照PASCAL VOC 2012数据集格式,制作自己的数据集,使用原料为labelme;正式开始之前,最好将数据集大小整理成统一尺寸,做好命名!!!
1.下载PASCAL VOC 2012数据集并复制,清空所有文件,这里的目的是获得该数据集的结构。实际上,如果仅仅用于分割,那么并不需要完整结构,仅做成如下格式即可。
VOCdevkit
└── VOC2012
├── ImageSets
│ └── Segmentation
├── JPEGImages
├── SegmentationClass
├── SegmentationClassRaw
ImageSets/Segmentation:存放图像列表,格式为txt,内容为图像名称编号
JPEGImages: 存放图像原图
SegmentationClass: 存放标好的mask图,即labels
SegmentationClassRaw:去除colormap后的mask图。
2.使用labelme标注数据
(1)激活环境,输入 labelme,即可打开标注器进行标注,设置好原图文件夹,标注文件夹和标注类型。标注后应生成.json文件。
(2)转换.json文件,在环境下使用如下语句,配置好文件路径,即可在输出文件夹中生成解析后的子文件夹(命名为原图对应的名称),每个包含5个文件
python json_to_dataset.py D:/dataset/input -o D:/dataset/output
5个文件分别为:img.png,info.yaml,label.png,label_names.txt,label_viz.png,代表含义为:
原图,标注信息,分割图即带colormap的mask,分割名称,分割视图可视化。至此实现标注。
3.将子文件夹中的label.png文件统一转移至SegmentationClass中
为此,找到一段以前写的MATLAB程序,实现label.png文件的重命名和转移。
A:子文件夹的上一层文件夹名称
B:SegmentationClass文件夹的相对路径
clc
clear all
close all
%% 读入需要处理的图片信息
file_path = 'A\'; % 要处理的图片的文件夹
img_path_list = dir(strcat(file_path,'*.jpg')); % 要处理的图片的详细信息
img_num = length(img_path_list); % 要处理的图片的个数
%% 导出图片的路径配置
new_folder = 'B\';
mkdir(new_folder); % 创建文件夹
addpath(new_folder); % 添加文件夹路径
%% 重命名并转移文件夹
for m = 1:img_num
image_name = img_path_list(m).name;
I = imread(strcat(file_path,image_name)); % 读入第m个图片
J = imresize(I,[240 320]);
imwrite(J,[new_folder,image_name]); % 新尺寸保存在文件夹下
end
至此完成数据集制作。
**
三、训练前数据处理
**
1.按照官方文档将数据文件放置为如下图的目录结构(没有某个文件夹就新建一个):
deeplab/datasets/你的数据集名称
├── exp
│ └── train_on_train_set
│ ├── eval
│ │ └── events.out.tfevents....
│ ├── export
│ │ └── frozen_inference_graph.pb
│ ├── train
│ │ ├── checkpoint
│ │ ├── events.out.tfevents....
│ │ ├── graph.pbtxt
│ │ ├── model.ckpt-0.data-00000-of-00001
│ │ ├── model.ckpt-0.index
│ │ ├── model.ckpt-0.meta
│ │ └── .