基于Deeplab的CamVid语义分割

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'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值