我的自定义移动网络训练模型未显示任何结果。我究竟做错了什么?

My custom mobilenet trained model is not showing any results. What am I doing wrong?

我开始使用 Tensorflow/Deeplab 学习机器学习。我尝试使用具有 mobilenet_v2 模型变体的语义分割从头开始训练自己的模型以进行衣服识别。但是我没有得到结果。

我正在使用 tensorflow/models for tfrecord export and training. And deeplab/example 代码用于可视化和测试目的(在本地重命名为 main.py),我修改了一些行以便我可以获得本地模型和测试图像。

我将展示我遵循的过程:

  1. 下载 100 张 JPEG 图片(我知道不是那么大,但我想我可以试试这个数量)。仅供 1 class -> 衬衫
  2. 为每个图像创建分割 class PNG。
  3. 为:train(85 个文件名)、trainval(100 个文件名)和 val(15 个文件名)创建文件图像集定义。
    所以我的 "pascal dataset" 目录有:ImageSets、JPEGImages 和 SegmentationClassPNG 文件夹。
  4. 像这样将"pascal dataset"目录导出到tfrecord(我在"models-master/research/deeplab/datasets"文件夹):

    py build_voc2012_data.py --image_folder="pasc_imgs/JPEGImages" --semantic_segmentation_folder="pasc_imgs/SegmentationClassPNG" --list_folder="pasc_imgs/ImageSets" --image_format="jpg" --output_dir="train/tfrecord" 
    
    • 这很好用,它在 "train/tfrecord"
    • 上生成 *.tfrecord 文件
  5. 我这样编辑 "models-master/research/deeplab/data_generator.py":{'train': 85, 'trainval': 100, 'val': 15}, num_classes=2.

  6. 现在是时候开始训练了(我在 "models-master/research/deeplab")。我用了10000步,为什么?我用 30000 证明了,花了大约 30 个小时没有结果,所以我用新的参数减少了它。我想 10000 步可以告诉我一些东西:
    py train.py --logtostderr  --training_number_of_steps=10000 --train_split="train" --model_variant="mobilenet_v2" --output_stride=16 --decoder_output_stride=4 --train_batch_size=1 --dataset="pascal_voc_seg"  --train_logdir="datasets/train/deeplab_model_mn" --dataset_dir="datasets/train/tfrecord"
    
    • 这一步需要将近 8 个小时(有一个小 GPU,所以..不能使用它),它生成检查点,graph.pbtxt,和 model.ckpt-XXX(包括 10000 ) 文件。
  7. 我使用(我在 "models-master/research/deeplab")这个命令行导出了之前的结果:
    py export_model.py --checkpoint_path=datasets/train/deeplab_model_mn/model.ckpt-10000 --export_path=datasets/train/deeplab_inference_mn/frozen_inference_graph.pb --model_variant="mobilenet_v2" --output_stride=16 --num_classes=2
    
    • 它创建冻结图 (frozen_inference_graph.pb)。
  8. 现在运行:py main.py(证明图像和frozen_inference_graph.pb已经导入)
  9. 我的自定义模型没有结果。最后一个脚本适用于预训练 mobilenetv2_coco_voc_trainaug。不适用于我的自定义模型

data_generator.py(编辑行):

_PASCAL_VOC_SEG_INFORMATION = DatasetDescriptor(
    splits_to_sizes={
        'train': 85,
        'trainval': 100,
        'val': 15,
    },
    num_classes=2,# 0:background, 1:shirt
    ignore_label=255,
)

我用于训练的图像示例 (1/100)(我使用了 labelMe 实用程序):
shirt_001.jpg
shirt_001.png


main.py mobilenetv2_coco_voc_trainaug 的结果(衬衫作为一个人,没关系)和我的自定义模型
mobilenetv2_coco_voc_trainaug result
my custom model result

如您所见,我的模型失败了。我一直在测试许多组合但没有成功。 我该怎么办?谢谢!

好的,我遇到了同样的问题,经过多次尝试我已经解决了。 首先,你应该制作正确的面具。如果您使用一个 class,您应该使用 索引颜色图 创建蒙版,并且 所有像素都应为 0 或 1,0 -背景,1 - 蒙版(索引颜色图中有 255 种颜色)。 其次,您需要更大的数据集。我尝试使用包含约 200 张图像的数据集进行训练,但即使在 checkpoint-30k 上也没有得到任何结果(即使数据集正确)。但是当我尝试使用包含 450 张图像的数据集进行训练时,我只得到了大约 9000 个时期的一些结果。在 ~18000 纪元之后没有任何改进,但结果是合理的(尽管远非理想)。然后我用1100张图片训练模型,结果还是一样