新闻详情

新闻详情

首页 / 资讯中心 / 详情

TensorFlow examples:在 iOS 上构建 Classification-by-Retrieval 零训练图像分类器的完整指南

发布时间:2026/11/15 1:22:10来源:尧图网络
TensorFlow examples:在 iOS 上构建 Classification-by-Retrieval 零训练图像分类器的完整指南
示例工程【免费下载链接】examplesTensorFlow examples项目地址https://gitcode.com/gh_mirrors/exam/examples点击查看免费下载本篇指南基于 tensorflow/examples 仓库中的 iOS 示例应用文档带你从环境准备、Bazel 编译到真机运行完整搭建一个基于 Classification-by-RetrievalCbR基于检索的分类技术的 Image Classifier Builder 应用。读完本篇你不仅能在 iOS 设备上编译并运行该 Demo还能深入理解它如何把相册中的少量图片在秒级时间内训练成可实时推理的 TFLite 分类模型——整个过程无需反向传播训练。什么是 Classification-by-Retrieval无需训练的分类器仓库顶层 CbR 说明文档 给出了这项技术的定位Classification-by-retrieval 提供了一条创建神经网络分类器的捷径完全绕开了计算开销巨大的反向传播训练。它支持两种极端用法Few-shot 场景每个类别最少只需一张图片就能生成一个轻量级移动模型海量类别场景可以构建能识别数万甚至更多类别的端侧模型例如官方用该技术构建过可识别数万地标的移动模型。典型的图像识别做法是构建神经网络分类器并用大量训练数据通常数千张以上训练它而检索式方法则使用一个预训练的特征提取器图像嵌入模型配合基于最近邻搜索的特征匹配。检索式方法的可扩展性和灵活性更强类别数量可以非常大例如超过 100 万类且增删类别无需任何额外训练每个类别最少只需一条训练数据本质上等效于 few-shot 学习。其代价是需要额外的基础设施支持且使用体验不如普通分类模型直观。CbR 把图像检索层烘焙进神经网络模型内部从而无需训练就能创建一个 TensorFlow 分类模型。从 顶层 README 的原理描述看检索层由两部分组成最近邻匹配组件Nearest neighbor matching本质上是一个全连接层其权重就是索引数据训练图片归一化后的嵌入向量。两个归一化向量的点积余弦相似度与平方 L2 距离呈线性关系负系数因此该全连接层的输出与最近邻匹配结果等效结果聚合组件Result aggregation最近邻匹配是针对每条训练样本而非每个类别给出结果的因此在匹配层之上为每个类别叠加一个选择层selection layer再对选择结果做聚合如取最大值最后拼接成单一输出向量。这些检索层不是训练出来的而是直接从训练数据索引数据计算得到。你可以选择一个最适合业务域的基座嵌入模型本 iOS Demo 使用的是在 ImageNet 上训练的 MobileNet V3 特征向量模型generic 且高效适合端侧对应模型资源在构建时以imagenet-mobilenet_v3_small_100_224-feature_vector的名称打包进 App。iOS 示例应用概览该 Demo目标名ImageClassifierBuilder的工作流程是从设备照片库Photo Library中选择若干相册以相册名称作为类别标签几秒钟内生成一个 TFLite 分类模型图片数量较少时立即用摄像头对实物进行实时分类测试——把相机对准你刚才训练过的物体观察分类效果。App 同时支持把生成的.tflite模型以文件形式导出分享这一点体现在 Info.plist 中它声明了自定义文档类型com.tensorflow.lite.swift.ImageClassifierBuilder.tfliteUTTypeTagSpecification 中 MIME 类型为application/octet-stream扩展名为tflite并配有一组专属文档图标TFLite_22/44/64/320.png。环境要求按 iOS README 的说明需要满足iOS 14.0 及以上的设备注意当前 ios/BUILD 中MINIMUM_OS_VERSION 15.0即构建目标实际声明的最低系统版本为 iOS 15.0以 BUILD 文件为准Xcode 12.5 及以上有效的 Apple Developer ID真机构建和签名需要Xcode 命令行工具执行xcode-select --install安装。如果是全新安装需要先把 Xcode 应用运行一次并同意许可协议。另外README 特别指出该 Demo 依赖摄像头必须在真实 iOS 设备上运行你可以在 iPhone 模拟器上构建并启动 App但会抛出Camera not found异常。构建与运行模拟器构建克隆仓库到本地工作站$ git clone https://gitcode.com/gh_mirrors/exam/examples进入 Classification-by-Retrieval 示例目录$ cd examples/lite/examples/classification_by_retrieval使用 Bazel 为模拟器构建$ bazel build -c opt --configios_x86_64 ios:ImageClassifierBuilder构建目标ios:ImageClassifierBuilder在 ios/BUILD 中由三个部分构成ios_application目标Bundle ID 为com.tensorflow.lite.swift.ImageClassifierBuilder仅适配 iPhone 家族、swift_library目标编译ImageClassifierBuilder/*.swift全部 Swift 源码、以及objc_library目标编译*.m/*.mm的 Objective-C/C 桥接层并依赖 C 库//lib:model_builder。真机构建先从 Apple 获取一个移动配置描述文件mobile provisioning profile可参考 Apple 官方开发者文档为描述文件创建符号链接$ ln -s path/to/your/profile.mobileprovision ProvisioningProfile.mobileprovision取消 ios/BUILD 中所有ProvisioningProfile.mobileprovision的注释。在 BUILD 文件里ios_application的provisioning_profile :ProvisioningProfile.mobileprovision与文件末尾的exports_files([ProvisioningProfile.mobileprovision])都指向该符号链接用以下命令为真机构建$ bazel build -c opt --configios_arm64 ios:ImageClassifierBuilder安装到设备后需要授予 App 使用摄像头和照片库的权限。Info.plist 中已声明了相应的用途描述字符串NSCameraUsageDescriptionThis app uses the camera to let you test models.和NSPhotoLibraryUsageDescriptionThis app uses your selection of albums from the Photos Library to train models.这是 iOS 系统弹出权限对话框的前提。源码深入训练是如何在设备内完成的Demo 的秒级训练并非玄学其调用链从 Swift 层一直贯通到 C 库全部发生在设备本地。1. Swift 层从相册收集标签化的训练数据ModelTrainer.swift 中的trainModel(metadata:on:)是整个流程的入口核心步骤调用prepareImages(from:)遍历用户选中的每个PHAssetCollection相册用PHAsset.fetchAssets(in:options:)拉取图片资产以相册的本地化标题作为该相册所有图片的标签图片会被请求为 640x480、aspectFill填充的图像再以jpegData(compressionQuality: 1)全质量 JPEG 写入NSTemporaryDirectory()临时目录得到(labels, imagePaths)两个等长列表调用 ObjC 桥接的ModelTrainingUtils.trainModel(...)真正构建模型模型写盘后通过Classifier(modelURL:)读回labelmap得到不同标签的数量并记录模型文件大小最终生成一个Model对象供列表页展示。2. ObjC 桥接层调用 C ModelBuilderModelTrainingUtils.mm 实现了trainModel(name:description:author:version:license:labels:imagePaths:outputModelPath:)头文件 ModelTrainingUtils.h 中声明。它强制了若干前置条件五项元数据名称、描述、作者、版本、许可证均不能为空labels.count imagePaths.count且labels.count 2——即至少需要 2 张带标签图片才能建模。其内部逻辑从主 Bundle 中定位嵌入模型文件imagenet-mobilenet_v3_small_100_224-feature_vector.tflite填入ImageEmbedderOptions通过ModelBuilder::CreateFromImageEmbedderOptions(...)创建构建器调用SetMetadata(...)写入模型元数据并附带{model_type.txt, IMAGE_CLASSIFIER}关联文件逐张处理训练图片UIImage解码 →cbr_asNewPixelBuffer转为CVPixelBuffer→ 提取 RGBA8888 原始数据 →CreateFromRgbaRawBuffer(...)构造 TFLite Task API 的FrameBuffer→ 调用model_builder-AddLabeledImage(label, *frame_buffer)调用model_builder-BuildModel()生成ExternalFile带完整元数据的.tflite内容用flatbuffers::SaveFile(..., binarytrue)写盘。3. C 核心ModelBuilder 的三阶段 API真正的免训练建模逻辑封装在 lib/model_builder.h 的tflite::examples::cbr::ModelBuilder类中实现在同目录 model_builder.cc检索层的 TFLite 算子构建由 tflite_cbr_builder.h / tflite_cbr_builder.cc 负责。其设计是典型的多步累积 一次性落库CreateFromImageEmbedderOptions(options)从嵌入模型选项初始化内部同时持有ImageEmbedder实例、原始FlatBufferModel和TfLiteCbRBuilderSetMetadata(name, description, author, version, license, associated_files)填充元数据在BuildModel()返回时一次性写入模型AddLabeledImage(label, frame_buffer)对单张图片提取特征向量embedding并与标签配对累积需对每张训练图片调用一次BuildModel()利用累积的标签与特征向量完成检索层最近邻匹配 按类别聚合的构建产出直接可用于 ImageClassifier Task API含元数据的模型以ExternalFileproto 形式返回file_content字段承载模型字节。若累积的带标签图片少于 2 张返回absl::FailedPreconditionError成功构建后ModelBuilder会自动重置可继续构建下一个模型。从 ios/BUILD 的依赖清单看该 C 层直接链接了 TensorFlow Lite Support 的 C Task APIimage_classifier、image_embedder及配套的frame_buffer、classifications_proto_inc、image_embedder_options_proto_inc等目标外加flatbuffers运行时与 Abseilabsl/status、absl/strings等这正是ModelBuilder与推理端Classifier共用同一套底层 API 的原因。4. 实时推理加载自建模型并分类Classifier.mm 封装了推理侧initWithModelURL:用ImageClassifierOptions指定刚生成的.tflite路径ImageClassifier::CreateFromOptions(...)加载模型——由于模型自带元数据含 labelmap无需外部标签文件classifyPixelBuffer:将摄像头帧的CVPixelBuffer转为 RGBA8888FrameBuffer后调用Classify(...)把ClassificationResult转成 Objective-C 的Label名称 分数数组一个值得注意的细节是PostProcessClassifications因为 CbR 模型的检索层会对每一张训练样本输出一个分数同一类别的多张图片会产生多条同名标签所以后处理按分数降序遍历、只保留每个标签的第一次出现即该类别的最高分合并同类标签后再返回给 UI模型列表页展示的元数据名称、描述、作者、版本、许可证和标签列表则通过GetMetadataExtractor()的GetModelMetadata()与GetAssociatedFile(labelmap.txt)从模型内置元数据中提取。实践要点与适用边界最低图片数量源码中labels.count 2的前置断言与BuildModel()少于两张图片返回FailedPreconditionError 的约束一致即每个模型至少需要 2 张带标签图片可以同属不同类别版本差异README 文本写的是 iOS 14.0而 ios/BUILD 中MINIMUM_OS_VERSION为15.0真机部署时应以 BUILD 声明的系统版本为下限模拟器限制仅能构建和启动无摄像头会触发Camera not found实时测试必须在真机完成符号链接未就绪时的行为真机构建依赖ProvisioningProfile.mobileprovision符号链接与 BUILD 中相关注释的取消两者缺一不可适用场景按 顶层 README 的归纳CbR 特别适合机器学习教学演示、快速原型验证以及中小商家无需采集海量数据即可构建自定义商品识别应用的场景由于检索层只是计算而非训练所得更换或扩充类别的成本极低。整套示例的代码分布清晰iOS 端 Swift UI相册选择、模型列表、摄像头实时分类等视图位于 lite/examples/classification_by_retrieval/ios/ImageClassifierBuilder/跨语言桥接ObjC/ObjC与 C 核心构建库位于 lite/examples/classification_by_retrieval/lib/配合本指南中的构建命令即可完整复现照片库选图 → 秒级建模 → 摄像头实时验证的零训练分类闭环。赞分享示例工程【免费下载链接】examplesTensorFlow examples项目地址https://gitcode.com/gh_mirrors/exam/examples点击查看免费下载相关推荐TensorFlow Lite Classification-by-Retrieval免训练构建少样本图像分类器的技术解析TensorFlow Lite Classification by Retrieval免训练构建少样本图像分类器的技术解析 Classification by示例工程TensorFlow Lite图像分类模型训练与部署完整指南TensorFlow Lite图像分类模型训练与部署完整指南 TensorFlow Lite图像分类技术让移动端AI应用开发变得前所未有的简单 这个强大文档教程知识库终极TensorFlow-Examples多GPU分布式训练完整指南终极TensorFlow Examples多GPU分布式训练完整指南 TensorFlow Examples是面向初学者的TensorFlow教程和示例项目示例工程机器学习上一篇突破帧率枷锁WaveTools工具箱实现鸣潮120FPS极致体验全攻略下一篇emby-unlockedEmby高级功能的本地化解锁方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/14 3:51:47

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/12 23:59:09

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/14 3:51:43

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉