在OpenCV基于深度学习的超分辨率模型实践

1. 引言

OpenCV是一个开源的计算机视觉库,拥有大量优秀的算法。基于最新的合并,OpenCV包含一个易于使用的接口,主要用于实现基于深度学习方法的超分辨率(SR)。该接口包含预先训练的模型,这些模型可以非常容易和有效地用于推理。在这篇文章中,我将解释它可以做什么,并逐步展示如何使用它。

闲话少说,我们直接开始吧!

2. 版本说明

首先我们的第一步是安装OpenCV库。一些功能都是在逐渐发布,所以需要注意版本:4.2.0用于C++,4.3.0添加Python接口,4.4.0添加GPU推理。大家可以按照OpenCV文档中的说明进行相应的操作。大家注意安装contrib模块,因为这是SR接口代码所在的位置。本文中我们将使用的接口或模块称为dnn_superres(dnn代表深度神经网络;superres代表超分辨率)。

3. 模型下载

接着我们需要单独下载预先训练好的模型,因为OpenCV代码库不包含它们。原因是有些模型相当大。这里有几种模型可供选择,所有这些模型都是流行SR论文中的实现。现在,让我们选择一个小模型,大家可以在这里下载

4. 实践

我们在Python中可以通过以下代码进行相应的实现:

cpp 复制代码
import cv2
from cv2 import dnn_superres

# Create an SR object
sr = dnn_superres.DnnSuperResImpl_create()

# Read image
image = cv2.imread('./input.png')

# Read the desired model
path = "EDSR_x3.pb"
sr.readModel(path)

# Set the desired model and scale to get correct pre- and post-processing
sr.setModel("edsr", 3)

# Upscale the image
result = sr.upsample(image)

# Save the image
cv2.imwrite("./upscaled.png", result)

代码相对简单,参考相应的注释即可。

5. 推荐模型

目前在OpenCV中主要支持4种不同的SR模型。它们都可以按2、3和4的比例放大图像。LapSRN甚至可以升级8倍。它们在准确性、大小和速度上各不相同。

  • EDSR: 这是目前表现最好的模型。然而,它也是参数量最大的模型,因此具有最大的文件大小和最慢的推理。大家可以在这里下载。

  • ESPCN: 这是一个相对较小的模型,具有快速和良好的推理能力。它可以进行实时视频放大(取决于图像大小)。大家可以在这里下载。

  • FSRCNN: 这也是一个具有快速准确推理的小模型。还可以进行实时视频放大。大家可以在这里下载。

  • LapSRN: 这是一款中等大小的模型,可以提升8倍分辨率。大家可以在这里下载。

有关这些模型的更多信息和实现,请参阅模块的GitHub中的ReadME文件。关于上述模型的基准和比较,请访问此处

6. 具体实例

接着让我们看具体实例如下:(如果在移动设备上查看,建议放大后进行直观的对比)

输入图像如下:

双线性插值放大三倍后的图像如下:

使用模型FSRCNN放大三倍后的效果如下:

使用模型ESDR放大三倍后的效果如下:

正如大家所看到的,这些模型产生了令人非常满意的结果,特别是EDSR给出了惊人的结果,尽管它有点慢(几秒钟的推理时间),但是绝对值得等待。大家可以自己试试!

7. 注意事项

事实上,在上述具体实现中,有以下几点注意事项:

  • 如果在使用.jpg图像时出现错误,请尝试切换到.png格式

  • 确保大家的setModel()中的参数与大家在readModel()中使用的模型匹配。

  • 尝试不同的模型,在速度和性能方面获得不同的结果。

  • 如果大家想使用GPU进行推理(默认是CPU),大家可以在读入模型后将后端设置为CUDA。这是一个新的特性,因此大家需要4.4.0版本。请参阅相关的拉取请求。部门代码参考如下:

cpp 复制代码
path = "EDSR_x3.pb"
sr.readModel(path)

# Set CUDA backend and target to enable GPU inference
sr.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
sr.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)

8. 总结

本文重点介绍了在OpenCV中,利用深度学习的方法来进行超分辨率的实现,被给出了具体的代码实例,和几种常用的模型。

您学废了吗?

相关推荐
一心只读圣贤书3 分钟前
AI 辅助前端 Feature Flag 治理:从灰度开关到实验复盘
前端·人工智能
逸模4 分钟前
从2-3天到30分钟——逸模“秒级升维“如何重构出图效率
大数据·人工智能·工程·公装·连锁店
星辰_mya6 分钟前
从简单罗列工具中看AI趋势
人工智能
李燚8 分钟前
Checkpoint 源码:Agent 执行到一半怎么保存(第80篇-E66)
人工智能·ai·aigc·agent·checkpoint·rag·eino
何时梦醒13 分钟前
🤖 Harness 工程:用 LLM as Judge + Best of N 打造自优化的 AI 代码生成流水线
前端·人工智能
Wang's Blog13 分钟前
AI Agent白手起家58: 项目可观测性——用 LangSmith 实现全链路追踪
数据库·人工智能
小白狮ww17 分钟前
小模型「扛」住自由运镜:InSpatio-World 开源实时 4D 模拟器
人工智能·ai
Alkaid207720 分钟前
【手搓 Agent 第2.1关】搭建 Agent 进阶能力:RAG(上)
人工智能·agent
躺不平的理查德23 分钟前
OpenCV Mat 备忘录
人工智能·opencv·计算机视觉
Days205023 分钟前
剪纸风城市文旅宣传海报提示词分享
人工智能·ai作画·gpt-image