使用Dino+SAM+Stable diffusion 自动进行图片的修改

这篇具有很好参考价值的文章主要介绍了使用Dino+SAM+Stable diffusion 自动进行图片的修改。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SAM 是Mata发布的“Segment Anything Model”可以准确识别和提取图像中的对象。 它可以分割任何的图片,但是如果需要分割特定的物体,则需要需要点、框的特定提示才能准确分割图像。 所以本文将介绍一种称为 Grounding Dino 的技术来自动生成 SAM 进行分割所需的框。

使用Dino+SAM+Stable diffusion 自动进行图片的修改

除了分割以外,我们还可以通过将 SAM 与 Grounding Dino 和 Stable Diffusion 相结合,获得高度准确图像分割结果,并且对分割后的图像进行细微的更改。

下面就是我们需要的所有的包:

 `%cd /content
 
 !git clone https://github.com/IDEA-Research/Grounded-Segment-Anything
 
 %cd /content/Grounded-Segment-Anything 
 !pip install -q-r requirements.txt
 %cd /content/Grounded-Segment-Anything/GroundingDINO
 !pip install -q .
 %cd /content/Grounded-Segment-Anything/segment_anything
 !pip install -q .
 %cd /content/Grounded-Segment-Anything

导入必要的包:

 importos, sys
 
 sys.path.append(os.path.join(os.getcwd(), "GroundingDINO"))
 
 importargparse
 importcopy
 
 fromIPython.displayimportdisplay
 fromPILimportImage, ImageDraw, ImageFont
 fromtorchvision.opsimportbox_convert
 
 # Grounding DINO
 importGroundingDINO.groundingdino.datasets.transformsasT
 fromGroundingDINO.groundingdino.modelsimportbuild_model
 fromGroundingDINO.groundingdino.utilimportbox_ops
 fromGroundingDINO.groundingdino.util.slconfigimportSLConfig
 fromGroundingDINO.groundingdino.util.utilsimportclean_state_dict, get_phrases_from_posmap
 fromGroundingDINO.groundingdino.util.inferenceimportannotate, load_image, predict
 
 importsupervisionassv
 
 # segment anything
 fromsegment_anythingimportbuild_sam, SamPredictor
 importcv2
 importnumpyasnp
 importmatplotlib.pyplotasplt
 
 
 # diffusers
 importPIL
 importrequests
 importtorch
 fromioimportBytesIO
 fromdiffusersimportStableDiffusionInpaintPipeline
 
 
 fromhuggingface_hubimporthf_hub_download

然后我们设置处理的设备:

 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

然后我们创建一个 GroundingDino 模型的实例。

 defload_model_hf(repo_id, filename, ckpt_config_filename, device='cpu'):
     cache_config_file=hf_hub_download(repo_id=repo_id, filename=ckpt_config_filename)
 
     args=SLConfig.fromfile(cache_config_file) 
     args.device=device
     model=build_model(args)
     
     cache_file=hf_hub_download(repo_id=repo_id, filename=filename)
     checkpoint=torch.load(cache_file, map_location=device)
     log=model.load_state_dict(clean_state_dict(checkpoint['model']), strict=False)
     print("Model loaded from {} \n => {}".format(cache_file, log))
     _=model.eval()
     returnmodel   
 ckpt_repo_id="ShilongLiu/GroundingDINO"
 ckpt_filenmae="groundingdino_swinb_cogcoor.pth"
 ckpt_config_filename="GroundingDINO_SwinB.cfg.py"
 
 
 groundingdino_model=load_model_hf(ckpt_repo_id, ckpt_filenmae, ckpt_config_filename, device)

下面开始创建SAM 模型,定义模型并创建一个实例。

 ! wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth
 
 sam_checkpoint ='sam_vit_h_4b8939.pth'
 
 sam_predictor = SamPredictor(build_sam(checkpoint=sam_checkpoint).to(device))

这里我们使用与训练的 vit_h 模型,下面就是扩散模型了:

 sd_pipe=StableDiffusionInpaintPipeline.from_pretrained(
     "stabilityai/stable-diffusion-2-inpainting",
     torch_dtype=torch.float16,
 ).to(device)

然后我们开始测试:

 # Load image 
 defdownload_image(url, image_file_path):
     r=requests.get(url, timeout=4.0)
     ifr.status_code!=requests.codes.ok:
         assertFalse, 'Status code error: {}.'.format(r.status_code)
 
     withImage.open(BytesIO(r.content)) asim:
         im.save(image_file_path)
     print('Image downloaded from url: {} and saved to: {}.'.format(url, image_file_path))
 
 
 local_image_path="assets/inpaint_demo.jpg"
 image_url="https://images.rawpixel.com/image_800/cHJpdmF0ZS9sci9pbWFnZXMvd2Vic2l0ZS8yMDIyLTA1L3Vwd2s2MTc3Nzk0MS13aWtpbWVkaWEtaW1hZ2Uta293YnN1MHYuanBn.jpg"
 
 download_image(image_url, local_image_path)
 image_source, image=load_image(local_image_path)
 Image.fromarray(image_source)

使用Dino+SAM+Stable diffusion 自动进行图片的修改

先使用Grounding Dino 进行检测:

 # detect object using grounding DINO
 defdetect(image, text_prompt, model, box_threshold=0.3, text_threshold=0.25):
   boxes, logits, phrases=predict(
       model=model, 
       image=image, 
       caption=text_prompt,
       box_threshold=box_threshold,
       text_threshold=text_threshold
   )
 
   annotated_frame=annotate(image_source=image_source, boxes=boxes, logits=logits, phrases=phrases)
   annotated_frame=annotated_frame[...,::-1] # BGR to RGB 
   returnannotated_frame, boxes
 annotated_frame, detected_boxes=detect(image, text_prompt="bench", model=groundingdino_model)
 Image.fromarray(annotated_frame)

让我们看看结果:

使用Dino+SAM+Stable diffusion 自动进行图片的修改

然后使用 SAM 分割这个狐狸:

 defsegment(image, sam_model, boxes):
   sam_model.set_image(image)
   H, W, _=image.shape
   boxes_xyxy=box_ops.box_cxcywh_to_xyxy(boxes) *torch.Tensor([W, H, W, H])
 
   transformed_boxes=sam_model.transform.apply_boxes_torch(boxes_xyxy.to(device), image.shape[:2])
   masks, _, _=sam_model.predict_torch(
       point_coords=None,
       point_labels=None,
       boxes=transformed_boxes,
       multimask_output=False,
       )
   returnmasks.cpu()
 
 defdraw_mask(mask, image, random_color=True):
     ifrandom_color:
         color=np.concatenate([np.random.random(3), np.array([0.8])], axis=0)
     else:
         color=np.array([30/255, 144/255, 255/255, 0.6])
     h, w=mask.shape[-2:]
     mask_image=mask.reshape(h, w, 1) *color.reshape(1, 1, -1)
     
     annotated_frame_pil=Image.fromarray(image).convert("RGBA")
     mask_image_pil=Image.fromarray((mask_image.cpu().numpy() *255).astype(np.uint8)).convert("RGBA")
 
     returnnp.array(Image.alpha_composite(annotated_frame_pil, mask_image_pil))
 segmented_frame_masks=segment(image_source, sam_predictor, boxes=detected_boxes)
 annotated_frame_with_mask=draw_mask(segmented_frame_masks[0][0], annotated_frame)
 Image.fromarray(annotated_frame_with_mask)

这样就可以通过上面的分割结果为的扩散模型生成掩码:

 # create mask images 
 mask=segmented_frame_masks[0][0].cpu().numpy()
 inverted_mask= ((1-mask) *255).astype(np.uint8)
 
 
 image_source_pil=Image.fromarray(image_source)
 image_mask_pil=Image.fromarray(mask)
 inverted_image_mask_pil=Image.fromarray(inverted_mask)
 
 
 display(*[image_source_pil, image_mask_pil, inverted_image_mask_pil])

使用Dino+SAM+Stable diffusion 自动进行图片的修改

绘时我们还需要一个背景的掩码,这个就是上面掩码的反操作

使用Dino+SAM+Stable diffusion 自动进行图片的修改

 defgenerate_image(image, mask, prompt, negative_prompt, pipe, seed):
   # resize for inpainting 
   w, h=image.size
   in_image=image.resize((512, 512))
   in_mask=mask.resize((512, 512))
 
   generator=torch.Generator(device).manual_seed(seed) 
 
   result=pipe(image=in_image, mask_image=in_mask, prompt=prompt, negative_prompt=negative_prompt, generator=generator)
   result=result.images[0]
 
   returnresult.resize((w, h))

然后我们可以开始改图,输入一个提示:

 prompt=" a brown bulldog"
 negative_prompt="low resolution, ugly"
 seed=-1# for reproducibility 
 
 generated_image=generate_image(image=image_source_pil, mask=image_mask_pil, prompt=prompt, negative_prompt=negative_prompt, pipe=sd_pipe, seed=seed)
 generated_image

使用Dino+SAM+Stable diffusion 自动进行图片的修改

或者用上面的背景掩码来修改背景:

 prompt="a hill with grasses ,weak sunlight "
 negative_prompt="people, low resolution, ugly"
 seed=32# for reproducibility 
 
 generated_image=generate_image(image_source_pil, inverted_image_mask_pil, prompt, negative_prompt, sd_pipe, seed)
 generated_image

使用Dino+SAM+Stable diffusion 自动进行图片的修改

可以看到效果还是很好的

SAM、Grounding Dino 和 Stable Diffusion 的组合为我们提供了强大的工具。这些技术为探索令人兴奋的图像处理世界提供了坚实的基础 并为艺术家和开发者提供巨大的创造潜力。

如果你想在线测试,这里有完整的源代码:

https://avoid.overfit.cn/post/e9e083807a434935910c8116c85c8375

作者:Amir Shakiba文章来源地址https://www.toymoban.com/news/detail-437379.html

到了这里,关于使用Dino+SAM+Stable diffusion 自动进行图片的修改的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 〔013〕Stable Diffusion 之 图片自动评分和不健康内容过滤器 篇

    想让系统帮你的图片作品打分评价,可以下载咖啡美学自动评价插件 插件地址: https://github.com/p1atdev/stable-diffusion-webui-cafe-aesthetic 也可以通过扩展列表中搜索 cafe 点击安装按钮安装扩展 支持确定图片是否具有 美学 和 非美学 支持单个图片和批量评价图片 分类类型还可

    2024年02月12日
    浏览(46)
  • 【计算机视觉】最强 Zero-Shot 视觉应用:Grounding DINO + Segment Anything + Stable Diffusion

    用 Midjourney 花一个小时做的项目 logo 图: 解释一下 logo 的含义:一只坐在地上的马赛克风格的熊。 坐在地面上是因为 ground 有地面的含义,然后分割后的图片可以认为是一种马赛克风格,而且马赛克谐音 mask ,之所以用熊作为 logo 主体,是因为项目主要示例的图片是熊。 G

    2024年02月04日
    浏览(80)
  • 使用stable diffusion生成图片

    requirements.txt 内容如下 保存为stable_diffusion.py并执行  

    2024年02月13日
    浏览(86)
  • Stable Diffusion 使用 SadTalker 生成图片数字人

    Heygen和D-ID等照片转视频的工具,都需要在线付费使用。本次介绍一个SadTalker数字人。SadTalker有多种使用方式,包括完整安装程序和stable diffusion插件模式。安装程序操作较繁琐,因此推荐stable diffusion插件模式。 打开SD进入扩展复制链接 https://github.com/OpenTalker/SadTalker.git 到安装

    2024年02月13日
    浏览(78)
  • SAM&Stable-Diffusion集成进化!分割、生成一切!AI绘画新玩法

    自SAM「分割一切」模型推出之后,二创潮就开始了,有想法有行动!飞桨AI Studio开发者 会唱歌的炼丹师 就创作出SAM进化版,将SAM、Stable Diffusion集成,实现「分割」、「生成」能力二合一,并部署为应用,支持在线使用! 创作者:会唱歌的炼丹师 作者主页:https://aistudio.ba

    2024年02月16日
    浏览(59)
  • Python 使用 Stable Diffusion API 生成图片示例

    代码: 输出: 说明: 运行后,图片以及 JSON 将会输出到当前目录下 output 中; TIP: 当然前提是你已经部署好 Stable Diffusion API 服务; 并且安装好跟我一样的模型以及一些相关的 LoRA ;

    2024年02月16日
    浏览(77)
  • 图片生成视频来了:Stable Video Diffusion使用教程

    11月22日 Stability AI 发布了一个AI视频的开源项目:Stable Video Diffusion,它可以基于一张图片生成数秒钟的视频,效果比较惊艳,本文就给大家分享下如何安装和使用。 视频不方便分享,我这里做成了gif动图,可以看到画面很稳定,基本上是没有闪烁的。 这个程序对显卡的要求

    2024年04月14日
    浏览(461)
  • AI图片生成Stable Diffusion参数及使用方式详细介绍

            Stable Diffusion环境搭建与运行请参考上一篇博文《AI图片生成Stable Diffusion环境搭建与运行》,地址为“https://blog.csdn.net/suiyingy/article/details/128896426”。运行成功后,网页浏览器显示页面主要包括txt2img、img2img、Extras、PNG Info、Checkpoint Merger、Train、Settings和Extensions等八

    2024年02月08日
    浏览(90)
  • 多模态——使用stable-video-diffusion将图片生成视频

    近期,stabilityAI发布了一个新的项目,是将图片作为基础,生成一个相关的小视频,其实也算是其之前研究内容的扩展。早在stable-diffusion的模型开源出来的时候,除了由prompt生成图片之外,也可以生成连续帧的短视频。 本文主要是体验一下stable-video-diffusion的使用,以及对其

    2024年02月05日
    浏览(88)
  • Stable Diffusion使用civitai的模型进行AI绘图

    准备工作 1.安装Stable Diffusion(B站秋叶大佬有完整包,开箱即用) 2.启动之后找到图中位置下载civitai助手 下载完成之后,点击页面下方“重载客户端”。 下载模型 1.进入C站,随便找一个点进去,复制浏览器的网址 2.找到图中的tab,如果没有,说明civitai没有安装成功  按照图

    2024年02月11日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包