这章节我会讲解的是我在工作上的项目,人脸识别adaface,以下的讲解为个人的看法,若有地方说错的我会第一时间纠正,如果觉得博主讲解的还可以的话点个赞,就是对我最大的鼓励~

上一章节我们讲到了模型的训练与测试,相信大家已经训练好了模型,当然我们训练出来的模型是需要部署到实际项目上面去的,这个就需要把ckpt模型转成onnx模型,由于该作者没有提供转onnx模型的代码,这里我把自己编写的转onnx代码分享给大家。

当然,我们先上代码,对代码进行讲解。
1、首先我们需要填写的参数有4个:
训练出来的模型路径(–ckpt_path)
输出的模型名字(–onnx_name)
主干网络名字(ir_18)
推理图片路径(–image)
2、我们从main函数去看,opencv读取一张图片,并且对图片进行一些格式的转换,最后变成一个4维的tensor。
3、加载训练的主干网络后进行onnx的模型转换。
4、onnx模型出来之后,当然我们需要推理一张图片,推理结果需要跟我们的ckpt模型的输出结果是一致的,这样我们才说onnx模型是对齐的,才能去转其他的模型。

import argparse
import cv2
import numpy as np
import onnxruntime
import torchvision.transforms as transforms
import torch
import netparser = argparse.ArgumentParser(description='onnx inference')
parser.add_argument('--ckpt_path', default=r'./experiments/default_08-01_1/epoch=24-step=142174.ckpt', type=str, required=True, help='')
parser.add_argument('--onnx_name', default='ada_Face_142174', type=str, required=True, help='')
parser.add_argument('--model_name', default=None, type=str, required=True, help='')
parser.add_argument('--onnx_path', default=None, type=str, required=True, help='')
parser.add_argument('--image', default=None, type=str, required=True, help='')
args = parser.parse_args()adaface_models = {'ir_18':r".\experiments\default_08-01_1\epoch=24-step=142174.ckpt".replace('\\','/'),
}
def load_pretrained_model(architecture='ir_18'):# load model and pretrained statedictassert architecture in adaface_models.keys()model = net.build_model(architecture)statedict = torch.load(adaface_models[architecture])['state_dict']model_statedict = {key[6:]:val for key, val in statedict.items() if key.startswith('model.')}model.load_state_dict(model_statedict)model.eval()return modeldef l2_norm(x):""" l2 normalize"""output = x / np.linalg.norm(x)return outputdef to_numpy(tensor):return tensor.detach().cpu().numpy() if tensor.requires_grad else tensor.cpu().numpy()def get_test_transform():test_transform = transforms.Compose([    transforms.ToTensor(),    transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])])return test_transformdef main():# img = cv2.imread(args.image)# img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# img = get_test_transform()(img)# img = img.unsqueeze_(0)# print(img.shape)img1 = cv2.imread(args.image)img1 = np.expand_dims(img1, axis=0)img1 = img1.astype(np.float32)img1 = img1.transpose(0, 3, 1, 2)img1 = torch.from_numpy(img1)model = load_pretrained_model('ir_18')model.eval()torch_out = model(img1)torch.onnx.export(model,img1,"%s.onnx" % args.onnx_name,export_params=True,opset_version=11,do_constant_folding=True,input_names=['input'],output_names=['output'])print("finished")onnx_path = args.onnx_pathsession = onnxruntime.InferenceSession(onnx_path)inputs = {session.get_inputs()[0].name: to_numpy(img1)}outs = session.run(None, inputs)[0]# print(outs.shape)outs = l2_norm(outs).squeeze()num = torch_out[0].detach().numpy() * outsde1 = np.linalg.norm(torch_out[0].detach().numpy()) * np.linalg.norm(outs)print(np.sum(num) / de1)if __name__ == '__main__':main()

现在,我们的onnx模型推理结果与ckpt模型的推理结果需要做一个余弦相似度的对比,如果结果无限接近于1,那证明两边的模型结果对齐。

这里我们可以看到torch_out和outs的值,感官上看是对齐的,但是我们还需要进行余弦相似度的对比。
结果输出为1,证明两边的模型是对齐的,这样我们就可以往下面的模型去转换了。

到这里我们的ckpt模型转onnx模型已经告一段落啦,相信大家都已经完成了这不操作,接下来我会分享我自己对该adaface网络的一个详细解答。希望大家能多多支持。如果觉得博主讲解的可以的话,点个赞就是我最大的动力,谢谢~

人脸识别:史上最详细人脸识别adaface讲解-ckpt转onnx模型--第三节相关推荐

  1. 人脸识别:史上最详细人脸识别adaface讲解-模型训练与测试--第二节

    这章节我会讲解的是我在工作上的项目,人脸识别adaface,以下的讲解为个人的看法,若有地方说错的我会第一时间纠正,如果觉得博主讲解的还可以的话点个赞,就是对我最大的鼓励~ 上一章节,我们谈到了如何下 ...

  2. 人脸检测:史上最详细人脸检测libfacedetection讲解-网络详解--第二节

    以下是关于我个人对libfacedetection(人脸检测-pytorch)的所有见解,如有错误欢迎大家在评论区指出,我将会第一时间纠正.据说,人脸检测速度可以达到1000FPS,到底结果如何,我们 ...

  3. python用什么来写模块-史上最详细的python模块讲解

    模块的概念你一定不会陌生吧,这是一个非常宽泛的概念,在各行各业都会用到.这里我们涉及的只是软件中的模块概念.说到模块,就得先了解下模块化程序设计的概念.(如果您对模块化程序设计的概念已经烂熟于心,尽可 ...

  4. 模糊度判断:史上最详细图像质量评价(IQA)-训练自定义数据集--第三节

    这章节我会讲解的是我在工作上自己开发的项目,模糊度判断,该项目我是将图像质量评价论文–hypernet网络移植到mmclassification中进行图片质量评估,若有地方说错的我会第一时间纠正,如果 ...

  5. 3、史上最详细的电子元器件知识讲解

    知名电阻电容生产厂家 MURATA(村田).TDK.AVX.Nichicon (尼吉康株式会社).Taiyo-Yuden(太阳诱电).三星(Samsung).达方.国巨股份有限公司(YAGEO).PH ...

  6. 史上最详细唇语识别数据集综述

    更新:VIPL官网网页格式更改,导致旧的LRW1000链接无法访问,现已更新LRW1000数据集链接,内部包含申请需要的文件 推荐一个大佬的综述,关于实现唇语识别的多种途径. 说明:本文包括经常用语唇 ...

  7. 史上最详细唇语识别最新研究进展记录

    本文是唇语识别近2年来最新的方法的记录,主要集中在中英文词级数据集如LRW,LRW-1000,英文句子级数据集如LRS2,英文短语级数据集如OuluVS2,以及其他一些数据集. 记录方法为1.简要翻译 ...

  8. 史上最详细LRW数据集、LRW-1000数据集、LRS2数据集、LRS3-TED数据集、OuluVS2数据集介绍

    update 2022-10-22: 更新了LRW1000的官网链接详见史上最详细唇语识别数据集综述 本文将介绍唇语识别领域使用最多的几个数据集. 一.本文将详细的介绍数据集的格式以及处理方法,欢迎在 ...

  9. 史上最详细 Lipreading using Temporal Convolutional Networks 环境配置

    唇语识别是目前人工智能领域比较热门的应用之一,本文将在之后的内容中介绍2020年英文词汇级唇语识别在LRW(Lir Reading in the Wild)数据集以及LRW-1000两个数据集上实现S ...

最新文章

  1. 中国林科院亚热带林业研究所林木根际微生物博士后招聘启事
  2. EntityFramework Core 1.1是如何创建DbContext实例的呢?
  3. C#皮肤之IrisSkin4.dll
  4. 进程间的通讯(IPC)方式
  5. 服务器控件的 ID, ClientID 和 UniqueID 属性
  6. Linux系统管理(11)——linux下jdk的安装及环境变量配置
  7. 计算机辅助设计工业产品cad竞赛试题,2017工业产品设计CAD比赛试题
  8. android 通过串口来控制pwm的输出_ESP8266_07基于PWM的呼吸灯
  9. 常见算法在实际项目种的应用
  10. java ts视频文件转mp4格式在线求助
  11. 用辩证数学解答“缸中之脑”
  12. gltf模型浏览器_腾讯硬核干货!如何在页面极速渲染3D模型
  13. 《AutoCAD .NET开发指南2012版》翻译整理已完成,欢迎大家下载!
  14. 系统类毕业设计思路以及各种遇到问题的解决办法
  15. TensorFlow入门教程:8:训练数据之Iris数据集
  16. dbmsxplan oracle_Oracle dbms_xplan
  17. 谈谈制造企业如何制定敏捷的数字化转型策略
  18. 计算python程序运行时长,并以时分秒形式输出
  19. java校园招聘华为_2015届华为校园招聘机试题 java实现
  20. 绿之韵传销是空穴来风,一心一意为健康事业奋斗

热门文章

  1. 明天Around The World 2012(风靡世界2012)发布会 将发布绿叶清泉团队Logo
  2. Topic my-replicated-topic not present in metadata after 60000 ms.
  3. 用户体验五要素_每天都在被触达,却不知为何物?带你认识用户触达五要素
  4. 银行科技是自研还是外包好?
  5. JobService的使用介绍
  6. KingbaseES共享集群中crm_mon命令失效原因分析
  7. 【经验】tf1.x迁移到tf2.x教程
  8. 服务器代理(proxy)
  9. 了解公司企业:Uber
  10. oracle linux zfs,Centos7安装ZFS文件系统