🚀 胸部X線画像分析モデル
このモデルは、胸部レントゲン画像(X線画像)に対してセグメンテーションと分類の両方を行うことができます。具体的には、右肺、左肺、心臓のセグメンテーションを行い、胸部X線の視野(AP、PA、側面)、患者の年齢、性別を予測します。
✨ 主な機能
- 胸部レントゲン画像に対するセグメンテーションと分類を同時に行う。
tf_efficientnetv2_s
をバックボーンとし、U-Netデコーダを用いたセグメンテーションと線形層を用いた分類を行う。
- 正面レントゲン画像において、右肺、左肺、心臓のセグメンテーションを行う。
- 胸部X線の視野(AP、PA、側面)、患者の年齢、性別を予測する。
📦 インストール
このモデルを使用するには、transformers
ライブラリが必要です。以下のコマンドでインストールできます。
pip install transformers
💻 使用例
基本的な使用法
import cv2
import torch
from transformers import AutoModel
device = "cuda" if torch.cuda.is_available() else "cpu"
model = AutoModel.from_pretrained("ianpan/chest-x-ray-basic", trust_remote_code=True)
model = model.eval().to(device)
img = cv2.imread(..., 0)
x = model.preprocess(img)
x = torch.from_numpy(x).unsqueeze(0).unsqueeze(0)
x = x.float()
with torch.inference_mode():
out = model(x.to(device))
セグメンテーションマスクを用いた肺領域の切り出し
import numpy as np
def calculate_ctr(mask):
lungs = np.zeros_like(mask)
lungs[mask == 1] = 1
lungs[mask == 2] = 1
heart = (mask == 3).astype("int")
y, x = np.stack(np.where(lungs == 1))
lung_min = x.min()
lung_max = x.max()
y, x = np.stack(np.where(heart == 1))
heart_min = x.min()
heart_max = x.max()
lung_range = lung_max - lung_min
heart_range = heart_max - heart_min
return heart_range / lung_range
DICOM画像の直接読み込み
img = model.load_image_from_dicom(path_to_dicom)
📚 ドキュメント
モデルの構成
このモデルは、tf_efficientnetv2_s
をバックボーンとし、U-Netデコーダを用いたセグメンテーションと線形層を用いた分類を行います。
訓練データ
このモデルは、CheXpert(小規模版)と NIH Chest X-ray のデータセットを用いて訓練されました。セグメンテーションマスクは、CheXmask データセット (論文) から取得されました。
検証性能
Segmentation (Dice similarity coefficient):
Right Lung: 0.957
Left Lung: 0.948
Heart: 0.943
Age Prediction:
Mean Absolute Error: 5.25 years
Classification:
View (AP, PA, lateral): 99.42% accuracy
Female: 0.999 AUC
🔧 技術詳細
モデルのアーキテクチャ
このモデルは、tf_efficientnetv2_s
をバックボーンとし、U-Netデコーダを用いたセグメンテーションと線形層を用いた分類を行います。
訓練方法
このモデルは、最終的に96,385人の患者から335,516枚の画像を含むデータセットを用いて訓練されました。このデータセットは、80%の訓練データと20%の検証データに分割されました。チューニングは最小限に抑えられたため、ホールドアウトテストセットは使用されていません。視野分類器は、側面レントゲン画像がCheXpertにのみ存在するため、CheXpert画像のみを用いて訓練されました(NIH画像は損失関数から除外されました)。これは、あるクラスが単一のデータセットからのみ生成される場合に発生するモデルのバイアスを避けるためです。
📄 ライセンス
このモデルは、デモンストレーションおよび研究目的のみで使用することができます。臨床使用については、いかなる規制機関によっても承認されていません。ユーザーは、このモデルとその出力の使用に関するすべての責任を負います。
情報テーブル
重要提示
⚠️ 重要提示
このモデルは、デモンストレーションおよび研究目的のみで使用することができます。臨床使用については、いかなる規制機関によっても承認されていません。ユーザーは、このモデルとその出力の使用に関するすべての責任を負います。