问题清除指南|alimama-creative/FLUX-Controlnet-Inpainting 运行注意事项

news2024/11/29 1:42:43

前言:近日验证想法需要用到inpainting技术,选择了https://github.com/alimama-creative/FLUX-Controlnet-Inpainting进行测试,在实现过程中遇到几个小问题,在此分享一下解决经验。

1. 下载预训练模型到本地

由于在huggingface官网一个个点击下载⏬black-forest-labs/FLUX.1-dev模型太繁琐(文件太多),而且下载下来的文件要手动放到特定目录里(非常不方便),于是从这里找了一个脚本自动下载:

import os
from huggingface_hub import snapshot_download
# 如果需要代理的话,去掉此部分注释加入端口
# os.environ["http_proxy"] = "http://xxxxxxx:xxxx" # 代理设置
# os.environ["https_proxy"] = "http://xxxxxxx:xxxx" # 代理设置
repo_id = "black-forest-labs/FLUX.1-dev" # 模型在huggingface上的名称
cache_dir = "/newdata/proceeding/FLUX-Controlnet-Inpainting-main/cache/" #保存路径
local_dir = "/newdata/proceeding/FLUX-Controlnet-Inpainting-main/PMs/black-forest-labs" #保存路径
# 指定要创建的目录路径

local_dir_use_symlinks = False # 本地模型使用文件保存,而非blob形式保存
#
token = "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" # 在hugging face上生成的 access token

# 检查目录是否存在
if not os.path.exists(cache_dir):
 # 创建目录
    os.makedirs(cache_dir)
#
if not os.path.exists(local_dir):
 # 创建目录
    os.makedirs(local_dir)
#
snapshot_download(
 repo_id=repo_id,
 cache_dir=cache_dir,
 local_dir=local_dir,
 local_dir_use_symlinks=local_dir_use_symlinks,
 token=token,
 force_download=True,
 resume_download=True
)
print("======Download successful=====")

一开始下载不成功,后来多尝试了几次,莫名其妙就成功了,可能是网络不稳定。

将模型下载到本地后,修改main.py文件中from_pretrained()函数的第一个参数,变成模型的本地路径即可。


2. 安装必要的python库

经过数次报错后,总结出的必要安装库:

sentencepiece=0.2.0
protobuf=5.28.2
diffusers==0.30.3
transformers=4.44.0

注意⚠️:transformers如果版本不当,会引发「RuntimeError: “triu_tril_cuda_template“ not implemented for ‘BFloat16’」类似报错。


3. image_path 注意是str不是元组

在运行main.py文件,模型加载成功之后,报错如下:

Traceback (most recent call last):
  File "/newdata/proceeding/FLUX-Controlnet-Inpainting-main/main.py", line 23, in <module>
    image = load_image(image_path).convert("RGB").resize(size)
  File "/root/anaconda3/envs/flux/lib/python3.10/site-packages/diffusers/utils/loading_utils.py", line 41, in load_image
    raise ValueError(
ValueError: Incorrect format used for the image. Should be a URL linking to an image, a local path, or a PIL image.

一开始以为是函数的问题,后来发现是main函数中2️⃣个很小的逗号导致的:

# Set image path , mask path and prompt
image_path='https://huggingface.co/alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Alpha/resolve/main/images/bucket.png',
mask_path='https://huggingface.co/alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Alpha/resolve/main/images/bucket_mask.jpeg',

上述两行代码对两个变量赋值,image_pathmask_path字符串之后都有一个小小的逗号,删除即可解决上述报错。


4. RuntimeError: cuDNN Frontend error: [cudnn_frontend] Error: No execution plans support the graph.

把这个错误单独〇出来是因为当天没解决,卡了好久……后来在github找原因,受这个issue启发,发觉可能是torch的版本不对,于是,结合自己的cuda版本(nvidia-smi查询到 CUDA Version: 12.0),尝试不同的torch版本,一开始2.5.0🙅,2.4.0🙅,最后尝试2.3.1成功!

gpu版本的torch安装如下:

pip install torch==2.3.1+cu121 torchvision==0.18.1+cu121 -f https://download.pytorch.org/whl/torch_stable.html

上述问题全部解决后,运行成功~

╰─# python /newdata/proceeding/FLUX-Controlnet-Inpainting-main/main.py
Loading checkpoint shards: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<00:00,  9.64it/s]
Loading pipeline components...:  29%|████████████████████████████████████                                                                                          | 2/7 [00:00<00:01,  4.51it/s]You set `add_prefix_space`. The tokenizer needs to be converted from the slow tokenizers
Loading pipeline components...: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:00<00:00,  7.43it/s]
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 28/28 [00:11<00:00,  2.34it/s]
Successfully inpaint image

在这里插入图片描述


参考资料

  1. https://zhuanlan.zhihu.com/p/661741304
  2. https://blog.csdn.net/qq_35357274/article/details/141157962
  3. https://github.com/huggingface/diffusers/issues/9704

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2218783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React Agent 自定义实现

目录 背景 langchin 中的 agent langchin 中 agent 的问题 langchain 的 agent 案例 自定义 React Agent 大模型 工具定义 问题设定 问题改写&#xff0c;挖掘潜在意图 React Prompt 下一步规划 问题总结 代码 背景 之前使用过 langchian 中的 agent 去实现过一些…

WordPress监控用户行为回放插件

在数字营销的世界里&#xff0c;了解用户行为是提升用户体验和转化率的关键。nicen-replay 插件&#xff0c;它能够让您轻松回放用户在网站上的每一步操作&#xff0c;从点击到滚动&#xff0c;再到表单填写&#xff0c;每一个细节都清晰可见 nicen-replay&#xff0c;是一款可…

C#从零开始学习(类型和引用)(4)

类型 本章所有的代码都放在 https://github.com/hikinazimi/head-first-Csharp 整型 byte: 0~255sbyte: -128~127short: -32768~32767int: -2147483648~2147483647long: -9223372036854775808~9223372036854775807 以u开头的无符号整数 ushort,uint,ulong 浮点 float: (6~9…

RHCE【远程连接服务器】

目录 一、远程连接服务器简介 二、加密技术简介 SSH工作过程&#xff1a; &#xff08;1&#xff09;版本协商阶段 &#xff08;2&#xff09;密钥和算法协商阶段 &#xff08;3&#xff09;认证阶段 &#xff08;4&#xff09;会话请求阶段 &#xff08;5&#xff0…

KUKA外部自动配置(上)

通过外部PLC对机器人自动运行进程进行控制&#xff0c;其控制原理是&#xff1a;外部PLC通过外部自动运行接口向机器人控制系统发出机器人进程的相关信号&#xff08;如&#xff1a;运行许可、故障确认、程序启动等&#xff09;&#xff0c;机器人控制系统向外部PLC系统发送有关…

STM32 I2C通信协议详解

文章目录 STM32 I2C通信协议详解一、I2C协议概述二、物理层特性总线结构&#xff1a;引脚定义&#xff1a;电平特性&#xff1a;地址机制&#xff1a; 三、协议层机制起始信号&#xff1a;停止信号&#xff1a;数据有效性&#xff1a;应答信号&#xff08;ACK&#xff09;&…

机器学习|Pytorch实现天气预测

机器学习|Pytorch实现天气预测 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 电脑系统&#xff1a;Windows11 显卡型号&#xff1a;NVIDIA Quadro P620 语言环境&#xff1a;python 3.9.7 编译器&#x…

【Python】selenium遇到“InvalidArgumentException”的解决方法

在使用try……except 的时候捕获到这个错误&#xff1a; InvalidArgumentException: invalid argument (Session info: chrome112.0.5614.0) 这个错误代表的是&#xff0c;当传入的参数不符合期望时&#xff0c;就会抛出这个异常&#xff1a; InvalidArgumentException: invali…

常见TCP/IP协议基础——计算机网络

目录 前言常见协议基础常见协议-基于TCP的应用层协议常见协议-基于UDP的应用层协议常见协议-网络层协议习题自测1.邮件发送协议2.接收邮件协议端口3.建立连接4.层次对应关系5.FTP服务器端口 前言 本笔记为备考软件设计师时的重点知识点笔记&#xff0c;关于常见TCP/IP协议基础…

Java【多线程】wait和notify

目录 wait / notify 由于线程之间是抢占式执⾏的, 因此线程之间执⾏的先后顺序难以预知. 但是实际开发中有时候我们希望合理的协调多个线程之间的执⾏先后顺序. wait / notify 等待/通知 协调线程之间的执行逻辑的顺序的 可以让后执行的逻辑等待先执行的逻辑 虽然无法直接…

缓存框架JetCache源码解析-缓存定时刷新

作为一个缓存框架&#xff0c;JetCache支持多级缓存&#xff0c;也就是本地缓存和远程缓存&#xff0c;但是不管是使用着两者中的哪一个或者两者都进行使用&#xff0c;缓存的实时性一直都是我们需要考虑的问题&#xff0c;通常我们为了尽可能地保证缓存的实时性&#xff0c;都…

word取消自动单词首字母大写

情况说明&#xff1a;在word输入单词后首字母会自动变成大写 &#xff08;1&#xff09;点击菜单栏文件 &#xff08;2&#xff09;点击“更多”——>“选项” &#xff08;3&#xff09;点击“校对”——>“自动更正选项” &#xff08;4&#xff09;取消“句首字母大写…

WPF样式详解:行内样式、模板样式和页面样式的全方位分析

Windows Presentation Foundation (WPF) 是微软推出的一种用于构建桌面应用程序的UI框架。WPF 提供了强大的样式和模板机制&#xff0c;允许开发人员以声明的方式定义和复用UI元素的视觉外观。本文将深入探讨WPF的行内样式、模板样式和页面样式&#xff0c;帮助您在实际开发中更…

大数据linux操作系统

第一关&#xff1a;Linux的初体验 答案&#xff1a; cd / ls -a / &#xff08;里面有空格要注意&#xff09; 第二关&#xff1a;Linux的常用命令 答案&#xff1a; touch newfile mkdir newdir cp newfile newdir/newfileCpy 第三关&#xff1a;Linux查询命令帮助语句…

我在自动化测试方面犯过的3个大错误

每个人都会犯错误&#xff0c;但不管错误看起来有多糟糕&#xff0c;你都可以恢复过来&#xff0c;更重要的是&#xff0c;从错误中学习。 在软件开发过程的任何领域&#xff0c;从编码到测试&#xff0c;我们都会时不时地犯一些错误。通常&#xff0c;这些错误都很小&#xf…

Linux kernel 堆溢出利用方法

前言 本文还是用一道例题来讲解几种内核堆利用方法&#xff0c;内核堆利用手段比较多&#xff0c;可能会分三期左右写。进行内核堆利用前&#xff0c;可以先了解一下内核堆的基本概念&#xff0c;当然更好去找一些详细的内核堆的基础知识。 概述 Linux kernel 将内存分为 页…

Leetcode 字符串解码

该代码的算法思想可以分为以下几个步骤&#xff1a; 1. 使用栈来处理嵌套结构&#xff1a; 我们需要处理像 k[encoded_string] 这种格式&#xff0c;其中的 encoded_string 可能是嵌套的&#xff0c;即像 3[a2[c]] 这样的输入。因此&#xff0c;我们可以借助 栈&#xff08;S…

音视频基础知识分享

音视频基础知识分享 RKMedia的各个组件及其交互 首先上图&#xff1a; 考虑到公司业务主要是相机&#xff0c;所以&#xff0c;主要去关注图像数据流&#xff0c;对于音频数据流直接忽略。 图像数据流向&#xff1a; Camera Sensor将光信号转换成电信号&#xff08;Raw数据&…

【大模型】AI视频课程制作工具开发

1. 需求信息 1.1 需求背景 讲师们在制作视频的过程中&#xff0c;发现录制课程比较麻烦&#xff0c;要保证环境安静&#xff0c;保证录制过程不出错&#xff0c;很容易反复重复录制&#xff0c;为了解决重复录制的工作量&#xff0c;想通过 ai 课程制作工具&#xff0c;来解决…

Rust引用与C++取地址、引用的区别(C++引用、Rust解引用、C++指针)

文章目录 Rust引用与C取地址和引用的比较一、内存安全与管理Rust的内存安全机制C的内存管理 二、引用和取地址Rust的引用C的引用和取地址 三、代码示例比较修改数据的安全性Rust示例C示例 四、结论 Rust引用与C取地址和引用的比较 在程序设计语言的世界里&#xff0c;Rust和C都…