我的自定义 mobilenet 训练模型未显示任何结果。我究竟做错了啥?

Posted

技术标签:

【中文标题】我的自定义 mobilenet 训练模型未显示任何结果。我究竟做错了啥?【英文标题】:My custom mobilenet trained model is not showing any results. What am I doing wrong?我的自定义 mobilenet 训练模型未显示任何结果。我究竟做错了什么? 【发布时间】:2019-12-29 17:17:37 【问题描述】:

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

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

我将展示我遵循的过程:

    下载 100 张 JPEG 图片(我知道不是很大,但我想我可以试试这个数量)。仅适用于 1 类 -> 衬衫 为每个图像创建分割类 PNG。 创建文件图像集定义为:train(85 个文件名)、trainval(100 个文件名)和 val(15 个文件名)。 所以我的“pascal dataset”目录有:ImageSets、JPEGImages 和 SegmentationClassPNG 文件夹。

    像这样将“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 文件

    我像这样编辑了“models-master/research/deeplab/data_generator.py”:'train': 85, 'trainval': 100, 'val': 15, num_classes=2。

    现在是时候开始训练了(我在“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 个)文件。 我用(我在“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)。 现在运行:py main.py(证明图像和frozen_inference_graph.pb 已经导入) 我的自定义模型没有结果。最后一个脚本适用于预先训练的 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

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

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

【问题讨论】:

嘿!你现在有同样的结果吗?我有同样的问题,我试图用不同的掩码训练我的模型(颜色 rgb (1,0,0) -> indexed color, rgb(1, 1, 1) -> indexed color, rgb(128, 0, 0) -> 索引颜色,rgb -> bw),但仍然没有结果(2 周后):( 嗨,这是 90000 training_number_of_steps 的最后一个结果。 ->image result 【参考方案1】:

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

【讨论】:

感谢您的回答。你是对的,我将我的数据集增加了 ~860 并且得到了非常好的结果。我开始为衬衫取样。希望这台机器能有好的结果,我会尽快分享。

以上是关于我的自定义 mobilenet 训练模型未显示任何结果。我究竟做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

MobileNet V1官方预训练模型的使用

用于自定义图像大小的 MobileNets

MobileNet SSD V2模型的压缩与tflite格式的转换(补充版)

Python使用mobilenet的预训练模型进行预测

Angular 2 / Material - 应用到父 FormGroup 的自定义验证器未显示 md 错误

SSD mobilenet 模型无法检测到更远距离的物体