3、图像分类基础:图像分类任务定义、常见模型(MobileNet、EfficientNet)简介、分类标签与置信度概念

在 Raspberry Pi 上部署 TensorFlow Lite 模型之前,我们首先需要理解图像分类任务的核心本质。图像分类是计算机视觉中最基础、应用最广泛的任务之一,它解决的是"这张图片里有什么"的问题。本章将系统梳理图像分类的任务定义、主流轻量级模型的设计思想,以及分类结果中标签与置信度的数学含义与工程解读。这些知识将直接决定你在后续章节中如何选择合适的模型、如何解读推理输出,以及如何优化部署策略。

图像分类任务核心概念与模型选型框架 输入图像 224×224×3 预处理 归一化/缩放 特征提取器 MobileNet / EfficientNet 分类头 Softmax 输出 输出向量 [0.02, 0.91, 0.03, ...] 标签 + 置信度 轻量级模型对比 模型 参数量 延迟(树莓派4) 适用场景 MobileNetV1 4.2M ~80ms 实时性优先 MobileNetV2 3.4M ~65ms 均衡型 EfficientNet-Lite 5.3M ~95ms 精度优先 MobileNetV3 2.5M ~55ms 边缘设备最优

上图展示了图像分类任务的完整链路:从输入图像到预处理、特征提取、分类头,最终输出标签与置信度。在 Raspberry Pi 这类资源受限的嵌入式设备上,模型的选择和优化尤为关键。下面我们将深入拆解每个环节的核心原理。

3.1 图像分类任务定义与数学本质

图像分类(Image Classification)的目标是给定一张输入图像,从预定义的类别集合中预测其所属的类别。形式化地,假设我们有 C 个类别,输入图像为 x,分类模型 f 输出一个 C 维向量 y = f(x),其中 y_i 表示图像属于第 i 类的概率估计。模型最终预测的类别为 argmax(y)。

在深度学习中,这个任务通常通过卷积神经网络(CNN)实现。CNN 通过多层卷积、池化、激活函数等操作,自动学习从原始像素到高层语义特征的映射。与传统的图像处理算法(如 HOG、SIFT 特征 + SVM 分类器)相比,深度 CNN 能够端到端地学习特征表示,在复杂场景下具有显著优势。

对于 Raspberry Pi 部署而言,图像分类任务有两个关键约束:计算资源有限(CPU 而非 GPU)和内存受限(通常 1-8GB RAM)。因此,我们不能直接使用 VGG16、ResNet152 这类参数量巨大的模型,而需要选择专为移动端设计的轻量级架构。

核心要点:图像分类的本质是学习一个从图像空间到类别概率空间的映射函数。在嵌入式部署中,这个映射函数必须满足三个条件:① 参数量小(通常 <10M);② 计算量低(通常 <1 GFLOPs);③ 推理速度快(单帧 <200ms)。

3.2 常见轻量级模型:MobileNet 与 EfficientNet

MobileNet 系列是 Google 专为移动端和嵌入式设备设计的轻量级 CNN 架构。其核心创新是深度可分离卷积(Depthwise Separable Convolution),将标准卷积分解为深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)两步,从而将计算量降低约 8-9 倍。

模型版本 核心创新 Top-1 准确率 (ImageNet) 参数量 树莓派4 推理延迟
MobileNetV1 深度可分离卷积 70.6% 4.2M ~80ms
MobileNetV2 倒残差结构 + 线性瓶颈 72.0% 3.4M ~65ms
MobileNetV3 NAS 搜索 + 硬件感知 75.2% 2.5M ~55ms
EfficientNet-Lite 复合缩放 + 深度可分离 76.8% 5.3M ~95ms

MobileNetV2 引入了倒残差结构(Inverted Residual Block),先通过 1×1 卷积升维,再进行深度卷积,最后用 1×1 卷积降维。这种设计在保持信息流的同时,大幅减少了计算量。其线性瓶颈(Linear Bottleneck)层去除了最后的 ReLU 激活,避免低维空间中的信息丢失。

MobileNetV3 结合了神经架构搜索(NAS)和硬件感知设计,在保持精度的同时进一步压缩了模型大小。它引入了 SE(Squeeze-and-Excitation)注意力模块和 h-swish 激活函数,在树莓派上表现尤为出色。

EfficientNet 系列的核心思想是复合缩放(Compound Scaling),即同时调整网络的深度、宽度和输入分辨率。EfficientNet-Lite 是专为 CPU 推理优化的版本,去除了对 GPU 友好的 SE 模块,更适合树莓派这类设备。

选型建议:对于树莓派上的实时图像分类,推荐优先考虑 MobileNetV3-Small 或 MobileNetV2。如果对精度要求较高且延迟可接受,可以选择 EfficientNet-Lite0。在后续章节中,我们将使用 TensorFlow Lite 将这些模型转换为 .tflite 格式,并部署到树莓派上。

3.3 分类标签与置信度:从概率到决策

当模型完成前向推理后,输出的是一个 C 维向量,通常经过 Softmax 函数归一化,使得所有元素之和为 1,每个元素值在 [0,1] 区间内。这个向量中的每个值即为对应类别的置信度(Confidence),表示模型认为输入图像属于该类别的概率。

例如,对于一个三分类任务(猫、狗、鸟),模型输出可能为:

类别:   猫      狗      鸟
概率:  0.02    0.91    0.07

此时,模型预测类别为"狗",置信度为 0.91。但置信度并不等同于真实概率,它只是模型内部对自身预测的"信心程度"。在实际应用中,我们需要关注以下几点:

  • 置信度阈值:当最高置信度低于某个阈值(如 0.5)时,模型可能对输入图像不确定,此时应输出"未知类别"或请求人工确认。
  • Top-K 输出:有时前几个类别的置信度非常接近,此时仅取 Top-1 可能不够可靠,可以输出 Top-3 或 Top-5 作为候选。
  • 温度缩放(Temperature Scaling):在部署时,可以通过调整 Softmax 的温度参数来改变置信度的分布。温度 >1 会使分布更平滑(降低置信度),温度 <1 会使分布更尖锐(提高置信度)。
常见误区:不要将置信度直接理解为"模型正确的概率"。在训练数据分布与测试数据分布不一致时(如训练集只有室内场景,测试时输入户外图像),模型可能给出高置信度的错误预测。因此,在部署时务必设置合理的置信度阈值,并考虑加入异常检测机制。

3.4 实战场景:树莓派上的垃圾分类模型选型

假设我们要在树莓派 4B 上部署一个垃圾分类系统,需要识别 6 类垃圾(塑料、纸张、玻璃、金属、有机物、其他)。我们面临以下约束:

  • 树莓派 4B 的 CPU 为 ARM Cortex-A72(4 核 1.5GHz),无 GPU 加速。
  • 摄像头采集帧率为 30fps,但推理不需要实时,允许 200ms 以内的延迟。
  • 内存 4GB,但 TensorFlow Lite 推理时峰值内存占用需控制在 500MB 以内。
  • 训练数据约 5000 张图片,每类约 800 张。

我们对比了三种候选模型:MobileNetV2、MobileNetV3-Small、EfficientNet-Lite0。在树莓派上实际测试结果如下:

模型 量化方式 推理延迟 峰值内存 验证集准确率
MobileNetV2 动态范围量化 68ms 210MB 92.3%
MobileNetV3-Small 动态范围量化 52ms 180MB 91.8%
EfficientNet-Lite0 动态范围量化 88ms 260MB 93.1%

从结果来看,MobileNetV3-Small 在延迟和内存方面最优,但准确率略低;EfficientNet-Lite0 准确率最高,但延迟接近 90ms。考虑到垃圾分类场景中,用户手持物品等待识别,90ms 的延迟完全可接受,因此我们最终选择 EfficientNet-Lite0 作为部署模型。

在部署过程中,我们还发现了一个关键问题:模型对"其他"类别的置信度普遍偏低(平均 0.65),而对"塑料"类别的置信度较高(平均 0.88)。分析原因是"其他"类别的训练样本多样性过高,导致特征空间过于分散。解决方案是增加"其他"类别的训练样本数量,并引入数据增强(如随机裁剪、颜色抖动)来提升模型的泛化能力。

案例复盘:模型选型不能只看准确率,必须结合部署硬件的实际性能。在树莓派上,量化后的模型延迟和内存占用是决定性因素。同时,置信度分布分析可以帮助我们发现数据集的潜在问题,从而指导数据收集和模型优化方向。

3.5 常见误区与总结

在图像分类模型的部署实践中,以下误区值得特别注意:

  1. 忽视输入尺寸:MobileNet 系列默认输入为 224×224,但实际部署时可能需要调整。输入尺寸越大,计算量越大,但精度不一定线性提升。建议在 128×128 到 224×224 之间做实验。
  2. 忽略归一化参数:TensorFlow Hub 上的模型通常要求输入像素值在 [0,1] 或 [-1,1] 范围内,且可能需要特定的均值/方差归一化。直接使用原始像素值会导致推理结果异常。
  3. 混淆置信度与准确率:置信度是模型对单个样本预测的"信心",准确率是模型在整体数据集上的表现。两者不能直接等同。
  4. 未做量化感知训练:如果使用后训练量化(Post-training Quantization),模型精度可能会有 1-3% 的下降。对于精度敏感的场景,应使用量化感知训练(Quantization-aware Training)来缓解。