YOLOv11模型在医学图像分割中的应用

在计算机视觉领域,YOLO(You Only Look Once)系列模型因其高效和准确性而广受欢迎。YOLOv11作为该系列的最新成员,不仅继承了前辈的优势,还在精度、内存和运行时间上进行了优化。本文将探讨如何将YOLOv11模型应用于医学图像分割,特别是骨盆X光图像的分割任务。通过在Roboflow Universe上的Pelvis X-ray数据集上进行模型的再训练,可以使模型能够识别并分割出图像中特定区域的物体。

模型的微调和应用场景

YOLOv11模型的微调可以计算出与图像中物体出现区域相对应的分割掩码。这种微调后的模型可以在多个领域得到应用,包括但不限于:

  • 医学诊断:模型可以帮助医生诊断与骨盆相关的疾病,如骨折或退行性疾病,加速治疗过程。
  • 医学培训:它可以作为医学生和放射科医生的教育工具,帮助识别和区分骨盆前后位X光片中的股骨类别。
  • 损伤分析:在运动医学和理疗中,模型可以跟踪和分析髋部损伤的恢复情况,从而制定更有效的康复计划。
  • 法医人类学:法医专家可以利用模型识别骨盆的关键特征,这对于确定未知遗骸的性别、年龄和其他标识符至关重要。
  • AI驱动的假肢:模型可以为高级假肢开发提供支持,提供精确的髋关节对齐数据。

训练前的准备

要开始训练模型,首先需要安装ultralytics包。此外,将使用roboflow来获取数据集,并使用supervision来可视化最终结果。在Colab或Jupyter Notebook中运行以下命令来安装必要的包:

%pip install ultralytics supervision roboflow

ultralytics包包含了YOLO的命令行界面(CLI),简化了训练、验证和推理等任务,无需修改代码。CLI支持多种模式,包括检测、分类、姿态跟踪和分割,是开始训练的理想选择。

在自定义数据集上训练YOLO11

将使用来自Roboflow Universe的标记好的Pelvis X-ray数据集。如果有一组未标记的图像,可以参考相关文档进行数据标记。如果已经有了正确格式的标记数据集,可以直接使用。如果上传图像到仪表板,可以进行标记、形成数据集、应用后处理和增强,然后下载所需格式的数据集。

以下是从Universe获取数据集的步骤:

  1. 导航到数据集页面。
  2. 点击左侧的“数据集”。
  3. 在右侧点击“下载数据集”。
  4. 选择Yolov11,勾选“显示下载代码”,然后点击“继续”。

确保在datasets文件夹中工作,然后运行数据集下载代码。

!mkdir {HOME}/datasets %cd {HOME}/datasets from roboflow import Roboflow rf = Roboflow(api_key="<YOUR_API_KEY>") project = rf.workspace("ks-fsm9o").project("pelvis-ap-x-ray") version = project.version(3) dataset = version.download("yolov11")

可以安全地将API密钥存储在Colab Secrets中。有关如何存储密钥的参考,请查看相关图片。在这样做之前,不要公开分享Colab!

训练自定义YOLO11实例分割模型

现在有了自定义数据集,可以开始训练YOLO11实例分割模型了。让回到主文件夹并开始训练。

%cd {HOME} !yolo task=detect mode=train model=yolo11s-seg.pt data={dataset.location}/data.yaml epochs=10 imgsz=640 plots=True

训练完成后,可以通过执行以下代码来检查结果,包括混淆矩阵、预测和验证批次:

from IPython.display import Image as IPyImage IPyImage(filename=f'{HOME}/runs/segment/train/confusion_matrix.png', width=600) IPyImage(filename=f'{HOME}/runs/segment/train/results.png', width=600) IPyImage(filename=f'{HOME}/runs/segment/train/val_batch0_pred.jpg', width=600)

使用自定义YOLO11模型进行推理

完成模型训练后,将有一组训练好的权重可供使用。这些权重将位于项目中的/runs/detect/train/weights/best.pt文件夹中。可以将模型权重上传到Roboflow Deploy,以使用无限可扩展基础设施。也可以在自己的硬件上使用Roboflow Inference运行模型。

要上传模型权重,请使用以下代码:

project.version(dataset.version).deploy(model_type="yolov11", model_path=f"{HOME}/runs/detect/train/")

处理模型权重可能需要几分钟时间。然后,将提供一个API,可以使用它来运行模型。然后,可以使用Roboflow Python包来查询模型:

import os, random, cv2 import supervision as sv import IPython # load model model = project.version(dataset.version).model # choose random test set image test_set_loc = dataset.location + "/test/images/" random_test_image = random.choice(os.listdir(test_set_loc)) print("running inference on " + random_test_image) pred = model.predict(test_set_loc + random_test_image, confidence=40, overlap=30) detections = sv.Detections.from_inference(pred) image = cv2.imread(test_set_loc + random_test_image)

注意,一些类别名称是拉丁语,一些是土耳其语。让将其更改为拉丁语和英语。

name_dictionary = { "SUORCIL": "SOURCIL", "SAKRO-ILIAK-EKLEM": "SACROILIAC-JOINT", "ILIAK": "ILIUM" } detections.data["class_name"] = [ name_dictionary.get(class_name, class_name) for class_name in detections.data["class_name"] ]

现在,可以可视化模型预测:

mask_annotator = sv.MaskAnnotator() label_annotator = sv.LabelAnnotator(text_color=sv.Color.BLACK, text_position=sv.Position.CENTER) annotated_image = image.copy() mask_annotator.annotate(annotated_image, detections=detections) label_annotator.annotate(annotated_image, detections=detections) sv.plot_image(annotated_image, size=(10, 10))

部署

恭喜!已经成功训练了YOLO11模型。让通过将其部署到Roboflow并使用推理来完成这个过程。注意:API密钥应该是针对项目的!如果迄今为止使用了工作区,那么在创建自己的项目之前,部署将无法工作。

project.version(dataset.version).deploy(model_type="yolov11-seg", model_path=f"{HOME}/runs/segment/train/")

这可能需要几分钟时间来完成。完成后,将能够从任何设备访问模型:

pip install inference import cv2 import supervision as sv from inference import get_model model_id = project.id.split("/")[1] + "/" + dataset.version model = get_model(model_id, "<ROBOFLOW_API_KEY>") image = cv2.imread("<PATH_TO_IMAGE>") result = model.infer(image) detections = sv.Detections.from_inference(result)

在本文中,展示了如何训练YOLO11模型进行实例分割。模型最初对80个COCO类别有所了解,但通过在Roboflow Universe上找到的数据集,将其带入了医学领域,教会了它在骨盆X光图像中分割物体。然后将其部署到Roboflow,允许从其他机器上查询它!完整的代码可在Notebook中找到。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485