痤疮作为全球最常见的皮肤问题之一,影响着超过85%的青少年人群。传统诊断方式主要依赖皮肤科医生的视觉评估,存在主观性强、效率低下等问题。这个毕业设计项目通过YOLOv11目标检测算法构建自动化痤疮检测系统,为医疗辅助诊断提供了新的技术思路。
我在实际开发中发现,基于深度学习的皮肤病变检测系统需要解决三个核心难题:小目标检测精度、多类别痤疮的区分能力,以及临床实用性的平衡。这也是为什么选择YOLOv11作为基础框架——它在保持YOLO系列实时性的同时,通过更高效的网络结构和注意力机制,显著提升了小目标检测性能。
项目采用YOLOv11而非更常见的YOLOv5/v8,主要基于以下考量:
实测对比显示,在自建痤疮数据集上,YOLOv11的mAP@0.5达到89.2%,比YOLOv5s高出6.3个百分点。
医疗图像处理需要特殊的数据增强策略:
python复制# 典型的数据增强配置
train_transforms = [
MosaicAugmentation(img_scale=(640, 640)),
RandomAffine(
degrees=(-5, 5),
translate=(0.1, 0.1),
scale=(0.8, 1.2)),
MixUpAugmentation(alpha=1.5),
HSVAdjustment(
h_gain=0.015,
s_gain=0.7,
v_gain=0.4),
RandomFlip(p=0.5)
]
特别注意:
将痤疮分为4个临床相关类别:
| 类型 | 特征描述 | 标注要点 |
|---|---|---|
| 粉刺 | 直径1-3mm的白色/黑色小点 | 需标注完整轮廓 |
| 丘疹 | 红色隆起,直径3-5mm | 包含周围红肿区域 |
| 脓疱 | 可见脓液的黄色病变 | 标注脓液区域 |
| 结节 | 深部硬结,直径>5mm | 标注可触及范围 |
python复制class ECA(nn.Module):
def __init__(self, channel, gamma=2, b=1):
super().__init__()
k_size = int(abs((math.log(channel, 2) + b) / gamma))
k_size = k_size if k_size % 2 else k_size + 1
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.conv = nn.Conv1d(1, 1, kernel_size=k_size,
padding=(k_size - 1) // 2, bias=False)
def forward(self, x):
y = self.avg_pool(x)
y = self.conv(y.squeeze(-1).transpose(-1, -2))
y = y.transpose(-1, -2).unsqueeze(-1)
return x * y.expand_as(x)
系统界面包含三个核心模块:
重要提示:医疗系统必须保留人工复核功能,所有AI结果需标注"辅助诊断建议"字样
部署时采用TensorRT加速,关键配置:
bash复制trtexec --onnx=yolov11.onnx \
--saveEngine=yolov11.engine \
--fp16 \
--workspace=2048 \
--minShapes=images:1x3x640x640 \
--optShapes=images:8x3x640x640 \
--maxShapes=images:16x3x640x640
实测数据:
这个项目最让我意外的是,模型在检测闭合性粉刺时表现优于部分初级医师。但在炎症性痤疮的判断上,仍需结合患者的病史信息。建议在实际部署时,保留医生修改标注结果的功能,这些修正数据可以持续反哺模型优化。