图像分类基础:任务定义、常见数据集与评价指标

图像分类是计算机视觉中最基础、最核心的任务之一,也是TinyML端侧视觉应用(如智能门铃的人脸识别、工业质检的缺陷检测、农业领域的病虫害识别)的起点。在进入模型训练与部署之前,我们需要先厘清三个关键问题:图像分类到底在解决什么问题?用什么数据来训练和验证?如何科学地衡量模型的好坏?本章将围绕这三个问题展开,为后续的模型选型、量化压缩和端侧部署打下坚实的理论基础。

图像分类核心概念关系图 任务定义 输入:图像像素矩阵 输出:类别标签 本质:特征提取 + 映射 约束:类别互斥 常见数据集 MNIST:28×28 灰度手写数字 CIFAR-10:32×32 彩色物体 ImageNet:224×224 大规模 TinyML常用:子集/蒸馏 评价指标 准确率(Accuracy) 混淆矩阵(Confusion Matrix) 精确率/召回率/F1 推理延迟/模型大小 TinyML端侧部署链路 数据采集 → 模型训练(PC端) → 模型量化/剪枝 → 部署到MCU → 推理输出 关键点1:数据分布 训练集/验证集/测试集 需保持同分布 关键点2:类别平衡 类别不均衡影响评估 需关注混淆矩阵 关键点3:端侧约束 内存/算力/功耗限制 指标需结合部署场景

图像分类任务的定义与本质

图像分类(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)和更浅的网络结构,这会导致特征表达能力下降,因此需要在模型设计时做出权衡。

核心理解:图像分类的本质是“特征提取 + 决策映射”。在端侧部署时,我们不仅要关注分类准确率,还要关注模型参数量、计算量(MACs)、内存占用和推理延迟。一个在PC上准确率95%的模型,量化压缩后可能降至92%,但换来了10倍的速度提升和5倍的内存缩减,这在TinyML场景中往往是值得的。

常见数据集: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代码中的定点运算,以减少浮点计算开销。

经验建议:入门阶段建议先用MNIST跑通完整的“训练→量化→部署→推理”流程,因为其图像尺寸小、模型简单,便于调试。当流程跑通后,再切换到CIFAR-10或自定义数据集,逐步增加难度。切勿一开始就在复杂数据集上折腾,容易陷入调参泥潭。

评价指标:准确率与混淆矩阵

评价指标是衡量模型性能的“标尺”。在图像分类中,最直观的指标是准确率(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容量,就无法部署;或者推理延迟超过实时性要求,也无法应用。

风险提示:在TinyML场景中,不要盲目追求高准确率。准确率提升1%可能需要模型参数量翻倍,导致端侧无法承载。正确的做法是:先设定端侧资源约束(如Flash≤256KB、RAM≤64KB、延迟≤100ms),再在此约束下最大化准确率。这被称为“资源感知的模型设计”。

案例拆解: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,但准确率不达标。

实际操作步骤:

  1. 对MobileNetV1-0.25进行8位整型量化,模型大小降至45KB,RAM占用28KB,推理延迟降至22ms。
  2. 在测试集上评估量化后模型,准确率降至95.9%,仍满足≥95%的目标。
  3. 进一步分析混淆矩阵,发现数字“4”和“9”的混淆率最高(约3.2%),因为这两个数字在28×28分辨率下形态相似。
  4. 针对该问题,在训练阶段对“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端的准确率。
总结:图像分类是TinyML视觉应用的基石。理解任务定义(输入输出映射)、熟悉数据集特性(MNIST适合入门、CIFAR-10更具挑战)、掌握评价指标(准确率+混淆矩阵+工程指标)是三个核心支柱。在实际项目中,务必结合端侧资源约束,建立“资源-准确率-延迟”的三角权衡思维。下一阶段,我们将在此基础上,探讨如何选择适合TinyML的轻量级网络结构,以及如何将训练好的模型转换为可在MCU上运行的格式。