OpenVINO 2021r1 超分辨率重建 INT8量化 - Waifu2x

2023-10-29 13:38

本文主要是介绍OpenVINO 2021r1 超分辨率重建 INT8量化 - Waifu2x,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接下来试试超分的INT8量化, 还是拿waifu2x模型来试验

 

首先毫无意外的掉进坑里了... ...

本来系统里已经装好了OpenVINO 2021r2, 想直接从这个版本开始,先安装accuracy_checker和pot的最新版本

到openvino_2021\deployment_tools\open_model_zoo\tools\accuracy_checker目录下运行

python setup.py install

安装成功,

再到openvino_2021\deployment_tools\tools\post_training_optimization_toolkit的目录下运行相同的安装命令,结果安装失败了,报有个ideep4py的库找不到,看了下openvino_2021\deployment_tools\tools\post_training_optimization_toolkit\setup.py, 看到这么一段

INSTALL_REQUIRES = ['scipy==1.2.1','jstyleson==0.0.2','numpy==1.16.3','pandas==0.24.2','hyperopt==0.1.2','addict==2.2.1','chainer==7.7.0','ideep4py==2.0.0.post3']

再上这个库的源上看了一眼https://pypi.org/simple/ideep4py/,发现这货根本就没有windows包。难道要我再装个linux版?

万般无奈之际发现我的2020r3是好的,只好一个版本一个版本的回滚,发现OV2021r1的pot安装是不依赖这个ideep4py的

出坑的方法就是: 目前做8bit量化要用OV2021r1,不用OV2021r2!!! 开源项目就这样,等OV2021r3出来以后再看看这个bug有没有解决吧

 

开始正式转INT8模型

1. accuracy_checker

先搞定精度检测,因为pot转换的时候也需要这个工具来对比原始模型和转换后的int8模型的推理精度。

主要的思路来源于这篇文章 OpenVINO 2020的INT8转换工具POT的初体验 因为OpenVINO在open model zoo里带的超分模型single-image-super-resolution-1032是有int8模型的,所以可以参考openvino_2021\deployment_tools\open_model_zoo\tools\accuracy_checker\configs\single-image-super-resolution-1032.yml的写法,自己编一个出来

先写配置文件waifu_FP32_ac_ov2021.yml

models:- name: waifu2xlaunchers:- framework: dlsdkmodel: noise0_scale2x_model_FP32.xmlweights: noise0_scale2x_model_FP32.binadapter:type: super_resolutionreverse_channels: Truedatasets:- name: super_resolution_x2data_source: datasetannotation_conversion:converter: super_resolutiondata_dir: datasetlr_suffix: lr_hr_suffix: hr_annotation: super_resolution_x2.picklepreprocessing:- type: auto_resizepostprocessing:- type: resizeapply_to: predictionmetrics:- type: psnrscale_border: 4presenter: print_vector#- type: ssim#  presenter: print_vector

这里各个数据段的含义就不解释了,可以参考官方文档 https://docs.openvinotoolkit.org/latest/omz_tools_accuracy_checker_accuracy_checker_adapters_README.html

接下来做个数据集

在放waifu_FP32_ac.yml的目录下新建个目录dataset 这个名字对应yml文件里的datasets段里面的定义

datasets:- name: super_resolution_x2
#data_source填存放数据集的目录data_source: datasetannotation_conversion:converter: super_resolution
#data_dir填存放数据集的目录data_dir: dataset
#lr_suffix, hr_suffix放图片的前缀,这里是告诉accuracy_checker, 低分辨率的图片是按照lr_1.png, lr_2.png... 高分辨率图片是按照hr_1.png hr_2.png... 来命名的lr_suffix: lr_hr_suffix: hr_annotation: super_resolution_x2.pickle

制作测试图片集,我的waifu2x模型通过MO转IR的时候定义了input_shape为[640x480], 所以转换的低分辨率图片分辨率为[640x480], 高分辨率图片分辨率为2x,即[1280x960],因为没有原始训练的数据集,只是随便测测,所以只随便找了20张图片转换出了20组

 运行

accuracy_check -c waifu_FP32_ac_ov2021.yml -s ./ -td GPU

输出

PSNR很差,有很多可能,也许是我的数据集不是原始训练集,也可能是我做数据集的时候的缩放顺序不对,或者HR图像的分辨率不对,再或者是yml的某个字段填错了。不过无所谓,至少说明accuracy checker能正常工作了 :)

 

2. POT

AC工作正常了,POT的json配置文件也可以照着相同的思路来一遍,这里我用了最简单的默认量化算法


{/* Model parameters */"model": {"model_name": "noise0_scale2x_model_FP32", // Model name"model": "noise0_scale2x_model_FP32.xml", // Path to model (.xml format)"weights": "noise0_scale2x_model_FP32.bin" // Path to weights (.bin format)},/* Parameters of the engine used for model inference */"engine": {"config": "waifu_FP32_ac_ov2021.yml"},/* Optimization hyperparameters */"compression": {"target_device": "GPU", // Target device, the specificity of which will be taken// into account during optimization"algorithms": [{"name": "DefaultQuantization", // Optimization algorithm name"params": {"preset": "performance", // Preset [performance, mixed, accuracy] which control the quantization// mode (symmetric, mixed (weights symmetric and activations asymmetric)// and fully asymmetric respectively)"stat_subset_size": 20  // Size of subset to calculate activations statistics that can be used// for quantization parameters calculation}}]}
}

 运行命令

pot -c waifu_simplified_mode_ov2021.json

一通CPU风扇狂转之后终于有了结果 (这里手工改了文件名,原来转出来的文件和原模型文件名一样)

用ac检查一下INT8模型的精度

processed in 24.956 seconds
psnr@mean: 13.60Db
psnr@std: 2.99Db

PSNR有下降,不过PSNR并不能表示图像画质,还是要用人眼的主观画质评测来打分,这个是玄学 :P

 

3. Bicubic, FP16 SR, INT8 SR 2X画质对比

祭出OpenVINO 2021r2 C++ 超分辨率重建 Waifu2x里面用到的SR转换程序,改一下模型的名字,得到3种模式的输出

原始图片(测试图片来自网络)

Bicubic的2x放大效果

 Waifu2x 2X FP16 精度放大的效果

 

 Waifu2x 2X INT8 精度放大的效果 

和FP16的模型输出做比对,第一眼没有什么特别明显的差别

 

4. 性能分析

最后看一下性能

前一篇文章, Waifu2X FP16的模型

调用inferRequest_regular.Infer()推理的时间, 在8665U 4核8线程的CPU和 Gen9 24EU的核显上

  • CPU: 1341ms (0.746FPS)
  • GPU: 685ms (1.46FPS)

这次在相同的配置下, Waifu2X INT8模型

  • CPU: 957ms (1.04FPS)
  • GPU: 1228ms (0.81FPS)

 基本符合预期,CPU方面可以通过INT8模型来提升性能, GPU方面因为Gen9不支持INT8计算,所以加载的int8模型会转换成FP32模型来计算,自然性能不如FP16的模型

 

再借来台其他同学的老虎湖(Tiger Lake 1165G7)来试试Gen12 96EU的显卡 :)

INT8模型 GPU: 154ms (6.49FPS)

FP16模型 GPU: 175.38ms (5.7FPS)

 

Gen12集显的性能提升还是很明显的,

Gen12 FP16 VS. Gen9 FP16模型

    5.7/1.46=3.9X

Gen12 INT8 VS. Gen12 FP16 模型

    6..49/5.7=1.14X

 

最后代码奉上,仅供参考

https://gitee.com/tisandman/pot_waifu2x_ov2021

 

 

这篇关于OpenVINO 2021r1 超分辨率重建 INT8量化 - Waifu2x的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/301004

相关文章

[论文笔记]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

引言 今天带来第一篇量化论文LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale笔记。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 大语言模型已被广泛采用,但推理时需要大量的GPU内存。我们开发了一种Int8矩阵乘法的过程,用于Transformer中的前馈和注意力投影层,这可以将推理所需

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决 问题描述 最近在投一篇期刊论文,直接提交word文档,当时没有查看提交预览,一审审稿意见全是:公式乱码、公式乱码、乱码啊!!!是我大意了,第二次提交,我就决定将word文档转成PDF后再提交,避免再次出现公式乱码的问题。接着问题又来了,我利用‘文件/导出’或‘文件/另存为’的方式将word转成PDF后,发现公式

量化交易面试:什么是连贯风险度量?

连贯风险度量(Coherent Risk Measures)是金融风险管理中的一个重要概念,旨在提供一种合理且一致的方式来评估和量化风险。连贯风险度量的提出是为了克服传统风险度量方法(如VaR,风险价值)的一些局限性。以下是对连贯风险度量的详细解释: 基本概念: 连贯风险度量是指满足特定公理的风险度量方法,这些公理确保了风险评估的一致性和合理性。 这些公理包括:非负性、次可加性、同质性和单调

Matlab)实现HSV非等间隔量化--相似判断:欧式距离--输出图片-

%************************************************************************** %                                 图像检索——提取颜色特征 %HSV空间颜色直方图(将RGB空间转化为HS

Python(TensorFlow和PyTorch)两种显微镜成像重建算法模型(显微镜学)

🎯要点 🎯受激发射损耗显微镜算法模型:🖊恢复嘈杂二维和三维图像 | 🖊模型架构:恢复上下文信息和超分辨率图像 | 🖊使用嘈杂和高信噪比的图像训练模型 | 🖊准备半合成训练集 | 🖊优化沙邦尼尔损失和边缘损失 | 🖊使用峰值信噪比、归一化均方误差和多尺度结构相似性指数量化结果 | 🎯训练荧光显微镜模型和对抗网络图形转换模型 🍪语言内容分比 🍇Python图像归一化

JD 1385:重建二叉树

OJ题目:click here~~ 题目分析:给前序遍历序列和中序遍历序列,重构二叉树并输出后序遍历序列 剑指offer 面试题6 AC_CODE int pre[1008] , in[1008] ;struct Node{int x ;Node *left ;Node *right ;};bool buildsubtree(Node*& root , int* spre , in

期货赫兹量化-种群优化算法:进化策略,(μ,λ)-ES 和 (μ+λ)-ES

进化策略(Evolution Strategies, ES)是一种启发式算法,旨在模仿自然选择的过程来解决复杂的优化问题,尤其在没有显式解、或搜索空间巨大的情况下表现良好。基于自然界的进化原理,进化策略通过突变、选择等遗传算子迭代生成解,并最终寻求全局最优解。 进化策略通常基于两个核心机制:突变和选择。突变是对当前解进行随机扰动,而选择则用于保留适应度更高的个体。本文详细介绍了 (μ,λ)-ES

10分钟理解大模型的量化

1. 什么是量化 量化是大模型领域中的一项关键技术,它通过降低模型参数的精度,将浮点数转换为整数或定点数,从而实现模型的压缩和优化。这样做的主要目的是减少模型的存储需求、加快推理速度,并降低模型的计算复杂度,使得大模型能够更高效地在资源受限的设备上运行,例如移动设备、嵌入式系统等场景。 2. 精度 先来看下数据存储的基本概念 bit 位是计算机中最小的数据单位,只能存储 0 或 1 两种

书生大模型实战营(第3期)进阶岛第3关--LMDeploy 量化部署进阶实践

1 配置LMDeploy环境 1.1 InternStudio开发机创建与环境搭建 点选开发机,自拟一个开发机名称,选择Cuda12.2-conda镜像。 我们要运行参数量为7B的InternLM2.5,由InternLM2.5的码仓查询InternLM2.5-7b-chat的config.json文件可知,该模型的权重被存储为bfloat16格式。 对于一个7B(70亿)参数的模型,

量化交易面试:什么是中心极限定理?

中心极限定理(Central Limit Theorem, CLT)是概率论和统计学中的一个重要定理,它描述了在一定条件下,独立随机变量的和的分布趋向于正态分布的性质。这个定理在量化交易和金融分析中具有重要的应用价值。以下是对中心极限定理的详细解释: 基本概念: 中心极限定理指出,当我们从一个具有任意分布的总体中抽取足够大的样本时,样本均值的分布将近似于正态分布,无论原始总体的分布是什么样的。