图像分类基础:任务定义、常见数据集与评价指标
图像分类是计算机视觉中最基础、最核心的任务之一,也是TinyML端侧视觉应用(如智能门铃的人脸识别、工业质检的缺陷检测、农业领域的病虫害识别)的起点。在进入模型训练与部署之前,我们需要先厘清三个关键问题:图像分类到底在解决什么问题?用什么数据来训练和验证?如何科学地衡量模型的好坏?本章将围绕这三个问题展开,为后续的模型选型、量化压缩和端侧部署打下坚实的理论基础。
图像分类任务的定义与本质
图像分类(Image Classification)是指给定一张输入图像,由算法模型判断该图像所属的预定义类别标签。从数学角度看,这是一个从高维像素空间到离散标签空间的映射函数 f: R^(H×W×C) → {1, 2, ..., K},其中 H、W 为图像高度和宽度,C 为通道数(灰度图为1,RGB彩色图为3),K 为类别总数。在TinyML场景中,输入图像通常经过预处理后直接送入轻量级神经网络(如MobileNet、TinyML专用网络),输出一个长度为K的概率向量,取最大值对应的索引作为预测类别。
图像分类的核心难点在于类内差异大、类间差异小。例如,区分不同品种的狗(类间差异小)比区分猫和狗(类内差异大)更具挑战性。传统方法依赖人工设计的特征(如HOG、SIFT),而深度学习方法通过卷积神经网络自动学习层次化特征——浅层提取边缘纹理,深层提取语义部件。在TinyML端侧,由于算力和内存受限,模型往往需要更小的输入分辨率(如96×96或128×128)和更浅的网络结构,这会导致特征表达能力下降,因此需要在模型设计时做出权衡。
常见数据集:MNIST与CIFAR-10
数据集是模型训练的“教材”。在TinyML图像分类入门阶段,最常用的两个数据集是MNIST和CIFAR-10,它们分别代表了不同难度和规模的基准测试。
| 属性 | MNIST | CIFAR-10 |
|---|---|---|
| 图像尺寸 | 28×28 灰度图 | 32×32 RGB彩色图 |
| 类别数 | 10(数字0-9) | 10(飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车) |
| 训练集/测试集 | 60,000 / 10,000 | 50,000 / 10,000 |
| 难度 | 低(灰度、背景简单) | 中等(彩色、物体姿态多样) |
| TinyML适配性 | 非常适合入门,可直接输入模型 | 需降采样或裁剪,对端侧模型有挑战 |
| 典型应用 | 手写数字识别、验证码识别 | 通用物体识别、场景理解 |
在TinyML实际项目中,我们很少直接使用完整数据集,而是采用子集采样或知识蒸馏策略。例如,从CIFAR-10中每类抽取500张训练图片(共5000张),模拟端侧数据量受限的场景。此外,还需要对图像进行预处理:MNIST通常归一化到[0,1]区间,CIFAR-10则常用均值/标准差标准化。在端侧部署时,这些预处理操作需要转换为C代码中的定点运算,以减少浮点计算开销。
评价指标:准确率与混淆矩阵
评价指标是衡量模型性能的“标尺”。在图像分类中,最直观的指标是准确率(Accuracy),即预测正确的样本数占总样本数的比例。然而,准确率在类别不均衡时会“失真”。例如,一个二分类问题中90%是负样本,模型全部预测为负样本也能获得90%的准确率,但这显然没有实际意义。因此,我们需要引入更细致的评价工具——混淆矩阵(Confusion Matrix)。
混淆矩阵是一个K×K的矩阵,行表示真实类别,列表示预测类别。矩阵元素 M[i][j] 表示真实类别为 i 但被预测为 j 的样本数。基于混淆矩阵,可以衍生出以下关键指标:
- 精确率(Precision):预测为某类的样本中真正属于该类的比例,即 TP / (TP + FP),衡量“查得准不准”。
- 召回率(Recall):真实为该类的样本中被正确预测的比例,即 TP / (TP + FN),衡量“查得全不全”。
- F1分数:精确率和召回率的调和平均数,即 2×P×R / (P + R),综合衡量模型性能。
- 类别准确率(Per-class Accuracy):每个类别单独计算的准确率,便于发现模型对哪些类别“偏科”。
在TinyML端侧部署中,除了上述分类指标,还需要关注工程指标:模型大小(KB)、RAM占用(KB)、单次推理时间(ms)、峰值功耗(mW)。这些指标直接影响模型能否在特定MCU上运行。例如,一个模型准确率高达98%,但模型大小超过Flash容量,就无法部署;或者推理延迟超过实时性要求,也无法应用。
案例拆解:MNIST手写数字识别的端侧评估
为了将上述概念串联起来,我们以一个具体的MNIST端侧部署案例进行拆解。假设我们要在STM32F407(Cortex-M4,192KB RAM,1MB Flash)上部署一个手写数字识别模型。
初始目标:在满足端侧资源约束的前提下,实现测试集准确率≥95%,单次推理延迟≤50ms。
关键输入数据:MNIST测试集10,000张图像;模型候选:LeNet-5简化版(参数量约6万)、MobileNetV1-0.25(输入48×48,参数量约4.7万)、自定义3层卷积网络(参数量约2万)。
分析判断过程:首先在PC端训练三个候选模型,记录其准确率和参数量。然后使用TFLite Micro框架进行量化(动态范围量化),评估量化后的模型大小和推理延迟。初步结果显示:LeNet-5准确率98.2%,但模型大小245KB,超过Flash预算;MobileNetV1-0.25准确率96.8%,模型大小180KB,RAM占用45KB,推理延迟38ms,满足约束;自定义网络准确率94.5%,模型大小90KB,但准确率不达标。
实际操作步骤:
- 对MobileNetV1-0.25进行8位整型量化,模型大小降至45KB,RAM占用28KB,推理延迟降至22ms。
- 在测试集上评估量化后模型,准确率降至95.9%,仍满足≥95%的目标。
- 进一步分析混淆矩阵,发现数字“4”和“9”的混淆率最高(约3.2%),因为这两个数字在28×28分辨率下形态相似。
- 针对该问题,在训练阶段对“4”和“9”的样本进行数据增强(随机旋转±10°、缩放0.9-1.1倍),重新训练后混淆率降至1.8%,整体准确率提升至96.4%。
结果对比:最终部署模型为量化后的MobileNetV1-0.25,模型大小45KB,RAM占用28KB,推理延迟22ms,准确率96.4%。相比初始LeNet-5方案,模型大小减少81%,延迟降低42%,准确率仅下降1.8个百分点。
风险与代价:量化过程引入了约0.9%的准确率损失;数据增强增加了训练时间约30%;部署时需处理定点运算与浮点运算的精度差异,调试耗时约2天。
复盘经验:在TinyML项目中,“先定约束,再选模型,最后调优”是高效路径。混淆矩阵是发现模型短板的利器,针对性地优化特定类别往往比盲目增加模型容量更有效。此外,量化感知训练(QAT)可以进一步减少量化损失,但会增加训练复杂度,适合对准确率要求较高的场景。
常见误区与总结复盘
在图像分类基础概念的学习和实践中,初学者常犯以下错误:
- 误区一:只关注准确率,忽略混淆矩阵。准确率只能给出整体水平,无法定位具体类别的问题。例如,在CIFAR-10中,模型可能对“猫”的识别准确率只有70%,但对“汽车”达到99%,整体准确率看似不错,实际应用时却频繁出错。
- 误区二:数据集划分不合理。训练集、验证集、测试集必须严格分离,且测试集不能参与任何训练决策。有些初学者反复使用测试集调参,导致“过拟合测试集”,模型在真实场景中表现不佳。
- 误区三:忽视类别不均衡问题。在自定义数据集中,某些类别样本极少,模型会倾向于预测多数类。此时应使用加权损失函数或过采样/欠采样技术,并重点关注少数类的召回率。
- 误区四:在端侧部署时直接使用浮点模型。大多数MCU不支持浮点运算或浮点运算极慢,必须进行量化。量化后的模型需要重新评估指标,不能直接沿用PC端的准确率。