【第五章:计算机视觉-计算机视觉在医学领域中应用】1.生物细胞检测实战-(3)基于YOLO的细胞检测实战:数据读取、模型搭建、训练与测试
第五章:计算机视觉-计算机视觉在医学领域中应用
第一部分:生物细胞检测实战
第三节:基于YOLO的细胞检测实战:数据读取、模型搭建、训练与测试
一、项目背景
在医学影像分析中,生物细胞检测是一个极具挑战性的任务。显微镜图像中的细胞往往具有以下特征:
形态差异显著(圆形、椭圆、不规则形)
边界模糊、重叠严重
光照和染色条件复杂
传统的图像分割或阈值法难以准确检测出每个细胞的位置与类别,因此我们采用深度学习中的YOLO目标检测算法,实现自动化细胞检测。
本节将基于 YOLOv8 架构,完成从数据准备 → 模型搭建 → 训练 → 测试 → 可视化的完整流程。
二、项目整体流程
本项目完整流程如下图所示:
显微镜图像 → 数据标注(Labelme/CVAT) → COCO格式数据集 ↓
数据加载(DataLoader) → YOLOv8模型构建 → 模型训练(Train) ↓
模型测试(Test) → 性能评估(mAP, Precision, Recall) → 可视化(Detection Result)
三、数据集准备
1. 数据来源
我们使用公开的 Cell Detection Dataset (CBB) 或自定义采集的显微镜图像作为训练集。
数据格式如下:
cell_dataset/├── images/│ ├── train/│ ├── val/│ └── test/├── labels/│ ├── train/│ ├── val/│ └── test/└── data.yaml
2. 标注格式
YOLO数据标签采用TXT格式,每一行代表一个细胞目标:
<class_id> <x_center> <y_center> <width> <height>
所有坐标均为相对坐标(范围0~1)。
例如:
0 0.523 0.612 0.075 0.084
0 0.712 0.455 0.068 0.090
3. 数据配置文件(data.yaml)
train: ./cell_dataset/images/train
val: ./cell_dataset/images/val
test: ./cell_dataset/images/testnc: 1
names: ['cell']
四、环境搭建
1. 安装依赖
pip install ultralytics
pip install opencv-python matplotlib
2. 检查GPU环境
import torch
print("CUDA Available:", torch.cuda.is_available())
输出为 True
则说明可使用GPU加速训练。
五、数据读取模块搭建
YOLO框架自带了数据加载模块(torch.utils.data.Dataset
封装),我们也可以手动验证加载情况。
from ultralytics import YOLO
import cv2
import matplotlib.pyplot as plt# 载入数据样本查看
img_path = 'cell_dataset/images/train/sample1.jpg'
img = cv2.imread(img_path)[:, :, ::-1]
plt.imshow(img)
plt.title("Sample Cell Image")
plt.show()
这一步的目的是确认图片路径和标注是否正确加载。
六、模型搭建
YOLOv8 提供了多个模型版本(n/s/m/l/x),我们在实验中选择轻量化版本:
from ultralytics import YOLO# 加载预训练模型
model = YOLO('yolov8n.pt')# 修改检测头类别数量
model.model[-1].nc = 1 # 仅检测cell类
七、模型训练
1. 启动训练
yolo task=detect mode=train model=yolov8n.pt data=cell_dataset/data.yaml epochs=100 imgsz=640 batch=16
主要参数解释:
task=detect
:目标检测任务epochs=100
:训练轮数imgsz=640
:输入图像尺寸batch=16
:每批训练样本数量
2. 训练过程输出
训练过程中会输出如下指标:
指标 | 含义 |
---|---|
box_loss | 边界框定位误差 |
cls_loss | 分类误差 |
dfl_loss | 边界框分布损失 |
mAP50 | IoU=0.5下的平均精度 |
mAP50-95 | 不同IoU下的平均精度 |
可视化的 loss / mAP 曲线如下所示:
📊 训练曲线图(Loss 与 mAP 变化)
(可使用 matplotlib 绘制或查看 YOLO 输出目录中的 results.png
)
from PIL import Image
img = Image.open('runs/detect/train/results.png')
img.show()
八、模型测试与推理
训练完成后,可使用以下命令进行推理测试:
yolo task=detect mode=predict model=runs/detect/train/weights/best.pt source=cell_dataset/images/test/
执行后,检测结果将保存在:
runs/detect/predict/
我们可以可视化测试结果:
from IPython.display import Image
Image(filename='runs/detect/predict/sample1.jpg', width=600)
九、模型性能评估
YOLO框架自动计算各项指标(Precision、Recall、mAP)。
在医学细胞检测中,一般重点关注:
Precision(查准率):检测出的目标中有多少是真实细胞;
Recall(召回率):实际存在的细胞中有多少被检测出;
mAP(平均精度):综合衡量模型检测性能。
示例结果如下:
指标 | 数值 |
---|---|
Precision | 0.96 |
Recall | 0.91 |
mAP@0.5 | 0.94 |
mAP@0.5:0.95 | 0.87 |
十、模型部署与应用
在医学场景中,部署环节尤为重要。YOLOv8 模型可以导出为多种格式,适配不同硬件平台:
yolo export model=best.pt format=onnx
yolo export model=best.pt format=engine # TensorRT
部署示例(ONNX Runtime推理):
import onnxruntime as ort
import cv2
import numpy as npsession = ort.InferenceSession("best.onnx")
img = cv2.imread("test_cell.jpg")
# 预处理与推理略
十一、小结
通过本节的实战,我们完成了:
医学细胞检测任务的数据集准备;
使用YOLOv8模型进行训练与推理;
评估了模型在细胞检测中的性能;
实现了可部署的推理模型。
YOLO凭借高效的结构与实时性,为自动化细胞分析提供了强大工具,极大提升了病理分析和生物实验的效率。