【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

如何使用大蒙版修复 LaMa 隐藏图像中的对象?

  • 2022-03-03
  • 本文字数:2746 字

    阅读完需:约 9 分钟

如何使用大蒙版修复 LaMa 隐藏图像中的对象?

当前的图像修复系统往往需要处理大量缺失的部分,近来,Roman Suvorov 等人提出了一种叫做 LaMa 的 SOTA 技术,能够在给定的图像中屏蔽任意尺度的对象,并返回一个不包括我们所屏蔽物体的修复图像。在本文中,我们将从理论上探讨这种方法,并了解其具体工作原理。

关于图像修复


重建图像中缺失的区域,使得观众不能辨别出哪些区域是否被修复,称为图像修复。这种方法通常用于删除图片中不需要的内容,或者还原老照片的受损部分。

 

图像修复是一种有数百年历史的技术,是由人类艺术家手工完成的。它涉及填补艺术品的受损、变质或缺失区域,从而创造一幅完整的图像。油画或丙烯酸颜料、化学照片版画、雕塑、数字照片和视频都是可以用于这种方法的物理和数字艺术载体的例子。要解决图像修复问题,逼真地填补缺失的部分,就需要“理解”自然图像的大尺度结构,并对其进行图像合成。


近年来,学者们提出了各种自动化的修复方法。除了图像之外,这些算法中大多数都需要一个蒙版来显示修复区域作为输入。这个主题在深度学习出现之前就已经被研究过,近年来由于深入的、广泛的神经网络以及对抗学习的应用,发展加快了。

 

修复系统通常在一个庞大的自动生成的数据集上进行训练,该数据集通过随机掩蔽真实图像建立。复杂的两阶段模型结合中间预测,如经常被使用的平滑图像、边缘和图像分割。

LaMa 是如何解决这个问题的?

 

这种修复网络是基于最近发展起来的快速傅立叶卷积(Fast Fourier Convolutions,FFC)。即使在网络的早期阶段,FFC 也允许一个横跨整个图像的感受野。


研究人员表示,FFC 的这一特性提高了感知质量和网络参数效率。有趣的是,FFC 的归纳偏好使得网络能够得到高分辨率,这在训练期间是不存在的。这一发现具有重要的实际意义,因为它减少了所需的训练数据量和计算量。

 

它还采用了感知损失,这是基于一个具有较大感受野的语义分割网络。这是基于一个发现,一个不足的感受野影响着修复网络和知觉损失。这种损失支持全局结构和形状的一致性。

 

一种积极的训练蒙版生成技术,可以利用前两个组成部分的高感受野的潜力。这种方法生成了大量的、庞大的蒙版,使得网络能够充分利用模型和损失函数的高感受野。

 

所有这些促成了大蒙版修复(LaMa),即一种划时代意义的单阶段图像修复技术。高感受野架构 (i) 具有高感受野损失函数 (ii) 和激进的训练掩模生成算法 LaMa (iii) 的核心组成部分。我们将 LaMa 和目前的基准进行了严格的对比,并且对每一个建议组成部分的效果进行了评估。



大蒙版修复方案如上图所示(LaMa)。可以看出,LaMa 是基于一种前馈 ResNet 类修复网络,该网络采用了以下技术:最近提出的快速傅立叶卷积 (FFC),一个结合了对抗性损失和高感受野感知损失的多分量损失,以及一个训练时间较长的蒙版生成过程。

实施 LaMa

 

在本节中,我们将了解 LaMa 的官方实现,以及它是怎样有效地掩蔽用户标记的对象的。

 

让我们通过安装并导入所有的依赖关系来创建环境。

 

# Cloning the repo!git clone https://github.com/saic-mdal/lama.git # installing the dependencies!pip install -r lama/requirements.txt --quiet!pip install wget --quiet # change the directory% cd /content/lama # Download the model!curl -L $(yadisk-direct https://disk.yandex.ru/d/ouP6l8VJ0HpMZg) -o big-lama.zip!unzip big-lama.zip # Importing dependenciesimport base64, osfrom IPython.display import HTML, Imagefrom google.colab.output import eval_jsfrom base64 import b64decodeimport matplotlib.pyplot as pltimport numpy as npimport wgetfrom shutil import copyfileimport shutil
复制代码

 

为了方便用户在给定的图像中掩蔽所想掩蔽的对象,我们需要编写 HTML 代码。

 


现在,我们将上传我们想要掩盖其中的对象的图片,为其设置为 fname=None,蒙版将掩盖该对象。

 

if fname is None:  from google.colab import files  files = files.upload()  fname = list(files.keys())[0]else:  fname = wget.download(fname) shutil.rmtree('./data_for_prediction', ignore_errors=True)! mkdir data_for_prediction copyfile(fname, f'./data_for_prediction/{fname}')os.remove(fname)fname = f'./data_for_prediction/{fname}' image64 = base64.b64encode(open(fname, 'rb').read())image64 = image64.decode('utf-8') print(f'Will use {fname} for inpainting')img = np.array(plt.imread(f'{fname}')[:,:,:3]) draw(image64, filename=f"./{fname.split('.')[1]}_mask.png", w=img.shape[1], h=img.shape[0], line_width=0.04*img.shape[1])
复制代码

 


现在,我们将掩蔽图像中的鹿,就像我们通常在 Paint 应用程序中做的那样。

 


下面我们可以看到该模型是如何将被掩蔽的图像与原始图像进行卷积。

 


现在我们将进行推理。

 

print('Run inpainting')if '.jpeg' in fname:  !PYTHONPATH=. TORCH_HOME=$(pwd) python3 bin/predict.py model.path=$(pwd)/big-lama indir=$(pwd)/data_for_prediction outdir=/content/output dataset.img_suffix=.jpeg > /dev/nullelif '.jpg' in fname:  !PYTHONPATH=. TORCH_HOME=$(pwd) python3 bin/predict.py model.path=$(pwd)/big-lama indir=$(pwd)/data_for_prediction outdir=/content/output  dataset.img_suffix=.jpg > /dev/nullelif '.png' in fname:  !PYTHONPATH=. TORCH_HOME=$(pwd) python3 bin/predict.py model.path=$(pwd)/big-lama indir=$(pwd)/data_for_prediction outdir=/content/output  dataset.img_suffix=.png > /dev/nullelse:  print(f'Error: unknown suffix .{fname.split(".")[-1]} use [.png, .jpeg, .jpg]') plt.rcParams['figure.dpi'] = 200plt.imshow(plt.imread(f"/content/output/{fname.split('.')[1].split('/')[2]}_mask.png"))_=plt.axis('off')_=plt.title('inpainting result')plt.show()fname = None
复制代码

 

下面是修复后的图像:

 


真是令人振奋的结果。

结语

 

我们在本文中讨论了一个基本的、单阶段的解决方案的用法,用于大部分掩蔽部分的修复。我们认为,只要有合适的架构、损失函数和蒙版生成方法,这样的方法将会极具竞争力,从而促进图像修复技术的发展。特别是当涉及重复性像素时,这种方法能取得很好的效果。我建议大家用自己的照片多做实验,或者也可以在论文中找到更多的信息。

参考文献

 

 

作者介绍:

 

Vijaysinh Lendave,机器学习和深度学习的爱好者。熟练掌握机器学习算法,数据操作,处理和可视化,模型构建。

 

原文链接:

 

https://analyticsindiamag.com/how-to-hide-objects-in-images-using-large-mask-inpainting-lama/

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2022-03-03 15:242170

评论

发布
暂无评论
发现更多内容

云原生体系下 Serverless 弹性探索与实践

Serverless Devs

云原生 无服务器 弹性计算

PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力

Serverless Devs

直面Z级计算挑战,英特尔携手生态合作伙伴加速开发者工具和软件部署

科技新消息

瑜伽CRM系统使老师再也不用教学分心

低代码小观

CRM 管理工具 CRM系统 瑜伽 瑜伽馆管理

Serverless 工程实践 | 零基础上手 Knative 应用

Serverless Devs

Python代码阅读(第47篇):从列表右边开始执行给定函数

Felix

Python 编程 Code Programing 阅读代码

英特尔On技术创新峰会公布开发者重点投入计划,全面赋能开发者

科技新消息

第 24 章 -《Linux 一学就会》- shell中色彩处理和awk使用技巧

学神来啦

Linux linux运维 linux云计算 linux一学就会

用建造者模式实现一个防SQL注入的ORM框架

Tom弹架构

架构实战营毕业总结

maybe

如何赋能APaaS平台应用管理员

明道云

堪称神级的Spring Boot手册,从基础入门到实战进阶

Java 程序员 Spring Boot

三轮融资笔笔过亿,来画如何实现弯道超车?

ToB行业头条

阿里最新春招面经,腾讯/美团/字节1万道Java中高级面试题

收到请回复

Java 程序员 面试 职场 后端

一文详解从云计算到 Serverless

Serverless Devs

云计算 Serverless

万圣节也是节,准备好Trick or Treat了么?

气气

话题讨论

WorkPlus数字化办公解决方案,打造企业高效协同生态!

WorkPlus

iOS 崩溃日志在线符号化实践

百度Geek说

官方线索 | 阿里云1024程序员创造营

穿过生命散发芬芳

1024我在现场

英特尔全面升级开发者专区(Developer Zone),携手开发者共塑科技未来

科技新消息

先行一步,7 大技术创新和突破,阿里云把 Serverless 领域的这些难题都给解了

Serverless Devs

阿里云 gpu VPC 函数计算

企业级开发工具,J2PaaS低代码平台核心能力解析!

J2PaaS低代码平台

软件开发 低代码 低代码开发 低代码平台

安全漏洞的复现与总结

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

打破 Serverless 落地边界,阿里云 SAE 发布 5 大新特性

Serverless Devs

阿里云 Serverless 函数计算

网易云音乐音视频算法的 Serverless 探索之路

阿里巴巴中间件

云计算 阿里云 Serverless 云原生 中间件

给JSONObject添加自定义遍历方法

FunTester

单元测试 Fastjson JSON库 spock FunTester

Serverless 工程实践 | 自建 Apache OpenWhisk 平台

Serverless Devs

Android平台如何使用RSA算法进行加解密?

Changing Lin

10月月更

[2021年新鲜出炉]K8s工程师资料合辑,书籍推荐,面试题,精选文章,开源项目,PPT,视频,大厂资料

奔着腾讯去

golang Docker Kubernetes 容器 云原生

网易云音乐音视频算法的 Serverless 探索之路

Serverless Devs

阿里云 Serverless 算法 音视频

递推算法与递推套路(手撕算法篇)

有道技术团队

学习 编程 算法

如何使用大蒙版修复 LaMa 隐藏图像中的对象?_文化 & 方法_Vijaysinh Lendave_InfoQ精选文章