Deep Learning Combat 23 (Advanced Edition) - セマンティック セグメンテーション コンバット、キャラクター イメージ マッティング (コンピューター ビジョン) の効果を実現

皆さんこんにちは、私は Weixue AI です。今日は、深層学習プラクティス 23 (上級版) - セマンティック セグメンテーション プラクティスを紹介し、キャラクター イメージ マッティングの効果を実現します。セマンティック セグメンテーションはコンピューター ビジョンの重要なタスクであり、その目標はイメージ内の各ピクセルにセマンティック カテゴリ ラベルを割り当てることです。従来のオブジェクト検出または分類タスクとは異なり、セマンティック セグメンテーションでは、画像内に存在するオブジェクトとその位置を識別する必要があるだけでなく、各ピクセルのきめ細かな分類も必要です。

1. コンピュータ ビジョンにおけるセマンティック セグメンテーションの適用

セマンティック セグメンテーションは、自動運転車の道路認識、医用画像分析における腫瘍セグメンテーション、ビデオ監視における歩行者追跡など、多くのアプリケーションで使用できます。通常、セマンティック セグメンテーションは、U-Net、FCN、DeepLab などの畳み込みニューラル ネットワークを使用して行われます。これらの深層学習モデルのトレーニングと最適化により、画像内のセマンティック情報をよりよく理解し、効率的で正確なセマンティック セグメンテーション タスクを実現できます。

2. 文字のセマンティック セグメンテーションの適用

セマンティック セグメンテーションを実装するには、事前にトレーニングされたニューラル ネットワーク モデルを使用する必要があります。Pytorch で直接利用できる DeepLabV3 モデルを使用します。

元の DeepLab メソッドは、アップサンプリングの問題を解決するために、拡張された畳み込みに基づいて、完全に接続されたレイヤーを学習可能なパラメーターに置き換えます。通常の畳み込みと比較して、拡張畳み込みは畳み込みカーネルの受容野を増加させることができるため、より多くのコンテキスト情報を保持できます。同時に、膨張率を使用すると、出力解像度をある程度変更できます。

従来の畳み込み操作では、各畳み込みカーネルは隣接するピクセルの情報のみを処理しますが、ホール畳み込みを使用した後、畳み込みカーネルはより多くのピクセル、つまりより大きな受容野を「見る」ことができるため、グローバルのより良いキャプチャが可能になります。画像の情報。同時に、膨張畳み込みは、畳み込み層の有効な受容野サイズも増加させます。これにより、解像度を維持しながら有用な情報を破棄するという問題を回避できます。

穴畳み込み作成ケース:

import torch

# 定义空洞卷积层
conv = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, dilation=2)

# 定义输入
input = torch.randn(1, 3, 32, 32)

# 进行空洞卷积操作
output = conv(input)

# 查看输出形状
print(output.shape)

3. DeepLabV3 モデル

DeepLabV3 では、ASPP モジュールが使用されます。ASPP はホール畳み込みで異なるサンプリング レートを設定することにより、画像内のさまざまなスケールの情報をキャプチャします. このマルチスケールの情報取得方法は、モデルがさまざまなサイズのオブジェクトのアウトラインとコンテキスト情報をより適切にキャプチャするのに役立ちます. 最後に、これらの並列分岐は平均プーリングと 1x1 畳み込みと融合され、アップサンプリングされてピクセルレベルのセグメンテーション結果が得られます。

 DeepLabV3 モデルのトレーニング プロセス:
1. データの準備:ピクセル レベルの注釈を含む画像データセットを準備します。たとえば、PASCAL VOC、Cityscapes、COCO などのデータセットです。各ピクセルには、ピクセルが属するカテゴリを示す対応するラベルが必要です。
2. データ強化:画像の回転、スケーリング、反転などによってトレーニング データを強化し、トレーニング データの多様性を高め、モデルの一般化能力を向上させます。
3. ネットワークの構築: DeepLabV3 には、特徴抽出のための畳み込みニューラル ネットワーク (ResNet、Xception など) と ASPP (Atrous Spatial Pyramid Pooling、空の空間ピラミッド プーリング) と呼ばれるモジュールが含まれています。ASPP モジュールには、さまざまなスケールで情報を取得するために、さまざまなサンプリング レートを持つ複数の膨張畳み込み層が含まれています。これらの並列ブランチは、グローバル平均プーリングと 1x1 畳み込みレイヤーによって最終的に融合されます。
4. 損失関数:通常、交差エントロピー損失は、モデルの予測結果と実際の結果との差を測定するために使用されます。モデルの重みは、各ピクセルの予測クラスの確率分布と真のラベルの確率分布の間の交差エントロピー損失を計算することによって更新されます。
5. 最適化アルゴリズム: オプティマイザー (SGD、Adam など) を選択して、損失関数を最小化します。画像を継続的にフィードすることにより、モデルは順伝播を実行して損失を計算し、逆伝播して重みを更新します。
6. モデルのトレーニング: 一定期間、安定した損失など、特定の収束条件に達するまで反復最適化ステップを繰り返します。
7. モデルの評価と検証: 検証セットとテスト セットでモデルのパフォーマンスを評価し、必要に応じてハイパーパラメーター、ネットワーク構造などを調整します。 

4. コードの実装

import torch
import torchvision
import numpy as np
from PIL import Image
from torchvision import transforms


def segment_person(image_path, output_path):
    # 加载预训练的DeepLabV3模型
    model = torchvision.models.segmentation.deeplabv3_resnet101(pretrained=True)
    model.eval()

    # 读取图片并转换
    input_image = Image.open(image_path).convert("RGB")
    preprocess = transforms.Compose([
        transforms.Resize((256, 256)),
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
    ])
    input_tensor = preprocess(input_image)
    input_batch = input_tensor.unsqueeze(0)

    #if torch.cuda.is_available():
    input_batch = input_batch.to('cpu')
    model.to('cpu')

    with torch.no_grad():
        output = model(input_batch)['out'][0]
    output = torch.argmax(output, dim=0).byte().cpu().numpy()

    # 人物语义分割标签 (在PASCAL VOC数据集中,人物用标签15表示)
    output_person = (output == 15)

    # 应用掩码
    mask = output_person.astype(np.uint8) * 255
    mask = Image.fromarray(mask)
    masked_image = Image.composite(input_image.resize((256, 256)), Image.new('RGB', mask.size), mask)

    masked_image.save(output_path)

# 使用方法
input_image_path = "111.png"
output_image_path = "222.png"
segment_person(input_image_path, output_image_path)

実行結果: 111.png 画像を入力し、222.png 画像を出力しました。

写真の女の子はAIが生成。AI によって生成された画像に興味がある人は、
次の項目にも注意を払うことができます。

過去の作品:

 深層学習実践プロジェクト

1. 深層学習の実践 1-(keras フレームワーク) エンタープライズ データの分析と予測

2. 深層学習の実践 2-(keras フレームワーク) 企業の信用格付けと予測

3. 深層学習の実践 3-Text Convolutional Neural Network (TextCNN) News Text Classification

4. ディープ ラーニング コンバット 4 - 畳み込みニューラル ネットワーク (DenseNet) 数学的グラフィックス認識 + トピック パターン認識

5. 深層学習の実践 5-畳み込みニューラル ネットワーク (CNN) 中国語 OCR 認識プロジェクト

6. ディープ ラーニング コンバット 6- 畳み込みニューラル ネットワーク (Pytorch) + クラスター分析による大気質と気象予測の実現

7.深層学習の実践 7-EC商品レビューの感情分析

8. Deep Learning Combat 8​​-Life 写真変換コミック写真アプリケーション

9.深層学習の実践 9-テキスト生成画像-ローカルコンピュータでtext2imgを実現

10.深層学習の実践 10-数式認識-写真をLatexに変換(img2Latex)

11.深層学習演習11(上級編) - BERTモデルの微調整適用 - テキスト分類事例

12. 深層学習演習 12 (上級編) - Dewarp を使用してテキストの歪みを修正する

13.深層学習の実践13(上級編) - テキストエラー修正機能、タイプミスが多い友達に頑張って

14.ディープラーニングの実践14(上級編) - 手書き文字OCR認識、手書きメモも認識可能

15. Deep Learning Combat 15 (Advanced Edition) - マシンに読解を任せる + あなたは質問メーカーになって質問をすることができます

16. 深層学習の実践 16 (上級版) - 仮想スクリーンショット認識テキスト - 紙の契約書とフォームの認識が可能

17. Deep Learning Practice 17 (Advanced Edition) - インテリジェントアシスタント編集プラットフォームシステムの構築と開発事例

18. Deep Learning Combat 18 (Advanced Edition) - 市場で考えられる NLP タスクを実現できる NLP 融合システムの 15 タスク

19. Deep Learning Combat 19 (Advanced Edition) - ChatGPT に基づいて SpeakGPT のローカル実装展開テストを行い、独自のプラットフォームに SpeakGPT 機能を実装します。

20. Deep Learning Combat 20 (Advanced Edition) - ファイル インテリジェント検索システム。ファイルの内容に基づいてキーワードを検索し、ファイルをすばやく見つけることができます。

21. 深層学習演習21(上級編) - AI Entity Encyclopedia Search、どんな名詞でも検索できる百科事典

22.深層学習の実践22(上級編) - AIコミック動画生成モデル、自分だけのコミック動画を作る

...(アップグレード待ち)

おすすめ

転載: blog.csdn.net/weixin_42878111/article/details/130015593