Inpaint Anything:一键进行多种图像修补

这篇具有很好参考价值的文章主要介绍了Inpaint Anything:一键进行多种图像修补。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文分享自华为云社区《绘制一切》,作者: 雨落无痕 。

绘制一切-Inpaint Anything

相关链接:

Notebook案例地址:绘制一切

AI Gallery:https://developer.huaweicloud.com/develop/aigallery/home.html

也可通过AI Gallery,搜索【绘制一切】一键体验!

Inpaint Anything

通过一键点击标记选定对象,即可实现移除指定对象、填补指定对象、替换一切场景,涵盖了包括目标移除、目标填充、背景替换等在内的多种典型图像修补应用场景。

它的整体框架如图所示:

Inpaint Anything工作原理

Inpaint Anything结合了 SAM、图像修补模型(例如 LaMa)和 AIGC 模型(例如 Stable Diffusion)等视觉基础模型。

  • SAM(Segment Anything Model)可以通过点或框等输入提示生成高质量的对象分割区域,实现指定目标的分割。更多相关的介绍可以参考一键分割图像。
  • 图像修补模型LaMa,则能够在高分辨率图像的情况下,随意删除图像中的各种元素。模型的主要架构如下图所示。包含一个mask的黑白图,一张原始图像。将掩码图覆盖图像后输入Inpainting网络中,先是降采样到低分辨率,再经过几个快速傅里叶卷积FFC残差块,最后输出上采样,生成了一张高分辨的修复图像。
  • AIGC模型Stable Diffusion,则只要简单的输入一段文本,Stable Diffusion 就可以迅速将其转换为图像。更多相关的介绍可以参考AI作画。

将三个模型结合到一起,我们可以做出很多的功能。本文就实现了在图片/视频中移除一切物体、在图片中填充一切物体和在图片中替换一切背景这三种功能,其具体实现步骤如下:

以下为具体通过ModelArts实现Inpaint Anything的流程。

Inpaint Anything适配ModelArts

使用方法:

🔹 本案例需使用 Pytorch-1.8 GPU-P100 及以上规格运行

🔹 点击Run in ModelArts,将会进入到ModelArts CodeLab中,这时需要你登录华为云账号,如果没有账号,则需要注册一个,且要进行实名认证,参考《ModelArts准备工作_简易版》 即可完成账号注册和实名认证。 登录之后,等待片刻,即可进入到CodeLab的运行环境

🔹 出现 Out Of Memory ,请检查是否为您的参数配置过高导致,修改参数配置,重启kernel或更换更高规格资源进行规避❗❗❗

下面让我们从零开始,一起来体验Inpaint Anything绘制一切的乐趣吧!

1.环境准备

拷贝代码,并安装依赖库

import os
import torch
import os.path as osp
import moxing as mox
path = osp.join(os.getcwd(),'Inpaint-Anything')
if not os.path.exists(path):
    mox.file.copy_parallel('obs://modelarts-labs-bj4-v2/case_zoo/Inpaint-Anything', path)
    if os.path.exists(path):
        print('Download success')
    else:
        raise Exception('Download Failed')
else:
    print("Model Package already exists!") 

2.在图片中移除指定对象

!python remove_anything.py \
    --input_img ./example/remove-anything/dog.jpg \
    --coords_type key_in \
    --point_coords 200 450 \
    --point_labels 1 \
    --dilate_kernel_size 15 \
    --output_dir ./results \
    --sam_model_type "vit_h" \
    --sam_ckpt ./pretrained_models/sam_vit_h_4b8939.pth \
    --lama_config ./lama/configs/prediction/default.yaml \
    --lama_ckpt ./pretrained_models/big-lama

 文章来源地址https://www.toymoban.com/news/detail-607119.html

import cv2
import matplotlib.pyplot as plt
def show_original_image(image_path, modify_image_path):
    image = cv2.imread(image_path)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    with_point_image = cv2.imread(modify_image_path + 'with_points.png')
    with_point_image = cv2.cvtColor(with_point_image, cv2.COLOR_BGR2RGB)
    fig = plt.figure(figsize=(20, 10))
    ax1 = fig.add_subplot(1, 2, 1)
    plt.title('Original image', fontsize=16)
    ax1.axis('off')
    ax1.imshow(image)
    ax2 = fig.add_subplot(1, 2, 2)
    plt.title('With_Point image', fontsize=16)
    ax2.axis('off')
    ax2.imshow(with_point_image)
    plt.show()
def show_modify_image(modify_image_path, image_class):
    fig = plt.figure(figsize=(20, 15))
    save_path = modify_image_path
    index = 1
    for i in range(0,3):
        for image_item in image_class:
            file_name = image_item + str(i) + '.png'
            file_path = save_path + file_name
            image = cv2.imread(file_path)
            image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)            
            ax = fig.add_subplot(3,3,index)
            ax.xaxis.set_visible(False)
            ax.yaxis.set_visible(False)
            plt.title(image_item + str(i), fontsize=16) 
            ax.imshow(image)
            index = index + 1
    plt.show()

 

image_path = './example/remove-anything/dog.jpg'
modify_image_path = './results/dog/'
image_class = ['with_mask_','mask_','inpainted_with_mask_']
show_original_image(image_path, modify_image_path)
show_modify_image(modify_image_path,image_class)

3.在图片中填充指定对象

!python fill_anything.py \
    --input_img ./example/fill-anything/sample1.png \
    --coords_type key_in \
    --point_coords 750 500 \
    --point_labels 1 \
    --text_prompt "a teddy bear on a bench" \
    --dilate_kernel_size 50 \
    --output_dir ./results \
    --sam_model_type "vit_h" \
    --sam_ckpt ./pretrained_models/sam_vit_h_4b8939.pth \
    --model_path "stable-diffusion-2-inpainting"

 

image_path = './example/fill-anything/sample1.png'
modify_image_path = './results/sample1/'
image_class = ['with_mask_','mask_','filled_with_mask_']
show_original_image(image_path, modify_image_path)
show_modify_image(modify_image_path,image_class)

4.在图片中替换指定对象

!python replace_anything.py \
    --input_img ./example/replace-anything/dog1.png \
    --coords_type key_in \
    --point_coords 750 500 \
    --point_labels 1 \
    --text_prompt "sit on the swing" \
    --output_dir ./results \
    --sam_model_type "vit_h" \
    --sam_ckpt ./pretrained_models/sam_vit_h_4b8939.pth \
    --model_path "stable-diffusion-2-inpainting"

 

image_path = './example/replace-anything/dog1.png'
modify_image_path = './results/dog1/'
image_class = ['with_mask_','mask_','replaced_with_mask_']
show_original_image(image_path, modify_image_path)
show_modify_image(modify_image_path,image_class)

5.在视频中移除指定对象

!python remove_anything_video.py \
    --input_video ./example/video/paragliding/original_video.mp4 \
    --coords_type key_in \
    --point_coords 652 162 \
    --point_labels 1 \
    --dilate_kernel_size 15 \
    --output_dir ./results \
    --sam_model_type "vit_h" \
    --sam_ckpt ./pretrained_models/sam_vit_h_4b8939.pth \
    --lama_config lama/configs/prediction/default.yaml \
    --lama_ckpt ./pretrained_models/big-lama \
    --tracker_ckpt vitb_384_mae_ce_32x4_ep300 \
    --vi_ckpt ./pretrained_models/sttn.pth \
    --mask_idx 2 \
    --fps 25

 

from ipywidgets import Output, GridspecLayout
from IPython import display
filepaths = ["./example/video/paragliding/original_video.mp4","./results/w_mask_15.mp4",
             "./results/removed_w_mask_15.mp4"]
grid = GridspecLayout(1,len(filepaths))
for i, filepath in enumerate(filepaths):
    out = Output()
    with out:
        display.display(display.Video(filepath, embed=True,width=250,height=140))
    grid[0, i] = out
grid

运行完成后,从左到右依次为原始视频,选中(去除)对象的视频,去除后的视频。

6.Gradio展示(当前先展示在图像和视频中删除指定对象)

为了方便大家使用一键分割案例,当前增加了Gradio可视化部署案例演示。

示例效果如下:

图片去除

图片填充

背景替换

视频去除


详细实现代码参见Notebook-绘制一切,欢迎各位查看。

 

点击关注,第一时间了解华为云新鲜技术~

 

到了这里,关于Inpaint Anything:一键进行多种图像修补的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Stable Diffusion进阶篇]Inpaint Anything简单快速实现换装换脸

        Inpaint Anything算法,可以实现移除、填补、替换一切内容,实现单击图像上的任何物体可以一键擦除替换任何内容、更改任意背景,这可以提高遮罩创建过程的效率和准确性,从而在节省时间和精力的同时获得更高质量的修复结果。 🌟安装方法: 1、在扩展面板中安装I

    2024年02月03日
    浏览(44)
  • AI绘画SD神器插件Inpaint Anything---简单快速实现换装换脸

    大家好,我是程序员晓晓 在AI绘画Stable DIffusion中,有一个 Inpaint Anything算法,可以实现移除、填补、替换一切内容,实现单击图像上的任何物体可以一键擦除替换任何内容、更改任意背景,这可以提高遮罩创建过程的效率和准确性,从而在节省时间和精力的同时获得更高质量

    2024年04月14日
    浏览(54)
  • Stable Diffusion WebUI 集成 sd-webui-segment-anything sd-webui-inpaint-anything Ubuntu22.04 rtx2060 6G

    下载分割模型(segmentation models): 显存只有6G,选择l版本 lllyasviel/ControlNet-v1-1 at main 下载14个.pth模型文件,yaml文件已经在models目录下了   今天下载的新鲜文件,放阿里云盘了 ControlNet-v1-1-20230706 https://www.aliyundrive.com/s/LtpNFP8stg5  启动后又开始安装各种Python依赖。网络环境不行气

    2024年02月16日
    浏览(67)
  • Python 使用多种方法对图像进行锐化处理——图像处理

    fun_01() fun_02() fun_03()      

    2024年02月13日
    浏览(78)
  • 基于等照度线和窗口匹配的图像修补算法

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处        图像修补的目的是基于已有的图像信息或数据库内信息,对缺失区域进行合理地修复。在诸多领域如电影、摄像、医疗等行业,有广泛的应用。        传统上,

    2024年02月04日
    浏览(42)
  • 【opencv】示例-inpaint.cpp 图像修复是通过填充损坏图像部分从而修复这些损坏的过程...

    原始图像 这段代码展示了一个使用OpenCV库进行图像修复的例子。它首先包含了处理图像编码、解码、显示、处理和照片处理所必要的OpenCV模块的头文件。然后利用cv和std命名空间下的类和方法。通过定义一个鼠标回调函数onMouse来处理图像上的绘图操作,并通过主函数main处理

    2024年04月25日
    浏览(44)
  • 【深度学习】Inst-Inpaint: Instructing to Remove Objects with Diffusion Models,指令式图像修复

    论文:https://arxiv.org/abs/2304.03246 code:http://instinpaint.abyildirim.com/ 图像修复任务是指从图像中擦除不需要的像素,并以语义一致且逼真的方式填充它们。传统上,希望被擦除的像素由二值化掩码定义。从应用的角度来看,用户需要为他们想要去除的对象生成这些掩码,这可能耗时

    2024年02月14日
    浏览(29)
  • 将 Segment Anything 扩展到医学图像领域

    SAM 是一种在自然图像分割方面取得成功的模型,但在医学图像分割方面表现不佳。MedSAM 首次尝试将 SAM 的成功扩展到医学图像,并成为用于分割各种医学图像的通用工具。为了开发 MedSAM,首先需要一个大型医学图像数据集,其中包括来自 11 种不同模态的超过 20 万个 Mask。该

    2024年02月03日
    浏览(47)
  • 一键混剪软件、根据模板批量剪辑、多种分割、多种合并、多种混剪、文案提取、文字转语音等

    在这个短视频时代,视频剪辑已经成为了一个炙手可热的行业。但是,对于大多数人来说,视频剪辑是一项既复杂又繁琐的工作。不过,现在有了我们的新伙伴——视频闪闪,一键混剪软件,您将迎来全新的视频剪辑体验! www.shipinshanshan.com 视频闪闪是一款全新的视频剪辑软

    2024年02月05日
    浏览(49)
  • 图像分割之SAM(Segment Anything Model)

    论文:Segment Anything Github:https://github.com/facebookresearch/segment-anything 论文从zero-shot主干网络的基础出发,提出了SAM(Segment Anything Model)模型。该模型有别于传统的分割模型。传统分割模型只能输入原图输出固定的分割结果,SAM在设计上可以同时输入原图和特定提示(点、框、

    2024年02月07日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包