资讯动态

YOLOv5超声波肾脏结石检测实战:从数据处理到模型调优

发布时间:2026/8/27 1:10:15 来源:尧图企业网站定制
简介目标检测是计算机视觉领域的核心任务之一其本质是在图像中定位并分类感兴趣的对象。以YOLO为代表的单阶段检测器凭借端到端的推理速度和部署灵活性在工业与医疗场景中广泛应用。然而医学超声图像与自然图像存在显著差异低对比度、高噪声、灰度分布不稳定且目标形态受物理伪影干扰这使得通用目标检测模型直接迁移时精度往往不理想。针对肾脏结石筛查这一典型医学影像应用超声检查因其无辐射、低成本成为首选但结石病灶小、背景复杂易漏检。通过构造包含肾脏和结石两类目标的数据集训练YOLOv5模型进行辅助定位可有效提升筛查效率。本文从数据集结构校验、标注规范检查、训练超参数调整到部署落地系统梳理了医学超声目标检测的完整技术链路为相关工程实践提供参考。 这台活我最近刚干完一轮。起因是手头接到一个“yolov5数据集超声波肾脏结石检测2类别包含训练集、验证集”的检测任务一开始觉得这不就是个标准的目标检测流程嘛装环境、改配置、跑训练三件套走完就能出结果。真上手之后才发现超声影像跟平时玩的自然图像目标检测完全不是一个物种从预处理、标注校验到训练调参每个环节都有专门的坑等你踩。这篇就把我从拿到数据集到训练出可用模型的完整过程拆开聊包括数据格式检查、目录怎么摆、data.yaml怎么写、超参数怎么针对超声图像调整以及几个容易让人误判模型效果的隐藏问题给后面要碰医学超声检测的朋友做个参考。1. 超声肾脏影像为什么不能照搬通用目标检测套路1.1 超声图像的成像特点先认清你手里的数据长什么样先说一个最扎心的认知超声图本质上不是“照片”而是声波反射强度的空间映射。同样的肾脏切面换一台设备、换一个探头频率、换一个操作医生出来的图灰度分布都可能差很远。普通数据集里的猫狗边缘清晰、颜色丰富、纹理可辨识YOLO网络能轻松提取到强特征而超声图像通常是低对比度的灰度图信噪比低内部还充满斑点噪声。打个比方普通照片像数码相机拍的清晰风景超声图像像一部老式黑白电视机在信号不太好时接收到的画面满屏雪花、层次模糊。YOLOv5这种基于CNN的检测器擅长从边缘、纹理、颜色差异里找目标但在这种“雪花画面”里它需要学习的不是“细节”而是“回声强度分布模式”和“阴影、声影这些物理伪影的结构关系”。这里就带出一个关键判断为什么这个任务要单独做数据集而不是直接用COCO预训练权重去检测因为COCO预训练模型的特征空间建立在自然图像的RGB通道上到了超声这种单通道灰度、无纹理细节、全靠明暗区块区分的场景底层特征基本不匹配。所以“用yolov5数据集超声波肾脏结石检测2类别包含训练集、验证集”训练出来的模型本质上是在医学图像的小分布上进行特征迁移这个数据集存在的意义就是把模型从“会看自然图像”掰成“会看超声图像”。1.2 肾脏结石检测在临床筛查里的真实位置肾结石是泌尿系统的高发病超声因为无辐射、廉价、操作便捷成为体检筛查的首选。问题在于超声图像的解读极度依赖医生经验。结石在超声图像上表现为强回声团后方往往拖着一条“声影”但肾脏的肾窦回声、钙化灶、囊肿壁这些结构同样可以表现为高回声。一个不典型的结石和一个肾窦内的小钙化点在灰度上可能只差几个像素很容易看漏或者看错。临床医生每天要看几十上百例超声影像高负荷下漏诊率会上升。AI辅助工具如果能在医生看片前先给出“这里有一个疑似结石病灶”的提示框哪怕定位粗一点都能帮医生把注意力先集中到可疑区域。这也是这类数据集最实际的落地场景定位提示而不是自动确诊。后面所有训练和评估逻辑都要围绕“宁可框多一点不可漏掉病灶”这个目标来设计这一点会直接影响你在调阈值、看mAP时的策略。1.3 为什么选YOLOv5而不是Faster R-CNN或其它检测算法选型不是因为它最新而是因为它在训练迭代效率、部署生态和社区成熟度上达到了一个平衡。Faster R-CNN在医学影像里做小目标检测往往精度更高但训练慢、推理慢部署到超声设备的边缘盒子时帧率上不去YOLOv8、YOLO11这些新版本虽然结构更新但v5的生态最成熟超参数文档全、踩坑案例多遇到问题几乎能搜到现成答案。对于肾脏结石这种“在相对固定解剖区域内找异常高回声块”的任务单阶段检测器足够用两阶段的精度优势在此场景下不明显。更重要的是超声设备的边缘算力普遍有限YOLOv5s的体量在CPU或轻量级NPU上都能跑实时推理临床操作流程里医生需要看到画面有即时反馈等不起几百毫秒。2. 训练之前先弄清楚这2类别到底是什么、标注规范是否符合预期2.1 拿到数据集第一件事检查labels里的类别ID别想当然很多人拿到压缩包直接解压就跑train.py这是最容易翻车的一步。标题只是写“2类别”并没有告诉你具体是哪两个类。我手上的这个版本标注文件里的类别是两个目标一个是肾脏实质区域kidney一个是结石高回声灶stone。也就是模型先框出肾脏区域作为解剖先验再在区域内检测结石。这种设计在实际辅助诊断中比只检测结石更合理因为正常图像里肾脏必定存在但结石不一定存在如果没有肾脏框作为参考模型在遇到复杂背景时很容易把非肾脏区域的强回声误判成结石。但你要注意不同来源的同名数据集两个类别极可能完全不同。有的版本把“结石”和“声影”作为两类有的把“结石”和“囊肿”作为两类有的甚至把左右肾各算一类。所以在开始训练前务必打开任意一个训练标注txt确认0号类别和1号类别在你的认知里分别代表什么。这是我见过最多的翻车原因有人默认0是结石、1是肾脏结果训练完可视化发现0号框全框在肾脏轮廓上1号框全是高亮小点白跑两三天。2.2 YOLO标注格式和目录结构一眼看懂的parse方法YOLO标注格式是每张图对应一个同名txt每一行由“类别ID 中心点x归一化坐标 中心点y归一化坐标 框宽归一化坐标 框高归一化坐标”组成。我手里这份数据集标注文件大致长这样0 0.482031 0.396875 0.153906 0.132500 1 0.510156 0.425521 0.036719 0.031667第一行的类别0框宽0.15、框高0.13是个相对大的目标对应肾脏区域第二行类别1框宽0.036、框高0.031是个小目标对应结石灶。归一化坐标意味着不管原图是800x600还是1280x720标注值都在0到1之间网络输入尺寸变化时不需要重新标注。目录结构建议统一成下面这种形式YOLOv5的DataLoader天然认这个结构kidney_stone_dataset/ ├── images/ │ ├── train/ │ │ ├── 0001.jpg │ │ └── ... │ └── val/ │ ├── 1001.jpg │ └── ... ├── labels/ │ ├── train/ │ │ ├── 0001.txt │ │ └── ... │ └── val/ │ ├── 1001.txt │ └── ...一个常见问题是images里有图但labels里没有对应的txt或者txt是空文件空文件表示这张图没有需要检测的目标。YOLOv5训练时默认会忽略没有标注文件的图像但如果你在验证集里放了空标注图评估时这张图几乎不会被计入任何指标容易造成“验证集看着挺大实际有效评估样本没多少”的假象。建议训练前写个脚本把images和labels目录里能配对的样本统计一下做到心里有数。统计方式很简单用Python遍历一遍两边文件名交集即可import os img_dir kidney_stone_dataset/images/train lab_dir kidney_stone_dataset/labels/train imgs {f.split(.)[0] for f in os.listdir(img_dir)} labs {f.split(.)[0] for f in os.listdir(lab_dir)} print(fimages: {len(imgs)}, labels: {len(labs)}, matched: {len(imgs labs)}) missing imgs - labs if missing: print(fmissing labels: {len(missing)})2.3 训练验证划分的正确姿势按患者不按单帧随机切标题里“包含训练集、验证集”听起来是常规操作但超声视频的本质是连续帧序列。同一个患者的一次扫查可能连续采集几十帧病变成像这些帧之间高度相似。如果直接按文件随机划分同一个患者的相似帧很可能同时出现在训练集和验证集里。后果是验证集里都是“训练时见过的画面”模型在验证集上mAP虚高但到真实新患者的图像上性能骤降。这就是典型的数据泄漏问题直观表现就是训练集loss降得很好验证集也漂亮但部署后遇到真实场景一塌糊涂。正确做法是拿到原始数据后先按患者ID或视频序列分组再按组划分保证同一个患者的所有帧要么全在训练集要么全在验证集绝不允许跨集出现。如果你手里的数据集已经切好了也建议稍微看一下文件名是否有患者编号信息。判断方法很土但有效看验证集和训练集文件名的数字是否连续或者包含相同前缀。如果发现某个前缀在两边都出现那就是切分不严谨最好手动把同一前缀的图片全部挪到训练集或验证集一边宁可比官方划分少几十张也不要让验证集失真。2.4 错误标注的影响训练集loss不降和验证集mAP不升的真正含义热搜里有一个问题问“错误标注会导致数据标注模型训练集loss降不下来吗”这个我可以直接回答大多数情况下训练集loss依然能降下来模型会用多出来的容量强行记住错误标注。真正出问题的是验证集。错误标注等于给了模型互相矛盾的监督信号同一个位置一会儿标注成结石一会儿标注成肾脏模型梯度方向来回拉扯典型症状是训练loss下降曲线出现周期性抖动训练结束后验证集mAP远低于预期。更隐蔽的问题是边界不准确。有的标注框把整个强回声区含声影一起框了进去有的只框了核心亮斑。声影区域和结石实体在灰度特征上完全不同混在一起标注会让模型学到的框尺寸飘忽不定。我在排查数据集时就发现同一张图的结石框宽高比例忽大忽小这种情况一定要在训练前通过可视化标注检查出来。可视化方法不复杂把原图和标注框用OpenCV或PIL画出来逐个看一遍重点看边界框是否扣住了结石实体的边缘而不是松松垮垮地包住一大片背景。3. YOLOv5训练全流程实操从环境配置到跑通train.py3.1 环境搭建版本统一比什么都重要YOLOv5的repo在GitHub上非常活跃版本更新频繁不同commit对应的依赖版本可能有差异。我的建议是不要用最新版而是选一个稳定tag比如v6.0或v7.0这两个版本资料最多、第三方工具兼容性最好。整个安装流程通常是git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt如果你用的是PyTorch 2.x以上YOLOv5的旧版本代码里有些地方可能报错常见的是torch.load的weights_only参数问题或者nn.SiLU这类激活函数能正常用但导出onnx时算子不兼容。解决办法要么升级yolov5代码到最新要么在requirements里锁torch版本。我的经验是直接创建一个干净的conda环境装Python 3.9 PyTorch 1.13.1然后跑v6.0的yolov5这套组合最稳定。跑过一遍稳定环境之后再去碰新版本否则你分不清是数据集的问题还是框架版本的问题。3.2 data.yaml的写法路径、训练集、验证集、类别名训练前需要写一个数据配置文件YOLOv5通常命名为data.yaml内容非常简单path: /absolute/path/to/kidney_stone_dataset train: images/train val: images/val nc: 2 names: 0: kidney 1: stone这里最容易忽略的是path用相对路径还是绝对路径。训练时如果你的当前工作目录在yolov5根目录下用相对路径有时会出问题因为train.py的working directory决定了相对路径的解析起点。我建议直接写绝对路径省去很多无谓的排查时间。另外names的顺序必须和标注txt里的类别ID严格一致如果标注文件里0号是kidney而你写成了stone训练不会报错但评估结果和可视化会完全错乱。如果你看到yaml文件里有download: https://...这个字段直接删掉这是从官方数据集自动下载脚本里带出来的格式本地数据集不需要它。YOLOv5在训练的时候会检查nc是否和yaml里一致不一致会报错这个报错信息比较友好照着改即可。3.3 模型体量选择从YOLOv5s起步还是直接上m/l超声图像本身分辨率不高大多数超声机采集的图像也就是几百乘几百到一千多像素。肾脏结石这类目标在整幅图像中通常占比较小像素面积可能只有几十乘几十。目标尺寸小意味着网络需要更高分辨率的特征图来保留空间细节。我建议先用YOLOv5s跑通全流程确认数据和训练流程没问题再根据显存情况换YOLOv5m或YOLOv5l。s模型在边缘设备上部署友好但小目标检出能力弱一些m模型精度会明显好于s但模型体积和推理耗时也上升。如果你手头有消费级显卡比如RTX 3060 12G显存用YOLOv5m搭配batch 16训练一点问题没有。如果你只有6G显存的卡就用YOLOv5s batch 8再配合梯度累积把等效batch提上去。这里有个容易踩的坑超声图像很多是单通道灰度图但yolov5的官方代码默认吃三通道输入。读图时如果图像本身就是单通道OpenCV默认读成三通道重复但有些采集设备导出的确是灰度图代码内部用np.zeros来补齐通道时可能会把图像格式搞乱。这类问题不会报错但会导致训练时图像内容出现奇怪偏移。稳妥做法是在预处理里统一转成三通道RGB我一般是这样处理的import cv2 def load_rgb(path): img cv2.imread(path, cv2.IMREAD_COLOR) if img is None: img cv2.imread(path, cv2.IMREAD_GRAYSCALE) img cv2.cvtColor(img, cv2.COLOR_GRAY2RGB) else: img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) return img3.4 训练命令和关键超参数先跑通一套基准结果环境配好、数据集目录检查完、yaml写好后先不要花时间调参直接跑一个基准训练。命令大概是这样的python train.py \ --img 640 \ --batch 16 \ --epochs 200 \ --data kidney_stone.yaml \ --weights yolov5s.pt \ --name kidney_stone_s_baseline \ --cache几个参数的选择逻辑说一下。--img 640是输入尺寸。如果你的原始超声图分辨率超过640x640这里其实不是越大越好越大越吃显存训练速度也越慢。先用640跑通后续如果发现小目标漏检严重再试704或768。--batch 16是批量大小。batch太小BN层的统计量不稳定训练容易震荡batch太大显存不够。先用16跑如果报OOM就降到8。--epochs 200是一次完整训练轮数。医学小数据集数据量不大几百张到几千张图的前提下200轮足够模型学习到核心特征而且训练时间不至于太长。如果验证集mAP在前50轮就已经不再上升可以设置早停或者最后用前150轮的权重做评估不一定要硬跑满200轮。--cache表示把图像缓存到内存里省去每次epoch都从磁盘读图的IO开销。超声图像单张体积通常不大几百张图全部缓存进内存完全没问题训练速度能有明显提升。训练的时候盯着终端输出里的box_loss、obj_loss、cls_loss三个loss。超声检测任务中obj_loss是否存在目标的置信度损失和box_loss框回归损失占主导cls_loss通常很小毕竟只有两个类。如果发现loss先是快速下降然后趋于平缓偶尔有小的震荡这是正常现象不用慌张。3.5 训练输出目录里的文件怎么读不是只看mAP就完事训练结束后YOLOv5会在runs/train/kidney_stone_s_baseline/目录下生成一堆文件。重点看这几个results.png展示Loss曲线、Precision、Recall、mAP50、mAP50-95的收敛趋势。confusion_matrix.png混淆矩阵能看出哪些类别之间容易互相误判。val_batch0_pred.jpg验证集第一批图像的预测可视化这是最直观的定性检查方式。判断模型好坏的顺序应该是先看预测图上框得准不准再看混淆矩阵里有没有系统性错漏最后才看mAP数值。很多情况下mAP看起来不错但打开可视化一看结石小目标被漏掉一半。医学场景里漏检一个病灶的代价远大于误检一个候选框所以mAP50-95这种卡IoU的指标权重不一定要放在第一位。4. 超声图像专属的调参优化和踩坑记录4.1 mosaic与autoanchor对医学小目标的影响YOLOv5默认开启mosaic数据增强把四张图拼接成一张训练图。这个增强对自然图像检测非常有效因为可以大幅增加每张图的物体数量丰富上下文。但放到超声肾脏结石这种场景问题立刻暴露结石目标本身就小mosaic把原图缩小到四分之一后再拼接结石可能变成十几个像素的极小目标模型根本学不到有效特征。我实际测过在同一个数据集上mosaic开启时mAP50比关闭时低了近8个百分点。所以针对这个任务我建议把mosaic关掉或者把概率降到很低的水平怎么关在训练时加--hyp参数指定自定义超参数文件或者直接改data/hyps/hyp.scratch-low.yaml中的mosaic: 0.0。同理scale缩放增强也一样强度调低一点别把目标缩到没有。YOLOv5还会根据数据集自动重新聚类anchor这个功能默认开启。训练启动时控制台会自动算一组适合你数据集的anchor不用手工干预。但有特殊情况如果数据集里标注框的尺寸分布极不均匀比如肾脏框占满大半张图结石框只有豆子大小自动anchor聚类结果可能更多偏向大框导致小目标层的anchor匹配不足。遇到这种情况可以先不看模型能力单独把标注文件的框宽高统计数据导出来看看目标的分布。常见处理是把yolov5s.yaml里的anchor数量从三组改成四组或者手动给最小尺度层补一组更小的anchor这样小目标召回率会明显改善。4.2 预处理去噪、CLAHE这些操作到底做不做很多做医学图像的医生朋友会条件反射地想到先去噪、做对比度增强。我实际对比过几组实验结论值得说一下常规中值滤波和高斯滤波对YOLOv5这种端到端检测器而言往往是负优化。因为模型本身可以在训练过程中适应斑点噪声的统计特性你强行在输入阶段把噪声抹平顺带把结石边缘的微结构特征也抹掉了检测精度不升反降。CLAHE限制对比度自适应直方图均衡化在某些对比度特别低的图像上有效但它对每个像素局部的增益不同会改变图像灰度分布导致模型对新设备的图像泛化变差。我的建议是先用原始灰度图跑一版基线如果发现低对比度样本普遍漏检再在数据管线里加CLAHE且要对训练集和验证集统一处理保持分布一致。加的时候强度参数clipLimit控制在2.0到3.0区间过大容易把噪声一起增强出来。4.3 类别不平衡kidney和stone的定位差异怎么平衡这个任务里kidney是占据图像大片区域的大目标stone是零星散落的小目标两类在类别数量上也可能极不平衡。如果一张图里通常只有一个肾脏框但可能有三五个结石框类别权重就不能用默认的BCEWithLogitsLoss。YOLOv5本身用focal loss处理类别不平衡只是默认超参里focal的gamma值对医学任务未必合适。如果发现stone类被大量漏检可以调高cls_pw类别损失的正样本权重或者手动在损失函数里给stone类别加权重。实际操作更简单的方案是数据层面对stone类明显偏多的图像做正样本复制或者在增强时对包含stone的图像提高采样权重。这个操作优先级高于改损失函数因为YOLOv5的损失函数内部结构改了容易影响反向传播稳定性。4.4 声影误标、肾窦回声干扰超像素级别的分类错觉超声图像里结石后方会出现典型的“声影”——一条黑色无回声带。很多第一次接触超声数据的人会把声影当作结石的一部分或者另一个独立目标尤其在结石边缘模糊的时候。声影和结石本身的特征差异很大前者是暗区后者是亮区如果标注把亮区和暗区全部框进去模型会学到“亮暗混合的条带”才是结石而不是“强回声团”是结石这会导致在真实图像上对没有声影或声影不典型的小结石直接漏检。我在处理这份数据时专门做了一轮标注复核把包含大面积声影的框全部按结石实体边缘重新校准只保留亮斑区域。这个步骤花的时间不多但对最终mAP的提升非常显著。另一个大干扰项是肾窦回声。肾窦是高回声区和结石的灰度非常接近有些图像里肾窦的形态和结石几乎无法区分。如果严格按像素灰度来标注模型很容易把整个肾窦都框出来。所以标注复核时要注意肾窦回声一般是片状、边界相对弥散而结石回声更亮、边界相对清晰多数伴有后方声影或彗星尾征。当出现无法判断的情况时参考相邻帧的连续性单帧静态图很难判断但连续多帧里结石位置会相对固定比较容易区分。4.5 验证集反复使用导致的过拟合不要拿验证集调参调一个月这是一个很多人会忽略的实验习惯问题。把验证集当成测试集反复跑每次跑完看结果再改超参再跑再改两周之后验证集指标很好看但模型已经间接在验证集上过拟合了。正确做法是训练集和验证集之外再留一小部分不参与任何调试的测试集或者至少规定验证集只在关键节点看不要每改一个超参数就跑一次验证。这份数据集的规模不算大如果验证集只有一两百张图反复刷验证集的后果更明显。合理的流程是先用基准超参跑一版记录验证集指标然后针对性的改1-2个关键参数比如mosaic或输入尺寸再跑一版每版之间用可视化和混淆矩阵定位问题而不是盲目改参。一次实验至少验证一个假设这个习惯能让你在调参路上少走一半弯路。5. 验证集评估之外模型部署与真实场景之间还差几步5.1 混淆矩阵和单类别指标漏检率比mAP更值得关注医学辅助筛查场景下我最关心的指标排序是stone类回归率也就是真实结石被检出的比例其次才是精确率最后才是综合mAP。如果模型漏掉了一个结石后续不论精确率多高对医生来说都是不可接受的风险。所以验证集评估时一定要单独拆出两个类别的Recall来看而不是只看一个加权平均值。YOLOv5训练输出里的混淆矩阵可以直观看出横轴Ground Truth纵轴Predictions对角线越亮越好肾脏被误判成结石的比例过高说明肾窦回声干扰严重结石被漏判成背景的比例过高说明小目标检出能力不足这时候优先考虑提高输入图像尺寸或者重聚类anchor。另一个指标是F1与置信度阈值的关系。YOLOv5可以画F1-Confidence曲线你能看到不同置信度下F1的变化。医疗场景默认把置信度阈值调低一些比如0.25让模型“更愿意”框出可疑区域宁可多框几个假阳性也不能让真病灶被滤掉。医生看到提示框后会再判断是否真是病灶这个人工复核环节天然能消化一部分假阳性。如果你把阈值调到0.5追求精确率临床医生很可能因为你的模型漏检直接放弃这个工具。5.2 导出ONNX和TensorRT把模型放到超声设备能够得着的边缘端训练好的PyTorch模型不能直接塞进超声设备部署时通常需要导出ONNX再转成设备的推理格式。导出命令是YOLOv5官方就支持的python export.py \ --weights runs/train/kidney_stone_s_baseline/weights/best.pt \ --img 640 \ --batch 1 \ --include onnx \ --opset 12导出成功后可以先用onnxruntime在CPU上跑一遍确认输入输出维度和原模型一致。如果后续要部署到带NPU的边缘盒子再根据硬件SDK把ONNX转成对应的IR格式。有几个部署层面的细节容易忽略一是输入归一化方式PyTorch推理时YOLOv5内部会把像素值除以255ONNX模型也保留了同样的预处理逻辑转出来之后不要再重复归一化二是输出张量的解码逻辑YOLOv5的ONNX默认输出是(1, 25200, 85)或者根据类别数调整的维度这个格式在部署端需要自己写NMS解码不能直接拿来做可视化三是如果设备只支持FP16推理需要确认导出后模型精度下降幅度能否接受超声图像本来就是低信噪比FP16的精度损失有时会比自然图像更明显。5.3 医学AI辅助工具的边界能提示不能诊断这里必须非常明确地提醒一句任何基于深度学习的目标检测模型在医疗场景中只能作为辅助提示工具不能作为诊断依据。你训练的模型可以告诉医生“这个区域疑似存在强回声病灶”但最终结论必须由具备资质的医生结合患者的病史、体格检查、后续CT或造影结果来确认。如果你在部署过程中遇到“模型检测准确率高不高、能否替代超声医生”这类问题答案始终是否定的当前阶段AI的作用是提高筛查效率、减少遗漏而不是替代人。同时真正进入临床辅助决策流程还需要有相应的资质审查和临床验证不是自己训练一个模型就能给患者出报告。这篇博文讨论的是工具链路不是临床诊断方案在实际项目中务必把合规边界划清楚。5.4 后续扩展方向YOLOv8、小目标切图、半监督迭代自己完整跑过一遍这个数据集后如果还想继续往深了做我列几个我认为有价值的扩展方向。第一个是换YOLOv8甚至YOLO11新版检测头在某些小目标场景下确实比v5有优势迁移成本也不高数据集和标注格式几乎可以直接复用。第二个是SAHI切图推理如果处理后分辨率还是受限可以尝试在推理阶段把原图切成多个有重叠的窗口分别检测再合并结果对超声图像里的小结石效果显著。第三个是半监督迭代医学图像标注成本高先用当前的预测结果配合医生人工复核把置信度高的未标注数据自动成伪标签逐步扩充训练集这个循环能明显提升模型在更多设备、更多医生操作习惯下的泛化能力。我在这个数据集上最后落地的是YOLOv5m版本搭配切图推理在验证集上把stone类召回率从0.72拉到0.89虽然不是特别惊艳的成绩但至少说明针对超声图像这种特殊数据源对症下药的调整比盲目堆模型深度要有效得多。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价