セマンティックセグメンテーションの損失関数


9

技術用語の誤用を謝罪します。私は、畳み込みニューラルネットワーク(CNN)によるセマンティックセグメンテーションのプロジェクトに取り組んでいます。タイプEncoder-Decoderのアーキテクチャを実装しようとしているため、出力は入力と同じサイズです。

ラベルはどのようにデザインしますか?どの損失関数を適用する必要がありますか?特にクラスの不均衡が激しい状況では(ただし、クラス間の比率はイメージごとに異なります)。

問題は2つのクラス(対象オブジェクトと背景)を扱います。Kerasをtensorflowバックエンドで使用しています。

これまでのところ、予想される出力をピクセル単位のラベリングを適用して入力画像と同じ次元になるように設計しています。モデルの最終層には、ソフトマックスアクティベーション(2つのクラスの場合)またはシグモイドアクティベーション(ピクセルがオブジェクトクラスに属する確率を表すため)があります。次のタイプのタスクに適した目的関数の設計に問題があります。

function(y_pred,y_true)

Kerasとの合意による。

関係するテンソルの寸法(モデルの入力/出力)を具体的に示してください。どんな考えや提案も大歓迎です。ありがとうございました !


このarxiv.org/pdf/1511.00561.pdfを読んでください「ネットワークをトレーニングするための目的関数として、クロスエントロピー損失を使用しています。」
Miss Palmer

回答:


5

クロスエントロピーは間違いなく進むべき道です。私はケラスを知りませんが、TFはこれを持っています:https : //www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits

これを直接実装した論文を以下に示します。Shelhameret al。によるセマンティックセグメンテーションのための完全たたみ込みネットワーク

U-Netの論文は、空間分解能の損失を回避するために、スキップ接続を使用して、また、アイデアの非常に成功した実装です。あなたはこれの多くの実装をネットで見つけることができます。

私の個人的な経験から、最初は単純なエンコーダー/デコーダーネットワークから始めたいと思うかもしれませんが、ストライド(またはstrides = 1)を使用しないでください。カーネルサイズを小さくしてください。特定のアプリケーションはわかりませんが、2〜3の隠れ層ネットワークでも非常に良い結果が得られます。各レイヤーで32-64チャネルを使用します。単純な2つの非表示レイヤー、それぞれ32チャネル、3x3カーネル、ストライド= 1で開始し、パラメーターを独立した方法で実験してその効果を確認します。解像度の損失を回避するために、スターターの次元は常に入力次元と同じにしてください。その後、ストライドとアップサンプリングをオンにして、U-Netのようなアイデアを実装できます。U-Netは、医療画像のセグメンテーションに非常に適しています。

クラスの不均衡については、https: //swarbrickjones.wordpress.com/2017/03/28/cross-entropy-and-training-test-class-imbalance/を参照してください。 ここでの考え方は、と異なるクラスに重みを付けることですパラメーター。αβ


私はこの分野の専門家ではありませんが、クラスはこの設定で排他的であってはなりませんか?はいの場合、ソフトマックス損失はより良いオプションではないでしょうか?tensorflow.org/api_docs/python/tf/nn/...
ハラルド・トムソン

1
@HaraldThomson、セグメンテーションはバイナリ問題です。多くの人がバイナリ問題にsoftmaxを使用していますが、それは完全に不要であり、やり過ぎです。2つの出力ノードを使用する代わりに、P(y = 1)を表す1つの出力ノードを使用して、クロスエントロピーを使用します。
Ricardo Cruz

2

重み付きダイス損失と重み付きクロスエントロピー損失を使用します。サイコロ損失はセグメンテーションに非常に適しています。あなたが始めることができる重みは、クラスの頻度を逆にしたものでなければなりません。つまり、たとえば50-100のサンプルを取り、各クラスに属するピクセルの平均数を見つけ、そのクラスの重みを1 /平均にします。自分でサイコロを実装する必要があるかもしれませんが、それは簡単です。さらに、逆ダイス損失と焦点損失を調べることができます


-1

最初はもっと具体的に、それからもっと一般的にしましょう。誤解してしまって申し訳ございません。

エンコードとデコードについて言及し、出力サイズと同じ入力サイズについて言及したので、オートエンコーダニューラルネットワークの必要性について話していると思います。その場合、損失関数は入力ベクトルの再現に基づいていますが、中間の隠れ層でデータをより短いベクトルに圧縮します。選択は、最小二乗誤差(回帰の場合)または対数損失または誤分類率(分類の場合)を達成することです。ただし、CNNはオートエンコーダーで使用されたものではありませんが、画像内のエッジやオブジェクトの検出など、並進不変性が重要な場合には、そうすることは可能であり便利であると思います。

より一般的には、CNNについて言及して以来、非常に複雑な機械学習モデルを構築しているようです。CNNやその他の深層学習モデルは、存在する最も複雑な機械学習モデルの一部です。

ただし、ディメンション、ラベル、損失関数の選択は、初等的な機械学習に似ています。ディープラーニングに頭を悩ませているかもしれません。最初に普通の機械学習のクラスを受講しましたか?


これも必要ですか?たとえば、Pixonメソッドを参照してください。
カール

これは有効なアプローチです。arxiv.org
Miss Palmer

「CNNおよびその他のディープラーニングモデルは、存在する最も複雑な機械学習モデルの一部です。」私は反対する傾向があります。モデル自体は複雑になる可能性がありますが、理論上の理解がほとんどなく、実際に使用するのは非常に簡単です。それがDLについての全体的な宣伝の理由であり、理論はほとんどなく、モデルを簡単に記述でき、精度が非常に高い...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.