pytorch和coreml的流程以及一些注意点
00 分钟
2024-9-24
2024-10-4
Last edited time
Oct 4, 2024 07:58 AM
type
status
date
slug
summary
tags
category
icon
password

Apple官方视频讲解

⚠️
其中有些代码已经有点过时了,其中的模型的类型和type等代码实际都不对,请根据下文的代码来。

范例

图片model转化为coreml模型

代码来源:

语言model转化为coreml模型

代码来源:

注意点

返回结果只能是tensors或者tuples of tensors

notion image
假设上述 self.model 返回的是一个带有 out key的 dict ,那么直接 torch.jit.trace 会报错,需要给他像上面这样子包裹一层 WrapperModel ,让其最终 forward 还是返回一个 tensor 对象才可以。

操作函数必须是python原生或者pytorch原生

如果要转为 torchscript ,那么必须确保所有函数都是python的基础函数,不能使用类似于math之类的仓库,这类仓库的操作 torch.jit.trace 或者 torch.jit.script 无法识别,会弹出警告并且实际会忽视这些操作。

评估模式的选择

notion image
如上所示,在 torch.jit.trace 之前,多数人想要确保模型处于评估模式,这确保所有层级都配置为推断,而不是训练,对于大多数层级,这并不重要。但例如,如果你的模型中有一个dropout层或者BatchNorm层,设置评估模式将确保它被禁用,而当转换器遇到被禁用的操作时,将会忽视它们,把它们视为传递操作。(这样是合理的,不需要改为train模式,因为本身在预测的时候就需要参数固定)

类型注释

notion image
像上述代码中的话,默认 torch.jit.script 函数会把所有的类型当作 Tensor,也就是说 _list 被视作List[torch.Tensor],但是 range(10) 生成的是 int 类型,int 不符合 Tensor ,自然也就报错了。要修复的话需要改成如下
notion image
上一篇
ai图片训练的一些注意点
下一篇
Sample采样器

评论
Loading...