イメージの意味的なセグメンテーションには、密な予測トランスフォーマーを使用します

イメージの意味的なセグメンテーションにおいて密な予測トランスフォーマーを活用する

イントロダクション

この記事では、イメージセマンティックセグメンテーションというコンピュータビジョンの技術について説明します。これは複雑な技術のように聞こえますが、ステップバイステップで解説し、Hugging Faceのコレクションから密な予測トランスフォーマー(DPT)を使用したイメージセマンティックセグメンテーションの実装について紹介します。DPTを使用することで、通常とは異なる能力を持つ新しいフェーズのコンピュータビジョンが導入されます。コンピュータビジョンにおけるDPTと従来の遠くのつながりの理解との比較

学習目標

  • DPTと従来の遠くのつながりの理解の比較
  • PythonでDPTを使用したセマンティックセグメンテーションの実装
  • DPTの設計を探索し、その特徴を理解する

この記事はデータサイエンスブログマラソンの一環として公開されました。

イメージセマンティックセグメンテーションとは何ですか?

イメージセマンティックセグメンテーションとは、画像を持っており、それぞれのピクセルをそれが表す内容に応じてラベル付けしたいというアイデアです。これはコンピュータビジョンで使用され、車と木を区別したり、画像の一部を分離したりするために使用されます。つまり、ピクセルにスマートにラベルを付けることに関わります。しかし、本当の挑戦は、コンテキストとオブジェクト間の関係を理解することにあります。これを従来の画像処理の手法と比較してみましょう。

畳み込みニューラルネットワーク(CNN)

最初のブレイクスルーは、画像を処理するために畳み込みニューラルネットワーク(CNN)を使用することでした。しかし、CNNには限界があり、特に画像の遠くのつながりを捉えることに苦労します。画像内の異なる要素が長い距離でどのように相互作用するのかを理解しようとする場合を想像してみてください。それが従来のCNNの苦手なところです。そこで、DPTを導入します。これらのモデルは、強力なトランスフォーマーアーキテクチャに基づいており、関連性を捉える能力を持っています。次にDPTについて見てみましょう。

デンス予測トランスフォーマー(DPT)とは何ですか?

この概念を理解するために、以前のNLPのタスクで使用していたトランスフォーマーの力を画像解析と組み合わせることを考えてみてください。それがデンス予測トランスフォーマー(DPT)のコンセプトです。それはまるで画像のスーパーディテクティブのようです。彼らは画像のピクセルにラベルを付けるだけでなく、各ピクセルの深さを予測する能力を持っています。これにより、各オブジェクトが画像からどれだけ遠くにあるかの情報が提供されます。以下で詳しく見ていきましょう。

DPTアーキテクチャのツールボックス

DPTには異なるタイプがあり、それぞれに「エンコーダ」レイヤーと「デコーダ」レイヤーがあります。ここでは、2つの人気のあるタイプについて見てみましょう:

  • DPT-Swin-Transformer:エンコーダレイヤーが10つ、デコーダレイヤーが5つある、メガトランスフォーマーのようなものです。画像内の要素間の関係を理解するのに優れています。
  • DPT-ResNet:18つのエンコーダレイヤーと5つのデコーダレイヤーを持つ、賢明なディテクティブのようなものです。遠くのオブジェクト間の関連性を見つけることに秀でていますが、画像の空間的な構造を保持します。

主な特徴

DPTがどのように機能するか、いくつかの主な特徴を見てみましょう:

  • 階層的特徴抽出:従来の畳み込みニューラルネットワーク(CNN)と同様に、DPTは入力画像から特徴を抽出します。ただし、画像は異なる詳細レベルに分割される階層的なアプローチを取っています。この階層的なアプローチにより、ローカルとグローバルなコンテキストの両方を捉えることができ、モデルがさまざまなスケールでオブジェクト間の関係を理解することができます。
  • セルフアテンションメカニズム:これはDPTのバックボーンであり、元々のトランスフォーマーアーキテクチャから着想を得ています。画像内の長い距離の依存関係を捉え、ピクセル間の複雑な関係を学ぶことができるようにします。各ピクセルは他のすべてのピクセルからの情報を考慮し、モデルに画像の包括的な理解を与えます。

DPTを使用した画像セマンティックセグメンテーションのPythonデモ

以下にDPTの実装例を見ていきます。まずは、Colabに事前にインストールされていないライブラリのセットアップを行います。このコードはこちらまたはhttps://github.com/inuwamobarak/semantic-segmentationで見つけることができます。

まずは、環境をインストールしてセットアップします。

!pip install -q git+https://github.com/huggingface/transformers.git

次に、トレーニングするモデルを準備します。

## モデルを定義します# TransformersライブラリからDPTForSemanticSegmentationをインポートfrom transformers import DPTForSemanticSegmentation# 事前トレーニング済みの重みをロードしてDPTForSemanticSegmentationモデルを作成します# "Intel/dpt-large-ade"モデルはADE20Kデータセットでトレーニングされた大規模なモデルですmodel = DPTForSemanticSegmentation.from_pretrained("Intel/dpt-large-ade")

次に、セグメンテーションに使用したい画像をロードして準備します。

# PIL(Python Imaging Library)モジュールからImageクラスをインポートします。from PIL import Imageimport requests# ダウンロードする画像のURLですurl = 'https://img.freepik.com/free-photo/happy-lady-hugging-her-white-friendly-dog-while-walking-park_171337-19281.jpg?w=740&t=st=1689214254~exp=1689214854~hmac=a8de6eb251268aec16ed61da3f0ffb02a6137935a571a4a0eabfc959536b03dd'# `stream=True`パラメータを指定することで、レスポンスが直ちにダウンロードされるのではなく、メモリに保持されるようになります.response = requests.get(url, stream=True)# Imageクラスを作成しますimage = Image.open(response.raw)# 画像を表示しますimage

from torchvision.transforms import Compose, Resize, ToTensor, Normalize# 入力イメージの望ましい高さと幅を設定しますnet_h = net_w = 480# 一連の画像変換を定義しますtransform = Compose([        # 画像のリサイズ        Resize((net_h, net_w)),        # 画像をPyTorchテンソルに変換        ToTensor(),        # 画像の正規化        Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]),    ])

次に、画像にいくつかの変換を適用します。

# 入力画像を変換しますpixel_values = transform(image)pixel_values = pixel_values.unsqueeze(0)

次は、フォワードパスです。

import torch# 勾配計算を無効にするwith torch.no_grad():    # モデルを通してフォワードパスを実行します。    outputs = model(pixel_values)    # 出力からロジット(生の予測)を取得します。    logits = outputs.logits

次に、画像を配列の塊として表示します。次に、セマンティックな予測がされた画像に変換します。

import torch# ロジットを元の画像サイズに補間しますprediction = torch.nn.functional.interpolate(    logits,    size=image.size[::-1],  # 元の画像のサイズ(幅、高さ)を反転させます    mode="bicubic",    align_corners=False)# ロジットをクラスの予測に変換しますprediction = torch.argmax(prediction, dim=1) + 1# 予測テンソルの次元を削減し、不要な次元を除去しますprediction = prediction.squeeze()# 予測テンソルをCPUに移動し、numpy配列に変換しますprediction = prediction.cpu().numpy()

セマンティックな予測を行います。

from PIL import Image# 予測配列を画像に変換しますpredicted_seg = Image.fromarray(prediction.squeeze().astype('uint8'))# 予測されたセグメンテーション画像にカラーマップを適用しますpredicted_seg.putpalette(adepallete)# オリジナルの画像と予測されたセグメンテーション画像をブレンドしますout = Image.blend(image, predicted_seg.convert("RGB"), alpha=0.5)

そこには意味が予測された画像があります。あなたは自分の画像で実験することができます。次に、DPTに適用された評価のいくつかを見てみましょう。

DPTの性能評価

DPTは、Cityscapes、PASCAL VOC、ADE20Kのデータセットなど、さまざまな画像プレイグラウンドでテストされ、従来のCNNモデルよりも優れたパフォーマンスを発揮しています。このデータセットと研究論文へのリンクは、以下のリンクセクションにあります。

Cityscapesでは、DPT-Swin-Transformerは平均交差組合せ率(mIoU)メトリックで79.1%を記録しました。PASCAL VOCでは、DPT-ResNetは新たな基準となる82.8%のmIoUを達成しました。これらのスコアは、DPTが画像の深い理解をする能力を証明しています。

DPTの未来と展望

DPTは、画像理解の新たな時代を築いています。DPTの研究は、私たちが画像を見る方法と対話する方法を変え、新たな可能性をもたらしています。要するに、DPTを使用した画像の意味的セグメンテーションは、画像を解読する方法を変える画期的なものであり、将来的にはさらに成果を挙げるでしょう。ピクセルのラベルから深さを理解するまで、DPTはコンピュータビジョンの世界で可能なことです。これについて詳しく見てみましょう。

正確な深度推定

DPTの最も重要な貢献の1つは、画像から深度情報を予測することです。この進歩により、3Dシーンの再構築、拡張現実、オブジェクトの操作などの応用が可能になります。これにより、シーン内のオブジェクトの空間配置の重要な理解が可能となります。

同時的な意味的セグメンテーションと深度予測

DPTは、意味的セグメンテーションと深度予測の両方を統合的なフレームワークで提供することができます。これにより、画像のホリスティックな理解が可能となり、意味情報と深度知識の両方に応用が可能となります。たとえば、自動運転において、この組み合わせは安全なナビゲーションに不可欠です。

データ収集の努力の軽減

DPTは、ピクセルごとの深さの注釈を必要とせずに、付随する深度マップを持つトレーニング画像から深さを予測することが可能です。これにより、データ収集に関連するコストと努力が大幅に削減されます。

シーンの理解

DPTは、3次元の環境を機械に理解させることができ、ロボットが効果的にナビゲートや相互作用するために重要です。製造や物流などの産業では、DPTによってロボットが空間関係をより深く理解し、自動化を促進することができます。

Dense Prediction Transformersは、正確な深度情報と画像の意味的理解を提供することで、コンピュータビジョンの分野を再構築しています。ただし、微細な深度推定、汎化、不確実性の推定、バイアスの緩和、リアルタイム最適化に関連する課題に取り組むことが、DPTの変革的な影響を完全に実現するために重要です。

結論

画像セマンティックセグメンテーションには、ピクセルのラベリングと空間的な洞察が組み合わさった旅があります。DPTと画像セマンティックセグメンテーションの結合は、コンピュータビジョン研究の興奮を呼ぶ新たな道を開くものです。この記事では、DPTのアーキテクチャからパフォーマンスの優位性、そしてコンピュータビジョンにおけるセマンティックセグメンテーションの未来を形作る可能性について解明しています。

要点

  • DPTはピクセルを超えて空間的な文脈を理解し、深さを予測することができます。
  • DPTは従来の画像認識を上回り、距離や3Dの洞察を捉えます。
  • DPTは画像の知覚を再定義し、オブジェクトや関係性のより深い理解を可能にします。

よくある質問

リンク:

この記事に表示されるメディアはAnalytics Vidhyaが所有しておらず、作者の裁量で使用されています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AI研究

東京理科大学の研究者は、材料科学におけるこれまで知られていなかった準結晶相を検出する深層学習モデルを開発しました

物質における新しい結晶構造を発見する探求は、電子から製薬まで幅広い産業において重要な意味を持ち、科学的な探求の中核と...

機械学習

PyTorch LSTM — 入力、隠れ状態、セル状態、および出力の形状

「PyTorchでは、LSTM(nn.LSTM()を使用)を使用するために、入力時系列を表すテンソル、隠れ状態ベクトル、セル状態ベクトル...

データサイエンス

「LLMの評価にLLMを使用する」

ChatGPTには何百万もの異なる方法で行動するように頼むことができます栄養士や言語講師、医者などとしての役割も果たしますOp...

機械学習

「React開発者にとってのAI言語モデルの力包括的なガイド」

このブログでは、AI言語モデルとReactのシナジーについて探求し、このコラボレーションが開発者の能力を向上させる方法を探り...

データサイエンス

「PandasAIを用いたデータ分析における生成型AIの活用」

「生成モデルを適用することで、PandasAIは人間のようなクエリを理解し、応答することができ、複雑なデータの操作を実行し、...

機械学習

AudioPaLMの紹介:Googleの言語モデルにおける突破口

テック巨人Googleが、ジェネラティブAIの分野で重要な進展を遂げ、最先端のマルチモーダル言語モデルであるAudioPaLMを発表し...