Pascal データセットに新しいクラスを追加して、21 個の検出可能なクラスにしようとしています。次の手順に従いました。
- 画像のセグメント化。私はニワトリを選び、4 つの別々のニワトリのセグメンテーションを作成しました。次に例を示します。
対応する画像を Voc2012 SegementationClass、SegmentationClassRaw、SegmentationObject、および JPEGImages に配置します
注釈 XML を追加
「VOC2012\ImageSets\Main」のすべてのtxtファイルに新しい画像を追加します
"VOC2012\ImageSets\Main" に、chicken_train.txt、chicken_trainval.txt、chicken_val.txt の 3 つの新しい txt ファイルを追加します。ニワトリが含まれるファイル名に 1 を追加します。VOC2012\ImageSets\Segmentation\train.txt に 2 つのニワトリ ファイルを追加し、trainval + val に他の 2 つのファイルを追加します。
「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], #ボート [128, 0, 128], #ボトル [0, 128, 128], #バス [128, 128, 128], #車 [64, 0, 0], #猫 [192, 0, 0], #椅子 [64, 128, 0], #牛 [64, 0, 128], #食卓 [64, 0, 128], #犬 [192, 0, 128], #馬 [64, 128, 128], #オートバイ [192, 128, 128], #人 [0, 64, 0], #鉢植え [128, 64, 0], #羊 [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\ tfrecord」
人為的に、新しいチキン クラスに重みを設定して、それを表示させます。次のコマンドでトレーニングします。
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.00715755112] eval/miou_1.0_class_16 [0.00142123573] eval/miou_1.0_class_17 [0.000168795494] ever/miou_1.0_class_12 [0] pise fid/miou_1.0/miou_1. 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.00898866542] eval/23ou_class_7[0.000108588596] 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_class_20[0.2788] .0_class_11[0.00659790076]
10,000回の反復をトレーニングして、それが修正されるかどうかを確認してみましたが、他のすべてのクラスにデータが入力されますが、チキンクラス (class_21) はまだ 0 miou のままです。ここで何が間違っていますか?!?
追加のメモ: 基本的なパスカル クラスに固執すれば、すべてが正しく機能します。問題は、新しいクラスを導入しようとしたときにのみ表示されます。
「research\object_detection\data」の「pascal_label_map」を置き換えるために別の操作を行う必要があるのか、それとも不要なのかはわかりません。