使用Apple CoreMLTools构建可更新的微型绘图分类器模型

使用Apple CoreMLTools构建可更新的微型绘图分类器模型

coremltools Core ML tools contain supporting tools for Core ML model conversion, editing, and validation. coremltools 项目地址: https://gitcode.com/gh_mirrors/co/coremltools

概述

本文将介绍如何使用Apple CoreMLTools构建一个可更新的微型绘图分类器模型。这个模型采用管道(Pipeline)架构,由绘图嵌入模型和最近邻分类器组成,能够根据用户提供的示例进行持续训练和更新。

模型架构

该分类器模型由两个主要组件构成:

  1. 绘图嵌入模型:将28×28的灰度绘图图像转换为128维的特征向量
  2. 最近邻分类器:基于特征向量进行最近邻分类

模型初始状态下不包含任何训练样本,所有输入都会被分类为"unknown"。随着用户提供更多训练样本,模型可以不断更新和改进其分类能力。

输入要求

模型输入需要满足以下规范:

  • 28×28像素的灰度图像
  • 背景应为黑色(像素值0)
  • 绘图笔画应为白色(像素值255)

构建步骤详解

1. 获取嵌入模型

首先需要获取预训练的绘图嵌入模型,该模型作为特征提取器使用:

import coremltools
from coremltools.models import MLModel

embedding_path = './models/TinyDrawingEmbedding.mlmodel'
embedding_model = MLModel(embedding_path)
embedding_spec = embedding_model.get_spec()

该嵌入模型的特点:

  • 输入:28×28灰度图像
  • 输出:128维浮点向量
  • 基于卷积神经网络构建,移除了最后的分类层

2. 创建最近邻分类器

接下来创建可更新的最近邻分类器:

from coremltools.models.nearest_neighbors import KNearestNeighborsClassifierBuilder
import coremltools.models.datatypes as datatypes

knn_builder = KNearestNeighborsClassifierBuilder(
    input_name='embedding',
    output_name='label',
    number_of_dimensions=128,
    default_class_label='unknown',
    k=3,
    weighting_scheme='inverse_distance',
    index_type='linear'
)

# 设置元数据
knn_builder.author = 'Core ML Tools Example'
knn_builder.license = 'MIT'
knn_builder.description = '基于3个最近邻对128维向量进行分类'

knn_spec = knn_builder.spec

分类器参数说明:

  • k=3:考虑3个最近邻
  • weighting_scheme='inverse_distance':使用距离倒数作为权重
  • index_type='linear':使用线性搜索算法

3. 构建可更新管道模型

将两个组件组合成可更新的管道模型:

# 创建基础spec并设置为可更新
pipeline_spec = coremltools.proto.Model_pb2.Model()
pipeline_spec.specificationVersion = coremltools._MINIMUM_UPDATABLE_SPEC_VERSION
pipeline_spec.isUpdatable = True

# 设置输入输出
pipeline_spec.description.input.extend(embedding_spec.description.input[:])
pipeline_spec.description.output.extend(knn_spec.description.output[:])
pipeline_spec.description.predictedFeatureName = knn_spec.description.predictedFeatureName
pipeline_spec.description.predictedProbabilitiesName = knn_spec.description.predictedProbabilitiesName

# 设置训练输入
pipeline_spec.description.trainingInput.extend([embedding_spec.description.input[0]])
pipeline_spec.description.trainingInput[0].shortDescription = '示例绘图'
pipeline_spec.description.trainingInput.extend([knn_spec.description.output[0]])
pipeline_spec.description.trainingInput[1].shortDescription = '示例绘图对应的真实标签'

# 添加元数据
pipeline_spec.description.metadata.author = 'Core ML Tools'
pipeline_spec.description.metadata.license = 'MIT'
pipeline_spec.description.metadata.shortDescription = '可更新的微型绘图分类器模型'

# 组合模型
pipeline_spec.pipelineClassifier.pipeline.models.add().CopyFrom(embedding_spec)
pipeline_spec.pipelineClassifier.pipeline.models.add().CopyFrom(knn_spec)

# 保存模型
mlmodel = MLModel(pipeline_spec)
output_path = './TinyDrawingClassifier.mlmodel'
mlmodel.save(output_path)

模型更新机制

该模型的可更新性体现在:

  1. 初始状态下分类器不包含任何样本
  2. 可以通过添加新的训练样本不断扩充分类器的知识库
  3. 采用最近邻算法,新样本可以立即影响分类结果
  4. 默认返回"unknown"类别,避免对未知样本做出错误判断

应用场景

这种可更新的微型绘图分类器非常适合以下场景:

  • 移动设备上的手写识别
  • 简单图形分类应用
  • 需要持续学习的个性化识别任务
  • 资源受限环境下的轻量级分类解决方案

总结

通过CoreMLTools,我们构建了一个灵活、可更新的微型绘图分类器管道模型。这种架构结合了深度学习的特征提取能力和传统机器学习算法的灵活性,特别适合需要持续学习和个性化定制的应用场景。开发者可以根据实际需求调整模型参数,如最近邻数量(k值)或距离权重方案,以获得最佳的分类性能。

coremltools Core ML tools contain supporting tools for Core ML model conversion, editing, and validation. coremltools 项目地址: https://gitcode.com/gh_mirrors/co/coremltools

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郎赞柱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值