🚀 トランスフォーマーモデル
このモデルは、スクリーニングマンモグラフィーに基づいて乳がんと乳房密度を予測するアンサンブルモデルです。乳房の健康状態を効果的に評価することができます。
🚀 クイックスタート
このモデルは、スクリーニングマンモグラフィーに基づいて乳がんと乳房密度を予測するアンサンブルモデルです。モデルは3つの基本的なCNN(tf_efficientnetv2_s
バックボーン)を使用し、提供された各画像(すなわち、CCおよびMLOビュー)に対して推論を行います。アンサンブル内の各ネットワークは、異なる解像度(2048 x 1024、1920 x 1280、および1536 x 1536)を使用します。最終的な出力は、提供されたビューとニューラルネットワーク全体で平均化されます。モデルは単一のビュー(画像)に対しても推論を行うことができますが、性能は低下します。
ハイブリッド分類-セグメンテーションモデルは、まずDigital Database for Screening Mammographyの精選乳房画像サブセット(CBIS - DDSM)で事前学習されました。このデータセットには、良性および悪性の腫瘤や石灰化に関するROIアノテーション付きのフィルムマンモグラフィー研究(デジタルではなく)が含まれています。
得られたモデルは、RSNA Screening Mammography Breast Cancer Detection challengeのデータでさらに学習されました。データは80%/10%/10%のトレイン/検証/テストに分割されました。評価は10%のホールドアウトテスト分割で行われました。この手順は、モデルの性能をより適切に評価するために3回繰り返されました。提供された重みは、最初のデータ分割からのものです。
学習中に指数移動平均が使用され、性能が向上しました。
モデルは切り抜かれた画像を使用して学習されているため、推論の前に画像を切り抜くことが推奨されます。切り抜きモデルはこちらで提供されています:https://huggingface.co/ianpan/mammo - crop
主な評価指標は、受信者動作特性曲線の下の面積(AUC/AUROC)です。以下は、3つの分割にわたる平均と標準偏差です。
Split 1: 0.9464
Split 2: 0.9467
Split 3: 0.9422
Mean (std.): 0.9451 (0.002)
これはスクリーニングテストであるため、高い感度が望まれます。また、様々な感度での特異度も計算されており、以下に示します(3つの分割にわたる平均):
Sensitivity: 98.1%, Specificity: 65.4% +/- 7.2%, Threshold: 0.0072 +/- 0.0021
Sensitivity: 94.3%, Specificity: 78.7% +/- 0.9%, Threshold: 0.0127 +/- 0.0011
Sensitivity: 90.5%, Specificity: 84.8% +/- 2.7%, Threshold: 0.0184 +/- 0.0027
💻 使用例
基本的な使用法
import cv2
import torch
from transformers import AutoModel
def crop_mammo(img, model, device):
img_shape = torch.tensor([img.shape[:2]]).to(device)
x = model.preprocess(img)
x = torch.from_numpy(x).expand(1, 1, -1, -1).float().to(device)
with torch.inference_mode():
coords = model(x, img_shape)
coords = coords[0].cpu().numpy()
x, y, w, h = coords
return img[y: y + h, x: x + w]
device = "cuda:0"
crop_model = AutoModel.from_pretrained("ianpan/mammo-crop", trust_remote_code=True)
crop_model = crop_model.eval().to(device)
model = AutoModel.from_pretrained("ianpan/mammoscreen", trust_remote_code=True)
model = model.eval().to(device)
cc_img = cv2.imread("mammo_cc.png", cv2.IMREAD_GRAYSCALE)
mlo_img = cv2.imread("mammo_mlo.png", cv2.IMREAD_GRAYSCALE)
cc_img = crop_mammo(cc_img, crop_model, device)
mlo_img = crop_mammo(mlo_img, crop_model, device)
with torch.inference_mode():
output = model({"cc": cc_img, "mlo": mlo_img}, device=device)
高度な使用法
モデルはforward
関数内でデータを必要な形式に前処理します。output
はcancer
とdensity
の2つのキーを含む辞書です。output['cancer']
は形状が(N, 1)のテンソルで、output['density']
は形状が(N, 4)のテンソルです。予測された密度クラスが必要な場合は、argmaxを取ります:output['density'].argmax(1)
。単一の研究のみが提供された場合、N = 1です。
各ニューラルネットワークには、model.net{i}
を使用して個別にアクセスすることもできます。ただし、前処理はforward
関数の外で適用する必要があります。
input_dict = model.net0.preprocess({"cc": cc_img, "mlo": mlo_img}, device=device)
with torch.inference_mode():
out = model.net0(input_dict)
モデルはバッチ推論もサポートしています。各乳房に対して辞書を構築し、辞書のリストをモデルに渡します。たとえば、2人の患者(pt1
、pt2
)の各乳房に対して推論を行いたい場合:
cc_images = ["rt_pt1_cc.png", "lt_pt1_cc.png", "rt_pt2_cc.png", "lt_pt2_cc.png"]
mlo_images = ["rt_pt1_mlo.png", "lt_pt1_mlo.png", "rt_pt2_mlo.png", "lt_pt2_mlo.png"]
cc_images = [cv2.imread(_, cv2.IMREAD_GRAYSCALE) for _ in cc_images]
mlo_images = [cv2.imread(_, cv2.IMREAD_GRAYSCALE) for _ in mlo_images]
cc_images = [crop_mammo(_, crop_model, device) for _ in cc_images]
mlo_images = [crop_mammo(_, crop_model, device) for _ in mlo_images]
input_dict = [{"cc": cc_img, "mlo": mlo_img} for cc_img, mlo_img in zip(cc_images, mlo_images)]
with torch.inference_mode():
output = model(input_dict, device=device)
画像をDICOMから8ビットのPNG/JPEGに変換する場合、ルックアップテーブルをピクセル値に適用することが重要です。これはpydicom.pixels.apply_voi_lut
を使用して行うことができます。pydicom
がインストールされている場合、DICOM画像を直接読み込むこともでき、適切な8ビット変換を自動的に行います:
img = model.load_image_from_dicom(path_to_dicom)
📚 詳細ドキュメント
モデルはforward
関数内でデータを必要な形式に前処理します。output
はcancer
とdensity
の2つのキーを含む辞書です。output['cancer']
は形状が(N, 1)のテンソルで、output['density']
は形状が(N, 4)のテンソルです。予測された密度クラスが必要な場合は、argmaxを取ります:output['density'].argmax(1)
。単一の研究のみが提供された場合、N = 1です。
各ニューラルネットワークには、model.net{i}
を使用して個別にアクセスすることもできます。ただし、前処理はforward
関数の外で適用する必要があります。
モデルはバッチ推論もサポートしています。各乳房に対して辞書を構築し、辞書のリストをモデルに渡します。
📄 ライセンス
このモデルは、Apache - 2.0ライセンスの下で提供されています。
プロパティ |
詳細 |
モデルタイプ |
画像分類のアンサンブルモデル |
学習データ |
Curated Breast Imaging Subset of Digital Database for Screening Mammography (CBIS - DDSM) と RSNA Screening Mammography Breast Cancer Detection challenge のデータ |
⚠️ 重要提示
モデルは切り抜かれた画像を使用して学習されているため、推論の前に画像を切り抜くことが推奨されます。切り抜きモデルはこちらで提供されています:https://huggingface.co/ianpan/mammo - crop
💡 使用アドバイス
画像をDICOMから8ビットのPNG/JPEGに変換する場合、ルックアップテーブルをピクセル値に適用することが重要です。これはpydicom.pixels.apply_voi_lut
を使用して行うことができます。pydicom
がインストールされている場合、DICOM画像を直接読み込むこともでき、適切な8ビット変換を自動的に行います。