ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

IOPaint 图像修复快速上手指南:一条命令完成抹除、重绘与批量处理

IOPaint 图像修复快速上手指南:一条命令完成抹除、重绘与批量处理 IOPaint 图像修复快速上手指南一条命令完成抹除、重绘与批量处理【免费下载链接】IOPaintImage inpainting tool powered by SOTA AI Model. Remove any unwanted object, defect, people from your pictures or erase and replace(powered by stable diffusion) any thing on your pictures.项目地址: https://gitcode.com/GitHub_Trending/io/IOPaintIOPaint 是一个免费开源的 AI 图像修复工具用一条命令启动本地 Web 服务就能抹掉照片里的水印、路人、文字或用扩散模型把旧物体替换成新内容。仓库内置 8 个轻量擦除模型与 11 个可加载的扩散模型CPU、NVIDIA GPU、Apple Silicon 都能跑图片全程不离开本机。它解决什么问题先讲清三个修图场景本节帮你判断我这种需求它能不能干三个场景各对应一条真实工作流。场景一照片里有碍眼物体只想擦掉。手工仿制容易糊边而 IOPaint 让你用掩码圈住目标区域交给 LaMa 等擦除模型重绘默认模型就是lamaCPU 可跑场景二擦掉之后还想换成别的内容。纯擦除只能填空白扩散模型则能按文本提示重画支持 outpainting 扩边。可选模型 ID 集中在 const.py 的DIFFUSION_MODELS列表中如Sanster/PowerPaint-V1-stable-diffusion-inpainting、Sanster/AnyText。场景三一次要处理几百张图。网页一张张点太慢改用run子命令批处理--mask传目录时掩码须与原图同名传单个文件则所有原图共用该掩码说明出自 cli.py 参数 help 文本。核心原理一次看懂主干 UNet 加一个零初始化旁路本节用 10 分钟建立正确心智模型之后看源码不迷路。打个比方补墙时粉刷工主干 UNet边刷边问手里拿着原墙照片加破洞位置图的监理BrushNet 条件网络要参考每到一个施工高度就递一份备忘录。技术上PowerPaint V2 让一个与主干同构的BrushNetModel并行前向把各层降采样/上采样结果注入主干。先看入口如何发起一次修复power_paint_v2.py 的forward核心逻辑image image * (1 - mask / 255.0) # 掩码区域先乘零抹黑 promptA, promptB, negative_promptA, negative_promptB task_to_prompt( config.powerpaint_task ) output self.model( imageimage, maskmask, promptApromptA, promptBpromptB, promptUconfig.prompt, tradoffconfig.fitting_degree, brushnet_conditioning_scale1.0, num_inference_stepsconfig.sd_steps, guidance_scaleconfig.sd_guidance_scale, )两个细节值得注意原始外观信息在编码前就被抹去改由条件通道携带任务类型经task_to_prompt映射成固定提示词用户提示词走promptU。条件又是如何进来的看 BrushNet_CA.py 中BrushNetModel的三处关键代码brushnet_cond torch.concat([sample, brushnet_cond], 1) # 噪声潜变量与条件图拼通道 sample self.conv_in_condition(brushnet_cond) brushnet_block zero_module(brushnet_block) # 各层注入头零初始化类初始化里conditioning_channels5即4 通道原图潜变量加 1 通道掩码。零初始化是稳妥的工程设计条件通路起点输出全零主干行为与原始 SD 完全一致条件能力只能加分不会先拆房。装配关系在 model_manager.py 的init_model请求开启enable_powerpaint_v2且模型support_powerpaint_v2时实例化PowerPaintV2它通过 monkey patch 把主干 UNet 与各 down/up block 的forward换成可接收条件嵌入的版本。快速上手安装、启动与常用参数对照表本节走完装好、跑起来、看懂参数三步命令均可直接复制。环境要求Python 3 环境GPU 用户建议先装 CUDA 版 PyTorchREADME 给出的组合是torch2.1.2配cu118依赖版本约束见 requirements.txt其中diffusers0.27.2、fastapi0.108.0为固定版本。安装与首次运行# GPU 用户先装 CUDA 版 PyTorchREADME 原样注释 # pip3 install torch2.1.2 torchvision0.16.2 --index-url https://download.pytorch.org/whl/cu118 pip3 install iopaint iopaint start --modellama --devicecpu --port8080启动后浏览器访问http://localhost:8080即可使用。模型在首次启动时自动下载用--model-dir或设置XDG_CACHE_HOME环境变量可改下载目录。批量处理iopaint run --modellama --devicecpu \ --image/path/to/image_folder \ --mask/path/to/mask_folder \ --outputoutput_dirstart常用参数对照表取值来自 cli.py 选项定义与 const.py 帮助文本参数默认值作用--modellama8 个内置擦除模型lama/ldm/zits/mat/fcf/manga/cv2/migan或 HuggingFace 扩散模型 ID--devicecpucpu/cuda/mps--port8080服务端口--low-mem关启用 attention slicing 与 VAE tiling 省内存--cpu-offload关扩散模型权重放 CPU 内存显著降显存--cpu-textencoder关文本编码器放 CPU 降显存--no-half关用 fp32 全精度出图全黑或全绿时用它--local-files-only关离线加载模型不连 HuggingFace 服务器--quality100输出编码质量 0–100越高文件越大--output-dir无结果图自动保存到该目录插件类开关另有--enable-interactive-segSegment Anything 交互式分割、--enable-remove-bg、--enable-gfpgan等插件实现集中在 plugins/全集可用iopaint start --help查看。效果与数据模型能力一览与官方样例对比本节给你一张可核查的模型选择表以及仓库自带样例图按场景对号入座。按 const.py 的AVAILABLE_MODELS与MPS_UNSUPPORT_MODELS整理启动选项模型适用场景Apple Silicon (MPS)--modellamaLaMa默认擦除综合质量优先不支持--modelmiganMIGAN擦除支持--modelmangaManga 修复漫画风格图像不支持--modelcv2传统算法填充不想加载任何模型时不支持--modelHF模型IDSD/SDXL 修复版物体替换、outpainting支持仓库没有预置跑分结果但自带基准工具 benchmark.py测试条件固定为 512×512 随机图、sd_steps5、ddim 采样默认重复 10 次逐轮记录耗时ms、内存MB、显存MB按均值 ± 标准差输出python -m iopaint.benchmark --namelama --devicecuda --times10对比不同模型时把--name换掉即可具体数值随显卡与驱动浮动以自测输出为准。效果样图均为仓库assets/内的官方样例同组左为修复前、右为修复后进阶调优与避坑显存、黑图、离线三个高频问题按问题—原因—解决办法处理三条都源自参数帮助文本与源码里的现成开关。问题一GPU 显存不够跑扩散模型报 OOM。原因SD 级模型权重加中间激活占显存大默认全部常驻 GPU。 解决办法按代价从小到大组合三个开关——--low-memattention slicing VAE tiling、--cpu-offload权重卸载到 CPU 内存、--cpu-textencoder仅文本编码器放 CPU。三个开关的帮助文本均在 const.py 中。问题二扩散模型出图总是全黑或全绿。原因精度问题半精度 fp16 在部分硬件上数值溢出。 解决办法加--no-half强制 fp32 全精度。这是 NO_HALF_HELP 中写明对症的开关代价是更慢、更占内存。问题三首次启动长时间卡在模型下载或服务器无外网。原因模型默认从 HuggingFace 自动拉取慢网会显得像卡死。 解决办法有网时先用iopaint download --model模型ID预下载iopaint list查看已下载清单无网环境把权重放进模型目录后加--local-files-only该开关会同时设置TRANSFORMERS_OFFLINE1与HF_HUB_OFFLINE1逻辑见 cli.py 的start函数。补充一个软性问题切换模型后旧权重不会立刻释放。model_manager.py 的switch方法会先del self.model再调用torch_gc()回收且新模型加载失败时回滚到旧模型所以网页里来回切模型是安全的。生态与参与插件、测试与前端构建入口本节给你三条能直接上手的参与路径写插件、跑测试、改前端。插件扩展Segment Anything、RemoveBG、RealESRGAN、GFPGAN、RestoreFormer 等以独立模块放在 plugins/如 plugins/segment_anything2/基类在 base_plugin.py新插件对齐基类实现后在 cli.py 注册启动开关即可。模型扩展新模型参照 lama.py 的结构实现再登记进 model/init.py 的models字典请求字段统一在 schema.py 的InpaintRequest中。测试用例在 tests/ 目录单文件可直接跑例如python -m pytest iopaint/tests/test_load_img.py -v前端React Vite 工程在 web_app/构建流程为cd web_app npm install npm run build把dist/复制到iopaint/web_app即被后端静态服务README「Development」一节同款流程本地开发用npm run dev并在web_app/.env.local里写VITE_BACKENDhttp://127.0.0.1:8080。部署仓库附带 docker/ 下的 CPU 与 GPU 两种 Dockerfile以及build_docker.sh。写在最后IOPaint 把擦除—替换—扩边三类图像修复任务收敛进同一个本地服务lama负责抹扩散模型负责画PowerPaint V2 用 5 通道条件把两者接起来批处理与插件把单图能力放大到产线。下一步建议很具体用iopaint start --modellama --port8080打开网页拿 assets/ 里的unwant_person.jpg练手一次掩码擦除跑通后再把--model换成扩散模型体会文本引导重绘的差异。【免费下载链接】IOPaintImage inpainting tool powered by SOTA AI Model. Remove any unwanted object, defect, people from your pictures or erase and replace(powered by stable diffusion) any thing on your pictures.项目地址: https://gitcode.com/GitHub_Trending/io/IOPaint创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表