资讯动态

尿沉渣细胞识别中SOLO实例分割模型从训练到部署的实战解析

发布时间:2026/10/20 5:11:47 来源:尧图企业网站定制
做尿沉渣有形成分自动识别那阵子最让我头疼的不是怎么训练模型而是怎么跟检验科的同事说清楚我给你的不是一堆“细胞框”是一个个细胞的精确轮廓。传统目标检测能给出矩形框对散落的红细胞还能凑合可一旦白细胞和上皮细胞挤在一起、草酸钙结晶和细胞上下重叠框的意义就很有限。项目最终跑通整个流程的模型是 SOLO 体系里那个经典的solo_r50_fpn_1x_coco配置ResNet50 做骨干、FPN 做多尺度特征、SOLO head 做无锚框的实例分割。这篇内容把从数据准备、模型训练到部署落地的完整链路捋一遍聊清楚为什么选 SOLO、尿液细胞数据怎么标才不容易翻车、训练时关键参数怎么调以及推理阶段真正消耗时间的细节。给同样在做细胞识别、医学图像实例分割的同学提供一个可以直接参考的落地方案。1. 为什么尿沉渣识别要“分割”而不是“框出来”1.1 检测只能回答“有”分割才能回答“有几个、长什么样”尿沉渣镜检的本质任务是视野里有哪些有形成分各多少个形态特征是什么。红细胞计数、白细胞计数、上皮细胞分类、结晶和管型的存在与否都是临床判断泌尿系统疾病的重要依据。刚开始做这个项目的时候我们天真地认为目标检测就够了——对每个细胞画一个框中心点落在哪个框里就计数一次。但实际镜检图像很快教会我们做人。尿液里的细胞有几个典型特点红细胞是扁圆盘状边缘厚、中央薄颜色极淡即使在显微镜下也经常半透明白细胞胞质内有颗粒核分叶形状不规则鳞状上皮细胞又大又扁常常像一片片不规则瓷砖铺在视野里。当这些形态各异的细胞挤在一起矩形框之间大量重叠一个框里可能同时罩住大半个上皮细胞和两个红细胞检测器没法告诉你框里到底是谁也没法帮医生观察细胞边界的完整性。所以“识别”这个需求在尿沉渣场景里天然对应实例分割不是目标检测更不是语义分割。语义分割会把所有红细胞融成一片红色区域计数就完全失效了而实例分割能输出每个独立细胞的一个掩膜mask掩膜一出来细胞数、面积、周长、圆度、核浆比这些形态学指标全部可以往下游计算。1.2 用 Mask R-CNN 试过之后的真实感受我们最初尝试的是 Mask R-CNN确实能出掩膜但在尿沉渣这种密集、粘连、小目标多的场景里它的“先检测框、再对框内做分割”的两阶段路线有个天然别扭的地方任务被框限制了。一个上皮细胞如果呈现出极端的长条状IoU 很高的框并不一定对应好的掩膜两个细胞靠得太近时RPN 产生的框可能只覆盖住其中一个的一部分。后处理阶段还要处理框的 NMS框被抑制掉之后里面的掩膜即使再准也跟着没了。这不是说 Mask R-CNN 不好在很多医学图像分割任务里它依然能打。而是对于尿沉渣这种“细胞形态差异极大、目标又小又密”的数据过度依赖矩形框这个中间表达反而增加了一层不必要的误差。我们当时做了个简单对比同一批标注数据Mask R-CNN 和 SOLO 分别训练肉眼去看重叠区域的掩膜边缘SOLO 的掩膜一致性明显更稳尤其是长条形的上皮细胞和边缘半透明的红细胞。于是后面正式训练都切到了 SOLO。为什么 SOLO 在这种数据下更顺手核心原因是它的建模思路不同SOLO 直接预测“这个像素属于哪个实例”用一组可学习的网格来组织实例的空间位置信息。换句话说它的基础假设是“每个目标物体应该有一个明确的中心落点”这个假设在细胞图像里基本成立因为没有细胞会完全重叠成无法区分的一坨。1.3 选型对比当时列的一张评估表为了不让自己被某个模型带着走我当时做了一张简单的选型表列了几个候选方案的利弊。这里贴出来给大家参考结论不一定普适但评估维度的思路可以复用方案掩膜质量对重叠细胞的适应训练成本后处理复杂度印象Mask R-CNN好一般受框的 NMS 影响中高稳定但别扭YOLACT中一般线性组合掩膜不够精细低低速度快精度不够SOLOv1好好网格直接对应实例中中输出的掩膜粘合度好SOLOv2更好更好动态卷积核中中精度和速度的均衡之选最终选择solo_r50_fpn_1x_coco一方面是这个配置的代码实现最成熟社区验证最多另一方面是 R50FPN 的骨干在显存占用和推理速度上对医疗影像场景比较友好后续如果要部署到检验仪器配套的工作站不会太吃硬件。2. SOLO 模型在显微镜图像上的工作原理与关键组件2.1 一个反直觉的设计把图像切成一堆网格SOLO 全称 Segmenting Objects by Locations核心思想概括成一句话把输入图像分成 S×S 的网格每个网格单元负责分割“中心落在这个格子里的那个实例”。这里的关键是位置信息不再是经过 Anchor 或者 ROI 提取得到的而是直接把整张图平均切块让分割分支根据位置预测掩膜。网络最终输出的是 S×S 组掩膜候选再从中筛选出真正的实例。这个思路听起来很朴素但效果出奇地好。因为尿液细胞在图像里的分布是相对均匀的大多数情况下没有极度密集到数百万个目标网格化之后每个格子只负责处理自己这个小区域内的细胞任务被拆得很干净。为了把“位置”显式地喂给网络SOLO 在掩膜分支的输入特征上额外拼接了坐标编码也就是 CoordConv。简单说就是生成两个和特征图一样尺寸的坐标通道x 方向线性渐变、y 方向线性渐变让后续卷积可以直接感知“当前特征位于图像的哪个位置”。这个设计对细胞分割非常重要——红细胞和白细胞形态相似但尺寸和位置分布有差异网络需要明确的空间参考才能区分网格之间的目标。2.2 从 r50_fpn_1x_coco 看整条网络流水线用一句话描述这个模型的完整流程输入显微镜图像经过 ResNet50 提取基础特征FPN 在多个尺度上融合出金字塔特征每个金字塔层分别送入 SOLO 的两个并行分支——语义类别分支和掩膜分支。FPN 的存在是为了解决细胞尺度差异大的问题。尿液细胞的直径变化范围非常宽红细胞直径大概 7 微米在 40 倍物镜下换算成像素可能只有 2030 像素鳞状上皮细胞则常常占据上百甚至几百像素。单尺度特征图不可能同时照顾到这么宽的尺度范围所以需要多尺度特征金字塔来各管一段。低层特征分辨率高负责小目标高层特征语义强负责大目标。掩膜分支的输出可以理解成铺开的 S² 张候选掩膜对每个像素的置信度。训练的时候每个正样本格子对应一个真实实例的掩膜标签推理的时候每个格子自己决定要不要输出一个实例然后所有格子的输出经过 Matrix NMS 合并成最终的一组实例掩膜。整个过程中没有 Anchor、没有 ROI Align、没有框的回归。2.3 损失函数的组合分类用 Focal掩膜用 DiceSOLO 的损失是两部分的加权和L L_cate λ * L_mask。类别分支预测每个格子所属的类别使用的损失函数是 Focal Loss掩膜分支的损失是 Dice Loss。为什么掩膜分支用 Dice Loss而不是逐像素交叉熵这是我当时反复比较后才理解的。尿液细胞图像有一个天然问题细胞占整张图的比例极小大部分像素是背景。逐像素交叉熵在这种极度不平衡的类别分布下会让模型倾向于把所有像素都预测成背景因为这样 loss 也很低。Dice Loss 直接把“预测掩膜和真实掩膜的重叠程度”作为优化目标不会因为背景像素多就被带偏对小目标尤其友好。红细胞的掩膜可能只有 500 像素Dice Loss 依然能给它足够的梯度信号。另一个细节是分类分支用的是 Focal Loss 而不是普通交叉熵这同样是为了应对难易样本不平衡。尿液标本千差万别有的片子很干净大部分格子都是背景有的片子细胞很多、形态复杂。Focal Loss 会降低简单样本的权重让模型把注意力集中在难分的细胞上训练过程更稳定。2.4 网格数量和 FPN 层小细胞需要更密的网格网格数量直接关系到 SOLO 的上限也是细胞识别里第一个要调的超参。官方 COCO 配置中不同 FPN 层对应的网格数从低层到高层递减比如一层用 40×40、36×36、24×24、16×16、12×12 这样一串值。低层网格密负责小目标高层网格疏负责大目标。在我们自己的数据集上尿液细胞里大量的小目标红细胞、白细胞集中在低分辨率层所以我会把低层的网格数适当往上调比如 40×40 加到 48×48让胰腺小细胞有更多格子去“接住”。调整之后最直接的变化是红细胞和白细胞的分割召回率明显提高代价是训练和推理的显存占用上升了一点。对于显存紧张的同学我的建议是优先保证低层网格数高层适当缩减比如高层从 12×12 减到 8×8对多数细胞数据影响不大。3. 训练前真正烧时间的事细胞数据标注与增强策略3.1 先定好类别体系不然返工到崩溃尿液有形成分的类别体系很庞杂早期我一度想直接把红细胞、白细胞、鳞状上皮、移行上皮、肾小管上皮、各类结晶、各类管型一次性全部做掉结果标注标注到一半就发现样本极度不均衡某些类别几个月都攒不出来足够的数量。后来调整了策略第一版只保留临床最关心、图像上最容易界定的五个类别——红细胞RBC、白细胞WBC、鳞状上皮细胞SCC、草酸钙结晶CA、尿酸结晶UA其他类型统一归到“其他”类先不严格区分。这样类别之间的形态重叠小模型的学习压力小标注标准也容易统一。等主模型稳定之后再通过难例挖掘扩充类别。在标注规范上比类别更重要的是定义“什么才算是可以标注的目标”。我们定的规则是细胞直径少于 15 像素的不值得单独标否则噪声太大被明显遮挡、超过 30% 轮廓不可见的细胞不标图片边缘被截断的细胞要标但评估时要单独统计边缘实例的影响。这些规则如果不提前定好标注员和算法工程师对同一张图的标注结果会差异巨大模型训练再多轮也救不回来。3.2 从多边形标注到 COCO 格式两端都要对齐我们用的是开源标注工具里面比较主流的 labelme 流程标注完成后输出的是多边形坐标的 JSON 文件。转成 COCO 格式时有几个坑特别容易踩。第一COCO 的 segmentation 字段既支持多边形polygon也支持 RLE如果你的后续数据增强会改变图像尺寸最好把标签统一转成 RLE 掩膜否则缩放后多边形坐标的换算容易出错。第二如果同一个实例被标注成了多个不相连的多边形区域比如一个被中间某个杂质遮挡的细胞优化后应当合并成一个完整的 instance 掩膜转换脚本里必须做这一步否则 SOOL 训练时会把同一个实例当成两个实例。第三实例掩膜之间允许重叠但重叠区域的类别归属要明确——在完全不可见的情况下我倾向把重叠区域设为忽略区域而不参与 loss 计算具体做法可以在 mask 的权重里把 GT 为 0 但预测区域难判定的位置剔除掉。3.3 显微镜图像的数据增强敢用但要克制尿液细胞图像的增强策略跟自然图像最大的区别是不能随意破坏形态特征。我踩过的教训是一开始为了提升泛化能力开了比较强的随机遮挡和随机扭曲结果训练出来之后细胞边缘的轮廓变得非常虚白细胞核的分叶形态也糊掉了。原因很简单过度扭曲的增强让模型学到了“奇怪的细胞形状也是合理的”而尿沉渣里细胞形态本身就是诊断依据。最后稳定下来的增强组合是随机水平/垂直翻转、90°/180° 旋转、随机缩放0.81.25 倍、轻微的亮度/对比度/饱和度扰动以及小心使用的裁剪。颜色扰动要有上限因为尿液标本即使没有染色也会因饮食、药物、存放时间呈现不同的淡黄色强度太大容易让模型把正常的颜色偏差学成伪造信号。我最推荐的增强反而是随机拉伸在 0.91.1 倍之间对横向纵向分别做不同尺度的缩放模拟不同显微镜成像下的椭球变形。这个增强对细胞分割的效果提升非常明显因为它让模型对轻微的形态比例变化不再敏感。3.4 长尾分布阴性样本太多阳性样本太少尿沉渣数据天然长尾。大量正常样本视野里只有零星的鳞状上皮偶尔有个别红细胞真正的异常样本——大量白细胞、大量结晶——数量偏少。模型训练时如果不管长尾最后对红细胞的召回率会离谱地低。应对方式我在其他项目上也验证过有效程度排序大致是样本重采样 损失函数调整 后处理阈值调整。不要一开始就上 Focal Loss 去硬扛先做最简单的按类别数量加权采样让每张图里各个类别出现的相对频次趋于平均。对样本特别少的类别同一张图可以多裁几个不同区域作为独立样本相当于过采样到数据增强层面。这一层做好之后再配合难例挖掘把模型分错的图捞出来单独放入训练集效果比调任何 loss 超参都直接。4. solo_r50_fpn_1x_coco 训练配置与调参实战4.1 配置文件的关键参数从骨架改到 head基于 MMDetection 的 SOLO 配置核心参数看起来不复杂但每一项都要动脑筋改。我用一段示意配置来说明具体数值根据自己的数据分布调整model dict( typeSOLO, backbonedict(typeResNet, depth50, frozen_stages1), neckdict(typeFPN, out_channels256), headdict( typeSOLOHead, num_classes5, # 改成自己的细胞类别数 in_channels256, feat_channels256, num_grids[48, 36, 24, 16, 12], # 低层调得更密负责小细胞 loss_catedict(typeFocalLoss, use_sigmoidTrue, loss_weight1.0), loss_maskdict(typeDiceLoss, loss_weight3.0), ), test_cfgdict( score_thr0.1, # 分类置信度阈值 mask_thr0.5, # 掩膜二值化阈值 ), )这里的frozen_stages1意思是冻结 ResNet 最开始一层的参数这个保留不动也没问题。真正我调了反馈最大的是num_grids的低层网格数和掩膜二值化阈值。4.2 学习率、批次大小和“1x”到底够不够标题里的 1x 是 MMDetection 里的通用调度配置总共训练 12 个 epoch在第 8 个和第 11 个 epoch 时把学习率降低为原来的 1/10基本算是“快速验证版”的训练计划。对 COCO 那种百万级的自然图像数据1x 可能勉强够用但对尿液细胞这种几千到几万张的小数据集1x 通常不够。我实际跑下来的感受是直接套 1x到第 12 个 epoch 时模型还没完全收敛尤其掩膜边缘还在抖动。主项目里我是直接延长到了 24 epoch 甚至更长把学习率下降点放到 [16, 22]效果比 12 epoch 明显好。如果你的数据量小于 5000 张建议直接放弃 1x改成 2x 起步。学习率的设置上我的经验是小 batch 下用较小的基础学习率。batch size 为 4 时lr 设置在 0.0025 左右比较稳batch size 如果攒到 16可以线性放大到 0.01。尿沉渣图像因为要保留细胞细节建议训练分辨率不要低于 800×800一般取 1024×1024 的随机 crop。显存不够时优先缩小 batch size而不是缩小分辨率否则红细胞这种细小目标会直接被分辨率吃掉。optimizer dict(typeSGD, lr0.0025, momentum0.9, weight_decay0.0001) lr_config dict(step[16, 22]) # 按 24 epoch 计划4.3 训练中反复调过的三个参数第一个是score_thr。SOLO 推理时先对每个网格的分类置信度做筛选分数太低就会直接丢弃一组掩膜。初始配置里是 0.1听起来很低但对于颜色淡的红细胞可靠置信度往往就在 0.10.3 之间调高到 0.3 会大量漏检。反过来尿沉渣里有些杂质结晶的类别置信度也低调低又会带来额外假阳性。我的做法是训练完之后直接打印每个类别的置信度分布直方图根据分布低谷来定阈值而不是经验主义地拍脑袋。第二个是mask_thr。这个阈值决定掩膜预测值二值化时哪些像素算前景。0.5 是常规默认值但尿液细胞的边缘通常软预测概率从 0.4 过渡到 0.6 很常见。直接二值化到 0.5 会让细胞边缘被削薄一层反而影响投影面积的计算。我后来把mask_thr降到 0.4输出掩膜的边界效果好了一些代价是掩膜面积可能会稍微偏大一点需要结合下游粒度测量的需求来取舍。第三个是 FPN 层的使用范围。默认配置会用 P2P5 四层但细胞数据里如果大目标很少很小P5 层基本是浪费算力。试过把num_grids的高层值调得更小或者去掉 P5训练速度会快一截精度几乎不降。这个要具体数据具体分析不要死守原配置。4.4 怎么判断训练是“健康的”医学图像训练有个很隐蔽的问题看 train loss 曲线下降得挺漂亮但每个 epoch 的验证集指标却没啥变化甚至过拟合出来的模型只在训练集上“好看”。我的自查办法是训练到不同阶段分别挑几张典型图像——一张大量红细胞、一张白细胞叠着上皮细胞、一张全是结晶——把预测掩膜叠在原图上人工观察。正常健康的训练过程应该是先类别的分类边界先稳定然后掩膜开始贴边最后重叠细胞的分离逐渐干净。如果训练到后期掩膜边缘还是锯齿状很严重通常不是训练不够而是数据标注本身的边界就不统一回头审核标注规范比调模型参数更有效。此外还要观察每张图输出了一个还是多个“幽灵实例”。SOLO 偶尔会在空白背景上输出一些面积很小但置信度不低的噪声掩膜这通常和训练数据的阴性样本不足有关。我当时往训练集里多塞了一些完全空白的阴性视野这类假阳性会显著减少。说实话这个操作的收益比很多网络结构上的微调都要大。5. 分割结果评估与几种典型“医疗级翻车”复盘5.1 别只看 mAP细胞分割要看这几个数字COCO 风格的 mAP 指标是模型对比的通用语言但只盯着 mAP 在医学场景里会骗人。mAP0.5 只要求掩膜和 GT 的 IoU 达到 0.5这对一个大上皮细胞来说相当宽松——轮廓稍微大一圈也能拿高分。但对下游的细胞面积、直径测量来说掩膜边界差几个像素计算出来的形态学参数就偏得离谱。所以除了 COCO 常规指标至少要额外关注三类输出的评估AP0.75这部分对掩膜边界要求更严格能反映实际分割质量边界 APBoundary AP它直接评估轮廓贴合度细胞分割里比 IoU 更直观实例计数准确率也就是模型输出的实例数量和人工标注实例数量的平均绝对误差。这个指标在检验场景下最敏感医生不关心你 AP 高了 0.02但关心每高倍镜视野下白细胞是不是多数了或者少数了。5.2 复盘三个让我印象极深的失败案例第一个失败案例是透明的红细胞被漏检。一张视野里有二十多个红细胞模型输出了十七八个漏掉的那几个共性都是中央极度透明、边缘淡到几乎和背景融为一体。这类红细胞人眼也需要凝神细看才能辨认指望模型无中生有也不现实但分析下来真正的原因是它们在被裁剪后缩小到了 8×8 像素以下信息量本身就不够。解决思路是把训练分辨率上调、对小目标做过采样而不是去堆模型复杂度。第二个失败案例是叠在一起的白细胞掩膜粘连成一片。两个白细胞紧挨着模型把它们分割成了一个带有细腰的大掩膜。这个问题的根源比我预想的更深标注时人眼能看出是两个白细胞是因为核的分布暗示了边界但输入的 RGB 图像里细胞膜的边界确实没有清晰的像素边缘。后来我们人工在重叠区给了一条像素级别的分割线并把这类样本单独拿出来训练粘连概率降了一截但无法完全消除。对这类情况上游成像如果能加一个核染色通道对算法是事半功倍的这个问题也很多。第三个案例是草酸钙结晶被识别成了红细胞。形态上草酸钙结晶常呈信封状或哑铃状在低倍数下和红细胞确实有相似之处——中等大小、颜色略深、形状接近圆形或椭圆。模型对这两类特征区分度不够本质上是因为训练里草酸钙样本太少。我后来做了一个很土但有效的操作去网上下载了上万张含草酸钙结晶的公开显微镜图像做预训练微调专门把这类别撑起来混淆率明显下降。看起来是模型问题本质是数据覆盖问题深挖下去就找到了方向。5.3 排查一条典型失败链路的思路如果预测结果突然系统性变差学会一条线排查下去。我们遇到过一次白细胞掩膜全部变小的问题排查链路是这样的先看训练配置除了把mask_thr从 0.5 调到 0.4还动过什么别的回查发现同时把训练 clip 尺寸从 1024 改到了 800。再看数据增强训练分辨率下降后模型看到的细胞尺寸整体变小了于是掩膜也跟着整体缩小。最后对比确认切回 1024 训练后掩膜尺寸恢复。这个案例看起来简单但真实复制了一遍才明白很多时候不是某个参数出了问题而是多个参数凑在一起改变了模型的尺度感知能力。在调参时要养成记录每个实验之间差了什么内容的习惯否则同样的坑会反复踩。另一个思路是每次改配置后固定抽取同一批验证集图像做对比。如果只改了一个变量而输出掩膜出现肉眼可见的变化基本就定位到了问题。6. 从实验到产线大图推理与加速部署经验6.1 显微镜大图的 tile 切图策略显微镜采集到的图像往往比深度学习常用的输入尺寸大很多比如 1920×1440 甚至更大。直接把整张大图送进 R50FPN显存直接爆掉而且小细胞的细节会在大幅度 resize 中被抹平。正确的做法是切图推理把大图切成若干 1024×1024 的 tile每个 tile 独立推理最后再合并。切图时两个经验值得分享。第一tile 之间要有 10%20% 的重叠否则细胞正好横跨两张切片的边界时会被其中一端裁掉一半导致实例被拆成两个或直接被漏检。第二合并时要做一个 mask 层面的边缘融合对重叠区域的置信度取均值或按距离加权避免两张 tile 的输出在拼接线上出现明显的割裂带。我们实践中用的是简单的高斯加权融合效果足够应对细胞边界。推理时如果把 image 的原始大尺寸作为输入送入模型而不是 resize 到固定尺寸的话对尺度极其敏感的小目标更友好。不过要注意FPN 的 stride 和网格设计是建立在特定特征图尺寸上的如果输入尺寸变化过大网格和目标的对应关系会被打乱所以实际上还要为常见的大图尺寸专门确定一个输入输出时序。6.2 ONNX 导出和 Matrix NMS 的“坑”把训练好的 SOLO 模型部署到推理环境第一步通常是导出 ONNX。但这里有一个绕不开的麻烦SOLO 后处理里的Matrix NMS不是标准 ONNX 算子用常规torch.onnx.export直接导出会失败或者导出一个低效的循环展开版本。我们尝试了两种路线。第一种用专门的服务化能力比较强的部署框架来导出和编译利用它预设的大规模视觉模型算子集Matrix NMS 在这些框架里有比较成熟的支持。第二种如果必须手写 ONNX 导出就把 Matrix NMS 单独改成一个后端自定义算子前端推理逻辑只保留网络前向之后在 C 侧用 NumPy 风格的逻辑自己实现 NMS。后者工程量稍大但好处是彻底摆脱了框架版本限制。如果模型本身追求极致速度FP16 推理是可以直接给到显著提升的。ResNet50 的卷积结构对 FP16 很友好在支持比较完善的推理卡上推理时间能缩短 40% 以上显存占用也明显下降。需要注意的是一开始要把模型的某些对数值敏感的层比如最后一个分类层保留 FP32否则极少数情况下会出现类别置信度整体偏移的问题。我们踩过一次这个坑把所有层都强制切成 FP16 后结晶和红细胞混淆率上涨了一小截把分类层单独拉回 FP32 就恢复正常了。6.3 在推理管线里留一个“人工复核”的接口部署落地过程中比起追求模型速度更快更关键的工程决策是留一条人工复核的可视化通道。尿沉渣镜检是临床检验的一个环节模型输出的计数结果绝不能直接作为最终报告输出而应当把实例分割结果以可视化掩膜的形式展示给检验人员让医生快速确认分类和计数有没有明显错误。我们最终的推理管线是大图切图 → SOLO 前向 → Matrix NMS 合并 → 输出每个实例的掩膜和类别 → 绘制在原图上生成一张带有编号的标注图 → 自动计数并附带每个细胞的面积和圆度等形态学参数 → 检验人员在界面上扫一眼有异议的直接在图上修正。这套流程上线后真正把模型变成了提效工具而不是替代人工的黑盒。整套项目跑下来我个人最大的体会是在细胞实例分割这种场景里模型选型反而是整个链条中最不花时间的环节真正难的是把数据边界定义清楚、把训练评估的指标贴合临床需求、把推理部署的工程细节打磨到位。如果刚开始做类似项目建议直接拿开源的solo_r50_fpn_1x_coco配置起跑先跑通一条最小链路再慢慢迭代数据和参数这条路比反复比较不同模型的差异要划算得多。

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

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

免费获取报价 →
↑