IC-Light-在stable diffusion中实现图像的光影控制新方法 - 技术原理篇

👨背景与来源

最近在stable diffusion的粉丝群看到光影控制又有了新的玩法,是controlnet的作者lllyasviel,发了一款名为IC-Light的模型,并且已经被另外一位名为huchenlei的朋友实现了comfyui和webUI(forge )版的插件,并且在github上提到automatic1111 webui的插件也在进行过程中了。 

✨ComfyUI and Forge versions are available:

  • GitHub - huchenlei/ComfyUI-IC-Light-Native: ComfyUI native implementation of IC-Light
  • GitHub - huchenlei/sd-forge-ic-light: SD Forge extension for IC-Light

这篇文章我们就先简单了解下原作者制作模型的基础思路,下一篇我们一起看下comfyui里边实现的方法,看看有没有哪些潜在的坑帮大家先踩一踩。

🎠模型原作者链接:https://github.com/lllyasviel/IC-Light

🥽模型简介与效果

IC-Light 是一个用于控制图像光源效果的项目。

名称 "IC-Light" 代表 "Imposing Consistent Light"(直白翻译是,保持图像的光源一致性)。

目前,我们(原作者哈,不是我)发布了两种类型的模型:文本条件重照明模型和背景条件模型。两种类型的模型都接受前景图像作为输入。

先看下原作者给出的测试效果:

首先是给出前景图,然后结合提示词和光源方向的标签选择,自动生成场景和大致的光源:

(其他更多案例略)

其次是给出原图和光源图,然后结合简单的提示词,让模型自行混合前景和光源;

然后作者贴了一张更全面的对比图,左侧第一列是原图,右侧是在输入不同的景色图像作为光源控制的情况下,实现的图像效果:

整体来说,在保持了图像本身结构不变的情况下,很大程度上实现了前景和背景更好的融合,看起来是可以很好的用在摄影写真类工作流中去的,可以一定程度上把人从繁重的后期ps中解放出来。

🍳技术实现部分

在 HDR 空间中,照明具有所有光传输都是独立的属性。

在HDR的世界里,光的传播就像是小朋友们玩传球游戏。每个小朋友(光线)都可以独立地把球(光)传给其他小朋友,而不需要担心球会消失或者变得看不清。这样,不管球传到哪里,大家都能看得清清楚楚,就像真实世界里光是怎样传播的一样。 所以,HDR让电脑游戏里的光和影看起来更真实,更接近我们用眼睛看到的世界。

结合下图来示意,不同光源的外观混合相当于混合光源的外观:

将每一束光源先照射到物体上,然后将物体的图像进行合并,和将光源先组合再统一照射到物体上,效果是一样的。

在训练重新照明模型时,作者强加了这种一致性(在潜在空间中使用 MLP)。

因此,该模型能够产生高度一致的重新光照 -如此一致,甚至可以将不同的重新光照合并为法线贴图!尽管事实上这些模型是潜在扩散的。

从左到右依次是原图像输入、模型输出重新照明效果、分割的阴影图像和合并的法线贴图。请注意,该模型未使用任何法线贴图数据进行训练。最后的这张法线贴图的估算结果,来自于重新一致性照明的图像。

大家也可以到作者提供的在线试验平台去玩玩,反正是完全免费的:

https://huggingface.co/spaces/lllyasviel/IC-Light

🍡模型说明

模型下载地址:https://huggingface.co/lllyasviel/ic-light/tree/main

  • iclight_sd15_fc.safetensors - 默认的重新打光模型,通过文字和前景来控制生成结果,你可以控制潜空间的初始化来影响生成效果;

  • iclight_sd15_fcon.safetensors -这个模型和"iclight_sd15_fc.safetensors"很像,但是在训练的时候加入了一些偏移噪声(offset noise)。不过,在一个用户研究中,没有加入偏移噪声的"iclight_sd15_fc.safetensors"模型表现得稍微好一些。这就是为什么默认的模型是那个没有偏移噪声的版本。

  • iclight_sd15_fbc.safetensors - 支持文字+前景+背景一起控制生成的结果的重新打光模型;

好了,到这里这篇文章的主要内容就结束了,如果觉得有用,记得帮忙点个赞哦~ 

下期我们一起看下comfyui里边如何使用这个模型,安装的过程中有没有一些坑,以及实际测试的效果如何,如果你也感兴趣,记得关注我哦~

🎉写在最后~

去年的时候写了两门比较基础的Stable Diffuison WebUI的基础文字课程,大家如果喜欢的话,可以按需购买,在这里首先感谢各位老板的支持和厚爱~

✨StableDiffusion系统基础课(适合啥也不会的朋友,但是得有块Nvidia显卡):

https://blog.csdn.net/jumengxiaoketang/category_12477471.html

​​​​​🎆综合案例课程(适合有一点基础的朋友):

https://blog.csdn.net/jumengxiaoketang/category_12526584.html

​​​​​

这里是聚梦小课堂,就算不买课也没关系,点个关注,交个朋友😄

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

事件高级部分

一,注册事件 即给元素添加事件 1.传统注册方式 2.方法监听注册方式 事件类型:字符串形式,不用带on 可以给一个元素添加多个程序 二.删除事件 1.方式 参数见上文 三.DOM事件流 事件的传播过程叫做事件流 js代码只能获取一个阶段&#xf…

【考研数学】汤家凤“免单“数学题被吐槽‘太难’,老汤回应「怎么还有脸笑」,网友:这些题有毒!

我看了汤家凤老师出的几道题,实际上对于考研的同学来说,确实是送分题 第一个是三角函数变换中的万能公式;第二个e^x的泰勒展开公式;第三个是第一类重要极限。只要复习过,那基本上都能正常做出来。 至于汤家凤老师说「…

STM32快速入门(总线协议之I2C一主多从(软件实现 硬件实现))

STM32快速入门(总线协议之I2C一主多从(软件实现 & 硬件实现)) 前言 支持一对多(一主多从)、多对多传输(多主多从),只支持半双工,一般有两根数据线&…

C++笔记(体系结构与内核分析)

1.OOP面向对象编程 vs. GP泛型编程 OOP将data和method放在一起,目的是通过封装、继承、多态提高软件的可维护性和可扩展性GP将data和method分开,可以将任何容器与任何算法结合使用,只要容器满足塞饭所需的迭代器类型 2.算法与仿函数的区别 …

OGG几何内核-网格化的改进

OGG社区于4月19日发布了OGG 1.0 preview版本。相对于OCCT 7.7.0有很多改进,目前在持续研究中。最近测试了一下网格化,确实有很好的改进。对比展示如下: 几何内核: OGG 1.0 preview 几何内核:OCCT 7.7.0 采用OCCT几何内…

IT项目管理-小题计算【太原理工大学】

1.合同总价问题 问承包商的利润是? 实际利润目标利润(目标成本-实际成本)*卖方分担比例 解:10 000(100 000 - 90 000)* 0.2 12 000(元) 实际成本有时也写作最终成本,问承…

cmu15445 2023fall project3 详细过程(下)QUERY EXECUTION

QUERY EXECUTION task3/task4 Task #3 - HashJoin Executor and Optimization1、HashJoin1.1 思路1.2 代码 2 NestedLoopJoin优化为HashJoin2.1 思路2.2 代码 Task #4 Sort Limit Executors Top-N Optimization Window Functions1、Sort1.1 思路1.2 代码 2、Limit Executors2…

Linux与Windows互传文件【笔记】

Linux与Windows互传文件【笔记】 前言前言推荐Linux与Windows互传文件首先确保Windows安装ssh如何传送文件问题 最后 前言 这是陈旧已久的草稿2023-05-10 00:01:24 这个是准备把计组课程华为智能计组的,传输文件。 最后发现,好像没有实现了。 现在202…

Java 守护线程 ( Daemon Thread )详解

在Java中,线程分为两类:用户线程(User Thread)和守护线程(Daemon Thread)。守护线程是后台线程,主要服务于用户线程,当所有的用户线程结束时,守护线程也会自动结束,JVM会随之退出。守护线程的一个典型例子是…

pikachu靶场(xss通关教程)

(注:若复制注入代码攻击无效,请手动输入注入语句,在英文输入法下) 反射型xss(get型) 1.打开网站 发现有个框,然后我们在框中输入一个“1”进行测试, 可以看到提交的数据在url处有显示&#xf…

AI跟踪报道第41期-新加坡内哥谈技术-本周AI新闻:本周Al新闻: 准备好了吗?事情即将変得瘋狂

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Oracle 删除表中的列

Oracle 删除表中的列 CONN SCOTT/TIGER DROP TABLE T1; create table t1 as select * from emp; insert into t1 select * from t1; / / --到6000行,构造一个实验用大表T1。 COMMIT; select EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKS from dba_extents where SEGMENT_…

【Qt 学习笔记】Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout 文章编号&…

异常处理/CC++ 中 assert 断言 应用实践和注意事项

文章目录 概述assert 本质浅析Release版本下的assert是否生效默认设置下 QtCreator环境 assert 过程默认配置下 VS环境 assert 过程配置VS发布模式下的断言生效VS环境Release版本的UI程序Release下请当我不生效 请勿滥用assert导致逻辑错误再强调不要在assert内执行逻辑功能怎敢…

react18【系列实用教程】useContext —— Context 机制实现越层组件传值 (2024最新版)

什么是 Context 机制? Context 机制是 react 实现外层组件向内层组件传值的一种方案,父组件可以向其内部的任一组件传值,无论是子组件还是孙组件或更深层次的组件。 实现步骤 1.使用createContext方法创建一个上下文对象 Ctx 2.在顶层组件中通…

轮转数组 与 消失的数字

轮转数组 思路一 创建一个新内存空间,将需轮转的数依次放入,之后在把其它数放入 代码: void rotate(int* nums, int numsSize, int k) {k k % numsSize;// 确定有效的旋转次数if(k 0)return;int* newnums (int*)malloc(sizeof(int) * nu…

An 2024下载

An2024下载: 百度网盘下载https://pan.baidu.com/s/1cQQCFL16OUY1G6uQWgDbSg?pwdSIMS Adobe Animate 2024,作为Flash技术的进化顶点,是Adobe匠心打造的动画与交互内容创作的旗舰软件。这款工具赋予设计师与开发者前所未有的创意自由&#x…

设计模式-结构型-桥接模式-Bridge

桥接模式可以减少类的创建 矩阵类 public class Matrix {private String fileName;public Matrix(String fileName) {this.fileName fileName;}public String getFileName() {return fileName;} } 图片抽象类 public abstract class Image {protected ImageImp imp;public …

vivado Kintex UltraScale 配置存储器器件

Kintex UltraScale 配置存储器器件 下表所示闪存器件支持通过 Vivado 软件对 Kintex UltraScale 器件执行擦除、空白检查、编程和验证等配置操作。 本附录中的表格所列赛灵思系列非易失性存储器将不断保持更新 , 并支持通过 Vivado 软件对其中所列非易失性存…

深入解析MySQL中的事务(下)

MySQL事务管理 3. 隔离性(Isolation)查看和设置隔离级别隔离级别作用域区别与解析 四种隔离级别解析小结 4. 一致性(Consistency)如何保持一致性 5.“保持原子性、隔离性、持久性就能保证一致性”的理解: 四、如何理解…