問題タブ [semantic-segmentation]

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.

0 投票する
2 に答える
1871 参照

tensorflow - セマンティック イメージ セグメンテーション NN (DeepLabV3+) でメモリが多すぎる問題

最初に自分の仕事について説明します。2 つの異なるロープから 3000 近くの画像があります。それらには、ロープ 1、ロープ 2、および背景が含まれています。私のラベル/マスクは画像です。たとえば、ピクセル値 0 は背景を表し、1 は最初のロープを表し、2 は 2 番目のロープを表します。下の図 1 と 2 で、入力画像とグラウンド トゥルース/ラベルの両方を確認できます。私のグラウンド トゥルース/ラベルには 0、1、2 の 3 つの値しかないことに注意してください。私の入力画像は灰色ですが、DeepLab は RGB 画像でトレーニングされているため、DeepLab ではそれを RGB 画像に変換しました。しかし、変換された画像にはまだ色が含まれていません。

これは私のネットワークの入力画像です これがグラウンド トゥルースです 生のカラー画像

このタスクの考え方は、ニューラル ネットワークがロープから構造を学習する必要があるため、結び目があってもロープに正しくラベルを付けることができるということです。私のロープは異なる色を持っているので、色情報は重要ではありません。そのため、KMeans を使用してグラウンド トゥルース/ラベルを作成するのは簡単です。

このタスクでは、バックエンドとして TensorFlow を使用する Keras の DeepLab V3+ と呼ばれるセマンティック セグメンテーション ネットワークを選択します。3000 枚近くの画像を使用して NN をトレーニングしたいと考えています。すべての画像のサイズは 100MB 未満で、300x200 ピクセルです。私の写真には色情報が含まれておらず、写真のサイズが非常に小さい (300x200) ため、DeepLab は私のタスクに最適な選択ではないかもしれませんが、これまでのところ、私のタスクに適したセマンティック セグメンテーション NN は見つかりませんでした。

Keras Web サイトから、flow_from_directory を使用してデータをロードする方法と、fit_generator メソッドを使用する方法を知っています。私のコードが論理的に正しいかどうかわかりません...

リンクは次のとおりです。

https://keras.io/preprocessing/image/

https://keras.io/models/model/

https://github.com/bonlime/keras-deeplab-v3-plus

私の最初の質問は次のとおりです。

私の実装では、グラフィック カードがほぼすべてのメモリ (11GB) を使用していました。どうしてか分かりません。DeepLab の重みがそれほど大きい可能性はありますか? 私の Batchsize はデフォルトで 32 で、300 近くある画像はすべて 100MB 未満です。私はすでに config.gpu_options.allow_growth = True コードを使用しています。以下のコードを参照してください。

一般的な質問:

誰かが私のタスクに適したセマンティック セグメンテーション NN を知っていますか? カラー画像で訓練されたNNは必要ありません。しかし、バイナリ グラウンド トゥルース画像でトレーニングされた NN も必要ありません... DeepLab で生のカラー画像 (画像 3) をテストしましたが、取得した結果のラベルは良くありませんでした...

これまでの私のコードは次のとおりです。

DeepLabをテストするためのコードは次のとおりです(Githubから):

0 投票する
1 に答える
921 参照

python - U-Net を単一層として使用するセマンティック セグメンテーションの入力ラベル

たとえば、U-Net でセマンティック セグメンテーションを行う場合、ラベル データをワンホット エンコードされたテンソルとして提供するのが一般的な方法のようです。別の SO の質問で、ユーザーは、これは通常カテゴリ値を表すラベルが原因であると指摘しました。それらを1つのレイヤー内のクラスラベルとして(グレースケール強度値として)ネットワークに供給すると、問題が発生します。

ただし、別のブログ投稿で、著者はラベルが

「[...] ピクセル強度がクラス ID [...] を表すグレースケール画像として [取得] されることがあります。 ...] 1 つのホット ベクター表現は、[グレースケール エンコーディング フォーマット] より多くのメモリを [使用] します。"

私のハードウェアは非常に限られているため、ラベルを n 層 (n はセグメント化するクラスの数) ではなく 1 層のグレースケール テンソルとしてエンコードすると、メモリ使用量が少なくなることを期待しています。ただし、ブログの著者は次のようにも述べています。

「使用する深層学習フレームワークが [グレースケール形式] のように、ラベル データをクラス ID として受け入れたとしても、そのデータは舞台裏でワンホット エンコーディングに変換されます。」

これは、結局のところ、メモリの節約にはならないということですか?

価値がある場合、データセットリーダーでこれを実装するにはどうすればよいですか? また、グレースケールのラベル付けが実際に実践されている実装にも遭遇していません。したがって、セマンティック セグメンテーションにグレースケール ラベルを使用している実装へのリンクにも感謝します!

私は PyTorch を使用しており、私のコードはこの実装に基づいていますが、セグメント化するクラスが 3 つあるという違いがあります。

提案/リンクは大歓迎です!

0 投票する
1 に答える
1670 参照

rgb - セマンティックセグメンテーションのラベル付き画像はどうあるべきですか?

以下の説明からわかるように、セマンティック セグメンテーション用の画像には、入力とマスクの 2 種類があります。マスク イメージは、整数 (ROAD の場合は 0、TREE の場合は 1、ROAD の場合は (100,100,100)、TREE の場合は (0,255,0)) のピクセル値に「ラベル」を含むイメージです。

セマンティック セグメンテーションは、画像の各ピクセルをクラス ラベル(花、人、道路、空、海、車など) に関連付けるプロセスを表します。 https://se.mathworks.com/help/vision/ug/semantic-segmentation-basics.html

私の調査によると、セマンティック セグメンテーション用のラベル付き画像には多くの種類があります。さまざまな拡張子 (.png .jpg .gif .bmp...) に加えて、RGB ラベル (3 チャンネル) の画像とGRAY (1 チャンネル) の画像があります。以下に、この状況をよりよく説明するための 2 つの例を示します。

  1. 拡張子「.png」でラベル付けされた RGB

    https://github.com/divamgupta/image-segmentation-keras#user-content-preparing-the-data-for-training

  2. 拡張子「.gif」でラベル付けされたグレースケール

    https://www.kaggle.com/kmader/vgg16-u-net-on-carvana/#data

画像が GRAY スケールとしてラベル付けされている場合、基本的に、この GRAY チャンネルの各値を 3 つの RGB チャンネルにコピーして RGB にします。逆に、RGB チャネルを平均化することで、ラベル付きの画像をグレースケールにすることができます。違いはなんですか?どのタスク (バイナリ セグメンテーションまたは sth else) に適しているのはどれですか?

私の場合、4 つのクラスがあり、マルチクラス セマンティック セグメンテーションを実行しようとしています。私はすでに DataTurks で約 600 枚の画像にラベルを付けました。つまり、オブジェクトのポリゴンがあれば、自分でラベル付きの画像を作成する必要があります。今のところ、入力画像とマスク画像の拡張子はそれぞれ「.jpg」と「.png」です。拡張子と一緒に画像にどのようにラベルを付ける必要がありますか?