基于YOLOv11m_GAM_Attention的肺结节检测系统
一、项目结构
1.1 目录结构解析
本项目采用标准化Web应用结构设计,主要包含以下核心组件:
lung-nodule-detection/
│
├── app.py # Flask应用主入口,处理HTTP请求和路由控制
├── detect.py # YOLOv11检测核心模块,封装模型推理逻辑
├── best.pt # 预训练模型权重文件(基于GAM改进的YOLOv11m)
├── requirements.txt # Python依赖清单(含Flask 2.0+、PyTorch 1.12+等)
│
├── static/ # 静态资源存储目录
│ ├── uploads/ # 临时存储用户上传的CT图像(支持<5MB文件)
│ ├── results/ # 检测结果存储区(含可视化图像及CSV数据)
│ ├── images/ # 系统界面视觉素材
│ │ └── yolov11.jpg # 768x432像素系统背景展示图
│ └── fonts/ # 中文渲染字体库
│ └── simhei.ttf # 思源黑体常规字体文件
│
└── templates/ # Jinja2模板引擎目录
├── index.html # 主界面模板(含文件上传表单及结果展示区)
└── exit.html # 系统退出确认页面模板
1.2 关键文件说明
- app.py:实现Flask Web服务的核心控制器,包含文件上传处理(POST路由)、结果渲染(GET路由)和异常处理机制
- detect.py:集成YOLOv11推理引擎,提供
detect_image()
方法实现:图像预处理→模型推理→结果解析→可视化渲染全流程 - best.pt:经过肺结节数据集(含12000+标注样本)微调的模型权重,输入尺寸640×640,mAP50达88.8%
二、功能特点
2.1 核心检测功能
- 支持上传标准DICOM转换后的二维切片图像(PNG/JPG/JPEG),最大分辨率支持4096×4096
- 采用多线程异步处理机制,确保上传→检测→结果显示全流程响应时间<3s(Tesla T4 GPU环境)
2.2 可视化展示系统
- 检测结果面板显示:
- 带BBox标注的可视化图像(采用CV2绘制,标注框颜色按置信度梯度变化)
- 统计面板:总检测耗时(ms级精度)、检出目标数量、各目标置信度分布直方图
- 交互式目标选择:
- 下拉菜单动态生成检测目标ID列表(按置信度降序排列)
- 支持点击表格行快速定位目标标注框
2.3 数据导出功能
- CSV文件包含完整检测记录:
目标ID 类别 置信度 xmin ymin xmax ymax 宽度 高度 1 nodule 0.92 356 289 412 345 56 56 - 导出文件自动添加时间戳命名(如result_20240315_142356.csv)
三、安装与运行
3.1 环境配置要求
-
硬件推荐配置:
- GPU:NVIDIA Turing架构以上(RTX 2060+/Tesla T4+),显存≥8GB
- CPU:Intel Core i5 10代+/AMD Ryzen 5 3600+
- 内存:DDR4 16GB+
-
软件依赖:
# requirements.txt核心组件 torch==1.12.1+cu113 torchvision==0.13.1+cu113 flask>=2.0.3 opencv-python>=4.5.5 pandas>=1.4.3
3.2 部署流程
-
模型权重配置:
- 从官方仓库下载GAM-YOLOv11m权重(MD5校验码:a1b2c3d4e5f6…)
- 替换默认best.pt文件,确保文件权限设置为644
-
字体配置:
wget -P static/fonts/ https://cdn.example.com/simhei.ttf
-
目录初始化:
mkdir -p static/{uploads,results,fonts} && chmod 755 static/*
四、YOLOv11m_GAM_Attention模型架构
4.1 GAM注意力机制设计
4.1.1 通道注意力子模块
- 采用3D排列(Channel Permutation)策略打破传统通道顺序
- 双路MLP结构(2048→512→2048)建立跨维度依赖
- 引入LayerNorm层增强特征分布稳定性
4.1.2 空间注意力子模块
- 使用3×3分组卷积(groups=8)提取局部特征
- 通道混洗(Channel Shuffle)操作增强组间信息流动
- 采用Sigmoid激活生成空间权重图
4.2 模型改进方案
- 在YOLOv11m的P3/P4/P5检测头前插入GAM模块
- 优化注意力模块参数:
class GAM_Attention(nn.Module): def __init__(self, c1, reduction=16): super().__init__() self.channel_att = nn.Sequential( nn.Linear(c1, c1 // reduction), nn.ReLU(inplace=True), nn.Linear(c1 // reduction, c1) ) self.spatial_att = nn.Sequential( nn.Conv2d(c1, c1//16, 3, padding=1), nn.GroupNorm(4, c1//16), nn.ReLU(inplace=True), nn.Conv2d(c1//16, 1, 1) )
4.3 性能对比
模型 | 输入尺寸 | mAP50 | mAP50-95 | 参数量(M) | FLOPs(B) |
---|---|---|---|---|---|
YOLOv11m | 640 | 85.9 | 57.9 | 20.0 | 67.6 |
YOLOv11m_GAM_Attention | 640 | 88.8 | 58.7 | 23.9 | 80.2 |
五、使用指南
5.1 操作流程
- 访问
http://localhost:5000
进入系统主页 - 点击"选择文件"按钮上传CT图像(建议尺寸512×512)
- 等待自动处理完成(进度条显示推理状态)
- 使用右侧面板控件查看不同目标检测详情
- 点击"导出"按钮保存检测报告(CSV+PNG压缩包)
5.2 注意事项
- 上传文件需符合DICOM转换规范(窗宽窗位调整至肺窗)
- 建议单次检测图像不超过10张(防止显存溢出)
- CSV文件编码格式为UTF-8 with BOM,确保Excel兼容性
本系统通过融合GAM注意力机制的YOLOv11m模型,在肺结节检测任务中实现了88.8%的mAP50指标,较基准模型提升2.9个百分点。Web化的部署方案使得医学影像分析更加便捷,为临床辅助诊断提供可靠的技术支持。