击剑可能是所有竞技体育里最让计算机视觉头疼的项目之一。运动员全身穿着白色防护服,手中握着一根细长的金属剑条,动作速度极快,攻防转换经常发生在几百毫秒内。要做击剑运动员的姿态识别和关键部位检测,本质上不是“把一个人框出来”那么简单,而是要解决一系列关于小目标、高速运动、严重遮挡和局部反光的检测难题。把这套流程做通,不仅对击剑本身有价值,它对其他高速运动项目的姿态分析同样有参考意义。
这篇文章我会从需求拆解、数据集构建、模型训练调优、实时推理部署到实际踩坑记录,完整讲一遍基于YOLOv26做击剑运动员姿态识别与关键部位检测的落地过程。适合已经在用目标检测模型、想往姿态识别和体育场景深挖的开发者,也适合刚入门、想了解真实项目怎么做的同学。文章里涉及的超参、标注规则、推理链路都是我从实际项目中沉淀下来的,可以直接拿去参考。
1. 开题:为什么击剑姿态识别要先解决关键部位检测
1.1 击剑运动给计算机视觉出了哪些难题
击剑和篮球、足球这类大目标运动场景差别非常大。运动员距离镜头不算近,但剑条、剑尖在画面里往往只有几个像素宽。以1080P画面为例,剑条宽度通常只占图像宽度的0.3%以内,剑尖更小,属于典型的极端小目标。而剑尖恰恰是整套识别系统里最关键的部位,因为击剑的计分规则是“先击中对方有效部位者得分”,剑尖的轨迹和落点直接决定判罚。
另一个麻烦是速度。弓步刺、防守还击这些动作中,剑尖的瞬时速度可以超过每秒十米。用每秒30帧的普通视频采集,相邻两帧之间剑尖移动距离可能超过几十像素,直接产生严重的运动模糊。镜头边缘的画面还会因为卷帘快门产生果冻效应,让剑条看起来是弯曲的,这对目标框回归和关键点定位都有很大干扰。
第三个难题来自场景本身。击剑场馆的地面、观众席、场外灯光存在大量高光区域,金属剑条和护手盘反光严重,尤其在LED照明环境下,剑条上会形成一条高光带,很容易让模型把亮斑当成目标。再加上两名运动员互相遮挡、剑条交叉、身体前后错位,目标之间的区分度经常会低到人眼都难判断。
这些特性决定了击剑姿态识别不能照搬通用的人体检测方案。一台只输出“人”框的检测模型在这里基本没有分析价值,我们真正需要的是把剑尖、持剑手、护手盘、躯干、前后腿这些关键部位全部独立识别出来,并且获得关键点的坐标信息,才能进一步做动作分解和技术统计。
1.2 整体方案设计:检测、关键点、时序三者怎么配合
我的整体思路是“两步走加一条时序链路”。第一步用目标检测模型识别运动员个体以及各个关键部位,比如头、躯干、持剑手、护手盘、剑尖、前腿、后腿。第二步在检测的基础上回归关键点,直接关联到部位框内部,输出每个关键点的图像坐标和置信度。这里不拆成两个模型,而是在同一个模型里同时输出目标框、类别和一个紧凑的关键点集合,这样推理开销最小,误匹配也最少。
YOLOv26的模型设计正好覆盖这个需求链。它在检测头里同时支持目标框回归、分类和姿态关键点回归,可以自定义关键点数量而不是固定在人体17点。这意味着我可以把剑尖、手腕、肘、肩、髋、膝、踝这些击剑运动真正关心的点全部放在一个输出张量里,不用像传统做法那样先检测人、再裁剪、再跑一个独立的姿态估计网络。
时序链路放在模型后面。单帧检测始终是快照,无法回答“这次弓步刺是从什么距离发起的”“剑尖是先加速还是先停顿”这类问题。所以我在检测结果之上加了一个轻量级的跟踪模块,对每个关键部位做跨帧ID关联,再用滤波算法平滑关键点坐标,最后把连续帧的剑尖位置串起来生成轨迹。有了轨迹,才能计算剑尖速度、加速度、攻击距离、有效时间窗口这些真正对教练有用的指标。
1.3 为什么选YOLOv26而不是其他检测方案
从工程角度说,模型选型需要考虑精度、速度、部署难度三个维度。击剑分析最终要落到实时反馈上,教练希望训练结束后立刻拿到动作统计,甚至希望在训练过程中看到实时数据,这就要求单帧推理时间不能太高。基于候选区域的经典两阶段检测器精度确实不错,但在边缘设备上的推理速度吃紧,部署时还要单独处理区域生成网络,整体链路复杂。
YOLOv26属于单阶段检测器,检测和关键点回归在同一个前向过程中完成,速度优势明显。它沿用并强化了级联特征聚合结构,高层语义信息和底层细节信息通过多层特征金字塔融合,这对手部、剑尖这类小目标的检测很关键。它还在检测头的损失函数里加入了更细致的回归策略,对目标中心定位更敏感,而击剑场景里剑尖定位的准确性直接决定整套系统的价值。
另一个考虑是模型还有可选的细粒度检测分支,也就是针对小目标增加更高分辨率的特征图输出。剑尖这种极端小目标用标准三尺度特征图很难抓住,配合细粒度分支后,漏检率明显下降。具体实现方案我在第三部分详述。
2. 数据是这活儿的命门:训练集构建与标注细节
2.1 采集阶段就要刻意制造困难样本
很多团队做动作识别,数据都是从公开数据集或者人网上爬来的,这在通用场景没问题,但击剑不行。公开的人类姿态数据集几乎没有覆盖击剑专项动作,更没有击剑运动特有的“剑尖”“护手盘”这类目标的概念。因此,这一类项目的第一步是自建数据集。
我走了这样一条采集路线:在训练场馆布置多台相机,覆盖正面、侧前方45度和斜上方高机位三个视角。正面视角主要负责击剑对练时的面对面交互识别,侧前方视角对弓步、防守动作的腿部姿态更灵敏,高机位则记录整体位移和身体重心变化。
采集时不要只录正式对练,还要刻意录制各种极端情况:近距离缠斗、两人身体紧贴、高速连续进攻、后退防守转反击、低光环境、场馆灯光闪烁下、运动员背对镜头。这些在训练数据里叫“困难样本”,模型只有在困难样本上见过对应特征,才能在真实对练中不犯低级错误。宁可采集时多花两周时间,也不要训练到一半发现遮挡样本严重不足。
分辨率方面,采集设备支持4K就开4K。训练时确实会缩放到固定输入尺寸,但高分辨率原图可以保留更多小目标细节,也方便后续做多尺度裁剪扩展数据集。帧率方面,常规训练视频30帧够用,但如果要采集剑尖连续轨迹,建议用高帧率模式记录关键动作,比如120帧或240帧,用来补充运动模糊和中间态样本。
2.2 标注规范:哪些目标框、哪些关键点,边界怎么定
标注规范是最影响下游效果的一步,也是最容易返工的地方。我当时反复改了四版标注文档,核心问题都出在“边界定义不清楚”和“类别定义重叠”上。
目标框我定义了七个类别,按优先级排列如下:
- 剑尖:剑条末端最细的区域,标注框尽量紧贴剑条边缘,不要包含背景。
- 剑条:整根金属剑条,含剑尖区域,但不包含护手盘。
- 护手盘:剑条和手柄之间的碗状护具。
- 持剑手:握剑的手臂末端到手腕区域,护手盘靠近持剑手时允许框与框重叠。
- 头:运动员头部,含面罩,不含颈部。
- 躯干:肩到髋之间的区域,不含四肢。
- 腿:左右前腿、后腿分开标注为前腿和后腿两个类别,因为击剑动作分析非常依赖弓步过程中前腿和后腿的位置关系。
这里有一个我踩过坑的点:剑条和剑尖是否标注为重叠目标?一开始我把剑尖标注成独立边框,完全脱离剑条框,结果训练时模型容易漏检,因为剑尖周围的特征就是剑条。后来调整为剑尖框必须包含在剑条框内,并且剑条框的类别置信度忽略包含剑尖的子区域,这个细节让剑尖检测精度提升明显。
关键点方面,我定义了一套击剑专用关键点集合,而不是强行套用人体17关键点:
- 剑尖点:唯一需要极高精度的点,标注到剑尖像素中心位置。
- 护手盘中心点:用于辅助判断剑的朝向。
- 持剑手腕点:判定攻防时手腕发力状态。
- 肘点、肩点:分析前臂和上臂角度。
- 髋点、膝点、踝点:前腿和后腿各一组,用于判断弓步幅度、膝盖是否超过脚尖。
- 重心参考点:躯干框的几何中心自动生成,不单独标注。
每帧标注一次。关键点缺失或被完全遮挡时选择不标注,让模型学会“看不见就不输出置信度”,不要强行猜测。
标注工具我用的主流开源图像标注工具之一。这里有一个实用技巧:先对视频每隔五帧抽帧,用预训练模型做一轮粗糙标注,人工只需要修正错误和补漏,效率能提高一倍。一开始全人工一帧一帧标,一万帧标了快两个星期,后来改成预标注加人工校对,一周就能处理两万帧。
2.3 数据增强与类别平衡策略
击剑数据集的天然分布非常不均衡。常态站位和缓慢试探动作大量存在,高速进攻、近距离缠斗、剑尖被遮挡的样本很少。模型训练出来如果只学到大样本模式,遇到关键动作就会失效。
我用了一组针对性增强策略,不只是简单翻转和亮度调整:
- 动态映射翻转:左右镜像翻转,同时交换前腿和后腿标签以及左右关键点顺序,让网络对左右手持剑均鲁棒。
- 局部裁剪放大:对剑尖、持剑手这类小目标区域做随机裁剪并放大到原始输入分辨率比,模拟近距离观察效果。
- 运动模糊模拟:用径向模糊核模拟高速挥剑的拖影,让网络学会在模糊画面中判断剑尖位置。
- 高光与眩光模拟:在剑条区域随机叠加高光渐变和局部过曝,增强模型对反光的抵抗力。
- 多尺度训练:在每次迭代中随机使用一组输入分辨率中的一个,比如从640到1280分成几个档位,增强模型对不同距离下目标的响应。
增强策略不要盲目叠加。我一开始把所有增强全部打开,结果训练损失持续不降,后来发现是运动模糊模拟和翻转叠加产生了太多不自然的伪样本,模型反而学偏了。最终只保留翻转、局部裁剪、亮度扰动、少量模糊和多尺度训练,效果最稳定。数据增强的目的是增加样本多样性,但永远不要制造真实场景中不可能出现的组合。
另外,占比悬殊的类别用加权采样处理。剑尖样本即使数量少,也要保证每个batch里都有稳定数量的剑尖实例参与训练,避免模型在反向传播时被其他大目标类别淹没。
3. 模型训练与针对性调优
3.1 模型结构里哪些模块跟这种场景强相关
拿到YOLOv26时,我会先看它的结构是够“照顾小目标”,再决定哪里需要加模块。击剑场景的特殊性决定了它的模型结构需求非常个性:
首先,骨干网络对浅层特征保真度很重要。图像特征从输入到深层,语义越来越强,但空间分辨率越来越低。剑尖在1024分辨率下也就不过5到10个像素大小,经过骨干网络下采样几轮后,剩余的空间信息可能只有1个像素,全靠上下文猜。YOLOv26骨干网络保留的浅层特征融合设计,通过跨阶段连接让底部细节特征直达颈部聚合层,减小信息损耗,这比只看高层语义靠谱很多。
其次,颈部特征金字塔的多层融合方式。击剑画面里既有大目标(运动员躯干)又有小目标(剑尖),特征金字塔不同层级天然负责不同尺度的目标。YOLOv26使用双向特征金字塔,在不同尺度间增加了一条自顶向下和自底向上并行的融合路径。我在训练时详细对比过,缺了这一层的模型小目标Recall掉了将近3个百分点。
第三,解耦检测头对定位精度的帮助。分类和回归任务在特征图上关注的模式并不一致,分类更关注“这是什么”,回归更关心“边界在哪里”。解耦头把这两条路径分开,各自获得独立梯度,对剑尖这种需要精确定位的目标很关键。YOLOv26的解耦头配合更细致的回归损失设计,实测的剑尖中心点误差比上一代版本少了约0.8像素。
最后,注意力模块的位置放哪儿有讲究。有人习惯把注意力模块堆在骨干末尾,我试下来效果一般。小目标特征本身很弱,注意力模块放浅层融合位置更合适,能让网络主动增强浅层特征中细小目标的响应。实测在特征金字塔融合前加轻量注意力模块,剑尖检测的平均精度提升了1.7%左右,而推理耗时几乎没有增加。
3.2 超参配置与训练流程
超参数配置我直接给出实际使用的一组值,这组值在“某高校实验室”的采集视频集上稳定训练过,参考价值比较高。
训练时输入分辨率设置为1024×1024。这个分辨率针对击剑场景做了折中:640对剑尖太小,1280精度提升有限却让训练和推理速度明显变慢。剑尖在1024下占据约8到14个像素,配合细粒度分支已经能够稳定检测。如果你对部署设备的推理性能有信心,也可以考虑1280,效果还会更好一点。
初始学习率0.001,优化器用带动量的随机梯度下降,权重衰减0.0005。预热三个迭代批次,学习率从0.0001线性升到0.001,避免前几轮梯度震荡太剧烈。训练前三分之一阶段冻结骨干参数,只训练颈部聚合并,后半段解冻骨干全参数微调。这种分段策略既避免预训练权重被小数据集破坏,又能在最后阶段充分适应击剑场景的特征分布。
训练时长大约40个轮次,配合早停让验证集损失在连续五轮不下降时停止训练。EMA指数移动平均开启,取整个训练周期的平均权重,而不是最后几轮的权重。EMA几乎总是能带来1%到2%的最终精度提升,训练成本却为零,这个技巧强烈建议保留。
损失函数方面,目标框回归用带中心距离惩罚的完整交并比损失,分类部分用二元交叉熵,关键点部分用基于目标尺度归一化的关键点相似度损失。每个损失项都要配权重,我给定的权重比是1.0比0.5比0.8,关键点权重略微调高,因为本项目最核心的输出是剑尖轨迹和关节角度。
训练时启动早停、检查点保存、学习率衰减策略。
3.3 小目标专项优化:剑尖漏检的几种解法
剑尖检测是满项目最折磨人的一环。漏检率刚开始有大约17%,这个数字不降下来,整套系统完全没有实用价值。我做了四次专项优化,每次调整后的收益差异很大。
首次是加细粒度特征输出。在原有特征金字塔三层的基础上,额外增加更高分辨率的特征层,专门负责捕获小目标。这些高分辨率特征图会增大模型计算量,所以只对检测头部分做特征融合,不改变骨干网络整体下采样路线。尝试后剑尖漏检率降到10%左右,代价是推理时间增加了约15%,在可控范围内。
第二次优化是改进特征融合方式。高分辨率层如果只是简单从低分辨率层上采样拼接,细节恢复并不理想。我改成在拼接前用可学习的权重对来自深层语义和浅层空间细节做加权融合,网络自己学会什么时候更依赖细节、什么时候更依赖语义。这一步又把剑尖平均精度从83.2%提升到86.4%。
第三次是从数据侧入手。单独统计剑尖样本在不同距离区间的分布,发现3米以远的小尺度剑尖样本稀少,于是采集设备往前移了一段距离,专拍远距离慢动作交手片段,同时用局部增强把远距离剑尖裁剪后放大作为独立样本补入数据集。漏检率在近距离样本上进一步下降,整体降到6%左右。
第四次是加入选择性测试时增强。它不适合实时推理,所以我只把它用在离线分析模式。把同一帧缩放几个尺度分别推理,对剑尖框取交集平均,最终离线分析模式漏检率压到3.5%左右。实时模式下不做测试时增强,保持推理速度稳定。
做完这四轮优化我得到一个判断:小目标检测的瓶颈往往同时出现在特征分辨率、数据分布和推理策略三个层面,只调模型不调数据,或者只调数据不调模型结构,都很难突破。剑尖精度提升正是多维同时作用的结果。
4. 实时推理链路与工程化部署
4.1 检测-跟踪-姿态的协同流水线
模型训练好了并不代表系统能跑起来。击剑动作分析需要连续帧的检测结果,而不是孤立的一帧一帧猜测。我把推理链路设计成:采集抽帧、检测推理、跨帧关联、关键点滤波、轨迹生成、动作统计。
检测推理这一步可以直接从模型中拿到的七类目标框和关键点坐标输出。跨帧关联用的是轻量级多目标跟踪方案,按目标框中心距离和外观特征的联合代价做匹配,对剑尖这种外观差异很小的目标,主要依靠运动一致性约束,也就是同一目标在相邻帧的运动距离不会突变。
跟踪这一步的核心价值在于补漏。当某几帧剑尖漏检时,完全可以从跟踪轨迹中插值估计出剑尖位置,而不是让轨迹断掉。追踪算法给每个目标分配一个稳定的跨帧编号,后续所有统计都基于编号展开。
关键点平滑我用的是零相位低通滤波。模型直接输出的关键点在快速挥剑时通常有随机抖动,不处理的话剑尖轨迹会是一条粗糙的折线,速度计算完全失真。零相位滤波本质是对数据先正向滤波一次、再反向滤波一次,保证滤波后关键点位置和原始数据在同一时间相位,不产生额外延迟。离线分析链路可以这样做,因为不需要实时输出。代价是会有几十毫秒的固定延迟,但对训练分析场景完全可以接受。如果一定要实时平滑,只能改成因果滤波,在实时和轨迹平滑之间做取舍。
4.2 推理加速与边缘部署
模型本身再快,如果部署方案的链路没优化好,仍然会出现掉帧。实时模式我用最常规的流程优化组合:
- 模型导出为半精度浮点格式,推理前额外做层间融合和算子重排,把计算图做一次编译优化。
- 检测推理的输入分辨率根据机位距离动态调整,近机位用1024,远机位才用1280,避免所有路都跑最高分辨率。
- 把预处理和后处理放到GPU上完成,不做CPU和GPU之间的频繁数据拷贝。
- 关键点后处理中的分组和阈值过滤部分用并行算子实现,避免在GPU推理后的纯CPU循环上卡时间。
实测在单张主流消费级显卡上,1024输入的推理耗时大约在11到14毫秒之间。加上跟踪、滤波和可视化,单路视频流处理稳定保持在每秒30帧以上。边缘设备上的表现要差一些,单路720P输入勉强跑到25帧左右,这说明如果要做便携式场边分析设备,输入分辨率需要再降到经典尺寸,并放弃关键点插值滤波,换取速度。
另一个容易忽略的瓶颈是视频解码。多路视频流同时输入时,如果解码不设硬件加速,CPU会被大量占用,导致GPU空闲等待。我改成硬解加统一格式转换的方案后,多路视频流的整体吞吐量提升了将近一倍,这个优化比模型本身的加速效果更明显。
4.3 多机位融合与剑尖轨迹重建
单镜头画面在两人交错时会频繁丢失剑尖,视角盲区无法避免。我在系统中接入多路视频流,通过多机位融合减少单镜头的遮挡盲区。
多机位融合第一步是相机标定。用平面标定板固定到场地多个位置,采集标定图像后计算每个相机的内参和外参。第二步是地面平面映射,把每个机位画面中的检测坐标投影到统一的场地地面坐标系上,这样同一个运动员在不同机位中就有同一个世界坐标。第三步是目标级关联:同一坐标区域附近、类别一致的检测结果视为同一目标。
剑尖的立体重建稍有不同。地面平面投影对剑尖这种高悬目标并不完全适用,因为剑尖往往不在运动员脚底平面上。我改成对地面平面坐标加一个高度先验约束,在人体动作模型限制下估算剑尖离地面高度,再把这个高度投影回画面估算三维位置。精度不如完整双目立体视觉,但设备只需要两台普通相机,部署简单很多。
轨迹重建之后就能做更高级的动作指标:剑尖加速段时长、弓步发起时的持剑手初始速度、剑尖在某个方向上的偏移量、两人距离变化曲线。这些数据再结合经验规则,就能自动识别出弓步刺、转移刺、防守还击几类常见动作,虽然不是完整的行为识别模型,但已经具备实际辅助分析价值。
5. 实测问题排查与踩坑记录
5.1 高频问题速查表
整理一张高频问题速查表,便于在现场排查时快速对照。
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 剑尖频繁漏检 | 输入分辨率过低 | 提升到1024以上,开启细粒度特征分支 |
| 剑尖误检到反光点 | 金属剑条高光干扰 | 增加眩光模拟增强,收紧NMS阈值,增加方向约束 |
| 关键点抖动明显 | 模型单帧预测存在随机噪声 | 使用零相位滤波加轨迹平滑 |
| 多人遮挡后ID跳变 | 遮挡期间目标特征变化过大 | 增强近距离缠斗样本,优化跟踪运动一致性约束 |
| 训练损失不下降 | 增强策略叠加过度,样本不真实 | 精简增强组合,只保留对抗性最强的三类 |
| 边缘设备卡顿 | 视频解码占CPU资源 | 开启硬解,统一画面格式 |
| 黄昏自然光照变化导致漏检增多 | 测试分布偏移 | 收集不同时段数据,加入自然光照扰动增强 |
这张表看起来简单,每条都是反复压测才得到的经验。比如NMS阈值一项,默认阈值在击剑场景并不适合,因为剑尖和护手盘距离很近,默认阈值会把两个目标合并成一个,失去关键部位独立性。把阈值适当放宽后,两个紧贴的目标才能被同时保留。
5.2 三个印象最深的坑
第一个坑是护手盘反光。护手盘是金属材质,在部分角度下会出现大面积镜面反射,反射的灯光形状和大小都跟剑尖非常接近。第一次训练完,我发现系统大量把护手盘上的高光斑当成剑尖,误检率一度超过20%。后来在数据增强中加入局部过曝和高光椭圆模拟,同时在后处理里加一条经验规则:剑尖点和护手盘中心点的距离必须小于固定比例,否则视为非法预测。两者配合之后误检率才降到2%以下。
第二个坑是视频流时间戳不同步。接入多机位之后,不同相机的画面到达时间不同步,最坏时相差两三帧。直接按到达时间做轨迹拼接,剑尖轨迹会出现跳绳现象。最终的处理是在流水线里加统一时间基准,每路视频把检测结果打上采集时间戳,跟踪和融合模块按时间戳查找对应检测结果,而不是按顺序排列。这个工程细节花了我差不多一个周末,但解决后多机位轨迹的连续性有了质的改变。
第三个坑是标注一致性问题。队友在标注时对“前腿”和“后腿”理解不一致,特别是运动员侧身时,两条腿在画面中一前一后的边界并不明显。不同标注员对同一帧可能给出相反标签。模型训练出来对前后腿的分类准确率只有78%。重新统一标注规范、细化到以髋关节连线与画面水平轴的夹角来定义前后腿后,准确率提升到92%。标注一致性对模型精度的影响,远超过模型结构本身,任何关键部位检测项目都必须在标注文档里精确到这种细节程度。
5.3 后续还能往哪些方向扩展
现在这套流程已经能稳定输出剑尖轨迹、关键点角度和基础动作统计。再往下走,我认为有三个方向值得探索。
一是把轨迹序列直接接到时序模型上做动作识别。当前模式是基于规则和阈值判断动作,比如根据速度峰值和加速度方向推断弓步发力和防守转移。如果采集量够大,完全可以用轻量时序模型在滤波后的关键点序列上做分类,动作识别的覆盖范围和鲁棒性都会更强。
二是引入三维姿态估计。目前关键点坐标仍是二维图像坐标映射到地面平面,高度信息估算粗糙。如果有条件部署多路高分辨率相机并做完整立体标定,可以把关键点重建到三维空间,剑尖的三维轨迹能够更准确判断有效得分位置,裁判辅助系统的价值会大幅提升。
三是从单人分析扩展到对抗分析。击剑是双人交互运动,攻防双方的关键部位位置关系比单人姿态更有分析意义。可以在关键点序列之外再加入双方剑尖相对距离、护手盘相对角度等对抗特征,挖掘出更高维度的战术信息。
收尾:想说的几句实在话
做击剑运动员姿态识别和关键部位检测,最深的体会是:模型精度确实重要,但真正决定项目成败的往往是数据标注规范、工程链路设计和场景理解这些看起来不“性感”的环节。YOLOv26给了我们一个能同时输出检测框和关键点的好工具,剑尖检测精度、关键点稳定性也完全达到了训练分析的使用标准,但项目中最耗时的部分始终是数据的采集与标注、排查反光误检、统一多机位时间基准这些脏活累活。
如果让我给正在做类似项目的人一个建议,我会说:先别急着改模型结构,花一周时间把标注规范和困难样本采集方案定下来,再回头做模型训练,你会发现调参难度直线下降。另一个小技巧是随时保留每一版模型和对应训练集的快照,方便复盘某次精度变化到底来自数据调整还是模型改动。
这套流程跑下来,从最初剑尖漏检率17%一路优化到实时模式6%左右、离线模式3.5%的水平,中间也走了不少弯路。但只要路线清晰,这些坑都能绕过去。希望这篇分享能帮你省下一些不必要的试错时间。