異なる次元の入力画像を含む畳み込みニューラルネットワーク-画像のセグメンテーション


12

セグメンテーションタスクの入力として異なる次元の画像を使用するという問題に直面しています。画像のアスペクト比は同じではないことに注意してください。

ここでも提案されているように、一般的にディープラーニングで見つけた1つの一般的なアプローチは、画像をトリミングすることです。しかし、私の場合、セグメンテーションでは出力を入力と同じ次元にする必要があるため、画像をトリミングしてその中心または類似のものを維持することはできません。

このペーパーでは、セグメンテーションタスクで、同じ画像をネットワークに複数回フィードできますが、スケールは異なり、結果を集約できることを示しています。このアプローチを正しく理解した場合、すべての入力画像のアスペクト比が同じである場合にのみ機能します。私が間違っていたら訂正してください。

別の代替案は、各画像のサイズを固定サイズに変更することです。これもこの質問への回答で提案されたと思います。ただし、画像のサイズ変更方法は指定されていません。

情報の損失を避けるために、データセットの最大の幅と高さを取り、すべての画像をその固定サイズにサイズ変更することを検討しました。ただし、画像のエッジがはっきりしない場合があるため、画像が歪んでいる場合、ネットワークに問題が発生する可能性があると思います。ネットワークに送る前に画像のサイズを変更する最良の方法は何ですか?

異なる次元の画像を使用する問題を解決するために、私が知らない他のオプションはありますか?

また、計算の複雑さだけでなく、ネットワークによってパフォーマンスが低下する可能性を考慮に入れて、これらのアプローチのどれが最善であると思いますか?

私の質問への回答に、もしあればソースへのリンクが含まれていれば幸いです。ありがとうございました。

回答:


4

もう少し詳しくお答えします。

直面する可能性のある2つの問題があります。

1)ニューラルネット(この場合は畳み込みニューラルネット)は、異なる解像度の画像を物理的に受け入れることができません。これは通常、完全に接続されたレイヤーがある場合に当てはまりますが、ネットワークが完全にたたみ込みである場合は、あらゆる次元の画像を受け入れることができます。完全たたみ込みは、完全に接続されたレイヤーが含まれていないことを意味しますが、画像のサイズに対して不変であるたたみ込み、最大プーリング、およびバッチ正規化レイヤーのみが含まれます。まさにこのアプローチは、この画期的な論文「セマンティックセグメンテーションのための完全畳み込みネットワーク」で提案されました。彼らのアーキテクチャとトレーニング方法は、今では少し古いかもしれないことを覚えておいてください。同様のアプローチが広く使用されていましたU-Net:生物医学画像セグメンテーションのためのたたみ込みネットワーク、およびオブジェクト検出、姿勢推定、セグメンテーションのための他の多くのアーキテクチャ。

2)畳み込みニューラルネットはスケール不変ではありません。たとえば、解像度が固定された画像でピクセルが同じサイズの猫を訓練する場合、小さいサイズまたは大きいサイズの猫の画像でネットが失敗します。この問題を克服するために、私は2つの方法を知っています(文献のほうが多いかもしれません)。1)モデルをスケールの変化に対してより堅牢にするために、完全たたみ込みネットでの異なるサイズの画像のマルチスケールトレーニング。2)マルチスケールのアーキテクチャを持っている。:開始する場所は、これら二つの注目すべき論文を見ている物体を検出するための機能ピラミッドネットワークラベル表示サイズと地域のための高解像度表現


2

大きなデータセットがあり、ピクセル単位のラベルが付けられていると仮定すると、問題を解決する1つの手っ取り早い方法は、ラベルにダミーの追加出力を追加するように、目的の寸法に従って水平マージンと垂直マージンを挿入して画像を同じ寸法に前処理することですマージンピクセルの場合、損失を計算するときにマージンをマスクできます。


これらの場合、正規化はどのように処理されますか?あなたは私が推測するマージンに含まれていない画像のピクセルのみを正規化しますか?
MattSt 2018

はい、データ生成プロセスのサイズが異なるため、マージンを含めると、データ分布が変更されます。問題は固定出力ベクトルを出力する必要があるため、トレーニングサンプルをバッチにグループ化するためにマージンが挿入されます。
Fadi Bakoura、


0

セグメンテーションを行いたいので、U-Netを使用できます。完全に接続されたユニットはありません。したがって、入力のサイズは関係ありません。


3
ポイントについてもう少し詳しく説明してください。
DuttaA

0

私はあなたがあなたの写真のピクセルのサイズを変更し、次のステップのためにRGBをバイナリまたは整数に変換できると思います


1
こんにちは、AI Stack Exchangeへようこそ。答えを広げていただけませんか?回答をバックアップするためのコンテキストを追加し、参照を追加することを検討してください。
Jaden Travnik

0

最近傍内挿法を使用して、画像のサイズをニューラルネットワークアーキテクチャの入力サイズに変更してみてください(標準の2D U-netアーキテクチャでは128 * 128のように固定してください)。これは、他の補間を使用して画像のサイズを変更すると、グラウンドトゥルースラベルが改ざんされる可能性があるためです。これは特にセグメンテーションの問題です。分類に関しては、このような問題に直面することはありません。

以下を試してください:

import cv2 
resized_image = cv2.resize(original_image, (new_width, new_height), 
                           interpolation=cv2.INTER_NEAREST)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.