0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

模糊图像变高清:TPU-MLIR引领EDSR向MDSR的智能转换!

算能开发者社区 2023-12-11 17:51 次阅读

模型介绍

EDSR模型,全称为enhanced deep super-resolution network(增强的深度学习超分辨率重建网络)。该模型可以对指定图片进行超分辨率操作,提高清晰度。

而MDSR是多尺度的超分模型,可以一次输出不同scale的图片,相比EDSR,可以在相同的性能下,减少很多的参数

EDSR模型结构如下:

d04412b4-980a-11ee-9788-92fbcf53809c.png

MDSR模型结构如下:

d062e8ec-980a-11ee-9788-92fbcf53809c.png

本期内容将会带领大家学习如何利用TPU-MLIR实现EDSR模型到MDSR模型的转换。

模型导出与转换

基本流程为将原项目与模型下载后导出为onnx模型。再利用TPU-MLIR工具将onnx模型转换为bmodel模型。

目录结构安排如下,其中dataset文件夹中是量化所用的DIV2K数据集,image文件夹下是测试图片,model文件夹中是待转换的onnx模型。

.
├──dataset
│├──x2
│├──x3
│└──x4
├──image
└──model
├──EDSR_x2.onnx
├──EDSR_x3.onnx
├──EDSR_x4.onnx
├──MDSR_x2.onnx
├──MDSR_x3.onnx
└──MDSR_x4.onnx

以下命令均在TPU-MLIR的docker环境内进行。

进入EDSR-transform目录

设置参数

scale=4
size=100
echoscale=${scale}size=${size}
mkdirworkspace_x${scale}&&cdworkspace_x${scale}

  1. 模型转换和量化

#算子转换、图优化
model_transform.py\
--model_nameEDSR_x${scale}\
--model_def../model/EDSR_x${scale}.onnx\
--input_shapes[[1,3,${size},${size}]]\
--keep_aspect_ratio\
--pixel_formatrgb\
--test_input../image/0901x${scale}.png\
--test_resultEDSR_x${scale}_outputs.npz\
--mlirEDSR_x${scale}.mlir

#建立校准表
run_calibration.pyEDSR_x${scale}.mlir\
--dataset../dataset/X${scale}\
--input_num50\
-oEDSR_x${scale}_cali_table

#多层优化和转换bmodel
##转换INT8模型
model_deploy.py\
--mlirEDSR_x${scale}.mlir\
--quantizeINT8\
--calibration_tableEDSR_x${scale}_cali_table\
--chipbm1684x\
--test_inputEDSR_x${scale}_in_f32.npz\
--test_referenceEDSR_x${scale}_outputs.npz\
--tolerance0.85,0.45\
--modelEDSR_x${scale}_1684x_int8_sym.bmodel

##转换FP16模型
model_deploy.py\
--mlirEDSR_x${scale}.mlir\
--quantizeF16\
--chipbm1684x\
--test_inputEDSR_x${scale}_in_f32.npz\
--test_referenceEDSR_x${scale}_top_outputs.npz\
--modelEDSR_x${scale}_1684x_f32_sym.bmodel

##转换FP32模型
model_deploy.py\
--mlirEDSR_x${scale}.mlir\
--quantizeF32\
--chipbm1684x\
--test_inputEDSR_x${scale}_in_f32.npz\
--test_referenceEDSR_x${scale}_top_outputs.npz\
--modelEDSR_x${scale}_1684x_f32_sym.bmodel

#将以上所有EDSR改为MDSR即可转换MDSR模型

转换结果评估

评估过程说明

  1. 配置好BM1684X平台,上传并解压本项目EDSR-BM1684x.zip,同时下载benchmark数据集,确保benchmark与EDSR文件夹在同一目录内。进入EDSR/python目录下,运行以下命令:

####predictonbm1684x
formodelin{EDSR,MDSR};do
forscalein{2,3,4};do
echo-------------------------------------dataset=Set14-------------scale=${scale}-------------------------------------
cmd="pythonrun_opencv_crop.py--input../../benchmark/Set14/LR_bicubic/X${scale}\
--outputresults/${model}_Set14_x${scale}_int8\
--bmodel../models/BM1684X/${model}_x${scale}/${model}_x${scale}_1684x_int8_sym.bmodel"
echo">>>Running:${cmd}"
$cmd
done
done

  • 推理结果保存在EDSR/python/results中,更改不同bmodel参数以使用不同bmodel
  1. 评估结果方法

####安装评估模型
pipinstalllpips

评估主要代码(eval.py)如下

...
fori,srinenumerate(sr_list):
hr=Path(args.hr_path)/(sr.stem.split('x')[0]+sr.suffix)
ifnothr.exists():
logging.error(f'{sr}:{hr}doesnotexist')
hr_list.append(None)
continue
hr_list.append(hr)

sr_img=Image.open(sr).convert('RGB')
hr_img=Image.open(hr).convert('RGB')
ifhr_img.size!=sr_img.size:
logging.info(f'croppinghr_imgfrom{hr_img.size}to{sr_img.size}')
#hr_img=hr_img.resize(sr_img.size,resample=Image.Resampling.BICUBIC)
hr_img=hr_img.crop((0,0,sr_img.size[0],sr_img.size[1]))
sr_img=np.array(sr_img)
hr_img=np.array(hr_img)

lpi=calculate_lpips(sr_img,hr_img,border=args.scale)

sr_img_y=rgb2ycbcr(sr_img,only_y=True)
hr_img_y=rgb2ycbcr(hr_img,only_y=True)
#sr_img_y=sr_img
#hr_img_y=hr_img
psnr=calculate_psnr(sr_img_y,hr_img_y,border=args.scale)
ssim=calculate_ssim(sr_img_y,hr_img_y,border=args.scale)
...

####evaluateonbm1684x
scale=(234)
formodelin{EDSR,MDSR};do
foriin"${!scale[@]}";do
echo-------------scale=${scale[$i]}-----------------
cmd="pythoneval.py--hr_path../../benchmark/Set14/HR--sr_pathresults/${model}_Set14_x${scale[$i]}_int8--scale${scale[$i]}"
echo">>>Running:${cmd}"
$cmd
done
done

  • 评价结果保存在results/*/result.log里
  1. 若是想测试自己的图片,请将图片放入image目录下然后运行以下命令,结果保存在results/image里。更改bmodel模型来更换模型与超分倍率

pythonrun_opencv_crop.py--input../image\
--outputresults/image\
--bmodel../models/BM1684X/EDSR_x2_1684x_int8_sym.bmodel

评价代码如下

pythoneval.py--sr_pathresults/image--hr_path../image--scale{sacle}

评估结果

精度测试方法

测试数据集采用Set14数据集,指标采用与原论文一致的PSNR+SSIM指标来衡量图像质量。因为我们在模型固定输入大小的情况下,对原图进行裁切,超分,拼合的形式达到动态输入的效果,所以有的精度指标在测试中不仅不会降低反而会升高。同时又由于不同放大倍数的模型输入大小和模型参数不一样,推理时间的比例也会发生变化。

fp32结果

d0695d4e-980a-11ee-9788-92fbcf53809c.png

fp32

fp16结果

d078ecaa-980a-11ee-9788-92fbcf53809c.png

fp16

int8结果

d0894df2-980a-11ee-9788-92fbcf53809c.png

int8

精度对比

d097f10e-980a-11ee-9788-92fbcf53809c.png

precise

性能对比

d0a822b8-980a-11ee-9788-92fbcf53809c.png

precise

结论

本次转换了EDSR和MDSR超分辨率模型,分别实现了fp32, fp16, int8多种精度模型转换, TPU-MLIR对这两个模型支持较好,转换过程中比较顺利。从最终评估结果上看,这两个超分模型对推理的数值精度不敏感,经过量化后,相关指标损失较少,甚至有些指标还会提升。另外,在BM1684X的平台上,INT8推理时间最短,故在部署时,推荐使用量化后的INT8模型部署。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模型
    +关注

    关注

    1

    文章

    3372

    浏览量

    49316
  • TPU
    TPU
    +关注

    关注

    0

    文章

    145

    浏览量

    20796
  • 深度学习
    +关注

    关注

    73

    文章

    5521

    浏览量

    121663
收藏 人收藏

    评论

    相关推荐

    调试THS8200时图像能正常输出,但是图像模糊不清怎么样解决?

    我们在调试THS8200时图像能正常输出,但是图像模糊不清,跟原来图像相比差太远了,您们能提供一些调试参数给我们吗?或者怎么样解决?图像
    发表于 01-17 07:18

    【「大模型启示录」阅读体验】+开启智能时代的新钥匙

    阅读之旅。在翻开这本书之前,我对大模型的认知仅仅停留在它是一种强大的人工智能技术,可以进行自然语言处理、图像识别等任务。我知道像 ChatGPT 这样的应用是基于大模型开发的,能够与人类进行较为流畅
    发表于 12-24 13:10

    电压无忧:380V 480V 变压器引领高效电能变换

    智能掌控,电压无忧:380V 480V 变压器引领高效电能变换 在当今复杂多变的工业用电环境中,稳定且精准的电压供应对于设备的正常运转和性能发挥起着决定性作用。380V 480
    的头像 发表于 12-03 16:53 203次阅读
    电压无忧:380V <b class='flag-5'>变</b> 480V 变压器<b class='flag-5'>引领</b>高效电能变换

    线路在线监测装置智能图像机的核心优势是什么?

    答:大家好,今天特地来和大家分享一款电网监控领域的神器——线路在线监测装置智能图像机TLKS-PMG-PV500!这款装置凭借其独特的设计与先进的技术,正引领着电网监控的新潮流。不得不提的是,该装
    发表于 09-25 15:44

    TPU v1到Trillium TPU,苹果等科技公司使用谷歌TPU进行AI计算

    ,在训练尖端人工智能方面,大型科技公司正在寻找英伟达以外的替代品。   不断迭代的谷歌TPU 芯片   随着机器学习算法,特别是深度学习算法在各个领域的广泛应用,对于高效、低功耗的AI计算硬件需求日益增长。传统的CPU和GPU在处理这些算法时存在效率较低的问
    的头像 发表于 07-31 01:08 3464次阅读

    基于RK3588的8K视频解码显示案例分享!引领高清工业视频时代

    。这是目前大多数消费者电视和电脑显示器的标准分辨率,可以提供良好的图像质量。4K分辨率:也称为4K超高清(4K ULTRA HD),它具有3840 x 2160像素的分辨率。4K显示屏相对于传统的全高清
    发表于 07-17 11:15

    【算能RADXA微服务器试用体验】+ GPT语音与视觉交互:2,图像识别

    /download.sh 下载完成后,应该可以看到文件夹中出现以下模型: ./models ├── BM1684 │├── yolov8s_fp32_1b.bmodel# 使用TPU-MLIR编译,用于
    发表于 07-14 23:36

    全志T527芯片详解【二】:高清图像编解码

    硬件模块加持 T527集成了多个图形显示和编解码相关的硬件模块,为高清图像显示、高清视频播放和多路高清摄像头输入提供了强大的硬件基础: ARM Mail-G57 GPU 自研显示引擎(
    发表于 05-24 14:14

    全志T527芯片详解:计算性能与高清图像编解码

    全志T527芯片详解:计算性能与高清图像编解码
    的头像 发表于 05-21 14:37 3124次阅读
    全志T527芯片详解:计算性能与<b class='flag-5'>高清</b><b class='flag-5'>图像</b>编解码

    maixcam部署yolov5s 自定义模型

    ://github.com/sophgo/tpu-mlir/releases/tag/v1.7 上面网址下载 tpu-mlir-resource.tar 和 tpu_mlir
    发表于 04-23 15:43

    GPU如何引领安防行业智能化转型?

    历着前所未有的变革。智能化不再只是一个概念,而是成为了行业发展的必然趋势。GPU作为这场革命的重要推手,正在引领安防行业从传统的被动监控智能化主动预防的新时代迈进
    的头像 发表于 03-29 08:26 646次阅读
    GPU如何<b class='flag-5'>引领</b>安防行业<b class='flag-5'>智能</b>化转型?

    超越4K的超高清体验:大屏拼接器引领视觉革命

    随着科技的不断进步,人们对于视觉体验的追求也在不断升级。在显示技术领域,4K超高清已经成为了一种标配,但大屏拼接器却正在引领一场超越4K的超高清视觉革命,为用户带来前所未有的震撼体验。 一、超越4K
    的头像 发表于 02-26 14:48 471次阅读

    SDI转AV转换器:实现高清与标清的无缝对接

    随着视频技术的不断发展,高清视频逐渐成为了主流,但在实际应用中,我们仍然需要处理大量的标清视频。如何实现高清与标清视频之间的无缝对接,成为了视频处理领域的一个重要问题。SDI转AV转换器作为一种重要
    的头像 发表于 02-22 14:40 609次阅读

    超越4K!高清视频编码器引领的下一代视频革命

    随着科技的飞速发展,4K视频已经逐渐融入我们的日常生活,成为了许多家庭、企业和内容创作者的首选。然而,当我们还在沉浸于4K带来的视觉盛宴时,高清视频编码器已经悄然引领着下一代视频革命,更高的分辨率
    的头像 发表于 02-20 15:20 476次阅读

    基于TPU-MLIR:详解EinSum的完整处理过程!

    EinSum介绍EinSum(爱因斯坦求和)是一个功能强大的算子,能够简洁高效地表示出多维算子的乘累加过程,对使用者非常友好。本质上,EinSum是一个算子族,可以表示多种基础操作,如矩阵乘法、Reduce。EinSum支持任意多的输入,只要计算中只包含点乘(element-wise)、广播(broadcast)、归约求和(reductionsum)都可以使
    的头像 发表于 02-19 13:08 810次阅读
    基于<b class='flag-5'>TPU-MLIR</b>:详解EinSum的完整处理过程!