当前位置:首页 > 天道酬勤 > 正文内容

路人照是什么意思(青岛旅游攻略)

张世龙2021年12月20日 03:36天道酬勤570

基于利特尔腾异构并行计算架构CANN软件堆栈构建的AI图像修复APP不仅可以快速清除照片中的行人,还可以快速修复丢失的图像,从而简化拍照

作者:升腾

(正文字数: 3857,阅读时间约: 6分钟) )。

引言

在漫长的人生中,总是有很多难忘的瞬间

久旱逢甘雨,在他乡邂逅故知,洞窟烛光之夜,金榜题名之时

现代生活,人生所有的喜悦都凝聚在照片里,沉淀在回忆里

照片中充满了喧闹的行人,会给我们的回忆造成一点伤害

人工智能决不会让你失望

基于利特尔腾异构并行计算架构CANN软件堆栈构建的AI图像修复APP不仅可以快速清除照片中的行人,还可以快速修复丢失的图像,从而简化拍照

正在加载视频.

简介

由于内存的限制,数据驱动的图像修复方法通常只能处理小于1k(1920x1080 )的低分辨率输入,但目前主流相机的照片拍摄几乎都超过4K,如果单纯对低分辨率修复后的结果进行上采样,即使很大,也会产生模糊

Qiang Tang等人提出的算法“contextual residual aggregation forult rahigh-resolution imagein painting”开辟了另一条道路,通过生成器获得了低分辨率的修复图像。

本应用通过基于公升的硬件基于CANN AscendCL实现,通过指定修复区域,可以修复超高像素图像。 特别是在将残差聚合模块转换为大矩阵乘法后,通过充分利用基于公升的硬件的计算力的优势,对于4K图像也能够进行秒级的修复。 可以在线体验。

理解模型

下图是高清图像修复方法的整体框架。 其中,上图为CRA机制流程,下图为生成器结构。

生成器结构

生成器有两种自编码网络架构,从粗略到精细。

一阶自编码器是一种粗略的自编码器,用于产生要被修复的部分的图像的粗略轮廓。 自编码器在训练时记录了大量的图像信息,具有即使缺少图像部分也能重构图像的能力。 但是,自编码器生成的图像会变得模糊。 这是自编码器固有的缺陷。 如果假设擦除区域的图像是Mask内的图像,则此时从编码器修复的Mask内的图像非常模糊,因此将该图像发送到二维编码器。

二次自编码器是一种精细的自编码器,可以对父级生成的已修复掩码中的图像进行精细加工,以使该区域的图像清晰。 该步进自编码器的原理是将图像切割为指定数量的面片。 例如,如果将大小为512*512的原始图像剪切为32*32个相同大小的面片,则每个面片的大小为16*16。 即使在该次数的编码器上层,也将特征图切割为32*32个Patch,例如上层的特征图大小为96*96,信道数为256,此时,如果在上层通过3*3的卷积比对在各Patch内进行特征提取,则各Patch 如果两个Patch的特征相似,对应于它们的256维向量的余弦相似度就会变大,利用这个原理可以生成Patch之间的相关,这两者之间的相关用注意矩阵表示,并在图像内发生反应。

所有 Patch 之间的相似程度,相似度越大注意力分数越高。

修复 Mask 内的图像就是要利用相似度从 Mask 外找到与 Mask 内待修复 Patch 相似性高的 Patch,在编码器的低层将 Mask 外的 Patch 与以对应的注意力分数作为权值相乘后再相加得到待修补 Patch 内的特征值。

对于生成器,希望它尽可能生成真实清晰的图像,而判别器则希望尽可能的区分真实样本与生成样本,以促使生成器尽可能生成更真实清晰的图像。

注意,生成器除了生成了一张 512x512 的修复后的图像,还输出了一个注意力矩阵(1024 x 1024),CRA 矩阵就是利用该注意力矩阵实现了进一步的精修。

接下来看 CRA 如何利用注意力矩阵进一步精修图像。

CRA 机制精修图像

1、锐化处理需要获取图片的细节,由原图和修复后的图片缩放到同样大小后相减得到细节图片;

2、得到细节图后需要利用 Mask 区域外的上下文信息再进一步生成细节图片的 Mask 内区域图片,具体为:把细节图片分成 32*32 个 Patch,再利用上面得到的注意力矩阵,加权求和 Mask 外的细节特征得到 Mask 内的细节,修复后的 Mask 内细节区域的图片再加到修复后图像对应的 Mask 内的区域,得到清晰的修复区域的图片,最后再将经过以上处理修复后的图片的 Mask 内区域与原图 Mask 外的区域合并组成一张完整的清晰自然的图像。

关联矩阵生成高清细节图具体实现方法

针对每个需要修复的像素,都要取 1024 个 Patch 中的对应像素值与 1024 个概率值乘加得到,计算量是非常大的。我们可以估算一下,如果是图像尺寸是(3072, 3072, 3),那么计算量:1024*3072*3072*3 = 28991029248 = 0.28T 。

就算是只计算 Mask 内的必要元素,但却需要多次判断该像素是否在 Mask 内;所以在 CPU 上计算将非常慢;大家可以试一下。

这里我们却可以将这个计算转换为矩阵乘,针对每一个像素都去计算,不用去考虑是否在 Mask 内,利用昇腾基础硬件的强大的矩阵乘能力去计算。

将关联矩阵作为左矩阵(1024x1024),将 32*32 个 Patch 中的第一个像素取出来作为一列,因为每个 Patch 是 96 行 96 列(3072/32=96)3 通道,所以总共是 96*96*3=27648 列,所以最终是 27648 列的一个矩阵作为右矩阵(1024x27648)。

右矩阵如何从 3072x3072x3 的矩阵变换成 1024 x 27648 的过程,可以用 reshape+transpose 就可以了。

应用开发

本应用采用了下图所示的模块化设计,通过各模块之间的协调配合完成一张图片的推理输出。

其中各个模块的主要功能点如下所示:

运行管理资源申请;加载模型文件,构建模型输出内存;数据获取,获取要进行推理的原始图像和 Mask 图像;数据预处理,模型的输入图像进行预处理;模型推理,将数据输入到模型进行推理;解析模型推理结果,得到修复后的图像和注意力矩阵进行后处理,利用注意力矩阵对图像的细节的 Mask 内区域进行增强,将增强的细节叠加到修复的图像的 Mask 内区域即对修复的区域进行锐化,再把锐化 Mask 内区域的图像与原图 Mask 外区域合并得到修复后的高清图像。

其中较为复杂和关键的便是预处理和后处理阶段。

AI 图像修复预处理部分首先使用 OpenCV 读取原图和 Mask 图,将原图和 Mask 图进行大小缩放,缩放至 3072*3072 大小,之后再将原图像和 Mask 图像缩小到 512*512 用于送入模型进行推理,之所以将图片缩小后送入模型推理是为了节省算力和内存空间,加速推理时间;将读取到的图像数据拷贝至设备侧申请的内存空间中,为接下来构建模型输入数据做好准备。最后分别得到 3072*3072 和 512*512 的原图和 Mask 图。

而后处理是整个应用中最复杂的部分,主要是对模型生成器修复的图像对修复区域进行增强,增强方式是采用了图像锐化的原理,将修复图像的修复区域与原图细节抽取的图片对应的区域相加,另外本应用中利用注意力矩阵对原图细节图片也做了进一步加工,使得细节图片包含更丰富的信息,以此得到锐化后的修复区域图像更清晰。

优点

AI 图像修复存在很多优点,以下简单介绍

图片处理速度快:基于昇腾专门针对 AI 的 NPU 进行推理,图像的修复速度可以达到毫秒级。快速修复,无需等待。缩减工作量:而对于动辄几千帧图像的视频,如果单纯使用人工修补,耗费的人力是不可想象的,而 AI 图像修复可以大大缩减工作量,让大量的修复工作变得简单。可不断优化,质量高:AI 图像修复是基于 GAN 网络训练的模型,针对于不同场景,可以采集不同的数据集,进行加强训练。在数据集的扩充下,模型的精准度及处理效果越来越强,甚至可以超出人工修补的质量。

效果展示

相关链接

模型论文参考链接如下: Contextual Residual Aggregation for Ultra High-Resolution Image Inpainting原始模型部署链接如下: Image Inpainting Project based on CVPR 2020 Oral Paper on HiFill相关源码可以在昇腾开源仓库中获取: https://gitee.com/ascend/samples/tree/master/python/level2_simple_inference/6_other/imageinpainting_hifill在线体验: https://ascend.huawei.com/zh/#/developer/mindx-sdk/imageInpainting?fromPage=1

点击“了解更多”可访问文内链接

扫描二维码推送至手机访问。

版权声明:本文由花开半夏のブログ发布,如需转载请注明出处。

本文链接:https://www.zhangshilong.cn/work/25356.html

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。