5行のコードで画像セグメンテーションを素早く実装し、コードを1行ずつ詳細に説明し、画像の処理方法を手取り足取り教えてくれます。

5行のコードで画像セグメンテーションを素早く実装し、コードを1行ずつ詳細に説明し、画像の処理方法を手取り足取り教えてくれます。

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載しています。転載の際は出典元にご連絡ください。

コンピュータビジョンの基礎としての画像セグメンテーションは、画像理解の重要な部分であり、画像処理における難しさの 1 つです。

では、画像をエレガントかつ適切に分割するにはどうすればよいでしょうか?

わずか 5 行のコードで数分で実装できるライブラリ、 PixelLibをご覧ください。

もちろん、このような有用なプロジェクトにはオープンソースが必須です。

画像セグメンテーションを使用する理由は何ですか?

コンピューター ビジョンの研究者は、画像セグメンテーションの問題に頻繁に遭遇しますが、それでも、初心者の便宜のために、その「詳細な説明」を行う必要があります。

各画像はピクセル値のセットで構成されていることは誰もが知っています。簡単に言えば、画像セグメンテーションはピクセルレベルで画像を分類するタスクです。

画像セグメンテーションで使用される「独自のトリック」のいくつかにより、いくつかの重要なコンピューター ビジョン タスクを処理できるようになります。主に2つのカテゴリーに分かれています:

  • セマンティックセグメンテーション: 画像内の各ピクセルにカテゴリラベルを割り当て、異なる色で表します。
  • インスタンスセグメンテーション: 各ピクセルのラベル付けは必要なく、対象オブジェクトのエッジ輪郭を見つけるだけです。

重要なシーンで頻繁に登場します。

  • 自律走行車の視覚システムは、道路の状況を効果的に理解できます。
  • 医療画像のセグメンテーションは、医師が診断テストを行うのに役立ちます。
  • 衛星画像解析等

したがって、画像セグメンテーション技術の応用は依然として非常に重要です。

次に、早速本題に入り、この魔法のような使いやすいライブラリ、PixelLib について学習してみましょう。

PixelLibのクイックインストール

PixelLib は、画像のセグメンテーションを非常に簡単にするライブラリです。セマンティック セグメンテーションとインスタンス セグメンテーションは、わずか 5 行のコードで実現できます。

いつものように、まずはインストール環境の紹介をさせていただきます。

TensorFlow、Pillow、OpenCV-Python、scikit-image、PixelLib の最新バージョンをインストールします。

  1. pip3 テンソルフローをインストール
  2. pip3 インストール枕
  3. pip3 opencv-python をインストール
  4. pip3 scikit-image をインストールする
  5. pip3 ピクセルライブラリをインストール

PixelLibはセマンティックセグメンテーションを実装します

セマンティック セグメンテーション タスクを実行する場合、PixelLib は Deeplabv3+ フレームワークと pascalvoc で事前トレーニングされた Xception モデルを使用します。

pascalvoc で事前トレーニングされた Xception モデルを使用してセマンティック セグメンテーションを実行します。

  1. ピクセルライブラリをインポートする
  2. Pixellib.semantic から semantic_segmentationをインポートします
  3. セグメントイメージ = セマンティックセグメンテーション()
  4. segment_image.load_pascalvoc_model(“deeplabv3_xception_tf_dim_ordering_tf_kernels.h5”)
  5. segment_image.segmentAsPascalvoc("画像へのパス", 出力画像名 = "出力画像へのパス")

コードの各行を見てみましょう。

  1. ピクセルライブラリをインポートする
  2. Pixellib.semantic から semantic_segmentationをインポートします
  3. #セマンティックセグメンテーションクラスのインスタンスを作成しました
  4. セグメントイメージ = セマンティックセグメンテーション()

セマンティックセグメンテーションを実行するために使用されるクラスがpixellibからインポートされ、クラスのインスタンスが作成されます。

  1. segment_image.load_pascalvoc_model(“deeplabv3_xception_tf_dim_ordering_tf_kernels.h5”)

関数を呼び出して、pascal voc でトレーニングされた xception モデルをロードします (xception モデルは、記事の最後にあるリンクからダウンロードできます)。

  1. segment_image.segmentAsPascalvoc("画像へのパス", 出力画像名 = "出力画像へのパス")

これは画像をセグメント化するコード行です。この関数には 2 つのパラメータが含まれます。

  • path_to_image: 画像がセグメント化されるパス。
  • path_to_output_image: 出力イメージを保存するパス。イメージは現在の作業ディレクトリに保存されます。

次に、写真を見て何が起こっているのか見てみましょう

画像ファイルの名前は、下の図に示すように、sample1.jpg です。

実行コードは次のとおりです。

  1. ピクセルライブラリをインポートする
  2. Pixellib.semantic から semantic_segmentationをインポートします
  3. セグメントイメージ = セマンティックセグメンテーション()
  4. セグメントイメージをロードするpascalvoc_model("deeplabv3_xception_tf_dim_ordering_tf_kernels.h5")
  5. segment_image.segmentAsPascalvoc("sample1.jpg", output_image_name = "image_new.jpg")

コードを実行すると、保存された画像内のすべてのオブジェクトがセグメント化されていることがわかります。

コードを少し変更して、対象オブジェクトのセグメンテーションオーバーレイを含む画像を取得することもできます。

  1. segment_image.segmentAsPascalvoc("sample1.jpg", output_image_name = "image_new.jpg", overlay = True)

セグメント化されたオーバーレイを含む画像を生成するために、追加のパラメータが追加され、True に設定されます。

以下のコードを変更することで、セグメンテーションを実行するために必要な推論時間を確認できます。

  1. ピクセルライブラリをインポートする
  2. Pixellib.semantic から semantic_segmentationをインポートします
  3. インポート時間
  4. セグメントイメージ = セマンティックセグメンテーション()
  5. segment_image.load_pascalvoc_model("pascal.h5")
  6. 開始 = 時間.時間()
  7. segment_image.segmentAsPascalvoc("sample1.jpg", output_image_name="image_new.jpg")
  8. 終了 = 時間.時間()
  9. print(f"推論時間: {end-start:.2f}秒")

出力は次のようになります。

  1. 推論時間: 8.19

ご覧のとおり、画像に対するセマンティックセグメンテーションの実行にはわずか 8.19 秒しかかかりませんでした。

この Xception モデルは、20 個の一般的なオブジェクト カテゴリを含む PascalVOC データセットを使用してトレーニングされます。

オブジェクトとそれに対応するカラーマップを以下に示します。

PixelLibはインスタンスセグメンテーションを実装する

セマンティックセグメンテーションの結果は良さそうに見えますが、画像セグメンテーションの特定のタスクには理想的ではない可能性があります。

セマンティック セグメンテーションでは、同じカテゴリのオブジェクトに同じカラーマップが割り当てられるため、セマンティック セグメンテーションでは特に十分な画像情報が提供されない可能性があります。

このようにして、インスタンス セグメンテーションが誕生しました。同じカテゴリのオブジェクトには異なるカラーマップが割り当てられます。

PixelLib がインスタンスのセグメンテーションを実行するときは、Mask RCNN フレームワークに基づいています。コードは次のとおりです。

  1. ピクセルライブラリをインポートする
  2. Pixellib.instanceからinstance_segmentationをインポート
  3. セグメントイメージ = インスタンスセグメンテーション()
  4. セグメントイメージ.load_model(“mask_rcnn_coco.h5”)
  5. segment_image.segmentImage("画像へのパス", output_image_name = "出力画像パス")

もう一度、まずコードの各行を分解してみましょう。

  1. ピクセルライブラリをインポートする
  2. Pixellib.instanceからinstance_segmentationをインポートします
  3. セグメントイメージ = インスタンスセグメンテーション()

インスタンス分割を実行するためのクラスがインポートされ、クラスのインスタンスが作成されます。

  1. セグメントイメージ.load_model(“mask_rcnn_coco.h5”)

これは、インスタンスのセグメンテーションを実行するために Mask RCNN モデルをロードするコードです (Mask RCNN モデルは、記事の最後にあるリンクからダウンロードできます)。

  1. segment_image.segmentImage("画像へのパス", output_image_name = "出力画像パス")

これは画像に対してインスタンスのセグメンテーションを実行するコードであり、次の 2 つのパラメータが必要です。

  • path_to_image: モデルが予測する画像へのパス。
  • output_image_name: セグメンテーション結果が保存されるパス。現在の作業ディレクトリに保存されます。

上の写真は実戦2ラウンド目の様子です!

画像ファイルの名前は、下の図に示すように、sample2.jpg です。

実行コードは次のとおりです。

  1. ピクセルライブラリをインポートする
  2. Pixellib.instanceからinstance_segmentationをインポート
  3. セグメントイメージ = インスタンスセグメンテーション()
  4. セグメントイメージ.load_model(“mask_rcnn_coco.h5”)
  5. segment_image.segmentImage("sample2.jpg", output_image_name = "image_new.jpg")

上の画像はディレクトリに保存された画像です。これで、セマンティック セグメンテーションとインスタンス セグメンテーションの明らかな違いがわかります。インスタンス セグメンテーションでは、同じカテゴリのすべてのオブジェクトに異なるカラーマップが割り当てられます。

境界ボックスを使用してセグメンテーションを実装する場合は、コードを少し変更します。

  1. segment_image.segmentImage("sample2.jpg", output_image_name = "image_new.jpg", show_bboxes = True)

この方法では、セグメンテーション マスクと境界ボックスを含む保存された画像が得られます。

同様に、コードを通じてインスタンス セグメンテーションの推論時間を照会することもできます。

  1. ピクセルライブラリをインポートする
  2. Pixellib.instanceからinstance_segmentationをインポートします
  3. インポート時間
  4. セグメントイメージ = インスタンスセグメンテーション()
  5. セグメントイメージ.load_model(“mask_rcnn_coco.h5”)
  6. 開始 = 時間.時間()
  7. segment_image.segmentImage(“former.jpg”, output_image_name= “image_new.jpg”)
  8. 終了 = time.time()
  9. print(f"推論時間: {end-start:.2f}秒")

出力は次のようになります。

  1. 推論時間: 12.55

ご覧のとおり、画像のインスタンスのセグメンテーションを実行するには 12.55 秒かかります。

最後に、プロジェクトとモデルのダウンロード アドレスを示します。ぜひ試してみてください。

ポータル

PixelLib プロジェクト アドレス:
https://github.com/ayoolaolafenwa/PixelLib

xception モデルのダウンロード アドレス:
https://github.com/bonlime/keras-deeplab-v3-plus/releases/download/1.1/deeplabv3_xception_tf_dim_ordering_tf_kernels.h5

Mask RCNN モデルをダウンロードします:
https://github.com/matterport/Mask_RCNN/releases/download/v2.0/mask_rcnn_coco.h5

<<:  AIがスマート交通建設を推進し、警察ドローンの高速任務を加速

>>:  機械学習アルゴリズムのコレクション: ベイズ学習からディープラーニングまで、それぞれの長所と短所

ブログ    
ブログ    
ブログ    

推薦する

エンドツーエンドの自動運転に向けて、Horizo​​n Robotics が Sparse4D アルゴリズムを正式にオープンソース化

Horizo​​n Roboticsは1月22日、純粋な視覚ベースの自動運転アルゴリズムであるSpa...

AIを使って株取引で不正行為をしよう!この世代のプログラマーは本当に楽しみ方を知っている

ディープラーニングを使用して株価を予測することは、以前は少し神秘的に思えたかもしれませんが、新しいこ...

AIとブロックチェーンの統合:6つの予測と可能性

今のところ、AI とブロックチェーン技術がもたらす可能性について聞いたことも、気付いていないのであれ...

CPUのみを使用して1000FPSで実行できます。これはオープンソースのC++クロスプラットフォーム顔検出プロジェクトです。

さまざまな依存環境によって常に荒廃していますか?コンピューターと携帯電話の両方で実行できる、C++ ...

ビジネスに AI を導入する 3 つのユースケース: CxO 向けチートシート

[[354085]]人工知能 (AI) はもはや初期段階ではなく、影響力のある結果をもたらす重要なビ...

...

ジャック・マーとイーロン・マスクは「愛し合い、憎み合っている」:人間とテクノロジーの競争の勝者は誰か?

8月29日、国家発展改革委員会、科学技術部、工業情報化部、中国サイバースペース管理局、中国科学院、...

GoogleはAIの訓練のために何億人ものアメリカ人のオンラインデータを盗んだとして集団訴訟に直面している

7月13日、新たな訴訟で、Googleがチャットボット「バード」などの人工知能(AI)製品のトレーニ...

インテリジェント衛生の開発が加速しており、衛生ロボットは応用の「先駆者」となっている。

環境保護の重要な部分として、都市環境衛生はますます重視されています。衛生産業をうまく発展させ、衛生業...

2021年、ドローン配送は高速であるだけでなく、安定している必要がある

中国国家郵政局が2020年10月に郵便業界標準「ドローン速達サービス仕様」について通知したことを覚え...

...

OpenAIに大きな打撃!米政府がChatGPTを「オープンソース化」、アルトマン氏はパニックに陥り3つのツイートを投稿

ビッグニュース!連邦取引委員会の調査が始まります!調査の対象は、人気の OpenAI に他なりません...

...

...

金属の巨人からディープラーニングまで、人工知能の(ごく)短い歴史

[[202011]]クレタ島を海賊や侵略者から守るために、人々は巨大な青銅の戦士タロスを創造しました...