首页 > 其他分享 >编译 CoreML 模型

编译 CoreML 模型

时间:2023-06-26 17:36:17浏览次数:55  
标签:target img 模型 CoreML tvm 编译 path synset import

本篇文章译自英文文档 Compile CoreML Models 作者是 Joshua Z. ZhangKazutaka MoritaZhao Wu 更多 TVM 中文文档可访问 →Apache TVM 是一个端到端的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站

本文介绍如何用 Relay 部署 CoreML 模型。

首先安装 coremltools 模块,可通过 pip 快速安装:

pip install -U coremltools --user

或参考官网:https://github.com/apple/coremltools

import tvm
from tvm import te
import tvm.relay as relay
from tvm.contrib.download import download_testdata
import coremltools as cm
import numpy as np
from PIL import Image

加载预训练的 CoreML 模型

这个例子使用 Apple 提供的预训练的 mobilenet 分类网络。

model_url = "https://docs-assets.developer.apple.com/coreml/models/MobileNet.mlmodel"
model_file = "mobilenet.mlmodel"
model_path = download_testdata(model_url, model_file, module="coreml")
# 现在磁盘上有 mobilenet.mlmodel 模型
mlmodel = cm.models.MLModel(model_path)

加载测试图像

还是用猫的图像:

img_url = "https://github.com/dmlc/mxnet.js/blob/main/data/cat.png?raw=true"
img_path = download_testdata(img_url, "cat.png", module="data")
img = Image.open(img_path).resize((224, 224))
# Mobilenet.mlmodel 的输入是 BGR 格式
img_bgr = np.array(img)[:, :, ::-1]
x = np.transpose(img_bgr, (2, 0, 1))[np.newaxis, :]

在 Relay 上编译模型

现在应该对这个过程较为熟悉了。

target = "llvm"
shape_dict = {"image": x.shape}

# 解析 CoreML 模型,并转换为 Relay 计算图
mod, params = relay.frontend.from_coreml(mlmodel, shape_dict)

with tvm.transform.PassContext(opt_level=3):
    lib = relay.build(mod, target, params=params)

输出结果:

/workspace/python/tvm/driver/build_module.py:268: UserWarning: target_host parameter is going to be deprecated. Please pass in tvm.target.Target(target, host=target_host) instead.
  "target_host parameter is going to be deprecated. "

在 TVM 上执行

这个过程与其他示例的相同。

from tvm.contrib import graph_executor

dev = tvm.cpu(0)
dtype = "float32"
m = graph_executor.GraphModule(lib["default"](dev))
# 设置输入
m.set_input("image", tvm.nd.array(x.astype(dtype)))
# 执行
m.run()
# 得到输出
tvm_output = m.get_output(0)
top1 = np.argmax(tvm_output.numpy()[0])

查找分类集名称

在 1000 个类的分类集中,查找分数最高的第一个:

synset_url = "".join(
    [
        "https://gist.githubusercontent.com/zhreshold/",
        "4d0b62f3d01426887599d4f7ede23ee5/raw/",
        "596b27d23537e5a1b5751d2b0481ef172f58b539/",
        "imagenet1000_clsid_to_human.txt",
    ]
)
synset_name = "imagenet1000_clsid_to_human.txt"
synset_path = download_testdata(synset_url, synset_name, module="data")
with open(synset_path) as f:
    synset = eval(f.read())
# 结果应为 Top-1 id 282 class name tiger cat
print("Top-1 id", top1, "class name", synset[top1])

输出结果:

Top-1 id 282 class name tiger cat

下载 Python 源代码:from_coreml.py

下载 Jupyter Notebook:from_coreml.ipynb

标签:target,img,模型,CoreML,tvm,编译,path,synset,import
From: https://blog.51cto.com/u_16060192/6556171

相关文章

  • 多模态大语言模型 LlaVA 论文解读:Visual Instruction Tuning
    代码:https://github.com/haotian-liu/LLaVA总览在这篇论文中,作者首次尝试使用纯语言GPT-4生成多模态语言图像指令遵循数据(insruction-followingdata)。通过对此类生成数据进行指令调整,推出了大型语言和视觉助手(LargeLanguageandVisionAssistant,LLaVA)。一种端到端训练的大型......
  • 云从科技大模型之路:昇思“黑土地”上的生态炼成记
    文|智能相对论作者|李永华一线客户经理,为客户一键生成周全的资产配置建议;中端管理人员,获得系统自动撰写的一整套数据分析报表,快速、准确授信;金融市场的“操盘手”,能够实时获取那些影响市场走势的舆情分析;……这些,是金融大模型落地后,预期将给行业带来的巨大改变——工作效率大大......
  • makefile只编译修改过的文件
    本文演示配置makefile,检测修改的代码才编译,提升编译效率。1.测试代码$tree.├──app.c├──lib│├──module2.c│└──module2.h├──makefile├──module1.c└──module1.happ.c#include<stdio.h>#include"app.h"#include"......
  • ABAQUS盾构隧道开挖模型Cae文件,一环7片,含螺栓,配筋。 (此模型用的㎜单位制)
    ABAQUS盾构隧道开挖模型Cae文件,一环7片,含螺栓,配筋。(此模型用的㎜单位制)在ABAQUS软件中,存在一个盾构隧道开挖模型的Cae文件。该模型由一环七片组成,其中包含螺栓和配筋。该模型使用毫米作为单位制。这段话涉及到的知识点和领域范围是:ABAQUS软件、盾构隧道开挖模型、Cae文件、螺栓......
  • 基于Crowbar电路的双馈风力发电机DFIG低电压穿越LVRT仿真模型
     这个仿真模型是基于Crowbar电路的双馈风力发电机(DFIG)的低电压穿越(LVRT)模型。该模型使用MatlabSimulink进行仿真,并采用保护电路(串电阻)来实现低电压穿越功能。当电网电压下降时,保护电路会被激活,抑制转子过电流。Crowbar电路的电阻阻值和投入时间可以进行调节,这样可以模拟多组不同......
  • 一个同步机无传感滑膜观测器模型加代码,该模型基于28035芯片,采用了典型的smo+pll方案
    一个同步机无传感滑膜观测器模型加代码,该模型基于28035芯片,采用了典型的smo+pll方案。这段代码是实际应用代码,而不是一般的玩票代码,因此具有较高的可比性(不同于ti例程)。需要注意的是,少数文件中的中文注释可能存在乱码问题。至于m文件,它并没有太多用处,直接运行simulink模型即可。知......
  • 采用永磁同步模型的电流预测控制和滑模控制来提高系统的鲁棒性和稳态特性。滑模控制器
    采用永磁同步模型的电流预测控制和滑模控制来提高系统的鲁棒性和稳态特性。滑模控制器结合了新型趋近律和扰动观测器,以实现更好的控制效果。电流环使用了预测控制双矢量改进算法,以提高控制精度和响应速度。涉及的知识点和领域范围:原创文章,转载请说明出处,资料来源:http://imgcs.cn/......
  • 通用大模型如何突破垂直行业场景?
    从京东离开后,周伯文已经很久没有这么兴奋了。ChatGPT横空出世搅动乾坤,如同一声春雷惊醒各行各业的从业者,让他们都不约而同地听到,AGI走进现实的脚步声。热潮之下,人们看到王慧文、王小川下场创业,也看到百度、阿里虎踞龙盘。周伯文作为IBM、京东两家大厂的AI研究院前院长,研究人工智......
  • spring boot 编译打包时将自定义引入的.jar包依赖,全部打包进去
    发现自己引入的.jar包,在打包时,.jar包并不会打进去,导致报错。打包时打入自定义.jar包方法:<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</a......
  • LLM-Blender:大语言模型排序融合框架
    随着Alpaca,Vicuna,Baize,Koala等诸多大型语言模型的问世,研究人员发现虽然一些模型比如Vicuna的整体的平均表现最优,但是针对每个单独的输入,其最优模型的分布实际上是非常分散的,比如最好的Vicuna也只在20%的任务里比其他模型有优势。有没有可能通过集成学习来综合诸多开源的「......