模型简介
模型特点
模型能力
使用案例
许可证:其他
许可证名称:MSRLA
许可证链接:https://huggingface.co/microsoft/maira-2/blob/main/LICENSE
库名称:transformers
额外授权提示:
请确认您已阅读并同意以下免责声明。
本仓库描述的模型和/或软件仅供研究和开发使用。该模型和/或软件不适用于临床决策或任何其他临床用途,且其临床用途的性能尚未确定。您对使用这些模型和/或软件承担全部责任,包括将其整合到任何用于临床用途的产品中。
额外授权字段:
我已阅读并同意免责声明:复选框
MAIRA-2 模型卡
MAIRA-2 是一种多模态变换器,设计用于从胸部X光片生成有基础或无基础的放射学报告。更多细节请参阅 MAIRA-2: Grounded Radiology Report Generation (S. Bannur, K. Bouzid et al., 2024)。MAIRA-2 仅用于研究目的,共享以促进比较和进一步研究。
模型详情
模型描述
MAIRA-2 由图像编码器 RAD-DINO-MAIRA-2(冻结使用)、投影层(从头训练)和语言模型 vicuna-7b-v1.5(完全微调)组成。
- 开发团队: Microsoft Research Health Futures
- 模型类型: 多模态变换器
- 语言(NLP): 英语
- 许可证: MSRLA
- 微调自模型: vicuna-7b-1.5, RAD-DINO-MAIRA-2
用途
MAIRA-2 仅用于研究目的,不适用于临床实践。MAIRA-2 未对其能力和属性进行广泛测试,包括其在实际应用中的准确性和可靠性、跨不同人群和用途的公平性,以及安全性和隐私性。
直接使用
MAIRA-2 的输入包括一张正面胸部X光片,以及以下任意一项:
- 当前研究的侧面视图
- 先前研究的正面视图,附带先前报告
- 当前研究的适应症
- 当前研究的技术和比较部分
MAIRA-2 可以生成当前研究的“发现”部分,形式如下:
- 叙述性文本,无任何图像注释(典型的报告生成场景)。
- 基础报告,其中所有描述的发现均附带零个或多个边界框,指示其在当前正面图像上的位置。
MAIRA-2 还可以执行短语定位。在这种情况下,还需提供一个输入短语。模型将重复该短语并生成一个边界框,定位短语中描述的发现。
这些用例在以下示例代码中进行了说明。
超出范围的用途
MAIRA-2 仅在成人胸部X光片和英语报告上进行训练,不适用于其他成像模式或解剖结构。输入提示的变化(例如更改指令)可能会降低性能,因为此模型未针对任意用户输入进行优化。
如上所述,这是一个研究模型,不应在任何实际临床或生产场景中使用。
偏见、风险和限制
数据偏见
MAIRA-2 在来自西班牙(从原始西班牙语翻译为英语)和美国的胸部X光报告数据集上进行训练,如下所列。报告风格、患者人口统计和疾病流行率以及图像采集协议可能因卫生系统和地区而异。这些因素将影响模型的泛化能力。
模型错误(虚构、遗漏)
此模型在其任务上表现并不完美,详情请参阅 MAIRA-2 报告。因此,生成的(基础)报告中可能存在错误。
如何开始使用模型
我们以下演示如何运行 MAIRA-2 的三种功能:有基础和无基础的发现生成,以及短语定位。
设置
运行此示例代码需要以下包:
pillow
protobuf
sentencepiece
torch
transformers
注意:由于 MAIRA-2 需要 transformers>=4.46.0.dev0
,您可能需要暂时从源代码安装 transformers。由于 transformers 主分支中的不兼容提交,当前的解决方法是安装 transformers 版本,该版本来自或之后提交 88d960937c81a32bfb63356a2e8ecf7999619681,但早于提交 0f49deacbff3e57cde45222842c0db6375e4fa43。
pip install git+https://github.com/huggingface/transformers.git@88d960937c81a32bfb63356a2e8ecf7999619681
首先,初始化模型并将其置于评估模式。
from transformers import AutoModelForCausalLM, AutoProcessor
from pathlib import Path
import torch
model = AutoModelForCausalLM.from_pretrained("microsoft/maira-2", trust_remote_code=True)
processor = AutoProcessor.from_pretrained("microsoft/maira-2", trust_remote_code=True)
device = torch.device("cuda")
model = model.eval()
model = model.to(device)
我们需要获取一些数据来演示前向传递。
在此示例中,我们将从 IU X-ray 数据集中收集一个示例,该数据集具有宽松的许可证。
import requests
from PIL import Image
def get_sample_data() -> dict[str, Image.Image | str]:
"""
从 IU-Xray 下载胸部X光片,我们未在 MAIRA-2 上训练。许可证为 CC。
我们修改了此函数,来自 Huggingface 上的 Rad-DINO 仓库。
"""
frontal_image_url = "https://openi.nlm.nih.gov/imgs/512/145/145/CXR145_IM-0290-1001.png"
lateral_image_url = "https://openi.nlm.nih.gov/imgs/512/145/145/CXR145_IM-0290-2001.png"
def download_and_open(url: str) -> Image.Image:
response = requests.get(url, headers={"User-Agent": "MAIRA-2"}, stream=True)
return Image.open(response.raw)
frontal_image = download_and_open(frontal_image_url)
lateral_image = download_and_open(lateral_image_url)
sample_data = {
"frontal": frontal_image,
"lateral": lateral_image,
"indication": "Dyspnea.",
"comparison": "None.",
"technique": "PA and lateral views of the chest.",
"phrase": "Pleural effusion." # 用于短语定位示例。此患者有胸腔积液。
}
return sample_data
sample_data = get_sample_data()
用例 1 和 2:有基础或无基础的发现生成
我们可以通过预处理输入的方式切换 MAIRA-2 是否生成基础报告,因为它使用不同的提示。让我们从无基础开始(get_grounding=False
)。在生成时,对于无基础报告使用 max_new_tokens=300
,对于基础报告使用 max_new_tokens=450
以适应额外的框和对象标记。
processed_inputs = processor.format_and_preprocess_reporting_input(
current_frontal=sample_data["frontal"],
current_lateral=sample_data["lateral"],
prior_frontal=None, # 我们的示例无先前研究
indication=sample_data["indication"],
technique=sample_data["technique"],
comparison=sample_data["comparison"],
prior_report=None, # 我们的示例无先前报告
return_tensors="pt",
get_grounding=False, # 在此示例中我们生成无基础报告
)
processed_inputs = processed_inputs.to(device)
with torch.no_grad():
output_decoding = model.generate(
**processed_inputs,
max_new_tokens=300, # 对于基础报告设置为 450
use_cache=True,
)
prompt_length = processed_inputs["input_ids"].shape[-1]
decoded_text = processor.decode(output_decoding[0][prompt_length:], skip_special_tokens=True)
decoded_text = decoded_text.lstrip() # 发现生成完成有一个前导空格
prediction = processor.convert_output_to_plaintext_or_grounded_sequence(decoded_text)
print("解析后的预测:", prediction)
我们得到类似以下内容:
存在大量右侧胸腔积液,伴有右侧基底肺不张。左肺清晰。未发现气胸。心脏纵隔轮廓和肺门轮廓正常。膈下无游离气体。右上腹部可见手术夹。
如果我们将 get_grounding=True
,MAIRA-2 将生成基础报告。在此示例中,结果如下:
('存在大量右侧胸腔积液。', [(0.055, 0.275, 0.445, 0.665)]),
('左肺清晰。', None),
('未发现气胸。', None),
('心脏纵隔轮廓在正常范围内。', None),
('可见的骨性结构无异常。', None)
生成的边界框坐标是框的左上角和右下角的 (x, y)
坐标,例如 (x_topleft, y_topleft, x_bottomright, y_bottomright)
。这些坐标相对于裁剪后的图像(即 MAIRA-2 最终接收到的输入图像),因此在可视化时需要小心。处理器提供了 adjust_box_for_original_image_size
方法,用于获取相对于原始图像尺寸的框。
请注意,MAIRA-2 在基础和非基础报告场景中生成的报告略有不同,这是由于其基础报告训练数据来自不同的数据分布。
用例 3:短语定位
此处的输入不同,因为我们向模型提供了一个需要在图像中定位的短语。回想(get_sample_data
),我们的短语是“Pleural effusion”,我们已经知道它存在于该图像中。
processed_inputs = processor.format_and_preprocess_phrase_grounding_input(
frontal_image=sample_data["frontal"],
phrase=sample_data["phrase"],
return_tensors="pt",
)
processed_inputs = processed_inputs.to(device)
with torch.no_grad():
output_decoding = model.generate(
**processed_inputs,
max_new_tokens=150,
use_cache=True,
)
prompt_length = processed_inputs["input_ids"].shape[-1]
decoded_text = processor.decode(output_decoding[0][prompt_length:], skip_special_tokens=True)
prediction = processor.convert_output_to_plaintext_or_grounded_sequence(decoded_text)
print("解析后的预测:", prediction)
这将给出类似以下内容:
('胸腔积液。', [(0.025, 0.345, 0.425, 0.575)])
同样,对于基础报告,我们必须记住边界框坐标相对于 MAIRA-2 看到的裁剪图像,使用 processor.adjust_box_for_original_image_size
获取相对于原始图像尺寸的框。
训练详情
我们最初并未使用此处提供的确切模型类训练 MAIRA-2,但我们已验证其行为相同。我们提供此类以促进研究重用和推理。
训练数据
MAIRA-2 在公共和私有的胸部X光数据集混合上进行训练。每个示例包括一个或多个 CXR 图像和相关报告文本,有或没有基础(空间注释)。模型训练用于生成报告的“发现”部分,有或没有基础。
数据集 | 国家 | 无基础示例数 | 有基础示例数 |
---|---|---|---|
MIMIC-CXR | 美国 | 55 218 | 595* |
PadChest | 西班牙 | 52 828 | 3 122 |
USMix(私有) | 美国 | 118 031 | 53 613 |
*我们使用 MS-CXR 短语定位数据集从 MIMIC-CXR 提供“基础”示例。
环境影响
碳排放可以使用 Lacoste et al. (2019) 中提出的 Machine Learning Impact 计算器 进行估算。
- 硬件类型: NVIDIA A100 GPU
- 使用小时数: 1432
- 云提供商: Azure
- 计算区域: 美国西部 2
- 碳排放: 107.4 CO₂ eq(据称由该提供商抵消)
引用
BibTeX:
@article{Bannur2024MAIRA2GR,
title={MAIRA-2: Grounded Radiology Report Generation},
author={Shruthi Bannur and Kenza Bouzid and Daniel C. Castro and Anton Schwaighofer and Anja Thieme and Sam Bond-Taylor and Maximilian Ilse and Fernando P\'{e}rez-Garc\'{i}a and Valentina Salvatelli and Harshita Sharma and Felix Meissen and Mercy Prasanna Ranjit and Shaury Srivastav and Julia Gong and Noel C. F. Codella and Fabian Falck and Ozan Oktay and Matthew P. Lungren and Maria T. A. Wetscherek and Javier Alvarez-Valle and Stephanie L. Hyland},
journal={arXiv},
year={2024},
volume={abs/2406.04449},
url={https://arxiv.org/abs/2406.04449}
}
APA:
Bannur*, S., Bouzid*, K., Castro, D. C., Schwaighofer, A., Thieme, A., Bond-Taylor, S., Ilse, M., Pérez-García, F., Salvatelli, V., Sharma, H., Meissen, F., Ranjit, M.P., Srivastav, S., Gong, J., Codella, N.C.F., Falck, F., Oktay, O., Lungren, M.P., Wetscherek, M.T., Alvarez-Valle, J., & Hyland, S. L. (2024). MAIRA-2: Grounded Radiology Report Generation. arXiv preprint abs/2406.04449.
模型卡联系人
- Stephanie Hyland (
stephanie.hyland@microsoft.com
) - Shruthi Bannur (
shruthi.bannur@microsoft.com
)








