微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Deeplabv3 重新训练结果对于非方形图像有偏差

如何解决Deeplabv3 重新训练结果对于非方形图像有偏差

我在 Google Colab 中微调预训练模型 deeplabv3_mnv2_pascal_train_aug 时遇到问题。

当我使用 vis.py 进行可视化时,如果图像的高度/宽度较大,结果似乎会移到图像的左侧/上侧,即图像不是方形。

用于微调的数据集是Look Into Person。这样做的步骤是:

  1. 在 deeplab/datasets/data_generator.py 中创建数据集
_LIP_informatION = DatasetDescriptor(
    splits_to_sizes={
        'train': 30462,'train_aug': 10582,'trainval': 40462,'val': 10000,},num_classes=19,ignore_label=255,)

_DATASETS_informatION = {
    'cityscapes': _CITYSCAPES_informatION,'pascal_voc_seg': _PASCAL_VOC_SEG_informatION,'ade20k': _ADE20K_informatION,'cihp': _CIHP_informatION,'lip': _LIP_informatION,}
  1. 转换为 tfrecord
!python models/research/deeplab/datasets/build_voc2012_data.py \
  --image_folder="/content/drive/MyDrive/TFM/lip_trainval_images/TrainVal_images/train_images" \
  --semantic_segmentation_folder="/content/drive/MyDrive/TFM/lip_trainval_segmentations/TrainVal_parsing_annotations/train_segmentations" \
  --list_folder="/content/drive/MyDrive/TFM/lip_trainval_images" \
  --image_format="jpg" \
  --output_dir="train_lip_tfrecord/"
!python models/research/deeplab/datasets/build_voc2012_data.py \
  --image_folder="/content/drive/MyDrive/TFM/lip_trainval_images/TrainVal_images/val_images" \
  --semantic_segmentation_folder="/content/drive/MyDrive/TFM/lip_trainval_segmentations/TrainVal_parsing_annotations/val_segmentations" \
  --list_folder="/content/drive/MyDrive/TFM/lip_trainval_images" \
  --image_format="jpg" \
  --output_dir="val_lip_tfrecord/"
  1. 培训
!python deeplab/train.py --logtostderr \
  --training_number_of_steps=40000 \
  --train_split="train" \
  --model_variant="mobilenet_v2" \
  --atrous_rates=6 \
  --atrous_rates=12 \
   --atrous_rates=18 \
   --output_stride=16 \
   --decoder_output_stride=4 \
   --train_batch_size=1 \
   --dataset="lip" \
   --train_logdir="/content/drive/MyDrive/TFM/checkpoint_lip_mobilenet" \
   --dataset_dir="/content/drive/MyDrive/TFM/trainval_lip_tfrecord/" \
   --fine_tune_batch_norm=false \
   --initialize_last_layer=false \
   --last_layers_contain_logits_only=false
  1. 可视化
!python deeplab/vis.py --logtostderr \
  --vis_split="val" 
  --model_variant="mobilenet_v2" 
  --atrous_rates=6 \
  --atrous_rates=12 \
   --atrous_rates=18 \
   --output_stride=16 \
   --decoder_output_stride=4 \
   --dataset="lip" \
   --checkpoint_dir="/content/drive/MyDrive/TFM/checkpoint_lip_mobilenet" \
   --vis_logdir="/content/drive/My Drive/TFM/eval_results_lip" \
   --dataset_dir="/content/drive/My Drive/TFM/trainval_lip_tfrecord" \
   --max_number_of_iterations=1 \
   --eval_interval_secs=0

通过以下步骤,我面临的问题的一个例子是:

Original image

Deeplabv3 result

我不知道我是否遗漏了一些重要的东西,或者它是否需要更多的培训。然而,训练似乎并不是一个解决方案,因为此时损失大约从 1.5 上升到 0.5。

提前致谢。

解决方法

一段时间后,我确实找到了解决此问题的方法。需要知道的重要一点是,默认情况下,train_crop_sizevis_crop_size 是 513x513。

问题是由于 vis_crop_size 小于输入图像,因此 vis_crop_size 需要大于最大图像的最大尺寸

如果您想使用 export_model.py,您必须使用与 vis.py 相同的逻辑,因此默认情况下您的掩码不会裁剪为 513。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?