人脸识别:史上最详细人脸识别adaface讲解-ckpt转onnx模型--第三节
这章节我会讲解的是我在工作上的项目,人脸识别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模型--第三节相关推荐
- 人脸识别:史上最详细人脸识别adaface讲解-模型训练与测试--第二节
这章节我会讲解的是我在工作上的项目,人脸识别adaface,以下的讲解为个人的看法,若有地方说错的我会第一时间纠正,如果觉得博主讲解的还可以的话点个赞,就是对我最大的鼓励~ 上一章节,我们谈到了如何下 ...
- 人脸检测:史上最详细人脸检测libfacedetection讲解-网络详解--第二节
以下是关于我个人对libfacedetection(人脸检测-pytorch)的所有见解,如有错误欢迎大家在评论区指出,我将会第一时间纠正.据说,人脸检测速度可以达到1000FPS,到底结果如何,我们 ...
- python用什么来写模块-史上最详细的python模块讲解
模块的概念你一定不会陌生吧,这是一个非常宽泛的概念,在各行各业都会用到.这里我们涉及的只是软件中的模块概念.说到模块,就得先了解下模块化程序设计的概念.(如果您对模块化程序设计的概念已经烂熟于心,尽可 ...
- 模糊度判断:史上最详细图像质量评价(IQA)-训练自定义数据集--第三节
这章节我会讲解的是我在工作上自己开发的项目,模糊度判断,该项目我是将图像质量评价论文–hypernet网络移植到mmclassification中进行图片质量评估,若有地方说错的我会第一时间纠正,如果 ...
- 3、史上最详细的电子元器件知识讲解
知名电阻电容生产厂家 MURATA(村田).TDK.AVX.Nichicon (尼吉康株式会社).Taiyo-Yuden(太阳诱电).三星(Samsung).达方.国巨股份有限公司(YAGEO).PH ...
- 史上最详细唇语识别数据集综述
更新:VIPL官网网页格式更改,导致旧的LRW1000链接无法访问,现已更新LRW1000数据集链接,内部包含申请需要的文件 推荐一个大佬的综述,关于实现唇语识别的多种途径. 说明:本文包括经常用语唇 ...
- 史上最详细唇语识别最新研究进展记录
本文是唇语识别近2年来最新的方法的记录,主要集中在中英文词级数据集如LRW,LRW-1000,英文句子级数据集如LRS2,英文短语级数据集如OuluVS2,以及其他一些数据集. 记录方法为1.简要翻译 ...
- 史上最详细LRW数据集、LRW-1000数据集、LRS2数据集、LRS3-TED数据集、OuluVS2数据集介绍
update 2022-10-22: 更新了LRW1000的官网链接详见史上最详细唇语识别数据集综述 本文将介绍唇语识别领域使用最多的几个数据集. 一.本文将详细的介绍数据集的格式以及处理方法,欢迎在 ...
- 史上最详细 Lipreading using Temporal Convolutional Networks 环境配置
唇语识别是目前人工智能领域比较热门的应用之一,本文将在之后的内容中介绍2020年英文词汇级唇语识别在LRW(Lir Reading in the Wild)数据集以及LRW-1000两个数据集上实现S ...
最新文章
- 中国林科院亚热带林业研究所林木根际微生物博士后招聘启事
- EntityFramework Core 1.1是如何创建DbContext实例的呢?
- C#皮肤之IrisSkin4.dll
- 进程间的通讯(IPC)方式
- 服务器控件的 ID, ClientID 和 UniqueID 属性
- Linux系统管理(11)——linux下jdk的安装及环境变量配置
- 计算机辅助设计工业产品cad竞赛试题,2017工业产品设计CAD比赛试题
- android 通过串口来控制pwm的输出_ESP8266_07基于PWM的呼吸灯
- 常见算法在实际项目种的应用
- java ts视频文件转mp4格式在线求助
- 用辩证数学解答“缸中之脑”
- gltf模型浏览器_腾讯硬核干货!如何在页面极速渲染3D模型
- 《AutoCAD .NET开发指南2012版》翻译整理已完成,欢迎大家下载!
- 系统类毕业设计思路以及各种遇到问题的解决办法
- TensorFlow入门教程:8:训练数据之Iris数据集
- dbmsxplan oracle_Oracle dbms_xplan
- 谈谈制造企业如何制定敏捷的数字化转型策略
- 计算python程序运行时长,并以时分秒形式输出
- java校园招聘华为_2015届华为校园招聘机试题 java实现
- 绿之韵传销是空穴来风,一心一意为健康事业奋斗
热门文章
- 明天Around The World 2012(风靡世界2012)发布会 将发布绿叶清泉团队Logo
- Topic my-replicated-topic not present in metadata after 60000 ms.
- 用户体验五要素_每天都在被触达,却不知为何物?带你认识用户触达五要素
- 银行科技是自研还是外包好?
- JobService的使用介绍
- KingbaseES共享集群中crm_mon命令失效原因分析
- 【经验】tf1.x迁移到tf2.x教程
- 服务器代理(proxy)
- 了解公司企业:Uber
- oracle linux zfs,Centos7安装ZFS文件系统