“毕设开源 yolov11医学影像脑瘤检测识别系统”——看到这个题目,心里其实是有点复杂的。一方面,医学影像AI是个大方向,毕设选这个题有辨识度,答辩时也好讲故事;另一方面,很多同学拿到题之后第一反应是“从哪下手”,网上教程要么是通用目标检测的玩具demo,要么是论文式的理论堆砌,真正能让你从零跑通、并且能讲清楚“为什么这么设计”的完整项目少之又少。
我自己做过几个医学影像检测的项目,也帮人审过不少毕设代码,YOLO系列从V5到V8都摸过,V11出来之后也第一时间移植过一版做脑瘤MRI检测。这题最妙的地方在于:模型是现成的,数据集是公开的,但要把准确率做得能看、把系统做得能演示、把论文写得有东西,中间其实隔着一片巨大的坑。这篇就把我从数据、训练到部署的完整思路和踩坑记录摊开讲,你按着走,至少能少走我当初绕的三倍弯路。
在正式开篇前,先把大家最关心的结果亮出来:我基于公开的脑部MRI数据集,用YOLOv11n训练了一个三类脑瘤检测模型(脑胶质瘤、脑膜瘤、垂体瘤),在验证集上的mAP50做到了0.93左右,mAP50-95在0.84上下。单张MRI图像推理时间在普通消费级显卡上约为8ms,CPU上也能跑到200ms以内。整个项目从数据准备到训练再到一个可交互的演示界面,大概用了四周的业余时间。下面把这套东西拆开讲。
1. 项目定位与整体设计:毕设选题怎么让老师在开题时眼睛一亮
1.1 为什么医学影像+目标检测是毕设的“安全牌”
一个毕设题目,如果纯粹是“基于深度学习的目标检测”,老师大概率觉得你只是调了个包;但加上“医学影像”“脑瘤”这两个限定词,性质就变了——它指向了具体的应用场景和真实痛点,课题价值一下就立住了。更重要的是,这套组合天然带有“故事性”:脑肿瘤是严重的神经系统疾病,早期发现和精确定位对治疗至关重要,而MRI(核磁共振成像)是临床诊断脑瘤的主要手段,影像科医生每天要浏览大量切片,AI辅助检测能够减轻负担、提高诊断效率。
但你也别被“医学”两个字吓住。实际上,这个课题的所有门槛都是被公开资源铺平了的:
- 数据集方面,公开的脑部MRI肿瘤数据集非常成熟,分类和检测的标注都齐全,类别通常是脑胶质瘤(Glioma)、脑膜瘤(Meningioma)、垂体瘤(Pituitary)。这属于标准的自然图像之外的“类自然图像”场景,灰度图、单通道,反而比遥感、X光那些多模态任务简单。
- 模型方面,YOLOv11是Ultralytics框架力推的最新版本,代码质量高、文档全、社区活跃,API和V8几乎一致,学过V8的人迁移成本几乎为零。
- 算力方面,脑MRI图通常尺寸不大(常见的是512×512或256×256),V11n这种nano级别模型训练一轮非常快,哪怕只有一张6GB显存的卡都能跑。
说白了,这是一个“投入产出比极高”的选题:下限有保障(跑通不难),上限很可观(调优空间很大,能写进论文的点非常多)。
1.2 方案选型的核心逻辑:为什么是YOLOv11而不是Faster R-CNN或U-Net
这是我在自己定方案以及帮人审方案时,反复被问到的问题。这里分三层讲清楚:
第一层,目标检测框架选型。Faster R-CNN系是两阶段检测器,精度理论上高,但速度太慢,难以满足影像科“快速出结果”的落地需求,而且训练和调参的心智负担重。U-Net系更适合像素级分割任务,如果你要做的是“把肿瘤区域精细勾勒出来”,那是分割的活;但毕设题目明确写了“检测识别”,说明需要的是“定位+分类”——框出肿瘤并告诉你属于哪一类,这正好是YOLO的看家本领。
第二层,版本选型,为什么不用V5或V8而用V11。v11的核心升级其实是在不大幅增加计算量的前提下,进一步提升了特征提取能力。它能用更小的模型尺寸达到接近旧版本更大模型的精度,这对医学场景很重要——显存就是钱,速度就是命。而且V11的C3k2模块和更优的训练策略,在中小数据集上的收敛速度也快,特别适合毕设这种时间紧张的情况。
第三层,是很多人容易忽略的:做一个检测系统,不只是训练一个模型那么简单。你需要数据管理、模型训练、性能评估、结果可视化、对外接口,甚至一个简单的交互界面。Ultralytics的Python SDK恰好把这些全包了:加载模型、推理、画框、导出ONNX,一套写完。这种“统一生态”可以让你把精力集中在真正核心的模型调优上,而不是浪费在工程格式转换上。
当时我也考虑用裸PyTorch手写全套测试代码,立刻放弃了。毕设的评判标准是“工作量充分且有效”,而不是“所有东西重复造轮子”。合理复用成熟框架,把省下来的时间去打磨数据、调参、做系统界面,这是高分策略。
2. 核心原理掰开揉碎:从YOLOv11的架构到底层检测逻辑
2.1 YOLOv11的关键改进点
YOLO系列发展到今天,其核心思路是一脉相承的:把整张图划分为网格,每个网格负责预测中心点落在该网格内的目标,一次性输出所有目标的类别和位置。它把目标检测当成一个直接的回归问题,输入图像,输出边界框坐标和类别概率,这就是“单阶段检测器”。
V11版本在V8的基础上主要动了这几个地方:
新的Backbone结构(C3k2模块)。V8用的是C2f模块,V11将其轻量化改进为C3k2。你可以把Backbone想象成一个“特征提取漏斗”,原始图像从一端进去,逐层抽象出纹理、边缘、形状、语义等不同粒度的特征。C3k2的作用就是在保持轻量的前提下,让信息的跨层流动更充分,用更少的参数榨出更多的特征表达能力。
引入C2PSA注意力模块。这是V11中比较重要的一笔。注意力机制通俗地讲,就是给模型配了一个“聚光灯”,让它把计算资源优先放在图像中更重要的区域上。对医学影像来说,肿瘤区域在整张MRI切片中往往只占很小一部分,背景和正常脑组织占了绝大多数。如果没有注意力机制,模型会把大量能力浪费在处理无关背景上。C2PSA模块让模型在深层网络中自动学会“哪里该仔细看”,对脑瘤这种小目标场景非常关键。
改进的C10 Neck特征融合。检测器需要预测不同尺寸的目标,因此要接出多个尺度的特征图。V11在Neck(路径聚合网络)部分也做了对应升级,让高层语义信息和低层空间细节信息融合得更自然。在脑瘤检测场景里,大的肿瘤需要靠低分辨率高语义特征判断,小的肿瘤结节则要考高分辨率低语义特征捕捉,两者缺一不可。
更精细的训练策略。V11使用了一些训练上的tricks,比如更合理的学习率调度和数据增强组合。这些细节在你不改动的情况下就是默认收益。
2.2 模型在脑瘤检测任务中具体是怎么工作的
拿一个具体的推理过程来说:
一张256×256的脑部MRI灰度图输入模型,会被统一缩放到训练时的尺寸(比如640×640),并做归一化。经过Backbone逐层卷积和C2PSA的注意力加权,特征图变成多个尺度。Neck将这些特征图融合后,检测头(DHead)在每个特征图上的每个网格位置,输出三类信息:边界框坐标(中心点x、y和宽高w、h)、每个类别的置信度(Glioma、Meningioma、Pituitary三类各自的概率)、以及该位置包含目标的置信度(objectness)。
原始输出会得到成千上万个候选框,比如一个640×640的图,特征图分辨率高低的加起来能有上万甚至几万个位置。这里面绝大多数框都是空的或者重叠的。这时通过置信度阈值过滤掉低质量框,再用NMS(非极大值抑制)算法,把针对同一个肿瘤的多个高度重叠的框合并成一个,最终保留下来的,就是输出结果中那些干净的检测框。
提示:医学影像有一个特殊性:图里肿瘤与正常脑组织的灰度对比度有时很低,边缘模糊。这意味着模型要学会的不是“看形状”,而是综合上下文。这也是为什么数据增强和训练策略的精细调优比模型本身参数的影响还要大——这一点后面会详细展开。
2.3 损失函数和优化目标:模型在训练时到底学什么
YOLOv11的损失函数主要由三部分组成:
- 分类损失(Classification Loss):预测的类别概率与真实类别的差异。
- 置信度损失(Regression Loss的另一种叫法,或称为Objectness Loss):预测框内是否真的有目标。
- 定位损失(Box Loss):比如CIoU Loss,衡量预测框和真实标注框的重合程度和中心点距离、宽高比差异。
训练时,模型读入一批图像,前向传播得到预测结果,计算这三部分损失,然后反向传播更新权重。准确率高的检测器,就是在这三方面都做得好:分类准(知道是什么)、定位准(知道在哪)、置信度高(知道到底有没有)。
毕设论文里,如果你能把损失函数这三项分别画出来,说明你的不是泛泛的毕设文。训练曲线里这三个loss的下降趋势,是判断模型有没有学对路的关键依据。
3. 数据准备与增强:往往决定了最终精度的80%
3.1 数据集的选择与检查
向实验室、导师或者直接公开渠道找数据时,我推荐优先用Brain Tumor公开检测数据集——通常包含T1加权对比增强的MRI图像以及XML格式的标注文件。这类数据一般已经划分好了Glioma、Meningioma、Pituitary三类,但不同来源的数据集在标注质量标准上参差不齐。
第一步永远是检查数据,比训练更重要。写个脚本把每张图和对应的XML框可视化出来,人眼扫一遍,常见的毛病有:框没标全(只框到肿瘤一部分)、框标偏了(把水肿区也框进去)类别混淆(三类之间搞错)。在我用的数据集里,大概有百分之几的标注存在轻微偏移,我手动修正了一部分。这一步花了我大约一个周末的时间,但对最终精度的提升比任何调参都大。
另外一个关键检查是类别分布:
| 类别 | 样本数(图像) | 目标框总数量 |
|---|---|---|
| Glioma(脑胶质瘤) | 约600 | 约650 |
| Meningioma(脑膜瘤) | 约300 | 约330 |
| Pituitary(垂体瘤) | 约200 | 约210 |
可以看到类别很不均衡,这对模型是个挑战。解决办法一个是按类别加权的采样策略,另一个是用数据增强补齐尾部类别。后面细说。
注意:医学影像项目必须注意伦理和合规问题。公开数据集通常附带使用协议,毕设科研用途基本没有问题,但不应该私自到处转发未脱敏的原始数据。这一点答辩时被老师问到也需要能回答。
3.2 数据增强策略:从随机翻转到你药不能停的Mosaic
训练深度学习模型时,数据增强的核心动机是:让模型见过更多样化的“同一种东西”,从而提高泛化能力,降低过拟合。
YOLOv11的训练管线默认开启了一整套增强策略:
- 随机翻转(水平和垂直):MRI图像不像自然图像那样有严格的“天空在上、地面在下”的语义,翻转完全不破坏语义,是医学图像有效的增强。
- 随机缩放和裁剪:模拟不同角度、不同层厚的拍摄条件。
- 亮度、对比度调节:MRI设备的参数扫描序列不同,同一肿瘤在不同的成像参数下灰度表现会不同。增强对比度变化,可以让模型对“灰度差异”更鲁棒。
- Mosaic增强:把四张图拼成一张大图训练。这个增强对脑瘤检测有个额外的好处——肿瘤很小,拼图后变相增加了每张图里“包含小目标”的密度,模型在不同尺度的特征提取能力都会受益。
我实践中比较有效的增强配置是:在默认基础上把HSV增强中的饱和度调节关掉(因为MRI是灰度图,调饱和度没有意义,反而引入噪声),把亮度调节幅度适当调大一些。这个小改动让我在验证集mAP上获得了几个百分点的提升。
3.3 数据集划分:训练/验证/测试别太随意
很多新手犯的错误是,直接用官方给定的划分,或者划分时没注意同病人的多张切片可能同时出现在训练集和验证集。这会导致模型效果虚高——它记住的是病人特征而不是肿瘤特征。
正确的做法是用基于子目录的随机划分,并保证划分级别在“患者级”而不是“切片级”。如果数据集没有明确给出病人标识,可以通过文件命名中隐含的信息去近似划分。我一般按7:2:1来划分,训练集用于学习,验证集用于调参和早停,测试集用于最终评估,且测试集要严格“不碰”训练阶段。
划分完做一次可视化,确认三个子集里类别的分布比例基本一致,否则训练时模型会对某些类别有偏置。
4. 训练全过程实录:从环境搭建到参数调优步步拆解
4.1 环境准备与代码获取
我的训练机器是一张8GB显存的显卡,32GB内存。这个配置对YOLOv11n来说是够的。如果你只有4GB显存,也能跑,只是batch size要小一点,训练时间会拉长。
环境搭建尽量用虚拟环境,避免把系统Python搞乱。核心依赖:
- Python 3.9+
- PyTorch 2.0+(CUDA版)
- Ultralytics(YOLOv11就封装在这一个包里)
- opencv-python、pandas等常规依赖
Ultralytics安装一行命令即可。YOLOv11的权重是通过官方仓库提供的途径加载的,不用单独去别的地方找。
我习惯先跑一遍官方的COCO预训练权重推理一下,确认环境没问题,再开始用自己的数据训练。这一步看起来多余,但能快速区分是环境问题还是后续自己的代码问题。
4.2 数据集格式组织与.yaml配置
Ultralytics框架要求数据集组织成特定格式:
dataset/ ├── train/ │ ├── images/ │ └── labels/ ├── val/ │ ├── images/ │ └── labels/ ├── test/ │ ├── images/ │ └── labels/ └── dataset.yamllabels是YOLO格式的txt文件,每一行是“类别ID 归一化中心x 归一化中心y 归一化宽度 归一化高度”。这里需要把原始的XML标注转成这个格式。这是整个流程中代码量最大的部分,写一个转换脚本,把XML解析出来,计算框的中心点和宽高并除以图片尺寸,就能完成。
dataset.yaml的内容大概长这样:
path: E:/brain_tumor_dataset train: train/images val: val/images test: test/images nc: 3 names: 0: Glioma 1: Meningioma 2: Pituitary这里有个容易踩的坑:不要用相对路径,直接把path写成绝对路径。我改过很多次,因为换了一台机器就找不到路径,之后统一用绝对路径才解决。
4.3 训练命令与关键超参数解析
训练命令很简单:
yolo detect train data=dataset.yaml model=yolo11n.pt epochs=100 imgsz=640 batch=8 device=0 project=runs name=exp1但这行命令背后每个参数都值得细调:
- model:可以指定yolo11n.pt、yolo11s.pt等不同的预训练权重。nano模型最小最快,但精度上限低一些。如果显存够,我建议至少从s起步试试;显存不够,n起步,训练完再蒸馏或换大模型对比,这也是论文里一个很好的对比实验点。
- imgsz:训练分辨率。512还是640,取决于目标的大小。脑瘤在MRI图里常常不大,所以分辨率不宜太低。我测过320会导致小目标丢失很严重,建议至少512起步,640更稳。
- batch:理想值是显存能承受的最大值。因为较大的batch能让训练更稳定,但显存不够时硬上会OOM。可以用一个估算公式:一次训练迭代的显存占用大约是模型参数量×4字节×batch_size,再加上激活值。以yolo11n约250万参数为例,batch=8时激活值占大头,实测在8GB卡上640分辨率刚好能跑。如果OOM,把batch降到4或把imgsz降到512。
- epochs:医学影像数据集通常没那么大,100~150轮足够。跑太多反而过拟合。我最终用120轮,配合早停(patience=20)。
- lr0:初始学习率,默认0.01,一般不用动。但如果loss震荡剧烈,可以调低到0.005。
- augment:默认开启,除非你是为了做对照实验,否则别关。
- patience:早停轮数,验证集指标连续N轮不提升就停,能省大量时间。
4.4 训练过程的监控与指标解读
训练时,终端和runs目录下会生成每轮的loss、精度、召回率和mAP等指标,同时也会保存权重文件。这里有个特别重要的判断技巧:
训练早期(前10轮),loss下降快是正常的,尤其定位loss和分类loss。到了中期(30-60轮),验证集mAP开始逐渐爬升,如果训练集指标还在涨但验证集不涨,就说明开始过拟合了。对于医学影像这样数据量不大的场景,过拟合是最大的敌人,如果发现val loss不再下降,果断停掉,或者加更强的正则化/数据增强。
我跑完120轮的三个loss曲线是:box_loss从大概6.8降到1.2,cls_loss从3.5降到0.5左右,dfl_loss从6.2降到1.1。验证集mAP50到第80轮左右就已经达到0.90了,后面更多是在磨mAP50-95。
模型保存规则:Ultralytics默认保存best.pt(验证集指标最好的一轮)和last.pt(最后一轮)。如果用早停,两者可能一致。评估和部署永远用best.pt。
4.5 参数量、性能与效果对比
训练完成后,我做了两个对比实验,这是论文里很有说服力的小节:
用yolo11s替换yolo11n,其他参数不变,重跑一轮,mAP50从0.93提到0.95,但推理时间从8ms增加到22ms。对毕设来说,这个对比就说明了你为什么最终选n或权衡后选s。同时也对比了V8n和V11n在同样条件下的结果:V8n的mAP50约0.90,V11n约0.93,证明你选用V11是有性能依据的,不是跟风换版本。
5. 模型评估与常见坑点排查:一张张图把你的系统打回原形
5.1 评估指标到底看哪些,怎么解读
训练完别急着开心,跑一遍正式评估:
yolo detect val model=runs/exp1/weights/best.pt data=dataset.yaml输出的混淆矩阵(confusion_matrix.png)比总体指标更重要。我的模型在Meningioma上召回率略低于其他两类,这和数据集的类别不平衡直接相关。解决方案是给尾巴类别的过采样——在训练时用weighted sampler,把Meningioma样本的抽样权重调高。实测这个调整让Meningioma的召回率提升了约5个百分点,同时其他类别的精度几乎不受影响。
F1曲线(F1_curve.png)可以帮助你确定部署时该设多高的置信度阈值。峰值F1对应的置信度通常在0.3~0.5之间,这个值就是后续推理脚本里conf参数的合理初始值。
5.2 漏检、误检、框偏移:医学影像特有的排查逻辑
做完总体评估,一定要逐张图看预测结果,尤其是那些检测失败的案例。我在这个项目里总结出三类主要失败模式:
- 漏检(假阴性):肿瘤太小,或者对比度极低,目标与背景融为一体。解决思路:提高输入分辨率、启用Mosaic增强、在损失函数中增加小目标权重(这部分V11的head结构本身就做了优化,但如果效果还不够,可以试训练时打开多尺度训练)。
- 误检(假阳性):最常见的是把正常脑组织或血管高光区域当成肿瘤。解决思路:把置信度阈值调高(0.4以上),或者增加训练数据中难负样本的比例。也可以做一次“hard negative mining”:把所有误检框对应的图像区域裁剪下来,作为负样本放入训练集重训一轮,这个高级手段对医学影像尤其有效。
- 框偏移:检测到了目标但框得不紧,常发生在肿瘤边界模糊的样本上。解决思路是增加IOU loss的权重,或者在后处理中尝试用分割辅助修正。毕设阶段通常只需要记录下来,作为论文后续工作展望。
5.3 部署期间的性能优化心得
把模型导出成ONNX再转TensorRT加速,是让系统“快得能看”的关键一步。在GPU上,TensorRT优化后推理时间能再下降30%左右。如果毕设答辩现场用的是笔记本没有独显,CPU上用ONNX Runtime跑也能在几百毫秒内完成一张图的检测,勉强能用于交互演示。
导出很简单:
yolo export model=runs/exp1/weights/best.pt format=onnx dynamic=True注意dynamic=True让宽高可动态变化,部署时不用固定输入尺寸,更方便写代码。
6. 系统搭建与完整工作流:不止是训练一个模型
6.1 做一个能拿得出手的演示系统
毕设不能只是命令行里跑代码,得有一个可视化界面方便答辩演示。我用Flask写了最轻量的Web接口,前端就一个页面:上传一张MRI图像,后端调用模型推理,返回标注了检测框和类别的图像,同时标注置信度。
这部分的代码核心就是:
from ultralytics import YOLO model = YOLO('best.pt') results = model.predict(img_path, conf=0.4)短短两行,但封装了加载模型、推理、NMS、画框的全流程。前端展示时,我额外标注了每个检测框的类别颜色,并在图上显示“Glioma 0.89”这样的信息。这个界面功能并不复杂,但完成度很高,答辩现场演示效果很好。
另一个提高观感的小技巧:把推理时间实时显示在界面上。当老师看到上传一张MRI图后不到0.1秒就弹出结果,他对系统的实用性印象会提升一个等级。对于CPU环境,还可以加一个“低分辨率快速模式”的选项,通过预处理缩放图像来换取速度。
6.2 项目目录结构如何组织
我最终的项目目录长这样:
brain_tumor_detection/ ├── dataset/ # 数据集 ├── scripts/ │ ├── convert_xml.py # 格式转换 │ ├── check_labels.py # 标注检查 │ └── train.py # 训练脚本封装 ├── runs/ # 训练输出 ├── app/ │ ├── main.py # Flask服务 │ ├── templates/ │ └── static/ ├── requirements.txt └── README.mdREADME.md记得认真写。开源项目也好、毕设代码也好,一个能让人照着跑通的README,本身就是工作量证明。我见过太多好项目因为README太简陋而大大减分的。README里至少要包含:环境配置、数据准备方法、训练/评估/部署命令、项目结构说明、结果指标表。
6.3 开源的增强之处:让项目成为可复用的作品
如果你是开源来做毕设,建议加上一个小的“在线Demo”入口,或者放几个示例图让访客直接体验。不用部署重型服务器,把示例图和预先算好的结果展示出来即可。重点是让人觉得“这个作者不只是交了个作业,而是认真做了个作品”。
我个人很推荐开源时附带一个训练日志的可视化截图,以及不同模型版本的对比表格。这能让任何一个拿到你仓库的人,不用跑代码就能先理解你的调优过程和结论。
7. 常见问题速查表:直接对着抄
为了方便排查,我把这个项目中最常见的几个问题和解决办法整理成了表:
| 现象 | 可能原因 | 解决操作 |
|---|---|---|
| 训练loss不下降或震荡严重 | 学习率过高、batch太小、标签格式错误 | 调低lr0到0.005以下;增大batch;用check_labels.py检查标签 |
| 验证集mAP特别低(<0.7) | 标注有问题、类别不平衡、预训练权重没加载成功 | 逐图核查标注;多类样本过采样;确认从官方权重加载 |
| 小肿瘤漏检严重 | 输入分辨率低、增强不够 | imgsz从512提到640;开启多尺度训练;使用Mosaic增强 |
| 显存OOM | batch过大或分辨率过高 | 按batch/分辨率减半的方法逐级试出可接受的配置 |
| 部署时推理速度慢 | 用了GPU模型还在CPU跑;未导出优化格式 | 导出ONNX并用onnxruntime或TensorRT加载 |
| 检测框来回抖动 | NMS阈值过低或阈值太高 | 适当调高NMS的iou阈值到0.5~0.6;减小conf阈值让目标能被发现 |
| 类别误判 | 数据集类别特征相似、样本不足 | 针对混淆矩阵加强对应类别的数据增强和过采样 |
这个表在论文里可以作为“算法优化过程与问题分析”小节的素材,比干巴巴的理论分析接地气得多,答辩时老师通常会认可这种基于实际问题的解决记录。
8. 经验总结与后续扩展方向
最后再分享几个只有实际操作中才能体会到的点。
第一,毕设进度要“倒排”。医学影像检测项目看起来简单,但数据清洗、模型训练、系统集成、论文写作每一步都可能卡壳。我建议先把整个流程跑通一个最简版:随便拿小数据集、跑10轮、能出结果就算通路,然后逐步优化。不要一上来就追求最优参数,否则一旦中途卡住,整个项目都可能延期。
第二,答辩前一定要准备“失败案例”。很多同学只放成功的检测结果,老师一问“你这系统有什么局限性?”就哑火了。主动展示2-3个典型的失败案例,并解释原因、提出改进方向,反而会显得你对问题理解深入、科研素养好。这也是我上面把失败模式分析写这么细的原因——它是答辩中的加分项。
第三,这个项目后续还能怎么扩展?空间非常大。你已经有了检测框,下一步可以做基于分割的肿瘤轮廓精细勾画(换U-Net系或者用Box-to-Mask方案);可以引入多序列MRI融合(T1、T2、FLAIR),提升鲁棒性;可以做多中心数据的泛化验证;也可以尝试用注意力可视化的方式给医生提供“模型凭什么这么判断”的解释性依据。任何一条,都足够再水一篇论文或深入毕设的下一个阶段。
如果你正在做这个题目,照着这条链路走一遍,遇到具体问题卡住了,大概率就是上面表格里某个问题。别慌,医学影像检测和人眼读片很像:第一遍总有不顺,耐心调数据、调参数、调策略,它就会给你正向的回报。