問題タブ [deeplab]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Deeplab の新しいデータセットが新しいクラスを見つけられない
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」を置き換えるために別の操作を行う必要があるのか、それとも不要なのかはわかりません。
tensorflow - frozen_interference_graph.pb を使用して Keras モデルを作成する方法は?
事前にトレーニングされたモデルを使用し、その最後にセグメンテーション ヘッドを追加したいのですが、問題は「frozen_inference_graph.pb」しかないことです。これらは私がモデルから持っているファイルです:
私はいくつかの方法を試しました:
1. 事前トレーニング済みのモデルを Keras モデルにロードする: 私が持っているファイルでは不可能のようです。モデルの代わりに AutoTrackable オブジェクトが表示されるだけです。
2. 凍結モデルの Tensor オブジェクトにアクセスし、テンソルを使用してモデルを作成する: テンソル にアクセスする方法はわかりましたが、Tensor オブジェクトを使用して Keras モデルを作成できませんでした。
ここでテンソルを取得できますが、モデルでテンソルを使用することはできません:
この凍結されたグラフを Keras モデルに変換する方法はありますか? または、モデルをトレーニングできる別のアプローチがあれば、喜んでお知らせします。
PS 事前トレーニング済みのモデルは「ssd_mobilenet_v3_small_coco_2020_01_14」で、こちらにあります。
machine-learning - クラスを予測しない Deeplabv3
mobilenetv3_small_seg アーキテクチャで deeplabv3 モデルをトレーニングしようとしています。モデルをトレーニングしましたが、得られた予測はクラス予測のない完全な空白のマスクです。トレーニングのために私が従った手順は次のとおりです。
Google Colab にクローンされた公式リポジトリ。
クラスが 1 つだけのデータセットを用意しました (顔の唇のセグメント化)。Pascal VOC12 データセット形式に従いました。以下に示すように、RGB マスク (0, 255, 0) を作成し、周囲に白い境界線 (255, 255, 255) と黒い背景 (0, 0, 0) を配置しました。
次に、以下に示すように、このスクリプトを使用して、RGB マスクを background:0、forground:1、boundary:255 の単一チャネル png (8 ビット) に変換しました。
次に、このスクリプトを変更して、データセットを tfrecord に正常に変換しました。
次に、data_generator.py にデータセットの説明を ignore_label=255 および num_classes=2 で追加しました。
最後に、次のコマンドでトレーニングを開始しました。
トレーニングが完了したら、いくつかの異なる画像でモデルをテストしました。モデルの出力は、すべての値が 0 に等しい (256, 256) 配列です。単一の値ではなく、1 などを取得します。
私は機械学習が初めてです。それを知りたい
- 私のプロセスの何が問題になっていますか?多くのチュートリアルを見ましたが、答えが見つかりませんでした。
- データセットに何か問題がありますか? データセットには合計 2000 枚の画像が含まれていました。
- mobilenetv3_small の事前トレーニング済みの重みが見つかりませんでした。誰かが知っている場合は、親切に共有してください。転移学習を行うことができます。
- クラスの数を 2 (背景と前景) に設定します。そうですか?