【医療選択】医療セグメンテーションシステム:Axial_attention & FCN-UNet

1. 研究の背景と意義

医用画像のセグメンテーションは、医用画像処理における重要なタスクであり、その目標は、医用画像内のさまざまな組織または疾患領域を正確にセグメント化することです。医療画像のセグメンテーションには、臨床診断、治療計画、疾患のモニタリングにおいて重要な応用価値があります。ただし、医療画像の複雑さとノイズ干渉のため、従来のセグメンテーション方法では高精度と効率の要件を達成することが困難なことがよくあります。

近年、医療画像セグメンテーションの分野ではディープラーニング技術が大きく進歩しました。その中でも畳み込みニューラルネットワーク(CNN)に基づく手法が広く使われています。ただし、従来の CNN 手法には、医療画像を処理する際にいくつかの問題があります。まず、医療画像は通常、サイズが大きく、構造が複雑であるため、従来の CNN 手法では画像の特徴を抽出する際に詳細な情報が簡単に失われてしまいます。第 2 に、医療画像には異なる組織や病変領域の間に複雑な空間関係があり、従来の CNN 手法ではこの関係を捉えることが困難なことがよくあります。

上記の問題を解決するために、本研究では、Axial tentionとFCN-UNetに基づく医療セグメンテーションシステムを提案する。軸方向の注意は、医療画像内の空間関係を効果的にキャプチャできる新しい注意メカニズムです。具体的には、Axial tention は、特徴マップの異なる次元に注意メカニズムを導入することで、異なる次元の特徴の重み付けされた融合を実現し、それにより特徴の表現能力を向上させます。さらに、本研究では、医用画像の詳細情報を効果的に抽出でき、強力な特徴再構成機能を備えた FCN-UNet のネットワーク構造も利用しています。

この研究の重要性は主に次の側面に反映されています。

まず、Axial tention と FCN-UNet に基づく医療セグメンテーション システムは、医療画像セグメンテーションの精度と効率を向上させることができます。軸方向の注意メカニズムを導入することにより、システムは医療画像内の空間関係をより適切に捕捉できるようになり、それによってセグメンテーション結果の精度が向上します。同時に、FCN-UNet のネットワーク構造により、画像内の詳細情報を効果的に抽出でき、セグメンテーションの精度がさらに向上します。さらに、このシステムは高い計算効率を備えており、セグメンテーションタスクを短時間で完了できます。

第二に、Axial tentionとFCN-UNetに基づく医療セグメンテーションシステムは強力な汎化能力を持っています。医用画像の多様性と複雑さのため、従来のセグメンテーション手法は、さまざまな種類の医用画像に適応することが難しいことがよくあります。本研究で提案したシステムは、FCN-UNetのAxial tention機構とネットワーク構造を導入することにより、異なる種類の医用画像への適応性が向上し、強力な汎化能力を備えている。

最後に、Axial tention と FCN-UNet に基づく医療セグメンテーション システムは、臨床診断と治療に重要な応用価値を持っています。正確な医療画像セグメンテーションの結果は、より包括的で正確な情報を医師に提供し、より正確な診断を下し、より合理的な治療計画を立てるのに役立ちます。さらに、このシステムは病気のモニタリングや研究にも使用でき、研究者が病気の発症と変化のプロセスをより深く理解できるようになります。

要約すると、Axial tention と FCN-UNet に基づく医療セグメンテーション システムには重要な研究背景と重要性があります。このシステムは、医療画像セグメンテーションの精度と効率を向上させることができ、強力な一般化能力を備えており、臨床診断と治療にとって重要な応用価値があります。この研究の結果は、医療画像セグメンテーションの分野におけるさらなる研究と応用に強力なサポートを提供するでしょう。

2. 映像デモンストレーション

3.png

4.png

2.png

3. ビデオデモンストレーション

Axial tention と FCN-UNet_bilibili_bilibili に基づいた医療セグメンテーション システム

4. Unet の概要

Unet ネットワーク構造は、画像セグメンテーション タスクに一般的に使用される深層学習アーキテクチャであり、2015 年に Olaf Ronneberger らによって初めて提案されました。 Unet の設計は、生物医学画像セグメンテーション、特に細胞核セグメンテーションのニーズに触発されています。 Unet の名前は、対称的なエンコーダーとデコーダーで構成される U 字型のネットワーク構造に由来しており、非常に効果的な画像セグメンテーション モデルとなっています。

Unet の主な機能の 1 つは、「スキップ接続」または「スキップ接続」の使用です。これらの接続により、エンコーダーとデコーダーの間で情報を直接受け渡すことができるため、画像の空間コンテキストを保持するのに役立ちます。 Unet の構造と動作原理を詳しく理解しましょう。

Unetの構造

Unet のネットワーク構造は、エンコーダとデコーダの 2 つの主要な部分に分けることができます。エンコーダは入力画像の空間解像度を徐々に下げて特徴情報を抽出する役割を果たし、デコーダは徐々に解像度を上げて特徴情報を入力画像と同じ解像度のセグメンテーション結果に変換する役割を担います。
画像.png

エンコーダ

エンコーダは通常、畳み込み層とプーリング層で構成されます。畳み込み層は画像の特徴情報を抽出するために使用され、プーリング層は重要な情報を保持しながら解像度を下げるために使用されます。これらのレイヤーを組み合わせることで、エンコーダーは画像のグローバルおよびローカルの特徴を徐々にキャプチャし、より高いレベルの表現を生成できるようになります。

Unet では、エンコーダは通常 4 つのステージで構成され、各ステージで画像の解像度が半分になります。たとえば、通常、第 1 段階では入力イメージの解像度が 256x256 から 128x128 に低下し、第 2 段階では 64x64 に低下します。各ステージは、特徴を抽出するための一連の畳み込み操作とプーリング操作で構成されます。

デコーダ

デコーダのタスクは、エンコーダによって生成された特徴マップを入力画像と同じ解像度のセグメンテーション結果に変換することです。デコーダは通常、畳み込み転置層 (逆畳み込み層) とスキップ接続で構成されます。畳み込み転置層は解像度を高めるために使用され、スキップ接続によりエンコーダーからデコーダーに情報を渡すことができます。

Unet のデコーダーも 4 つのステージに分割されており、各ステージでは特徴マップの解像度が 2 倍になります。各デコーダ ステップは、対応するエンコーダ ステージの特徴マップと結合されて、空間コンテキスト情報が復元されます。この組み合わせは通常、チャネル スプライシングまたはピクセル レベルのマージ操作を通じて実現されます。

接続をスキップする

Unet の重要な機能はスキップ接続です。これはエンコーダとデコーダの特徴マップを接続し、デコーダが画像のコンテキスト情報をよりよく理解できるようにします。スキップ接続は、深いネットワークにおける勾配消失問題の解決に役立ち、モデルがさまざまなスケールで特徴をより適切にキャプチャできるようになります。

スキップ接続では、各デコーダ ステージが対応するエンコーダ ステージに接続されます。これは、デコーダの第 1 ステージがエンコーダの第 4 ステージに接続され、デコーダの第 2 ステージがエンコーダの第 3 ステージに接続され、以下同様となることを意味します。このタイプの接続により、デコーダはより多くの情報を利用して、より正確なセグメンテーション結果を生成できます。

Unetの応用分野

Unet は、医療画像セグメンテーション、道路セグメンテーション、セマンティック セグメンテーションなど、多くの画像セグメンテーション タスクで優れた結果を達成しています。以下に、さまざまな分野における Unet アプリケーションの例をいくつか示します。

医用画像のセグメンテーション: Unet は、医用画像における細胞核のセグメンテーション、病変検出、臓器のセグメンテーションなどのタスクに広く使用されています。医師が医療画像をより簡単に分析および診断できるようになります。

道路のセグメンテーション: Unet を使用すると、衛星画像や航空写真から道路、建物、その他の地物をセグメント化することができます。これは都市計画や地理情報システム (GIS) にとって非常に重要です。

セマンティック セグメンテーション: Unet を使用すると、画像内の各ピクセルを、道路、車両、歩行者などのセグメント化など、異なるセマンティック カテゴリに割り当てることができます。これは、自動運転やインテリジェント交通システムに役立ちます。

リモート センシング画像のセグメンテーション: Unet を使用して、森林、湖、農地などのリモート センシング画像内の特徴をセグメント化することができ、環境の変化や資源管理の監視に役立ちます。

Unet のバリエーションと改良点

Unet が最初に提案されて以来、さまざまなアプリケーションのニーズに適応し、さまざまな問題を解決するために、多くの研究者が Unet の多くの変形版や改良版を提案してきました。一般的な Unet の亜種には次のようなものがあります。

ネットワーク アーキテクチャの改善: 一部のバリエーションは、パフォーマンスをさらに向上させるために、より深く幅広いネットワーク アーキテクチャを備えています。たとえば、一部の亜種は ResNet または EfficientNet の構造を使用します。

マルチスケール特徴融合: マルチスケール特徴をより適切に捕捉するために、一部のバリアントではアテンション メカニズムまたはマルチスケール特徴融合モジュールが導入されています。

データの増強と正則化: モデルの堅牢性を向上させるために、一部のバリアントでは、より高度なデータの増強と正則化の手法が導入されています。

半教師あり学習: 一部のバリエーションでは、モデルのパフォーマンスを向上させるために、半教師あり学習を通じて少量のラベル付きデータと大量のラベルなしデータを活用しようとします。

要約すると、Unet は非常に強力で柔軟な画像セグメンテーション アーキテクチャであり、複数の分野で目覚ましい成功を収めています。その設計哲学と構造により、多くの画像セグメンテーション タスクに推奨されるモデルの 1 つとなり、深層学習の研究に有用なインスピレーションも提供します。ディープラーニングの分野が成長し続けるにつれて、Unet ベースのイノベーションと改善がさらに増えることが期待されます。

5. コアコードの説明

5.1 モデル.py


class AxialAttention(nn.Module):
    def __init__(self, in_channels, heads=4):
        super(AxialAttention, self).__init__()
        self.heads = heads
        self.scale = heads ** -0.5
        self.query = nn.Conv1d(in_channels, in_channels, 1, groups=heads)
        self.key = nn.Conv1d(in_channels, in_channels, 1, groups=heads)
        self.value = nn.Conv1d(in_channels, in_channels, 1, groups=heads)

    def forward(self, x):
        B, C, H, W, D = x.size()
        queries = self.query(x).view(B, self.heads, C // self.heads, H, W, D)
        keys = self.key(x).view(B, self.heads, C // self.heads, H, W, D)
        values = self.value(x).view(B, self.heads, C // self.heads, H, W, D)

        attn_scores = (queries @ keys.transpose(-2, -1)) * self.scale
        attn_probs = F.softmax(attn_scores, dim=-1)
        out = attn_probs @ values
        out = out.contiguous().view(B, C, H, W, D)
        return out

class UNetBlock(nn.Module):
    def __init__(self, in_channels, out_channels, use_gn=False, axial_attention=False):
        super(UNetBlock, self).__init__()
        self.conv1 = nn.Conv3d(in_channels, out_channels, kernel_size=3, padding=1)
        self.conv2 = nn.Conv3d(out_channels, out_channels, kernel_size=3, padding=1)
        self.norm1 = nn.GroupNorm(out_channels // 2, out_channels) if use_gn else nn.BatchNorm3d(out_channels)
        self.norm2 = nn.GroupNorm(out_channels // 2, out_channels) if use_gn else nn.BatchNorm3d(out_channels)
        self.relu = nn.LeakyReLU(0.01)
        self.axial_attention = AxialAttention(out_channels) if axial_attention else None

    def forward(self, x):
        x = self.relu(self.norm1(self.conv1(x)))
        x = self.relu(self.norm2(self.conv2(x)))
        if self.axial_attention:
            x = x + self.axial_attention(x)
        return x

......

プログラム ファイルの名前は model.py で、主に次の部分が含まれています。

  1. AxialAttendance モジュール: このモジュールは、注意スコアと注意確率を計算するための 1D 自己注意モジュールを定義します。

  2. UNetBlock モジュール: このモジュールは、2 つの畳み込み層、正規化層、および活性化関数を含む U-Net の単一層ブロックを定義します。 AxialAttendant モジュールを使用するかどうかを選択できます。

  3. UNet モジュール: このモジュールは、エンコーダー部分とデコーダー部分を含む完全な U-Net モデルを定義します。 Encoder 部分には 5 つの UNetBlock が含まれ、Decoder 部分には 4 つの UNetBlock が含まれます。 AxialAttendant モジュールを使用するかどうかを選択できます。

  4. モデルの作成: ファイルの最後で、UNet モデル オブジェクトが作成され、モデル構造が出力されます。

このプログラム ファイルは主に U-Net モデルの定義と作成を実装しており、モデルのアテンション メカニズムを強化するために AxialAttendant モジュールが使用されます。

5.2 予測.py


# 定义Axial Attention模块,采用1D self-attention
class AxialAttention(nn.Module):
    def __init__(self, in_channels, heads=4):
        super(AxialAttention, self).__init__()
        self.heads = heads
        self.scale = heads ** -0.5
        self.query = nn.Conv1d(in_channels, in_channels, 1, groups=heads)
        self.key = nn.Conv1d(in_channels, in_channels, 1, groups=heads)
        self.value = nn.Conv1d(in_channels, in_channels, 1, groups=heads)

    def forward(self, x):
        B, C, H, W, D = x.size()
        queries = self.query(x).view(B, self.heads, C // self.heads, H, W, D)
        keys = self.key(x).view(B, self.heads, C // self.heads, H, W, D)
        values = self.value(x).view(B, self.heads, C // self.heads, H, W, D)

        # 注意力得分
        attn_scores = (queries @ keys.transpose(-2, -1)) * self.scale
        attn_probs = F.softmax(attn_scores, dim=-1)
        out = attn_probs @ values
        out = out.contiguous().view(B, C, H, W, D)
        return out


# 定义单层的U-Net Block
class UNetBlock(nn.Module):
    def __init__(self, in_channels, out_channels, use_gn=False, axial_attention=False):
        super(UNetBlock, self).__init__()
        self.conv1 = nn.Conv3d(in_channels, out_channels, kernel_size=3, padding=1)
        self.conv2 = nn.Conv3d(out_channels, out_channels, kernel_size=3, padding=1)
        self.norm1 = nn.GroupNorm(out_channels // 2, out_channels) if use_gn else nn.BatchNorm3d(out_channels)
        self.norm2 = nn.GroupNorm(out_channels // 2, out_channels) if use_gn else nn.BatchNorm3d(out_channels)
        self.relu = nn.LeakyReLU(0.01)
        self.axial_attention = AxialAttention(out_channels) if axial_attention else None

    def forward(self, x):
        x = self.relu(self.norm1(self.conv1(x)))
        x = self.relu(self.norm2(self.conv2(x)))
        if self.axial_attention:
            x = x + self.axial_attention(x)
        return x


# 定义完整的U-Net模型
class UNet(nn.Module):
    def __init__(self, in_channels, num_classes, use_gn=False, axial_attention_levels=[]):
        super(UNet, self).__init__()

        # Encoder
        self.enc1 = UNetBlock(in_channels, 32, use_gn)
        self.enc2 = UNetBlock(32, 64, use_gn)
        self.enc3 = UNetBlock(64, 128, use_gn)
        self.enc4 = UNetBlock(128, 256, use_gn, axial_attention=(1 in axial_attention_levels))
        self.enc5 = UNetBlock(256, 512, use_gn, axial_attention=(2 in axial_attention_levels))

        # Decoder
        self.dec1 = UNetBlock(512 + 256, 256, use_gn, axial_attention=(3 in axial_attention_levels))
        self.dec2 = UNetBlock(256 + 128, 128, use_gn, axial_attention=(4 in axial_attention_levels))
        self.dec3 = UNetBlock(128 + 64, 64, use_gn)
        self.dec4 = UNetBlock(64 + 32, 32, use_gn)

        # Final Convolution
        self.final_conv = nn.Conv3d(32, num_classes, kernel_size=1)

......

プログラム ファイル名は、predict.py です。これは、画像セグメンテーションのモデル予測プログラムです。このプログラムは、TensorFlow ライブラリと PyTorch ライブラリを使用してモデルの構築と読み込みを行い、画像表示には matplotlib ライブラリを使用します。

Axial Attendant モジュールと UNet モデルはプログラムで定義されています。Axial Attendant モジュールは 1D セルフ アテンションを使用して画像特徴を抽出します。UNet モデルは画像セグメンテーション用の完全な U-Net モデルです。

このプログラムは、データ セットのロード、環境バージョンの確認、画像の前処理と正規化処理などのいくつかの補助関数も定義します。

main関数では、まずメイン環境のバージョンが要件を満たしているか確認し、予測対象の画像データセットを読み込み、データセットの構成を設定します。次に、トレーニングされたモデルをロードし、そのモデルを使用して画像を予測します。最後に、元の画像、実際のラベル、予測結果が表示されます。

プログラム全体の機能は、トレーニングされた画像セグメンテーション モデルを読み込み、そのモデルを使用して入力画像のセグメンテーションを予測し、予測結果を表示することです。

5.3 train.py

# 定义U-Net模型
class UNet(nn.Module):
    def __init__(self, in_channels, num_classes, use_gn=False, axial_attention_levels=[]):
        super(UNet, self).__init__()

        # Encoder
        self.enc1 = UNetBlock(in_channels, 32, use_gn)
        self.enc2 = UNetBlock(32, 64, use_gn)
        self.enc3 = UNetBlock(64, 128, use_gn)
        self.enc4 = UNetBlock(128, 256, use_gn, axial_attention=(1 in axial_attention_levels))
        self.enc5 = UNetBlock(256, 512, use_gn, axial_attention=(2 in axial_attention_levels))

        # Decoder
        self.dec1 = UNetBlock(512 + 256, 256, use_gn, axial_attention=(3 in axial_attention_levels))
        self.dec2 = UNetBlock(256 + 128, 128, use_gn, axial_attention=(4 in axial_attention_levels))
        self.dec3 = UNetBlock(128 + 64, 64, use_gn)
        self.dec4 = UNetBlock(64 + 32, 32, use_gn)

        # Final Convolution
        self.final_conv = nn.Conv3d(32, num_classes, kernel_size=1)

    def forward(self, x):
        # Encoder
        x1 = self.enc1(x)
        x2 = self.enc2(F.max_pool3d(x1, 2))
        x3 = self.enc3(F.max_pool3d(x2, 2))
        x4 = self.enc4(F.max_pool3d(x3, 2))
        x5 = self.enc5(F.max_pool3d(x4, 2))

        # Decoder
        x = F.interpolate(x5, scale_factor=2, mode='trilinear', align_corners=True)
        x = self.dec1(torch.cat([x, x4], dim=1))
        x = F.interpolate(x, scale_factor=2, mode='trilinear', align_corners=True)
        x = self.dec2(torch.cat([x, x3], dim=1))
        x = F.interpolate(x, scale_factor=2, mode='trilinear', align_corners=True)
        x = self.dec3(torch.cat([x, x2], dim=1))
        x = F.interpolate(x, scale_factor=2, mode='trilinear', align_corners=True)
        x = self.dec4(torch.cat([x,

プログラム ファイルの名前は train.py で、主に次の部分が含まれています。

  1. AxialAttendant モジュールと UNetBlock モジュールは、U-Net モデルのエンコーダー部分とデコーダー部分を構築するために定義されています。
  2. エンコーダ部分とデコーダ部分を含む完全な U-Net モデルが定義されます。
  3. jpg および png 画像を読み取るための関数が定義され、正規化されています。
  4. 画像データセットをロードするための関数を定義します。
  5. main 関数では、画像と注釈のデータ セットが最初にロードされ、次にシャッフルされてトレーニング セットとテスト セットに分割されます。
  6. U-Net モデルのデコーダー部分を構築し、事前トレーニングされたモデルの出力とのジャンプ接続を実行します。
  7. モデルをコンパイルし、トレーニング パラメーターを設定します。
  8. モデルをトレーニングし、最適な重みファイルを保存します。
  9. 完全なモデルをローカルに保存します。
  10. トレーニング中に精度と損失の曲線をプロットします。
5.4 ui.py

これは、PyQt5 と TensorFlow を使用して実装された医用画像セグメンテーション システムのプログラム ファイルです。 Axial Attendant モジュールと U-Net モデルはプログラムで定義されており、グラフィカル ユーザー インターフェイスの構築には PyQt5 が使用されます。プログラムは主に次の機能を実装します。

  1. データセットをロードする:load_dataset 関数を使用して画像データセットをロードします。
  2. 画像の前処理: read_jpg および read_png 関数を通じて画像ファイルを読み取り、normal_img 関数を使用して画像を正規化します。
  3. 構成の設定: set_config 関数を使用して、マルチスレッドの数やバッチ サイズなどのデータ セットの構成を設定します。
  4. モデルの読み込みと予測:load_model 関数を使用してトレーニング済みの U-Net モデルを読み込み、predict 関数を使用して画像セグメンテーションを予測します。
  5. 画像処理と表示: 予測結果に対してグレースケール、二値化、輪郭描画などの画像処理を実行し、関数 showimg を使用して処理後の画像をグラフィカル インターフェイスに表示します。
  6. グラフィカル インターフェイスの設計: QtDesigner を使用して、ラベル、ボタン、テキスト ボックスなどのコントロールを含むグラフィカル ユーザー インターフェイスを設計し、setupUi 関数を使用してインターフェイスの初期化とレイアウトを行います。
  7. イベント バインディングとスレッドの開始: connect 関数を通じてボタン クリック イベントを対応するスロット関数にバインドし、Thread_1 クラスを通じてスレッド オブジェクトを作成し、start 関数を通じてスレッドを開始します。

このプログラムは、簡単な医用画像セグメンテーション システムを実装しており、ユーザーはセグメンテーション予測用の画像ファイルを選択し、インターフェイスに予測結果を表示することができます。

6. システムの全体構成

全体的な機能とアーキテクチャの概要:

このプロジェクトは、Axial tention & FCN-UNet に基づく医療画像セグメンテーション システムです。これには複数のプログラム ファイルが含まれており、それぞれが異なる機能を担当します。主なプログラム ファイルには、model.py、predict.py、train.py、ui.py、data\check.py、tools\check_img.py、tools\check_seg.py、tools\url_get.py が含まれます。

model.py ファイルは、U-Net モデルのエンコーダー部分とデコーダー部分を構築するために使用される AxialAttendant モジュールと UNet モジュールを定義します。これは、U-Net モデルの定義と作成を実装します。モデルのアテンション メカニズムを強化するために AxialAttendant モジュールが使用されます。

detect.py ファイルは、画像セグメンテーション用のモデル予測プログラムです。トレーニングされた画像セグメンテーション モデルを読み込み、そのモデルを使用して入力画像のセグメンテーションを予測し、予測結果を表示します。

train.py ファイルは、画像セグメンテーション モデルをトレーニングするために使用されます。画像と注釈のデータセットを読み込み、U-Net モデルを構築し、モデル トレーニング用のトレーニング パラメーターを設定します。

ui.py ファイルは PyQt5 を使用してグラフィカル ユーザー インターフェイスを構築しており、ユーザーはセグメンテーション予測用の画像ファイルを選択し、インターフェイスに予測結果を表示できます。

data\check.py ファイルは、画像ファイルを処理し、指定されたフォルダー内の画像ファイルを処理し、処理結果を他のいくつかのフォルダーに保存するために使用されます。

tools\check_img.py ファイルは、ノイズを軽減し、指定したフォルダー内の画像を圧縮するために使用されます。

tools\check_seg.py ファイルは、指定されたフォルダー内のセグメンテーション結果を処理するために使用されます。

tools\url_get.py ファイルは、指定された URL アドレスから画像ファイルをダウンロードするために使用されます。

次の表は、各ファイルの機能をまとめたものです。

ファイル名 関数
モデル.py AxialAttendant モジュールと UNet モジュールを定義して U-Net モデルを構築する
予測.py 画像セグメンテーション モデル予測プログラム。モデルをロードし、画像上でセグメンテーション予測を実行します。
train.py 画像セグメンテーション モデルをトレーニングし、データ セットを読み込み、モデルを構築し、トレーニング用のパラメーターを設定します。
ui.py PyQt5 を使用して画像セグメンテーション予測と結果表示のためのグラフィカル ユーザー インターフェイスを構築する
データ\check.py 画像ファイルを処理し、画像ファイルを処理して他のフォルダーに保存します
tools\check_img.py 指定したフォルダー内の画像に対してノイズ除去と圧縮を実行します。
tools\check_seg.py 指定したフォルダー内のセグメンテーション結果を処理します
ツール\url_get.py 指定したURLアドレスから画像ファイルをダウンロード

7.nnU-Netの改善

nnU-Net コアは、128×128×128 のパッチ サイズで実行される 3D U-Net です。ネットワークはエンコーダ/デコーダ構造になっており、2 つのパスをスキップ接続で接続します。

エンコーダーは、畳み込みダウンサンプリングを備えた同じ解像度の 5 つの畳み込みレイヤーで構成されます。デコーダは同じ構造に従い、転置畳み込みアップサンプリングと、エンコーダ ブランチと同じレベルで動作する連結スキップ機能を使用します。各畳み込み演算の後に、傾き 0.01 の Leaky ReLU (lReLU) とバッチ正規化が使用されます。 mpMRI ボリュームは接続され、4 チャネル入力として使用されます。

nnU-Net は領域ベースのトレーニングを適用し、相互排他的な 3 つの腫瘍サブ領域を予測する代わりに、nnU-Net は 3 つの相互排他的な腫瘍パーティションを予測します。提供されたセグメンテーション ラベルと同様に、ネットワークは増強された腫瘍の 3 つの重複領域を予測します。増強された腫瘍(ET、元の領域)、腫瘍コアまたはTC(ET+壊死性腫瘍)、および腫瘍全体またはWT(ET+NT+ED)。

ネットワークの最後の層のソフトマックスはシグモイドに置き換えられ、各ボクセルをマルチクラス分類問題として扱います。

パブリックおよびプライベートのリーダーボードの計算された指標はこれらの地域に基づいているため、この地域ベースのトレーニングによりパフォーマンスを向上させることができます。追加のシグモイド出力が 2 つの最低レベルを除く各解像度に追加され、深い監視が適用され、初期層への勾配伝播が改善されます。畳み込みフィルターの数は 32 に初期化され、解像度が 2 倍になるたびに最大 320 に達します。

より大きなネットワークとGN

Unet アーキテクチャの継続的な開発と改善の過程で、「画像セグメント化のための U-Net を拡張する」 アーキテクチャを改善する方法性能も応用性も。重要な変更は、ネットワークのサイズを増やすことで、より複雑なタスクとより大きなデータ セットに対処することです。この変更には、デコーダのコンボリューション カーネルの数を変更せずに、エンコーダのコンボリューション カーネルの数を 2 倍にすることが含まれており、この非対称ネットワーク拡張は、Unet の表現機能の向上に役立ちます。

Unet の初期バージョンは、医療画像のセグメンテーションなどのタスクを解決するように設計されていたため、ネットワーク サイズは比較的小さかったです。しかし、ディープラーニング分野の急速な発展とコンピューティングリソースの増加に伴い、研究者は自然画像セグメンテーション、衛星画像解析、高度道路交通システムなど、より幅広い応用分野に Unet を適用し始めています。こうした増大するアプリケーション需要に対応するには、Unet の規模を拡大することが重要になっています。

一般的な変更は、エンコーダ内のコンボリューション カーネルの数を増やすことです。エンコーダのタスクは、入力画像の解像度を徐々に下げ、さまざまなスケールで特徴を抽出することです。コンボリューション カーネルの数を増やすことで、エンコーダーは画像情報をより詳細にキャプチャできるようになり、モデルの表現能力が向上します。これは、より詳細で複雑な構造を持つ画像を処理する場合に重要です。同時に、デコーダの対称性を維持するために、デコーダ内の畳み込みカーネルの数は変更されず、デコーダが画像の解像度を効果的に復元できるようにします。

さらに、より大規模なデータ セットと組み合わせることで、ネットワーク容量を増やすためのこの変更により、さまざまなデータ タイプのより適切なモデリングが可能になります。大規模なデータ セットが利用できるため、ディープ ラーニング モデルをさまざまなシナリオやデータ分布に対してより適切に一般化できます。たとえば、医療画像データセットのサイズは過去数年間で大幅に増加しており、Unet ネットワーク容量を拡張するための変更がより合理的になりました。したがって、現代の Unet モデルには、増大するデータとタスクの複雑さに対処するために、Unet が最初に提案されたときよりも多くのパラメータとより複雑なモデルが含まれることがよくあります。
画像.png

軸方向のアテンションデコーダ

Unet ネットワーク アーキテクチャの継続的な開発と改善は、常にディープ ラーニングの分野における研究の焦点の 1 つです。 Unet の最新の改良点の 1 つは、Axial アテンション デコーダーの導入です。 「Axial-DeepLab: パノプティック セグメンテーション用スタンドアロン Axial-Attendant」およびその他の文書で提案されている Axial アテンション デコーダは、特に 3D 画像セグメンテーション タスクなどの多次元データを処理する場合に、セルフ アテンション メカニズムの革新的なアプリケーションを表しています。このセクションでは、Axial tention の背景と Unet でのその応用について紹介します。

Self-Attention (Transformer) は、入力シーケンスを処理するときにモデルが適応的な注意分布を自動的に学習できるようにする画期的なアイデアです。当初、セルフ アテンション メカニズムは自然言語処理タスクで大きな成功を収めましたが、その後、コンピューター ビジョンの分野で広く使用されるようになりました。ただし、セルフ アテンション メカニズムの大きな課題は、計算の複雑さが入力シーケンスのサイズに応じて二次関数的に増加するため、大規模な画像データに対しては実行不可能な計算負荷がかかることです。この問題は、余分な寸法を持つ 3D データを扱う場合に特に重大です。

軸方向のアテンションは、多次元データにおけるアテンションの計算複雑性の問題を解決する効果的な方法として提案されています。軸方向の注意の中心となるアイデアは、入力データの各軸に独立してセルフ アテンションを適用することです。たとえば、3D 画像データの場合、セルフ アテンション メカニズムを x、y、z 軸にそれぞれ適用できます。この分離されたアプリケーション手法により、アテンション メカニズムの計算の複雑さが二次関数ではなく画像のサイズに線形に関連付けられるため、計算負荷が大幅に軽減され、より幅広いアプリケーションでセルフ アテンションが実現可能になります。

Unet では、転置畳み込みアップサンプリングの出力を処理するために、デコーダ部分に Axial アテンションが導入されています。これは、画像の解像度を復元するプロセスにおいて、モデルが軸方向の注意メカニズムを通じて異なる次元間の相関関係を効果的に捕捉できることを意味し、それによって画像の構造と意味情報をよりよく理解できるようになります。 Axial tention デコーダは、特に余分な次元を含む 3D データを処理する場合に、従来のデコーダよりも多次元データをより適切に処理でき、パフォーマンスが大幅に向上します。

要約すると、Axial アテンション デコーダは Unet アーキテクチャにおける重要な改善を表しており、多次元データを処理する際のセルフ アテンション メカニズムの計算の複雑さの問題を克服します。異なる次元の軸にそれぞれセルフ アテンションを適用することで、Unet は医療画像、自然画像、3D データなどの複雑な画像セグメンテーション タスクをより適切に処理できるようになります。この革新的な応用方法は、深層学習研究に興味深いアイデアを提供し、将来の画像セグメンテーション タスクの可能性を広げます。
画像.png

8. システム統合

以下は完全なソース コードと環境展開ビデオ チュートリアル、データ セット、カスタム UI インターフェイスです。

1.png

参考ブログ「軸方向の注意と FCN-UNet に基づく医療セグメンテーション システム」

おすすめ

転載: blog.csdn.net/cheng2333333/article/details/134999065