人脸高清算法GFPGAN之TensorRT推理
1. 综述
最近由于做数字人项目,采用的是wav2lip + GFPGAN进行人脸面部高清,但GFPGAN模型本身比较大,所以想着使用TensorRT来代替原始的pth推理看看能否提升运行速度,于是便开始了这趟windows1之下进行GFPGAN的trt推理的折腾之旅。
2. 环境
我会提供一个我写好GFPGAN的trt推理的完整工程包。我的环境是windows10 + cuda11.7 + cudnn 8.9.2 + TensorRT-8.5.1.7 + pycuda_cuda115 + python3.8的虚拟环境。
2.1 TensorRT的环境安装
TensorRT的环境安装参考英伟达官方TensorRT8.x下载地址
2.1.1 pip安装TensorRT文件夹中的.whl文件
进入python文件夹

conda activate py38_torch # 激活你的python3.8虚拟环境
pip install tensorrt-8.5.1.7-cp38-none-win_amd64.whl
进入graphsurgeon文件夹
pip install graphsurgeon-0.4.6-py2.py3-none-any
进入onnx_graphsurgeon文件夹

pip install onnx_graphsurgeon-0.3.12-py2.py3-none-any.whl -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
进入uff文件夹

pip install uff-0.6.9-py2.py3-none-any.whl
还有很重要的一步就是将TensorRT的lib所有文件复制到cuda的bin下面,如下图所示

验证
import tensorrt as trt
print(trt.__version__)
2.2 pycuda安装
进入trt_inference/package下面

pip install pycuda-2021.1+cuda115-cp38-cp38-win_amd64.whl
3. 模型转换
3.1 pth2onnx(将GFPGAN的v1.4的pth模型转换为trt)
进入trt_inference/model_transformer/onnx下面

python gfpgan2onnx.py --src_model_path GFPGANv1.4.pth --dst_model_path gfpganv1.4.onnx --img_size 512
pip install onnx-simplifier
python -m onnxsim gfpganv1.4.onnx gfpganv1.4_sim.onnx
所以就得到了trt_inference/model_transformer/onnx/gfpganv1.4_sim.onnx
3.2 onnx2trt(将GFPGAN的onnx转化为TensorRT的trt)
进入trt_inference/model_transformer/trt下面

python gfpgan2onnx2trt.py --src_model_path ../onnx/gfpganv1.4_sim.onnx --dst_model_path gfpganv1.4.trt
所以就得到了trt_inference/model_transformer/trt/gfpganv1.4.trt模型
4 pth和trt模型推理结果比较
进入工程文件GFPGAN-master下面

4.1 使用pytorch的pth模型去跑视频生成
修改gfpgan/utils.py下面的如图两行

然后直接在GFPGAN-master下面运行 python run.py --face_path inputs/wav2lip.mp4 --audio_path inputs/vyrxlgmx.mp3 --final_path result.mp4 --outputs_path output,则会在output下面生成result.mp4, 生成时间为: 848.8s, 总的推理时间为: 5.8s
4.2 使用TensorRT的trt模型去跑视频生成
修改gfpgan/utils.py下面的如图所示

然后直接在GFPGAN-master下面运行 python run.py --face_path inputs/wav2lip.mp4 --audio_path inputs/vyrxlgmx.mp3 --final_path result.mp4 --outputs_path output,则会在output下面生成result.mp4, 生成时间为: 909.6s, 总的推理时间为: 11.8s
完整的工程代码,请看百度网盘链接: ,提取码:
相关文章:
人脸高清算法GFPGAN之TensorRT推理
1. 综述 最近由于做数字人项目,采用的是wav2lip GFPGAN进行人脸面部高清,但GFPGAN模型本身比较大,所以想着使用TensorRT来代替原始的pth推理看看能否提升运行速度,于是便开始了这趟windows1之下进行GFPGAN的trt推理的折腾之旅。…...
05 OpenCV图像混合技术
文章目录 理论算子示例 理论 其中 的取值范围为0~1之间 算子 addWeighted CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2, double beta,double gamma, OutputArray dst, int dtype -1 ); 参数1:输入图像Mat …...
2326. 王者之剑(网络流,最小割,最大权独立集,最小点权覆盖)
活动 - AcWing 给出一个 nm 网格,每个格子上有一个价值 vi,j 的宝石。 Amber 可以自己决定起点,开始时刻为第 0 秒。 以下操作,在每秒内按顺序执行。 若第 i 秒开始时,Amber 在 (x,y),则 Amber 可以拿走 (x,y) 上的…...
内网信息搜集
目录 内网基础知识 基本流程图 怎么判断是否在域内 常规信息类收集-应用&服务&权限等 cs信息搜集 bloodhound安装及使用 内网基础知识 工作组:将不同的计算机按照功能分别列入不同的组,想要访问某个部门的资源,只要在【网络】里…...
微型力量,巨大作用:嵌入式技术的创新应用
微型力量,巨大作用:嵌入式技术的创新应用 嵌入式技术是一种将计算机技术嵌入到各种设备和系统中的技术,它的应用范围非常广泛,包括但不限于智能手机、智能家居、医疗设备、工业自动化等领域。这种微型的技术在各个领域中发挥着巨…...
华为 OD 一面算法原题
2.2 亿彩票公布调查结果 昨天,闹得沸沸扬扬的《10 万中 2.2 亿》的彩票事件,迎来了官方公告。 简单来说,调查结果就是:一切正常,合规合法。 关于福利彩票事件,之前的推文我们已经分析过。 甚至在后面出现《…...
FPGA-学会使用vivado中的存储器资源ROM(IP核)
问题: 某芯片,有500个寄存器,需要在上电的时候由FPGA向这些寄存器中写入初始值,初始值已经通过相应的文档给出了具体值,这些值都是已知的。 分析关键点: 数据量比较多(Verilog代码,通过case语句、always语句这种查找表的方式,数…...
自测-1 打印沙漏
文章预览: 题目算法代码 题目 算法 以前做过这个,那次是c语言写的,一点一点处理一层一层完成,这次我换了一种语言用了另一种思想使用递归去写,还是我们要先求出应该有多少层这个很容易,中间输出部分我们算…...
高级语言期末2009级B卷(计算机学院)
1.编写一个名为mystrcpy的函数,实现将字符串str1的偶数位子的字符的拷贝到另一个字符串str2中。并编写主函数,在主函数中从键盘读入一个长度<100的字符串str1,然后调用函数mystrcpy;最后输出str2,例如,读…...
c# using 用法
using命令空间 导入命名空间中的所有类型 如:using System.Text; using别名 using别名包括详细命名空间信息的具体类型,这种做法有个好处就是当同一个cs引用了两个不同的命名空间,但两个命名空间都包括了一个相同名字的类型的时候。当需要…...
【Django】执行查询—跨关系查询中的跨多值关联问题
跨多值查询 跨越 ManyToManyField 或反查 ForeignKey (例如从 Blog 到 Entry )时,对多个属性进行过滤会产生这样的问题:是否要求每个属性都在同一个相关对象中重合。 filter() 先看filter(),通过一个例子看…...
Spring八股 常见面试题
什么是Spring Bean 简单来说,Bean 代指的就是那些被 IoC 容器所管理的对象。我们需要告诉 IoC 容器帮助我们管理哪些对象,这个是通过配置元数据来定义的。配置元数据可以是 XML 文件、注解或者 Java 配置类。 将一个类声明为 Bean 的注解有哪些? Com…...
今年面试潮,说实话这个开发岗能不能冲?
自打华为 2019 年发布鸿蒙操作系统以来,网上各种声音百家争鸣。尤其是 2023 年发布会公布的鸿蒙 4.0 宣称不再支持 Android,更激烈的讨论随之而来。 当下移动端两大巨头瓜分了绝大部分市场: iOS 是闭源的,只有唯一的一家厂商&am…...
【前端素材】推荐优质在线花卉商城电商网页Flowery平台模板(附源码)
一、需求分析 1、系统定义 在线花卉商城是一个通过互联网提供花卉销售服务的电子商务平台,用户可以在该平台上浏览、选择和购买各种花卉产品。 2、功能需求 在线花卉商城是一个通过互联网提供花卉销售服务的电子商务平台,用户可以在该平台上浏览、选…...
★【递归】【构造二叉树】Leetcode 106.从中序与后序遍历序列构造二叉树
★【递归前序】【构造二叉树】Leetcode 106.从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树 106.从中序与后序遍历序列构造二叉树:star:思路分析递归解法 105. 从前序与中序遍历序列构造二叉树递归解法 凡是构造二叉树>>>>>>>>&…...
linux检测和重启python脚本
#!/bin/bash# 检测Flask应用是否挂了 if ! pgrep -f "flask_app.py" >/dev/null; then# 重启Flask应用cd /path/to/your/flask/appnohup python3 flask_app.py >/dev/null 2>&1 & fi这是一个简单的bash脚本,用于检测Flask应用是否挂掉&a…...
HTML+CSS+JS:花瓣登录组件
效果演示 实现了一个具有动态花朵背景和简洁登录框的登录页面效果。 Code <section><img src"./img/background.jpeg" class"background"><div class"login"><h2>Sign In</h2><div class"inputBox"…...
Unity中URP下实现水体(水面反射)
文章目录 前言一、原理1、法一:使用立方体纹理 CubeMap,作为反射纹理使用2、法二:使用反射探针生成环境反射图,所谓反射的采样纹理 二、实现水面反射1、定义和申明CubeMap2、反射向量需要什么3、计算 N ⃗ \vec{N} N 4、计算 V ⃗…...
基于FastJson实现Json数据文件导入导出解析
哈喽,大家好,我是灰小猿,一个超会写bug的程序猿! 今天来记录一个在项目实战中比较实用的方法,主要是针对一些需要存在简单数据文件导入导出的场景,如:数据文件的简单备份、软件升版前后配置导入…...
JVM内存分配与垃圾收集流程
3.8 实战:内存分配与回收策略 3.8.1 对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。 3.8.2 大对象直接进入老年代 HotSpot虚拟机提供了-XX:Prete…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
