6

按照模型中包含的说明--training_crop_size将其设置为远小于训练图像大小的值。例如:

python deeplab/train.py \
    --logtostderr \
    --training_number_of_steps=90000 \
    --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="769,769" \
    --train_batch_size=1 \
    --dataset="cityscapes" \
    --tf_initial_checkpoint=${PATH_TO_INITIAL_CHECKPOINT} \
    --train_logdir=${PATH_TO_TRAIN_DIR} \
    --dataset_dir=${PATH_TO_DATASET}

但是这个选项实际上做了什么?是否需要随机裁剪每个训练图像?如果是这样,输入尺寸会不会更小,例如,769x769(WxH)?根据说明,评估裁剪大小设置为 2049x1025。当没有调整图像大小的建议时,输入尺寸为 769x769 的网络如何接受 2049x1025 输入?会出现形状不匹配的问题。

指令是否冲突?

4

2 回答 2

5

是的,在您的情况下,图像似乎在训练过程中被裁剪。这可以在系统的计算限制内实现更大的批量大小。较大的批量会导致基于多个实例的优化步骤,而不是每个优化(=训练)步骤仅考虑一个(或很少)实例。这通常会带来更好的结果。通常使用随机裁剪来确保网络在图像的所有部分上都经过训练。

“全卷积”CNN 的训练或部署不需要固定的输入大小。通过在输入边缘使用填充,维度减少通常由 2^n 的因子表示(由跨步或池化引起)。示例:在解码器再次对其进行上采样之前,您的编码器将每个空间维度减少了 2^4 倍。--> 所以你只需要确保你的输入维度是 2^4 的倍数(确切的输入大小无关紧要,它只是在训练期间定义网络隐藏层的空间维度)。在 deeplab 的情况下,框架会自动将给定的输入尺寸调整为所需的 2^x 倍数,以使其更易于使用。

评估实例不应该被随机裁剪,因为只有确定性评估过程才能保证有意义的评估结果。在评估期间,没有优化,批量大小为 1 即可。

于 2019-05-23T14:13:29.940 回答
0

It seems that they use full image during evaluation time. It is typically done by averaging a larger tensor in the last convolutional layer. They also mention that due to full image evaluation crop size has to be set to maximum size of the image available in the dataset.

source, see Q8

于 2019-05-13T06:15:13.330 回答