前言
技术提要
ESRGAN全称为Enhanced Super-Resolution Generative Adversarial Networks
该技术相关论文:https://arxiv.org/pdf/1809.00219.pdf
太过复杂的技术原理不做赘述。
通过输入图像输入,邻近插值后寻找马赛克位置插值,同时对二次插值后的位置使用AI的模型进行消除噪声,消除伪影
开山之作为SRCNN
ESRGAN则是在以上所有技术上再先进一步,改进了质量
作者地址:github.com
运行环境需求
硬件
由于需要调用AI核心,而且针对的是图形处理,所以需要用到具有图形功能的设备
可以选购腾讯云的GPU服务器,推荐使用GT4或GN7机型,并安装好GRID驱动
驱动安装:GPU 云服务器 安装 NVIDIA GRID 驱动-操作指南-文档中心-腾讯云-腾讯云 (tencent.com)
测试图片:
原图 1340*1748
以下是测试内容及预期结果
其中,主观质量为放大线条连续度,越高越好
内容*放大倍数 | 显卡型号(显卡 | 显存) | 主观质量 | 处理耗时/s |
---|---|---|---|
动画图片*4 | NVIDIA Tesla T4 16G | 9 | 19 |
动画图片*4 | NVIDIA Tesla T4 GRID1/2 8G | 9 | 35 |
动画图片*16(*4*4) | NVIDIA Tesla T4 16G | 10 | 300 |
动画图片*16(*4*4) | NVIDIA Tesla T4 GRID1/2 8G | 10 | 150 |
这里推荐腾讯云的GN7机型,提供Tesla T4显卡,并预制好GPU GRID图形驱动
软件
需要用到图片训练模型(ESRGAN自带),训练的图片
模型下载:Tags · xinntao/ESRGAN · GitHub
使用方法教程
命令行调用
打开命令行,cd到realesrgan的目录
在这里,输入图片在 同目录下,为 input.jpg
.realesrgan-ncnn-vulkan.exe -i input.jpg -o output.jpg -n realesrgan-x4plus-anime
参数 | 内容 |
---|---|
-i | 设置输入图片路径 |
-o | 设置图片输出路径 |
-n | 设置模型 |
如果不在同目录的,要用绝对路径,例如
F:realsganinput.png
带有空格的目录名,要用引号包括起来,例如
"F:Develop filerealsganinput test.png"
回车之后就可以进行处理了
执行到100%的时候就会在设置输出目录下输出 output.jpg
分辨率对比
正好放大了4倍
同时对比一下图片差异(左边原图,右边放大4倍)
腾讯云自动助手调用
确认服务器已经安装 TATSVC
安装自动化助手
如果没有安装,请登录服务器,右键开始菜单,Powershell管理员打开
键入如下命令
代码语言:shell复制wget https://tat-gz-1258344699.cos.ap-guangzhou.myzijiebao.com/tat_agent_windows_i686.zip -OutFile .tat_agent_windows_i686.zip;Expand-Archive -Path .tat_agent_windows_i686.zip -DestinationPath .tat_agent_windows_i686;.tat_agent_windows_i686install.bat;Remove-Item -Recurse -Force .tat_agent_windows_i686, .tat_agent_windows_i686.zip
回车
控制台新建命令
在云服务器控制台-自动化助手-我的命令(https://console.cloud.tencent.com/cvm/command)
处新建一个命令
按图示完成配置
在命令内容里键入
代码语言:shell复制.realesrgan-ncnn-vulkan.exe -i {{input}} -o {{output}} -n realesrgan-x4plus-anime
其中,{{input}}
与{{output}}
都是命令参数,方便执行的时候更改不同文件
这里展示下我的配置,推荐使用这串命令,这样每次就不用设置输出路径和名称了:
代码语言:javascript复制.realesrgan-ncnn-vulkan.exe -i {{inputPath}}.{{ext}} -o {{inputPath}}_4x.{{ext}} -n realesrgan-x4plus-anime
其中,{{inputPath}}
是输入路径,{{ext}}
是后缀名
例如G:OneDrive - ArSrNa CCWallpaper22-16061GFT0400.jpg
转化过去就是
$inputPath="G:OneDrive - ArSrNa CCWallpaper22-16061GFT0400"
$ext="jpg"
执行的时候只需要这么填写参数
参数 | 内容 | 说明 |
---|---|---|
inputPath | "G:OneDrive - ArSrNa CCWallpaper22-16061GFT0400" | 输入的路径(包含到文件) |
ext | "jpg" | 后缀名 |
执行命令
对命令单击执行
调整好参数,选中主机
最后点击执行命令就可以跟踪命令运行的状态了
完成之后会有提示
回到服务器,找到 input_out.jpg ,就是输出的结果
API调用
操作
通过API操作自动化助手,对服务器进行处理,这种方法适用于Web,app等在线处理平台
首先在API Explorer里找到TAT产品触发命令(在这里)
根据参数填写
参数名 | 参数 | 说明 |
---|---|---|
Region | 地域 | 要与命令,CVM所在地域一致 |
CommandId | 命令ID | 可在自动化助手里面找到ID |
InstanceIds.N | 实例ID | 可在CVM控制台获取 |
Parameters | 参数 | Command 的自定义参数。字段类型为json encoded string。如:{"varA": "222"}。 key为自定义参数名称,value为该参数的默认取值。kv均为字符串型。 如果未提供该参数取值,将使用 Command 的 DefaultParameters 进行替换。 自定义参数最多20个。 自定义参数名称需符合以下规范:字符数目上限64,可选范围【a-zA-Z0-9-_】。 |
如上所示,之前的示例对应的参数表如下表
参数名 | 参数 |
---|---|
Region | ap-chengdu |
CommandId | cmd-mg...sq |
InstanceIds.N | array("ins-0b...oy7") |
Parameters | {"inputPath":"input","ext":"jpg"} |
切换到代码生成处,选择业务对应代码进行代码改编即可,将("SecretId", "SecretKey")改为自己的秘钥,可在访问管理获得
例如我的Nodejs,将函数封包后如下:
代码语言:javascript复制// Depends on tencentcloud-sdk-nodejs version 4.0.3 or higher
const tencentcloud = require("tencentcloud-sdk-nodejs");
const TatClient = tencentcloud.tat.v20201028.Client;
const clientConfig = {
credential: {
secretId: "SecretId",
secretKey: "SecretKey",
},
region: "ap-chengdu",
profile: {
httpProfile: {
endpoint: "tat.tencentcloudapi.com",
},
},
};
function esrgan(inputPath,ext){
const client = new TatClient(clientConfig);
const params = {
"CommandId": "cmd-mg...esq",
"InstanceIds": [
"ins-0b...oy7"
],
"Parameters": JSON.stringfy({
inputPath : inputPath,
ext : ext
})
};
client.InvokeCommand(params).then(
(data) => {
return(data);
},
(err) => {
return("error", err);
}
);
}
调用的时候只用 esrgan('文件','后缀')
即可
查询执行过程与结果
使用 查询执行任务 (TAT) 这个API即可获得执行信息
(API Explorer)
在这里,参数需要过滤
先查询账号下所有执行的任务,然后过滤最新的任务,把隐藏输出改为False
参数 | 设置 | 说明 |
---|---|---|
Region | 地域 | 与命令地域相同 |
Filters.N | 过滤条件 | invocation-id - String - 是否必填:否 -(过滤条件)按照执行活动ID过滤。invocation-task-id - String - 是否必填:否 -(过滤条件)按照执行任务ID过滤。 instance-id - String - 是否必填:否 -(过滤条件)按照实例ID过滤。 command-id - String - 是否必填:否 -(过滤条件)按照命令ID过滤。 每次请求的 Filters 的上限为10, Filter.Values 的上限为5。参数不支持同时指定 InvocationTaskIds 和 Filters |
HideOutput | 是否隐藏执行内容 | 这里为了查询,设置为False |
Filters.N如此设置
调用结果
点击在线调用
确认正常后生成代码,最后嵌入业务即可
软件直接执行(推荐)
我自己开发了一个软件,并且已开源,可以直接用图形界面进行操作,简洁方便
https://arsrna.coding.net/public/aresrgan/apps/git/files
下载地址:https://arsrna.coding.net/s/025a61cd-dd39-4503-a3c1-16a69a9290eb,查看密码:w6ho
同时也推荐一些较好的软件:
- Waifu2x-Extension-GUI by AaronFeng753
- Squirrel-RIFE by Justin62628
- Real-GUI by scifx
- Real-ESRGAN_GUI by net2cn
- Real-ESRGAN-EGUI by WGzeyu
- anime_upscaler by shangar21
- RealESRGAN-GUI by Baiyuetribe
总结
老图片,旧照片,经过压缩的图片,如果你想用来做壁纸,用来做背景,画质会惨不忍睹,又或者联系不上作者拿到原图,不方便拿到的原图,通过这个技术修复老照片,将会是一个取中的方式。
但是因为处理照片需要极大的算力,老电脑可能无法快速完成,借助腾讯云GPU服务器,依据分布式的优点和云端的稳定性,我们能够快速且方便的对图片进行处理,同时还保证了服务的稳定运行,不干扰本地的工作,一切都在云端
Powered by Ar-Sr-Na 更多可能,需要我们共同探索