2、基础知识:准确率、精确率、召回率、F1分数的定义与适用场景,以及它们之间的区别

在TinyML视觉模型评估中,我们面对的核心问题不是“模型能不能跑”,而是“模型跑得好不好”。由于TinyML设备通常部署在资源受限的MCU(微控制器)上,模型参数量小、推理帧率低、训练数据往往有限,因此评估指标的选择直接决定了模型迭代的方向。准确率(Accuracy)、精确率(Precision)、召回率(Recall)和F1分数(F1-Score)是分类任务中最基础的四项指标,但它们的数学定义、业务含义和适用场景差异显著。如果只盯着准确率,在类别不平衡的视觉任务(如工业缺陷检测中正常样本占95%)中,模型可能“看似优秀,实则失效”。本节将系统拆解这四个指标的定义、计算方式、适用边界,并通过一个TinyML手势识别案例展示它们如何协同指导模型优化。

四指标关系与适用场景总览 混淆矩阵(2×2) 预测正类 预测负类 实 际 TP FN FP TN TP=真正例 FN=假负例 FP=假正例 TN=真负例 核心公式 准确率 = (TP+TN)/(TP+TN+FP+FN) 精确率 = TP/(TP+FP) 召回率 = TP/(TP+FN) F1 = 2×P×R/(P+R) P=精确率 R=召回率 适用场景速查 • 准确率:类别均衡、所有错误代价相同 • 精确率:误报代价高(如安全告警) • 召回率:漏报代价高(如疾病筛查) • F1:精确率与召回率需平衡时 • 宏平均/微平均:多分类场景 指标选择决策路径 类别是否均衡? 均衡→准确率 不均衡→继续判断 误报 vs 漏报 哪个代价更高? 误报高→精确率优先 漏报高→召回率优先 TinyML场景建议:结合业务代价矩阵,使用F1或加权Fβ进行综合评估

2.1 核心原理:从混淆矩阵到四指标

所有分类评估指标都源于混淆矩阵(Confusion Matrix)。在二分类问题中,模型预测结果与真实标签组合成四种情况:真正例(TP,实际为正且预测为正)、假正例(FP,实际为负但预测为正,即误报)、假负例(FN,实际为正但预测为负,即漏报)、真负例(TN,实际为负且预测为负)。TinyML视觉模型输出通常是经过Softmax或Sigmoid后的概率值,通过设定阈值(默认0.5)将概率映射为类别标签,因此混淆矩阵的数值会随阈值变化而改变。

基于混淆矩阵,四个指标的定义如下:

  • 准确率(Accuracy):所有预测正确的样本占总样本的比例,公式为 (TP+TN)/(TP+TN+FP+FN)。它衡量整体正确率,但对类别不平衡敏感。
  • 精确率(Precision):预测为正类的样本中实际为正类的比例,公式为 TP/(TP+FP)。它回答“模型说它是正类,有多可信”的问题,关注误报。
  • 召回率(Recall):实际为正类的样本中被正确预测的比例,公式为 TP/(TP+FN)。它回答“真实的正类样本,模型找回了多少”,关注漏报。
  • F1分数:精确率与召回率的调和平均数,公式为 2×P×R/(P+R)。当P和R接近时F1最大,它惩罚P和R的失衡。

在TinyML视觉任务中,这四个指标的计算成本极低——只需统计混淆矩阵的四个值,适合在MCU端进行实时评估或调试。但需要注意的是,多分类任务中需要将指标扩展为宏平均(每个类别单独计算后取算术平均)或微平均(全局统计TP/FP/FN后计算),两者在类别不平衡时差异显著。

关键认知:准确率是“整体体检”,精确率和召回率是“单类体检”,F1是“平衡体检”。在TinyML场景中,由于模型容量小、类别间特征可能重叠,准确率往往虚高,必须结合精确率和召回率才能发现模型在少数类上的失效模式。

2.2 判断方法:如何根据任务特性选择主导指标

选择哪个指标作为主导,取决于业务场景中误报(FP)和漏报(FN)的代价差异。以下是TinyML视觉任务中常见的三类场景判断逻辑:

场景类型 典型任务 主导指标 原因分析
误报代价高 工业缺陷检测、入侵报警 精确率 误报导致停机检查或无效告警,消耗人力成本
漏报代价高 疾病筛查、跌倒检测 召回率 漏报导致错过关键事件,后果严重
两者均衡 手势识别、物体分类 F1分数 误报和漏报影响相似,需要平衡
类别均衡且代价相同 MNIST手写数字识别 准确率 各类别样本量接近,准确率能反映真实水平

操作流程上,建议按以下步骤进行指标选择:

  1. 列出业务代价矩阵:明确FP和FN各自造成的损失(时间、金钱、安全风险)。
  2. 检查类别分布:统计验证集中各类别样本占比,若最频繁类别占比超过80%,准确率将失去参考价值。
  3. 设定阈值:TinyML模型输出概率后,可通过调整阈值(如从0.5降到0.3)来提升召回率,但会牺牲精确率。
  4. 计算P-R曲线下面积(AUC-PR):在TinyML中,由于模型较小,P-R曲线比ROC曲线更能反映类别不平衡下的性能。
  5. 确定主导指标:根据代价矩阵选择精确率、召回率或F1作为模型调优的优化目标。
经验提醒:在TinyML中,由于Flash和RAM限制,模型往往无法做到高精确率和高召回率同时达标。建议在模型训练阶段使用F1作为早停(Early Stopping)的监控指标,而不是准确率,因为F1对类别不平衡更敏感,能更早暴露过拟合风险。

2.3 案例拆解:TinyML手势识别模型的指标诊断

我们以一个部署在Cortex-M4 MCU上的手势识别模型为例,该模型使用MobileNetV2的深度可分离卷积变体,参数量约120K,输入图像为32×32灰度图,识别“握拳”、“张开”、“食指指向”三种手势。训练集包含每类2000张图像,验证集每类500张,测试集每类300张。初始模型在测试集上的准确率达到91.2%,看似不错,但进一步分析混淆矩阵后发现严重问题。

初始混淆矩阵(测试集,共900张):

实际\预测 握拳 张开 食指指向
握拳 270 15 15
张开 20 260 20
食指指向 10 10 280

计算各类别指标(以“握拳”为正类):精确率 = 270/(270+20+10) = 0.90,召回率 = 270/(270+15+15) = 0.90,F1 = 0.90。看似均衡,但“张开”类的精确率 = 260/(260+15+10) = 0.91,召回率 = 260/(260+20+20) = 0.87,F1 = 0.89。问题在于“食指指向”类:精确率 = 280/(280+15+20) = 0.89,召回率 = 280/(280+10+10) = 0.93,F1 = 0.91。整体准确率 = (270+260+280)/900 = 0.90,但宏平均F1 = (0.90+0.89+0.91)/3 = 0.90。

表面看指标均衡,但深入分析发现:模型在“张开”和“食指指向”之间混淆较多,原因是两者在低分辨率下轮廓相似。进一步调整策略:

  • 数据增强:增加“张开”和“食指指向”的旋转、缩放扰动,模拟真实部署中的角度变化。
  • 阈值调整:将“食指指向”的判定阈值从0.5提高到0.6,减少误报,但会降低召回率。
  • 损失函数修改:使用Focal Loss,让模型更关注难分类样本。

经过两轮迭代后,新模型的混淆矩阵变为:握拳类精确率0.93、召回率0.91;张开类精确率0.92、召回率0.94;食指指向类精确率0.95、召回率0.92。宏平均F1提升至0.93,准确率提升至93.1%。虽然提升幅度不大,但关键改进在于减少了“张开”和“食指指向”之间的混淆——这正是通过观察各类别精确率和召回率差异发现的。

风险提示:在TinyML中,不要盲目追求F1最大化。如果部署环境光照变化大,过高的召回率可能意味着模型对噪声敏感,导致频繁误触发。建议在真实硬件上采集一段连续视频流,统计实际误报率和漏报率,再决定是否调整阈值。

2.4 常见误区与总结复盘

在TinyML视觉模型评估中,以下误区最为常见:

  • 误区一:只看准确率。当类别不平衡时(如缺陷检测中良品占95%),准确率可能高达95%,但模型可能把所有样本都预测为良品,召回率为0。必须同时查看混淆矩阵。
  • 误区二:混淆精确率和召回率。精确率的分母是预测为正类的数量,召回率的分母是实际为正类的数量。在TinyML中,如果模型输出概率普遍偏低,精确率会下降,但召回率可能上升。
  • 误区三:忽略阈值的影响。TinyML模型在MCU上推理时,Softmax输出可能因量化误差而偏移,默认0.5阈值可能不再最优。建议在部署前用验证集搜索最佳阈值。
  • 误区四:多分类任务直接套用二分类公式。多分类需要明确是宏平均还是微平均,宏平均对少数类更敏感,微平均受多数类主导。
  • 误区五:F1分数越高越好。在某些场景下,业务代价不对称,例如漏报一个缺陷的代价是误报的10倍,此时应使用Fβ分数(β>1时更关注召回率),而不是F1。