1,下载CamVid数据集:http://mi.eng.cam.ac.uk/research/projects/VideoRec/CamVid/
2,数据集理解
-
test 测试集
-
testannot 测试集标签
-
train 训练集
-
trainannot 训练集标签
-
val 验证集
-
valannot 验证集标签
对于CamVid, 其中训练集、测试集、验证集中的图片数目分别为train 367, test 233,val 101。
制作指引文件
在制作TFRecord之前,需要有文件指引将数据集分类成训练集、测试集、验证集,故需要创建指引文件。
将所有图片和mask分在两个文件夹下,设置如下:/home/bai/dataset/CamVid/image: 存放所有的输入图片,共有701张,这其中包括训练集、测试集、 验证集的图片。
/home/bai/dataset/CamVid/mask:存放所有的标签图片,共有701张,和image文件夹下的图片是一 一对应的。
对于CamVid数据集,创建了一个目录/home/bai/dataset/CamVid/index,该目录下包含三个.txt文 件:
train.txt:所有训练集的文件名称
trainval.txt:所有验证集的文件名称
val.txt:所有测试集的文件名称
将数据转化为TFRecord
使用的是build_voc2012_data.py ,在目录/home/bai/models/research/deeplab/datasets下执行
python build_voc2012_data.py \
--image_folder="/home/dataset/CamVid/image" \
--semantic_segmentation_folder="/home/dataset/CamVid/mask" \
--list_folder="/home/dataset/CamVid/index" \
--image_format="png" \
--output_dir="/home/dataset/CamVid/tfrecord"
- image_folder :数据集中原输入数据的文件目录地址
- semantic_segmentation_folder:数据集中标签的文件目录地址
- list_folder : 将数据集分类成训练集、验证集等的指引目录文件目录
- image_format : 输入图片数据的格式,CamVid的是png格式
- output_dir:制作的TFRecord存放的目录地址
修改训练脚本
1, data_generator.py 添加camvid数据集描述:
_CAMVID_INFORMATION = DatasetDescriptor(
splits_to_sizes={
'train': 367, # num of samples in images/training
'val': 101, # num of samples in images/validation
},
num_classes=12,
ignore_label=255,
因为CamVid共有11个classes,所以加上 ignore_label 共12个物体类别。
添加对应数据集的名称:
_DATASETS_INFORMATION = {
'cityscapes': _CITYSCAPES_INFORMATION,
'pascal_voc_seg': _PASCAL_VOC_SEG_INFORMATION,
'ade20k': _ADE20K_INFORMATION,
'camvid':_CAMVID_INFORMATION, #camvid示例
}
2,train_utils.py
对应的utils/train_utils.py中,将159行关于 exclude_list 的设置修改,作用是在使用预训练权重时候,不加载该 logit 层:
exclude_list = ['global_step','logits']
if not initialize_last_layer:
exclude_list.extend(last_layers)
3,train.py
如果想在DeepLab的基础上fine-tune其他数据集, 可在deeplab/train.py中修改输入参数。
其中有一些选项:
-
使用预训练的所有权重,设置initialize_last_layer=True
-
只使用网络的backbone,设置initialize_last_layer=False和
last_layers_contain_logits_only=False -
使用所有的预训练权重,除了logits以外。因为如果是自己的数据集,对应的classes不同(这个我们前面已经设置不加载logits), 可设置initialize_last_layer=False和 last_layers_contain_logits_only=True
使用的设置是:
initialize_last_layer=False
last_layers_contain_logits_only=True
下载预训练模型
在model_zoo上下载预训练模型:
下载地址:https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md
下载的预训练权重为xception_cityscapes_trainfine 文件大小为439M
下载到deeplab目录下,然后解压:
tar -zxvf deeplabv3_cityscapes_train_2018_02_06.tar.gz
需要注意对应的解压文件目录为:/home/models/research/deeplab/deeplabv3_cityscapes_train
注意:在训练CamVid时,没有考虑类别之间的的平衡问题,所以没有做imblance的修正。如果你是二 分类或者存在严重的类别不平衡情况,可以参考后面roadscene分割项目案例中的类别不平衡修正方 法。
注意如下几个参数:
-
tf_initial_checkpoint:预训练的权重,因为CamVid和自己的RoadScene数据集都和CityScapes类似,所以使用的是CityScapes的预训练权重
-
train_logdir: 训练产生的文件存放位置
-
dataset_dir: 数据集的TFRecord文件
-
dataset:设置为在data_generator.py文件设置的数据集名称
在CamVid上的训练指令如下:
在目录 ~/models/research/deeplab下执行
python train.py \
--logtostderr \
--training_number_of_steps=300 \
--train_split="train" \
--model_variant="xception_65" \
--atrous_rates=6 \
--atrous_rates=12 \
--atrous_rates=18 \
--output_stride=16 \
--decoder_output_stride=4 \
--train_crop_size=321,321 \
--train_batch_size=4 \
--dataset="camvid" \
-
tf_initial_checkpoint='/home/bai/models/research/deeplab/deeplabv3_cityscapes_tr ain/model.ckpt' \
--train_logdir='/home/bai/models/research/deeplab/exp/camvid_train/train' \
--dataset_dir='/home/bai/dataset/CamVid/tfrecord'