我能否在TensorFlow中将DeepLab微调到自定义数据集?

14

我想使用自己的数据集定制deeplab进行图像分割,这可以通过重新训练来实现吗?

2个回答

10

Deeplab官方教程页面上,训练命令看起来像这样:

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
 }


6
是的,您应该遵循其中一个教程进行操作。这些教程可以在此处找到,具体取决于您所拥有的数据集格式,您将了解如何将数据集转换为TFrecord格式,并训练模型。
如果您使用的是Pascal voc 2012格式,则此处提供了完整的示例,包括所有的训练、评估、结果可视化和模型导出步骤。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接