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がスマート交通建設を推進し、警察ドローンの高速任務を加速

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

ブログ    
ブログ    
ブログ    

推薦する

...

メルセデス・ベンツCIO:デジタル変革には人工知能の推進力が必要

メルセデス・ベンツは長年、機械学習と従来の人工知能に依存してきました。しかし、現在では、たとえば M...

ビッグニュース! ChatGPTの2つの主要イベント

1 つ目は、GPT-4 API です。完全にオープンに使用できます。 7月7日、OpenAIは公式ウ...

AI と機械学習はデータセンター運用にどのような変化をもたらすのでしょうか?

今日のデータセンターは、ほぼ克服不可能と思われる課題に直面しています。データ センターの運用はかつて...

環境センシング:スマートホームの次のステップ

「スマートホーム」という用語は何年も前から存在しているようですが、業界自体は比較的初期段階にあります...

...

...

人工知能が刑事司法を支援する方法:利点と落とし穴

まとめ刑事司法の分野では、人工知能(AI)がますます重要な役割を果たしています。リスク評価システム(...

GPT-4 Turboがリリースされ、APIがよりコスト効率化され、128Kコンテキストウィンドウが新時代をリード

1. はじめにGPT-4 をリリースしてからわずか 8 か月後、OpenAI は更新されたモデル G...

続編が登場します! OpenAIがマスク氏を公式サイトに掲載、複数のメールのやり取りが暴露される

AIの歴史に残るほどのマスク氏とOpenAIのこの訴訟は、ドラマに満ちている! 3月5日、OpenA...

自律走行の新しい方法がネイチャーの表紙に登場:夜を昼のように明るくする、浙江大学の博士

AI の支援により、機械の夜間視界は昼間と同じくらい鮮明になります。今日、既存の熱画像技術に革命をも...

崑崙Core2が量産開始:性能が2~3倍向上し、中国の産業知能に強力な「コア」を注入

8月18日、百度とCCTVニュースは共同で「百度ワールド2021」カンファレンスを開催し、AIが何千...

AIとGo言語をシームレスに統合する方法を学ぶ

今日のアプリケーション開発分野では、OpenAI API などの生成 AI 技術の活発な開発により、...

「アルゴリズムとデータ構造」JavaScript のリンク リスト

[[378875]]この記事はWeChatの公開アカウント「Unorthodox Front-end...

リカレントニューラルネットワークの分析を深く理解する

[[211637]]リカレント ニューラル ネットワーク (RNN) は、レイヤー内に重み付けされた...