Yolov5将pt权重转为coreml

简体中文 | English
介绍

本文提供了一个权重转换工具,可用于将 Yolov5 模型(例如,yolov5s.pt)导出到具有解码层和非最大抑制层(NMS)的 CoreML 模型(例如,yolov5s.mlmodel)。

轻松使用
在搭建好环境后只需要按照参数说明修改后,运行脚本就可以快速获取一些CoreML模型文件。

支持量化
支持FP16和Int8精度的转换,支持MacOs和Linux系统(Windows尚未测试)。

Xcode 预览
与官方的权重转换工具相比,我们添加了解码层和 NMS 层,以便导出的模型与 Apple 版本框架很好地配合,无需任何代码即可在 Xcode 上预览。



一、CoreML是什么?

Core ML是苹果公司于2017年6月宣布了上线的一种不需要互联网连接即可进行机器学习的框架。Core ML旨在优化在移动设备上训练机器学习的功效,且不需要互联网连接即可进行机器学习。[1]
利用 Core ML 在 App 中整合机器学习模型。Core ML 为所有模型提供了一种统一的呈现方式。App 可以使用 Core ML API 和用户数据进行预测,以及训练或精调模型,一切都在用户设备上完成。[2]

二、使用步骤

1.安装环境

运行此脚本需要yolov5 库(推荐yolov5-v6.2),需要按照说明部署yolov5运行环境。

git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5
git checkout v6.2                                # switch to v6.2 tag
pip install -r requirements.txt                  # install

运行脚本还需要以下coremltools库,安装命令如下

pip install coremltools==6.0

在linux的python3.8中部署yolov5 v6.2已经通过测试,其余情况自行测试。

2.开始使用

克隆脚本仓库

git clone https://github.com/ClintRen/yolov5_convert_weight_to_coreml.git

convert.py可以看到如下参数和帮助,按照参数帮助来填写你的权重文件信息。
需要注意的是–yolov5-repo参数是必要的,它是yolov5目录的路径。

    parser.add_argument(
        "--yolov5-repo",
        required=True,
        # default="",
        help="path to yolov5 repo",
    )
    parser.add_argument(
        "--weight", type=str, default="yolov5s.pt", help="yolov5 weights path"
    )
    parser.add_argument(
        "--img-size",
        type=int,
        default=640,
        help="image imput size (pixels)",
    )
    parser.add_argument(
        "--conf-thres", type=float, default=0.25, help="confidence threshold"
    )
    parser.add_argument(
        "--iou-thres", type=float, default=0.45, help="NMS IoU threshold"
    )
    parser.add_argument(
        "--device", default="cpu", help="cuda device, i.e. 0 or 0,1,2,3 or cpu"
    )
    parser.add_argument(
        "--quantize",
        default=True,
        action="store_true",
        help="quantize model to FP16 and Int8",
    )

此外,以下额外信息会显示在CoreML文件的Metadata当中。

    # Other model options
    parser.add_argument("--description", default="yolov5s", help="Model description")
    parser.add_argument("--author", default="yolov5", help="Model author")
    parser.add_argument("--version", default="6.2", help="Model version")
    parser.add_argument("--license", default="GPL-3.0", help="Model license")

3.示例

在转换脚本目录下运行以下命令

python convert.py --yolov5-repo /path/to/yolov5 --weight yolov5s.pt --img-size 640 --quantize

命令说明

python convert.py             # 执行convert.py脚本
--yolov5-repo /path/to/yolov5 # yolov5路径
--weight yolov5s.pt           # 权重文件,本仓库自带yolov5s.pt供大家测试,它是yolov5-v6.2版本的
--img-size 640                # 输入图片尺寸
--quantize                    # 量化,额外输出FP16和Int8精度的CoreMl文件

运行完脚本后会在权重目录下生成3个CoreML文件,分别是yolov5s.mlmodel, yolov5s_FP16.mlmodel and yolov5s_Int8.mlmodel.

4.Xcode检测预览

将模型导入Xcode中,可以看到模型文件信息(如Metadata, Precision, Class Labels, Input, Output等)
General
Predictions

下图是用yolov5s_Int8.mlmodel在Xcode-Preview中的的检测结果,无需编写额外的代码。

zidane
bus

总结

以上就是快速将yolov5权重文件转为多精度且具有解码层和NMS层的CoreML文件和在Xcode预览的全过程。
如果对你有帮助麻烦你在本脚本仓库点一个star,谢谢。

参考

[1] CoreML报道

[2] CoreML官方

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值