嘿,我正在尝试向帕斯卡数据集添加一个新类,以使其成为 21 个可检测的类。我已按照以下步骤操作:
- 分割图像。我挑选了鸡并做了 4 个单独的鸡分割。这是一个例子:
将对应的图片放在Voc2012 SegementationClass、SegmentationClassRaw、SegmentationObject、JPEGImages中
添加注释 XML
将新图像添加到“VOC2012\ImageSets\Main”中的所有 txt 文件
在“VOC2012\ImageSets\Main”中新增3个txt文件:chicken_train.txt、chicken_trainval.txt、chicken_val.txt。为包含鸡的文件名添加 1。将 2 个鸡文件添加到 VOC2012\ImageSets\Segmentation\train.txt 和另外 2 个到 trainval + val。
在“data_generator.py”中创建一个新数据集:
_EXTENDED_SEG_INFORMATION = DatasetDescriptor( splits_to_sizes={ 'train': 1466, 'train_aug': 10583, 'trainval': 2915, 'val': 1451, }, num_classes=22, ignore_label=255, )
为“扩展”数据集创建一个新的颜色图:
def create_extended_label_colormap(): return np.asarray([ [0, 0, 0], #background [128, 0, 0], #aeroplane [0, 128, 0], #bike [128, 128, 0], #鸟 [0, 0, 128], #boat [128, 0, 128], #bottle [0, 128, 128], #bus [128, 128, 128], #car [64, 0, 0], #猫 [192, 0, 0], #chair [64, 128, 0], #cow [64, 0, 128], #diningtable [64, 0, 128], #dog [192, 0, 128], #马 [64, 128, 128], #motorbike [192, 128, 128], #person [0, 64, 0], #pottedplant [128, 64, 0], #sheep [0, 192, 0], #沙发 [128, 192, 0], #train [0, 64, 128], #tv [128, 64, 128], #chicken ])
使用命令生成 TFRecord:
py "research\deeplab\datasets\build_voc2012_data.py" --image_folder="D:\DeepLab\models-master\research\deeplab\datasets\pascal_voc_seg\VOCdevkit\VOC2012\JPEGImages" --semantic_segmentation_folder="research\deeplab\datasets \pascal_voc_seg\VOCdevkit\VOC2012\SegmentationClassRaw" --list_folder="research\deeplab\datasets\pascal_voc_seg\VOCdevkit\VOC2012\ImageSets\Segmentation" --image_format="jpg" --output_dir="research\deeplab\datasets\extended\记录”
人为地为新的鸡类设置权重以使其出现。用命令训练:
python "D:\DeepLab\models-master\research\deeplab\train.py" --logtostderr --train_split="trainval" --model_variant="xception_65" --atrous_rates=6 --atrous_rates=12 --atrous_rates= 18 --output_stride=16 --decoder_output_stride=4 --train_crop_size="513,513" --train_batch_size=2 --dataset="extended" --training_number_of_steps=1000 --fine_tune_batch_norm=true --tf_initial_checkpoint="D:\DeepLab\ models-master\research\deeplab\datasets\pascal_voc_seg\init_models\deeplabv3_pascal_train_aug\model.ckpt" --train_logdir="D:\DeepLab\models-master\research\deeplab\datasets\extended\exp\train_on_trainval_set\train" -- dataset_dir="D:\DeepLab\models-master\research\deeplab\datasets\extended\tfrecord" --label_weights=.001 --label_weights=.01 --label_weights=.01 --label_weights=。01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 - -label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights=.01 --label_weights =.01 --label_weights=100
导出模型并对其进行测试给了我这个不是很好的:
图像上的 eval 命令也会产生较差的结果:
eval/miou_1.0_class_1 [0.007157555112] eval/miou_1.0_class_16 [0.00142123573] eval/miou_1.0_class_17 [0.000168795494] eval/miou_1.1.1.1class_1 eval/0.1class/MI.1CLASS/MI.1CLASS/MI.1CLASS/MI.1CCLASS/MI.1CLASS/MI.1CLASS [0] [0]] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0]] miou_1.0_class_5[0] eval/miou_1.0_class_13[0.0135749253] eval/miou_1.0_class_15[0.0179808438] eval/miou_1.0_class_3[0.000226198768] eval/miou_1.0_class_8[0.229160205]
eval/miou_1.0_class_2[8.26003941e-07] eval/miou_1.0_class_7[0.000108588596] eval/miou_1.0_class_4[0] eval/miou_1.0_class_19[0] eval/miou_1.0_class_18[0.0089886658_6] eval/miou_1.0_class_19[0] e-05] eval/miou_1.0_overall[0.0191962905] eval/miou_1.0_class_21[0] eval/miou_1.0_class_10[0.00145707454] eval/miou_1.0_class_9[4.08720407e-05] eval/miou_1.0_062712[0.008] .0_class_11[0.00659790076]
我已经尝试训练 10,000 次迭代,看看是否可以修复它,并且它确实填充了所有其他类,但鸡肉类 (class_21) 仍然保持在 0 miou。我在这里做错了什么?!?
附加说明:如果我坚持使用基本的帕斯卡类,我确实可以正常工作,我可以得到一个非常好的模型,总体上是 0.81 米欧。只有在我尝试介绍新课程时才会出现问题。
我不确定我是否需要做另一个来替换“research\object_detection\data”中的“pascal_label_map”,或者是否不需要。