码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Inpaint Anything:一键进行多种图像修补


    合集 - AI(26)
    1.CutMix&Mixup详解与代码实战04-272.绘画手残党的福音:涂鸦线稿秒变绝美图像05-053.探讨AIGC的崛起历程,浅析其背后技术发展05-104.创新 = 颠覆?AI创新如何做大蛋糕07-195.实践分析丨AscendCL应用编译&运行案例07-26
    6.Inpaint Anything:一键进行多种图像修补07-27
    7.RT-DETR:可以满足实时性要求的DETR模型07-318.华为云盘古大模型辅助药物设计,西交大的新型抗生素研发之路08-019.解决大模型“开发难”,昇思MindSpore自动并行技术应用实践08-0310.一文详解TextBrewer08-0811.基于Pair-wise和CrossEncoder训练单塔模型08-0912.基于卷积神经网络的MAE自监督方法08-1113.晋级名单公布!“域见杯”复赛今日火热开启08-1614.CutLER:一种用于无监督目标检测和实例分割的方法08-1715.带你读论文丨S&P21 Survivalism: Living-Off-The-Land 经典离地攻击08-1816.使用 UCS(On-Premises) 管理您的GPU资源池,释放AI大模型算力潜能08-2117.带你读论文丨Fuzzing漏洞挖掘详细总结 GreyOne08-2218.用案例带你认识决策树,解锁洞察力08-2219.带你读论文丨S&P2019 HOLMES Real-time APT Detection08-2320.中国图数据库,领导者!08-2421. 【干货】华为云图数据库GES技术演进08-2422.带你上手基于Pytorch和Transformers的中文NLP训练框架08-2823.开放同飞,华为云发布盘古大模型全域协同生态08-3124.Ascend C保姆级教程:我的第一份Ascend C代码08-3125.纯干货!一文get昇腾Ascend C编程入门全部知识点09-0126.3天上手Ascend C编程丨带你认识Ascend C基本概念及常用接口09-05
    收起

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

    绘制一切-Inpaint Anything

    相关链接:

    Notebook案例地址:绘制一切

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

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

    Inpaint Anything

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

    它的整体框架如图所示:

    image.png

    Inpaint Anything工作原理

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

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

    image.png

    • AIGC模型Stable Diffusion,则只要简单的输入一段文本,Stable Diffusion 就可以迅速将其转换为图像。更多相关的介绍可以参考AI作画。

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

    cke_1578.png

    以下为具体通过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
    复制代码

     

    复制代码
    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)

    image.png

    image.png

    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)

    image.png

    image.png

    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)

    image.png

    image.png

    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可视化部署案例演示。

    示例效果如下:

    图片去除

    image.png

    图片填充

    image.png

    背景替换

    image.png

    视频去除

    image.png

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

     

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

     

  • 相关阅读:
    Azkaban安装-3.72.0
    危险,请马上替换代码中的BeanUtils
    表格文字识别黑科技,神器软件让您轻松掌控
    webpack优化篇(四十三):多进程/多实例构建:资源并行解析可选方案
    【jQuery】jQuery中如何发送ajax请求以及解决跨域问题_10
    [React] Zustand状态管理库
    堆栈的定义和区别
    nginx 配置 proxy_next_upstream 会出现未预期 502 错误问题排查
    【MySQL 系列】在 CentOS 上安装 MySQL
    rpy2: Unable to determine R library path:
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/17584768.html
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号