我可以将 deeplab 微调到 tensorflow 中的自定义数据集吗?

Posted

技术标签:

【中文标题】我可以将 deeplab 微调到 tensorflow 中的自定义数据集吗?【英文标题】:Can i finetune deeplab to a custom dataset in tensorflow? 【发布时间】:2018-09-29 14:25:17 【问题描述】:

我想使用我自己的数据集自定义 deeplab 以进行图像分割?这可以通过再培训来实现吗?

【问题讨论】:

【参考方案1】:

在Deeplab official tutorial page 上,训练命令如下所示:

python deeplab/train.py \
    --logtostderr \
    --training_number_of_steps=30000 \
    --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=513 \
    --train_crop_size=513 \
    --train_batch_size=1 \
    --dataset="pascal_voc_seg" \
    --tf_initial_checkpoint=$PATH_TO_INITIAL_CHECKPOINT \
    --train_logdir=$PATH_TO_TRAIN_DIR \
    --dataset_dir=$PATH_TO_DATASET

通过更改dataset_dirdataset 以及segmentation_dataset.py 中的几行,您可以在自己的数据集上进行训练。

dataset_dir:路径指向您的 tfrecord 文件夹

在此文件夹中,您应该有由build_voc2012_data.py 或datasets 中的其他脚本创建的train-%05d-of-%05d.tfrecordval-%05d-of-%05d.tfrecord

因此,如果要使用train.tfrecord进行训练,请将train_split设置为train;如果您想对评估数据进行评估,请将train_split 设置为val

dataset: 任何自定义名称,比如“donkey_monkey”

内部segmentation_dataset.py

为您自己的数据集创建DatasetDescriptor

_DONKEY_MONKEY_INFORMATION = DatasetDescriptor(
splits_to_sizes=
    'train': 1464,  # number of training examples in train data
    'trainval': 2913,  # number of examples for train+eval
    'val': 1449,  # number of eval examples 
    ,
    num_classes=21, # note: should be number of class + background
    ignore_label=255,  # label pixels to ignore
)

更改以下代码(第 112 行)

_DATASETS_INFORMATION = 
    'cityscapes': _CITYSCAPES_INFORMATION,
    'pascal_voc_seg': _PASCAL_VOC_SEG_INFORMATION,
    'ade20k': _ADE20K_INFORMATION,
    'donkey_monkey': _DONKEY_MONKEY_INFORMATION, # newly added
 

【讨论】:

【参考方案2】:

是的,您应该遵循these tutorials 之一,具体取决于您拥有的数据集格式、如何将数据集转换为 TFrecord 格式以及训练模型。

如果您使用 Pascal voc 2012 格式,则有一个完整的example here,包括训练、评估、可视化结果和导出模型的所有步骤。

【讨论】:

以上是关于我可以将 deeplab 微调到 tensorflow 中的自定义数据集吗?的主要内容,如果未能解决你的问题,请参考以下文章

从FCN到DeepLab

我可以在 pytorch 中访问 DeepLab 的内层输出吗?

如何将多个用户输入保存到微调器?

Android将微调器缩短到内容宽度

将微调器添加到 ActionBar(不是导航

NTU课程笔记:DeepLab