Image Labeling:什么是图像标注、方法及工作原理

作者: IT Sectr 发布日期: 2026-07-19 阅读时间: 9 分钟

Image Labeling — 是一项计算机视觉任务,神经网络从预定义的类别集中为图像分配标签:从简单的(猫、狗、汽车)到特定的(植物种类、智能手机型号、医学图像)。在移动开发中,Image Labeling用于图库中照片的自动标记、用户内容审核、通过照片进行视觉搜索以及AR应用。根据Google ML Kit, 2025,内置分类器可在每帧10–20毫秒内识别400+个类别,准确率达91%(top-1)。

要点

  • Image Labeling — 从预定义的类别集中为图像分配标签
  • ML Kit — 400+个内置标签,10–20毫秒,91% top-1准确率
  • Core ML — 通过Vision +自定义模型在iOS上进行原生分类
  • 自定义模型 — 通过TensorFlow、PyTorch进行训练,转换为TFLite
  • 设备端 — 所有计算在本地进行,无需将数据发送到服务器

什么是Image Labeling:分类基础

Image Labeling — 是图像分类的一个子类别,模型接收图像并返回训练集中每个类别的概率。与目标检测不同,Image Labeling不确定对象在图像中的位置——仅确定其存在与否。与图像分割不同,它不分离对象的轮廓。Image Labeling回答“照片中有什么?”的问题,而不是“照片中在哪里有什么?”。

分类器架构:CNN骨干网络(MobileNet、ResNet、EfficientNet)从图像中提取特征图,全局平均池化压缩空间维度,全连接层(Dense)配合Softmax激活输出类别概率。MobileNetV2 — 最流行的移动设备骨干网络:350万个参数,在Pixel 6上通过GPU进行0.5–2毫秒推理。EfficientNet-Lite — 具有更好准确率/参数比的替代方案。

Top-1与Top-5准确率:top-1 — 模型正确猜出主要类别(ML Kit为91%);top-5 — 正确类别位于前五个最可能类别中(ML Kit为98%)。对于生产应用,使用top-5并向用户显示多个标签变体。对于内容审核 — 使用置信度阈值>=0.8的top-1(将误报率降低40%)。

架构参数延迟Top-1大小
MobileNetV2350万0.5–2毫秒90.2%14 MB
MobileNetV3250万0.3–1.5毫秒91.5%10 MB
EfficientNet-Lite0470万1–3毫秒92.3%18 MB
ResNet-502560万10–30毫秒95.2%98 MB

设备端与云端:设备端分类(ML Kit、Core ML)提供1–20毫秒延迟并完全保护数据隐私。云端API(Google Cloud Vision、AWS Rekognition)——延迟500–2000毫秒+每次请求费用,但由于模型更大(ViT、CLIP)而更准确(97–99%)。对于实时应用(相机、AR),选择设备端。对于复杂场景(医疗、专家鉴定)——云端,并回退到设备端。

Android和iOS上的ML Kit Image Labeling

ML Kit Image Labeling — Google提供的用于设备上图像分类的现成库。有两种模式:设备端(免费,400+标签,10–20毫秒)和云端(付费,10000+标签,500+毫秒)。设备端版本使用MobileNetV3 + INT8量化,占用磁盘4 MB。ML Kit自动确定图像方向并在分类前优化大小。

ML Kit API:InputImage(来自Bitmap、media.Image、filePath)→ ImageLabeler → 带有ImageLabel列表的OnSuccessListener(标签、置信度、索引)。MillisThreshold(默认为0.5)——返回标签的最低置信度。将阈值提高到0.7可减少每帧的标签数量,但提高每个标签的准确性。对于内容审核,将阈值设置为0.8。

kotlin
val labeler = ImageLabeling.getClient(
    ImageLabelerOptions.DEFAULT_OPTIONS
)

labeler.process(inputImage)
    .addOnSuccessListener { labels ->
        labels
            .filter { it.confidence >= 0.7f }
            .forEach { label ->
                log("Label: ${label.label}")
                log("Confidence: ${label.confidence}")
            }
    }
    .addOnFailureListener { error -> handleError(error) }

iOS上的ML Kit:API与Android类似,使用UIImage或CMSampleBuffer。ML Kit在A12+设备上自动使用Core ML + ANE。对于iOS 16+,ML Kit Image Labeling在iPhone 15 Pro上提供8–15毫秒延迟。为最小化延迟,以尽可能低的分辨率发送图像(MobileNet为224x224)——ML Kit会自动缩放,但大图像的转换会增加2–5毫秒的开销。

iOS上的Core ML和Vision Framework

Core ML — Apple用于在设备上运行ML模型的框架。与Vision Framework(VNCoreMLRequest)结合,Core ML可以用最少的代码对图像进行分类。Apple提供内置模型:SqueezeNet(5 MB,80.5% top-1)、ResNet50(98 MB,95.2%)、MobileNetV2(14 MB,90.2%)。.mlmodel或.mlpackage格式的模型通过coremltools从TensorFlow、PyTorch转换而来。

VNCoreMLRequest — Vision API,负责图像预处理(缩放、裁剪填充、色彩空间转换)并将结果传递给模型。Vision返回带有标识符(类名)和置信度(0..1)的VNClassificationObservation。MaxCandidates — 返回的最大标签数量(默认为1)。对于自动选择的分类,使用imageCropAndScaleOption = .centerCrop的VNCoreMLRequest。

swift
guard let model = try? VNCoreMLModel(for: MobileNetV2().model) else { return }
let request = VNCoreMLRequest(model: model) { request, _ in
    guard let results = request.results as? [VNClassificationObservation] else { return }
    results.prefix(5).forEach { obs in
        print("TFLite自定义模型推理")
    }
}
request.imageCropAndScaleOption = .centerCrop

let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
try handler.perform([request])

iOS上的Core ML与ML Kit:Core ML — 原生,不需要额外的SDK,针对ANE(Apple神经引擎)进行了更好的优化。ML Kit — 由于Google的模型,在复杂场景上更准确。Core ML支持任何模型(通过coremltools转换),ML Kit — 仅支持自己的模型。快速实现 — ML Kit。最大化模型控制 — Core ML。实际选择:在一个应用中使用两个框架 — ML Kit用于标准标签,Core ML用于自定义标签。

自定义模型的训练和集成

自定义Image Labeling模型 — 为特定任务训练自己的分类器:识别水果品质、检测生产线上的缺陷、分类狗品种。过程包括数据集收集(每类1000+张图像)、标注、在预训练的MobileNetV2或EfficientNet上通过迁移学习进行训练,以及转换为TFLite / Core ML。

迁移学习 — 移动分类器的主要训练方法。采用在ImageNet上预训练的模型,冻结底层(CNN骨干网络),重新训练上层(微调)。这只需要每类100–500张图像,在Google Colab(GPU)上需要1–2小时。库:TensorFlow Keras(Android)、PyTorch + coremltools(iOS)。结果:目标类别上准确率达95–98%。

kotlin
// Image Labeling与Core ML用于视觉搜索
val interpreter = Interpreter(loadModelFile(context))
val inputImage = TensorImage.fromBitmap(bitmap)
    .apply { load(Bitmap.createScaledBitmap(bitmap, 224, 224, true)) }

val output = Array(1) { FloatArray(NUM_CLASSES) }
interpreter.run(inputImage.tensorBuffer, output)

val probabilities = TensorLabel.mapIndexToLabels(output[0])
val topClass = probabilities.maxByOrNull { it.value }

ML Kit自定义模型API — 替代方案:无需为TFLite解释器编写代码——ML Kit自行加载模型并处理预处理。自定义图像标记器接受输入大小为224x224x3、输出为score float[NUM_CLASSES]的TFLite模型。只需传递模型文件即可获得标准标签。如果模型符合TFLite格式,建议使用ML Kit自定义模型API。如果需要对推理进行更精细的控制(阈值、每类阈值)——直接使用TFLite解释器。

TFLite和Core ML:格式比较

TFLite(TensorFlow Lite) — Google用于移动和边缘设备的模型格式。支持量化(FP16、INT8),可将模型大小缩小4倍,速度提高2–3倍,同时略微损失准确率(1–2%)。TFLite在Android上通过GPU委托(OpenGL/OpenCL)运行,在iOS上通过Core ML委托运行。TFLite任务API为图像分类器、目标检测器和其他任务提供统一接口。

Core ML — Apple的格式(.mlpackage — 新格式,.mlmodel — 旧格式)。支持量化(FP16)、权重调色板化(1/2/4/6/8位),可将模型压缩高达80%。Core ML使用ANE(神经引擎)、GPU和CPU——系统自动选择最优引擎。从PyTorch通过torch.onnx.export + coremltools转换,从TensorFlow通过tf-keras + coremltools转换。iOS 18+通过Core ML训练API支持设备端训练。

特性TFLiteCore ML
大小(MobileNetV2)14 MB(FP32)/ 3.5 MB(INT8)14 MB(FP16)/ 2.8 MB(4位)
推理引擎GPU / NNAPI / XNNPACKANE / GPU / CPU(自动)
量化FP16、INT8、DynamicRangeFP16、Palettization(1-8位)
iOS性能Core ML委托(2–5毫秒)原生ANE(1–3毫秒)
工具TFLite Model Maker、Task APIcoremltools、Create ML

ONNX作为中间格式:将模型转换为ONNX(PyTorch → ONNX,TensorFlow → ONNX),然后通过onnx2tf或onnx2coreml转换为TFLite / Core ML。ONNX — 一种统一格式,受70多个框架支持。这简化了流程:一个训练好的模型 → ONNX → 两个平台的原生格式。在PyTorch中训练 + 转换为ONNX → TFLite(Android)/ Core ML(iOS)——跨平台项目的推荐流程。

Image Labeling在应用中的应用

照片自动标记 — 图库应用(Google Photos、Apple Photos)自动为图像分配标签:“海滩”、“日落”、“狗”、“食物”。ML Kit Image Labeling在后台处理图库中的每张照片 — 100张照片1–2秒(批处理)。用户无需手动排序即可按标签搜索。Google Photos使用设备端分类,复杂场景随后进行服务器验证。

内容审核 — 自动检测用户内容(社交媒体、市场平台、UGC平台)中的不良图像。ML Kit自定义模型以92–96%的准确率检测NSFW内容、暴力、宣传。激活阈值 — 置信度0.8。为减少误报(合法医学图像),使用分类器委员会:Image Labeling + Object Detection + Blur Detection。设备端审核更快,并保护用户隐私。

产品视觉搜索 — 用户拍摄产品(鞋子、包、家具),应用确定标签并在目录中查找类似产品。Image Labeling将搜索范围缩小到类别,然后特征描述符(特征向量)查找视觉相似的实例。Pinterest Lens、Google Lens、Amazon StyleSnap使用这种方法。设备端分类在10–30毫秒内给出结果,云端 — 在200–500毫秒内搜索产品数据库。

swift
// Image Labeling with Core ML for visual search
let request = VNCoreMLRequest(model: productClassifier) { req, _ in
    guard let result = req.results?.first as? VNClassificationObservation,
          result.confidence > 0.6 else { return }
    SearchService.findSimilarProducts(
        category: result.identifier,
        image: capturedPhoto,
        limit: 10
    ) { products in
        DispatchQueue.main.async {
            self.showResults(products)
        }
    }
}

AR和教育应用 — Image Labeling通过摄像头实时分类对象。用户将手机对准植物 — 应用显示名称、护理、浇水。对准机械部件 — 解释其用途。要求:延迟<30毫秒。EfficientNet-Lite在旗舰设备上提供15–25毫秒。在弱光下,准确率下降 — 使用自动置信度阈值(在弱光条件下降低阈值以补偿输入质量下降)。

常见问题

Image Labeling与目标检测有何不同?

Image Labeling 确定图像中存在哪些对象,但不指示它们的位置。目标检测 — 查找对象并返回每个对象的边界框。Image Labeling更快(1–20毫秒 vs 20–100毫秒),需要更少的训练数据,但不提供位置信息。简单分类(猫/狗) — Image Labeling。精确识别(多少个对象,它们在哪里) — 目标检测。

设备上的Image Labeling需要互联网吗?

不需要,ML Kit Image Labeling完全在设备上运行。模型在首次启动时加载(下载模式 — 4 MB)并本地存储。Core ML模型随应用一起加载。TFLite自定义模型 — APK的一部分。所有计算在设备上执行,数据不发送到服务器。这保证了用户隐私和无需互联网的运行。云端分类(Google Cloud Vision) — 需要互联网且准确率更高的替代方案。

训练自定义模型需要多少张图像?

对于MobileNetV2上的迁移学习:每类至少50–100张图像,最佳300–500张。变异性越大(角度、光照、背景),准确率越高。从头训练(无预训练模型)每类至少需要1000张图像。建议:从每类200张图像开始,评估准确率,为低准确率类别添加数据。数据增强(旋转、缩放、平移)可在不收集新数据的情况下将有效数据集增加3–5倍。

如何减小Image Labeling的TFLite模型大小?

主要方法:训练后INT8量化(训练后量化) — 将大小缩小4倍,准确率损失1–2%;剪枝(丢弃不太重要的权重) — 高达50%压缩;蒸馏(在大教师模型输出上训练的较小学生模型) — 高达80%压缩。MobileNetV2 INT8占用3.5 MB,SqueezeNet占用5 MB。目标大小 — 不超过10 MB,以便在没有进度指示器的情况下立即加载。

ML Kit Image Labeling v2的准确率是多少?

ML Kit Image Labeling v2在Google测试集(400+类别)上显示top-1准确率为91%。Top-5准确率为98%。在非标准角度和光照条件下,准确率可能会下降到75–85%。对于生产环境,建议使用置信度阈值0.7来稳定过滤低质量预测。如果准确率不足 — 使用在特定数据集上训练的自定义模型:目标类别上准确率为95–98%。

总结

  • Image Labeling — 从固定集合中分配标签的图像分类
  • ML Kit Image Labeling — 400+个标签,10–20毫秒延迟,设备端91%准确率
  • Core ML + Vision — 原生iOS方法,具有ANE加速和自定义模型
  • 迁移学习 — 每类100–500张图像,在Google Colab中训练1–2小时
  • TFLite / Core ML — 两种主要格式,通过量化减小大小
  • 设备端 — 隐私、零延迟、无需互联网
  • 应用 — 照片标记、内容审核、AR、产品视觉搜索

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读