Skip to content

xxaier/altclip-onnx

Repository files navigation

AltCLIP 的 ONNX 导出

ONNX 是什么?

ONNX(Open Neural Network Exchange),开放神经网络交换,用于在各种深度学习训练和推理框架转换的一个中间表示格式。

在实际业务中,可以使用 Pytorch 或者 TensorFlow 训练模型,导出成 ONNX 格式,然后在转换成目标设备上支撑的模型格式,比如 TensorRT Engine、NCNN、MNN 等格式。

也可以用 ONNX Runtime 直接运行 ONNX。

使用 ONNX,可以减少模型的依赖,降低部署成本。

目录结构

因为 flagai 的依赖复杂,所以构建容器便于导出

脚本

  • ./build.sh 在本地构建容器
  • ./bash.sh 在本地进入容器的 bash,方便调试
  • ./export.sh 运行容器,导出 onnx

设置环境变量 MODEL ,可以修改测试、导出的模型 (参见./export.sh) 。

默认的模型是 AltCLIP-XLMR-L-m18。

其他可选的模型有:

  • AltCLIP-XLMR-L
  • AltCLIP-XLMR-L-m9

文件

  • model/ 存放下载的模型
  • onnx/ 存放导出的 onnx

测试

onnx 模型的依赖安装

test/onnx 下面的依赖很简单,只有 transformers 和 onnxruntime,不依赖于 flagai。

onnxruntime 有很多版本可以选择,见onnxruntime

对于 python 而言,常见的运行时推荐如下:

  • 显卡 pip install onnxruntime-gpu
  • ARM 架构的 MAC pip install onnxruntime-silicon (目前还不支持 python3.11)
  • INTEL 的 CPU pip install onnxruntime-openvino
  • 其他 CPU pip install onnxruntime

运行 ./test/onnx/setup.sh 会自动判断环境,选择安装合适的 onnxruntime 版本和 transformers。

onnx 模型的测试脚本

请先安装 direnv 并在本目录下 direnv allow 或者手工 source .envrc 来设置 PYTHONPATH 环境变量。

如果想把生成的文本向量和图片向量存入数据库,进行相似性搜索,请先对特征进行归一化。

image_features /= image_features.norm(dim=-1, keepdim=True)
text_features /= text_features.norm(dim=-1, keepdim=True)

可借助向量数据库,提升零样本分类的准确性,参见ECCV 2022 | 无需下游训练,Tip-Adapter 大幅提升 CLIP 图像分类准确率

pytorch 模型

用于对比 onnx 模型的向量输出,查看是否一致。

因为用到了 flagai,请如下图所示运行 ./bash.sh 进入容器运行调试。

如果不想构建本地镜像,可以运行 ORG=xxai ./bash.sh 使用 hub.docker.com 上的远程镜像

github action 上的容器自动构建

在 github action 中配置秘钥,就可以实现自动构建推送容器

  • DOCKER_ORG 组织名
  • DOCKER_USERNAME hub.docker.com 登录的用户
  • DOCKER_PASSWORD hub.docker.com 登录的密码

详情见./.github/workflows/onnx.yml

修改 ./version.txt 可以设置推送容器的版本号。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published