当前位置: 首页 > news >正文

arcface

GitHub - bubbliiiing/arcface-pytorch: 这是一个arcface-pytorch的源码,可以用于训练自己的模型。

https://github.com/deepinsight/insightface/tree/master/recognition/arcface_torch

torch模型转换onnx

import torch
import arcface
from nets.arcface import Arcface as arcface
from torch.onnx import export
import onnxruntime as ort
import numpy as np
def convert2onnx_demo():# model_path = './model_data/arcface_mobilefacenet.pth'# model_path = './model_data/arcface_mobilenet_v1.pth'model_path = './model_data/arcface_iresnet50.pth'device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')print('Loading weights into state dict...')# net = arcface(backbone='mobilefacenet', mode="predict").eval()# net = arcface(backbone='mobilenetv1', mode="predict").eval()net = arcface(backbone='iresnet50', mode="predict").eval()net.load_state_dict(torch.load(model_path, map_location=device), strict=True)net = net.to(device)batch_size = 4print('{} model loaded.'.format(model_path))dummy_input = torch.randn(batch_size, 3, 112, 112).to(device)# onnx_path = './model_data/arcface_mobilefacenet.onnx'# onnx_path = './model_data/arcface_mobilenet_v1.onnx'onnx_path = './model_data/arcface_iresnet50.onnx'opset = 10# export_onnx(net, dummy_input, onnx_path, opset, dynamic=True, simplify=True)# export(net, dummy_input, onnx_path, opset, dynamic=True, simplify=True)# 使用 torch.onnx.export 来导出模型# dynamic_axes = {'images': {0: 'batch_size'}}  # 支持动态批处理大小dynamic_axes = {'input.1': {0: 'batch_size'}}  # 使用正确的输入名export(net, dummy_input, onnx_path, opset_version=opset, dynamic_axes=dynamic_axes, do_constant_folding=True)ort_session = ort.InferenceSession(onnx_path)# outputs = ort_session.run(None, {'images': np.random.randn(batch_size, 3, 112, 112).astype(np.float32)})outputs = ort_session.run(None, {'input.1': np.random.randn(batch_size, 3, 112, 112).astype(np.float32)})  # 使用正确的输入名print(outputs[0], outputs[0].shape)convert2onnx_demo()

onnx模型推理

import onnxruntime as ort
import numpy as np
import cv2# 加载ONNX模型
# session = ort.InferenceSession("./model_data/arcface_iresnet50.onnx")
session = ort.InferenceSession("./model_data/arcface_mobilenet_v1.onnx")# 读取并预处理图像
image_path = "./img/1_001.jpg"
image = cv2.imread(image_path)
image = cv2.resize(image, (112, 112))  # 假设模型需要的输入尺寸是112x112
image = image.transpose(2, 0, 1)  # 转换为 CxHxW
image = image.astype(np.float32)
image = (image - 127.5) / 128.0  # 归一化# 添加batch维度
image = np.expand_dims(image, axis=0)# 运行模型
input_name = session.get_inputs()[0].name
outputs = session.run(None, {input_name: image})# 'outputs' 是模型的输出,这里假设输出是特征向量
features = outputs[0]
print(features)
print(features.shape)

参考博客

Arcface部署应用实战-CSDN博客

https://zhuanlan.zhihu.com/p/165294876


http://www.mrgr.cn/news/81951.html

相关文章:

  • 如何在 Ubuntu 22.04 上优化 Apache 以应对高流量网站教程
  • 使用爬虫技术获取网页中的半结构化数据
  • connect to host github.com port 22: Connection timed out 的解决方法
  • MongoDB 固定集合
  • 怎样用 Excel 做数据分析?
  • word中文献引用[]符号的上下标格式修改
  • QT 学习第十四天 QWidget布局
  • SpringBoot对静态资源的映射规则
  • STM32-笔记20-测量按键按下时间
  • 计算机网络期末复习
  • C++ 设计模式
  • BUG分析 - 重启有时失败
  • 预计5.2.1版本的SharedingSphere Hint指定数据库未生效问题
  • 计算机网络500题2024-2025学年度第一学期复习题库(选择、判断、填空)
  • 前端项目 npm报错解决记录
  • ROUGE指标在自然语言处理中的应用:从理论到实践
  • 数字图像处理
  • C++算法知识点
  • sqlalchemy-access库操作MS Access
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.4,SDP协议分析
  • 若依数据权限控制
  • Diffusion Transformer(DiT)——将扩散过程中的U-Net换成ViT:近频繁用于视频生成与机器人动作预测(含清华PAD详解)
  • Three.js 字体
  • html转PDF
  • NFS网络文件共享新认识——筑梦之路
  • HarmonyOS NEXT应用开发实战:一分钟写一个网络接口,JsonFormat插件推荐