<p class="ql-block ql-indent-1">原以为入门教程做个三四期就结束了,没想到一转眼都已经到了九…😱 九为数之极,该讲的基础知识也讲的差不多了,今天就来为它画个句号吧。</p> <p class="ql-block ql-indent-1">七月初应家人邀约进入美篇(注册挺早但基本没用过),发现这里AIGC相关内容几近空白,于是开始做SD入门教程,两个月下来虽然留言交流者寥寥无几,但看到许多经常来逛的小伙伴已经默默晒出了自己的AI画作,葫芦叔也算老怀得慰了。</p> <p class="ql-block ql-indent-1">其实吧,如果只想大致按描述生成几张美图又不介意花点小钱的话,还是比较推荐去玩midjourney,毕竟MJ门槛低下限高,就算闭着眼睛写提示词生出来的图一般也丑不到哪去。国内现在也有镜像和api接入网站了,价格就那样吧,比在官网直接买还便宜一点(限制也更多些)。</p> <p class="ql-block ql-indent-1">但是,如果你对精准构图有要求而不仅仅满足于抽卡,那MJ出图效果再好也不推荐。为啥呢?因为它和SD之间隔着整整一个“图生图”体系。有人可能立马要说了,葫芦叔你没玩过MJ就别乱说,人家明明有图生图功能——没错,它有,但其实没有😂。在MJ中,无论使用/describe命令还是直接垫图,<span style="color:rgb(237, 35, 8);">实际上都是在拿用户输入的图像反推提示词,再把得到的提示词输入文生图模块来实现偷梁换柱式的伪图生图</span>。所以你会发现要想在MJ里完全复现一张非AI生成的图片,几乎是个不可能完成的任务,精准的指定构图更是想都别想。</p> <p class="ql-block ql-indent-1">难道SD就能做到吗?——不但能,而且还能玩出花🌸 别忘了stable diffusion的语意就是稳定扩散,通过对图像加噪去噪来实现扩散成像正是它的看家本领,别说复现,就是想把图像原封不动的放大十几倍也不在话下,事实上我们在文生图里使用的高清修复就是一次附带高清放大的图生图。</p> <p class="ql-block ql-indent-1"><br></p><p class="ql-block ql-indent-1">在SD-webUI中,图生图是独立于文生图的一大体系,包括图生图、涂鸦、局部重绘、涂鸦重绘和蒙版重绘。而吐司提供的只是一个阉割版的基础图生图功能,能做到什么呢?让我们来试试看吧。打开吐司随便选个底模,点击工作台中部的图生图按键,选择之前生成的处女作,把原来的描述词改成一个男人并加入一些男性相关特征比如胡子、短发、男性气质、酷,分别把重绘幅度设为0.2、0.6和1,点击生成得到以下结果:</p> <p class="ql-block ql-indent-1">可以看到,重绘幅度0.2(左)的时候,我们输入的提示词完全失效,得到的基本就是原图;0.6(中)的时候,女人变成了男人,但大致的构图和部分人物特征得到了保留;重绘幅度为最大值1(右)时,则完全按照提示词生成了一张全新图像。这说明SD在图生图的过程中既参考了我们输入的原始图像,又在此基础上根据提示词对图像做了修改,而<span style="color:rgb(237, 35, 8);">控制二者平衡的参数就是重绘幅度,该数值越低(最低0.1),原图权重越高</span>,所以当我们把重绘幅度拉到0.2以下时,就可以通过upscale脚本下的各类放大算法来无损放大图片了(吐司里没有脚本扩展,只能用高清修复代替)。</p> <p class="ql-block ql-indent-1"><br></p><p class="ql-block ql-indent-1">图生图的另一个常用功能是局部重绘,吐司在昨天的更新里刚刚加入了这个功能,不过目前只能用于自己生成的图像而且操作界面似乎也还没有完善,感兴趣的小伙伴可以打开电脑到哩布哩布AI里尝试。其原理就是<span style="color:rgb(237, 35, 8);">把图像的一部分用画笔勾选出来形成蒙版,然后只针对蒙版内容(也可以排除蒙版内容)进行图生图操作</span>,以实现修复图像或局部改变图像的目的,例如帮助下图中这位小姐姐找回失去的手臂:</p> <p class="ql-block ql-indent-1">虽然最新版本的MJ里也加入了局部重绘功能,但正如上文所述,除非彻底推倒重来改写算法,否则受限于模型底层结构的MJ无论如何都无法做到真正意义上的图生图,只能通过不断完善文生图体系来曲线救国。这种做法面对普通的图生图功能或许尚可一战,但随着今年3月一款基于SD图生图算法的神级插件横空出世,MJ业界龙头的位置彻底易主,也让原本只能作为玩具的AI绘图一夜之间跃升为生产工具,多个相关行业业态随之改变。这款里程碑式的插件,就是ControlNet(控制网络)。</p> <p class="ql-block ql-indent-1">ControlNet虽然只是SD的一个扩展插件,但它实际上是多个不同体系不同功能的控件合集,这些控件既能够独立运作,也可以联合运行,并且完全兼容SD其它功能和扩展,甚至还诞生了如openpose editor、depth lib等专门服务于ControlNet子控件的“孙控件”,其具体应用单独列出来足以形成一套内容丰富的系列课程,也超出了咱们入门教程的教学范畴,所以在此,葫芦叔只简单举例来为大家说明它的强大之处。</p> <p class="ql-block ql-indent-1"><br></p><p class="ql-block ql-indent-1">仍然以吐司为例(我真应该找他们要广告费),在“添加LoRA风格”的旁边就可以看到“添加ControlNet”按键,点击后弹出子控件列表。</p> <p class="ql-block ql-indent-1">这里的ControlNet只是一个阉割版本,可即便如此,琳琅满目的控件也足以让新手头晕目眩,葫芦叔就给大家推荐几个较为常用的吧。首先是openpose,也就是列表里的第一个子控件。它的作用是读取人体姿态——<span style="color:rgb(237, 35, 8);">注意仅限人型生物,阿猫阿狗啥的是不行的哦</span>。我们点击控件打开参数设置界面,任选一张姿势图或者自己从相册里导入一张,恩,就这个鼠女郎吧,预处理器选择openpose_full。</p> <p class="ql-block ql-indent-1">图片导入后稍微等一下,就可以看到右侧空白处生成了一张由点和线组成的骨骼图(如果选择预设姿势会直接读取骨骼图,不需要预处理),这就是openpose插件实际使用的控制图形,之前选择预处理器就是为了更准确的从参考图中提炼出这个骨骼图。点击确认回到工作台,可以看到这里有两个参数,位于上方的是Openpose权重值,默认为1;下方的Control step是控件介入时间,用于调整控件参与图像绘制的具体时段,两个数值分别对应开始时间和结束时间,这里我们全都保持默认不做修改。</p> <p class="ql-block ql-indent-1">正好刚才演示图生图时选择的底模和一个男人的提示词都还在,就让我们直接点击生成看看效果:</p> <p class="ql-block ql-indent-1">哎妈……这有点辣眼睛-_-||,还是到提示词里增加个黑外衣、灰裤子,重新生成一次吧。</p> <p class="ql-block ql-indent-1">通过和参考图的对比不难看出,根据提示词描述生成的图像内容已经和参考图大相径庭,但鼠女郎双手叉腰的姿态却被完美的保留了下来。这就意味着我们可以在自定义人物特征的前提下精准控制人物姿态,如果单凭文生图+抽卡想做到这种程度那恐怕得不吃不喝抽上一年😂</p> <p class="ql-block ql-indent-1">事实上我们不但可以从图片中读取人物姿态,还可以利用openpose editor插件来自行编辑人物姿态或者添加多个人物角色,这插件甚至还有个3D版本可以像建模一样实现360度无死角的精准调节(只是操作有点反人类)。当然了这些东西哩布哩布AI和吐司里都没有,就不展开讲了。</p> <p class="ql-block ql-indent-1"><br></p><p class="ql-block ql-indent-1"><br></p><p class="ql-block ql-indent-1">说到吐司,丫这两天估计是上TX黑名单了,页面和小程序频频被封,ControlNet模块也出了问题一调用就报错,没办法,本节课后半部分内容就用葫芦叔自己家里部署的SD-webUI来演示吧。</p> <p class="ql-block ql-indent-1"> <span style="font-size:18px;">上面这张图里展示的就是SD-webUI的ControlNet界面,可以看到光是子控件就有18个,每个控件至少对应一个模型和N个预处理器,咱们这里就挑重点简单过一下。既然教学设备升级了,那就给参考图像也升个级吧——有请大名鼎鼎的古墓丽影女主角劳拉·克劳馥,掌声欢迎~</span></p> <p class="ql-block ql-indent-1"><br></p><p class="ql-block ql-indent-1">好现在请大家把目光从劳拉小姐姐身上移开,观察下图中罗列的这四张黑白图像,它们和之前的openpose骨骼图一样,都是从参考图中经由预处理器提取出来供ControlNet读取的控制图,分别属于canny(左上)、lineart(右上)、softedge(左下)和sketch(右下),这四个控件的作用机制比较类似,都是采用边缘检测算法来复现图像轮廓,区别主要在于边缘检测的精度和算法延展性,所以干脆就放在一起做个对比。</p> <p class="ql-block ql-indent-1">其实从这四张控制图就能大致观察到:canny(硬边缘)检测出的轮廓线最为密集,生成的控制图像有点像以前小人书上那种白描线稿,只不过变成了黑底白线(这下真成白描了😂),通常情况下它都能够以较高的精度还原图像轮廓,让我们来看看这次的效果如何:</p> <p class="ql-block">不难看出canny的整体表现还是很不错的,虽然有些小瑕疵,但通过抽卡或完善提示词都可以轻易解决。</p><p class="ql-block ql-indent-1">再来看lineart,翻译过来就是线稿——没错不用怀疑,大家平时在各种P图软件上看到的什么一键提取线稿用的就是阉割版的它了。选择不同的预处理器提取的线稿效果也不同,这里葫芦叔使用的是适用于真实系图像的lineart_realistic,可以看到它生成的控制图和canny很像,但线条相对更少更精炼,还隐约描绘出了一定的空间关系,实际效果如下:</p> <p class="ql-block">怎么样,效果是不是很不错?人物的整体形态、肌肉线条甚至肘部的皮肤细节都得到了近乎完美的复现,事实上在这几种基于边缘检测的子控件中,lineart对人物面部的还原程度通常也是最高的。</p><p class="ql-block ql-indent-1">接下来轮到softedge(软边缘)出场啦,看这个译名就知道相比canny(硬边缘)它的效果必定是更加柔和平滑的,从控制图也能看出其线条更少也更粗,并且通过笔触表达出一定的透视关系,有点像粉笔画的感觉,那就让我们看看它的实际表现如何吧:</p> <p class="ql-block">虽然细节表达上有轻微的损失,但整体效果还是令人满意的,就连背景也得到了相当程度的还原。实际应用中,我们通常会根据参考图和需求的不同,在canny、lineart和softedge中选择一种或组合开启多种来实现图像轮廓控制。</p><p class="ql-block ql-indent-1">最后介绍一下边缘检测算法家族中最“叛逆”的成员——scribble/sketch(涂鸦/草图)。听名字就知道这哥们属于张扬洒脱放荡不羁的类型,控制图的线条也是粗的吓人,这大概就是所谓的神经大条吧😅,废话不说直接看它表现:</p> <p class="ql-block">嗯…虽说离经叛道,整体效果倒也自成一体,当然面部是我用ADetailer修复过的不然根本没法看…等一下,后面这个诡异的人脸又是什么鬼😱</p><p class="ql-block ql-indent-1">咳,总之这就是sketch,一个总会在不经意间带给你惊喜(或惊吓)的小调皮。虽然可控性稍差,但却具备丰富的创意和细节,草图补完更是它的拿手绝活儿,某些软件上的灵魂画手功能就是通过它来实现的;如果运用得当,有时候它还可以产生类似openpose的效果,下面就是分别由openpose(上)和sketch(下)生成的赛博朋克风格图像,你更喜欢哪个版本呢?</p> <p class="ql-block ql-indent-1"><br></p><p class="ql-block ql-indent-1"><span style="color:rgb(237, 35, 8);">边缘检测系列控件可以帮助我们很好的实现图像轮廓控制,并且适用于任何内容而非如openpose般仅作用于人体</span>,但由于无法准确判断透视关系,在线条重合例如人物四肢交叠时有可能会产生误读。仔细观察可以发现上图中sketch生成的赛博朋克小姐姐腿部就出现了这种现象。</p><p class="ql-block ql-indent-1">为了避免这种错误,在面对要求精准控制的成像任务时,我们通常会同步开启其他类型的控件来加以辅助,例如normalmap(法线贴图),经常玩3D建模的朋友对它一定不陌生,这是一种通过法线为平面像素添加高度值,以实现在二维图像上模拟三维空间关系的贴图技术,应用在controlnet中的实际效果如下:</p> <p class="ql-block ql-indent-1">实际上,相比normalmap,我们更多时候会使用另一个控件来提取透视关系,那就是depth(深度)。depth生成的控制图很像我们在医院拍的X光片,通过不同的灰度值给每个像素添加高度表达,为平面图像赋予空间属性,以便更好的处理透视和明暗关系。下面这张就是由depth生成的图像:</p> <p class="ql-block">除了复现图像,depth还可以用来模拟浮雕效果、镂空效果或生成立体艺术字;甚至有大神专门为它开发了一款名为depth-lib的插件,支持在任意图片的任意部位导入任意深度图形,以实现精准构图和局部塑形;C站上更有热心的道友发布了包含900种标准手部姿势的深度图合集,供大家重塑生图时崩坏的手部。</p> <p class="ql-block ql-indent-1"><br></p><p class="ql-block ql-indent-1">除此之外,还有可以将图像无损放大16倍的tile(分块处理)控件,它的功能极其多样化,既能快速放大图像,也能在不改变图像大小的情况下,根据提示词为画面添加细节,效果比许多同类的功能性LoRA更加出色:</p> <p class="ql-block">我们还可以根据实际需求,选择不同的预处理器,来实现色彩增强或背景模糊等效果,也能够利用它对光源进行精准控制,或者搭配特定的参数来制作最近流行的光影艺术字,几乎可以说是一款万能控件。</p> <p class="ql-block ql-indent-1">如果对画布尺寸不满意,还可以利用ControlNet里优化版的局部重绘inpainting控件,在完全不改变原图的前提下对画面进行扩充:</p> <p class="ql-block">熟悉平面设计的朋友是不是觉得似曾相识?没错这就是新版PS吹爆的内容识别填充功能,SD打从问世就有而且做得更好。扩展填充在这里只是基础,我们完全可以根据需求在改变画布尺寸的同时对图像内容和艺术风格做出调整:</p> <p class="ql-block ql-indent-1"><br></p><p class="ql-block ql-indent-1">SD-webUI目前最多支持同时加载10个ControlNet子控件(默认3个,可以在设置里更改)。实际创作中,我们需要的肯定不只是复现图像,也不会仅仅依靠ControlNet完成所有工作,正如之前说过的,SD是由各个功能模块共同构成的复杂生态,ControlNet也不例外,只有合理搭配底模、LoRA、提示词和其它各项参数,才能真正发挥它的作用。例如我们前面演示过的,利用openpose结合提示词改变外部环境、人物着装和面部表情:</p> <p class="ql-block ql-indent-1"><br></p><p class="ql-block ql-indent-1">或者选择InstructP2P控件,结合提示词和水墨写意风格的LoRA来改变艺术风格:</p> <p class="ql-block ql-indent-1"><br></p><p class="ql-block ql-indent-1">再进一步,将ControlNet权重降低到0.8,介入时间设置为0.1-0.8来减弱控制强度,在可控范围内改变构图生成全新图像:</p> <p class="ql-block"><br></p><p class="ql-block ql-indent-1">还可以组合运用IP-Adapter和Reference控件,搭配适当的提示词,在保留人物特征的前提下改变构图和姿态:</p> <p class="ql-block ql-indent-1"><br></p><p class="ql-block ql-indent-1">假设原图是一个游戏中的角色立绘,那我们刚刚生成的这些就是可以拿来卖钱的角色皮肤了,而葫芦叔制作这些皮肤花费的平均时间大约是…5分钟(含抽卡、优化)。</p> <p class="ql-block ql-indent-1"><br></p><p class="ql-block ql-indent-1">相信看到这里,大家就能够理解,为什么SD+ControlNet的组合能让诸多游戏公司选择裁撤原画师或提高原画工作强度…而这还远远不是全部,正如之前在<a href="https://www.meipian.cn/4u4kjk50" target="_blank" style="background-color:rgb(255, 255, 255); font-size:18px;">第二课</a>里说过的,目前市面上许多以收费形式提供的所谓最新AI成像技术,其实不过是以API形式接入ControlNet的一些子模块孙模块或者其它免费开源的SD插件和AI工具罢了,比如刚才说过的线稿提取/线稿上色,使用的就是ControlNet_lineart或sketch:</p> <p class="ql-block"><br></p><p class="ql-block">AI换装/AI证件照/AI写真/AI婚纱照:SD_LoRA/SD_roop</p> <p class="ql-block"><br></p><p class="ql-block">AI二维码:ControlNet_QR_code_monster</p> <p class="ql-block ql-indent-1"><br></p><p class="ql-block ql-indent-1">光影文字则是使用咱们刚才介绍过的tile或者ControlNet_brightness/illusion(图放文末)、还有什么照片开口说话(SD_sad talker)、视频转逐帧动画(SD_Ebsynth)……等等吧,这里就不一一列举了。</p> <p class="ql-block ql-indent-1">总之,对于包括midjourney在内的其它AI绘图工具而言,掌握了文生图的提示词书写方法并能够熟练运用模型和风格,就可以毕业了;可在Stable diffusion的世界里,学会这些只能算是迈出了第一步。</p><p class="ql-block ql-indent-1">但不管怎么说,都要恭喜屏幕前的各位小伙伴,完成了这个入门教程,也就意味着你已经正式步入了AI法师的行列。送君千里终须一别,这篇已经写的太长,还有许多没能涵盖到的SD控件和功能,就留给大家自行探索吧。</p> <p class="ql-block ql-indent-1">结束之前说两句题外话。之前把教程发了朋友圈,结果好多小伙伴以为吐司是我搞的,甚至还有跑来应聘的(ー_ー)!! 只能说…谢谢各位瞧得起,选吐司做教程不过是因为它支持网页浏览方便做链接罢了ヽ(‘ー`)ノ 而且这孩子自打离开B站换了爹以后明显有点飘,商业化小碎步迈的是一二三四有板有眼,模型不给下载不让融合不能转载要求署名…要不是考虑阵前换将不方便大伙儿学习,哼<(`^´)></p> <p class="ql-block ql-indent-1">话说回来,SD源码是人家免费开源的现成东西,再怎么套壳也变不成自己的,第一波信息差红利吃完之后,能拿来搞商业化运作的就只有原创插件和原创模型,部分功能和模型实行会员收费制确实是条可行的路子,甚至可能成为趋势。</p><p class="ql-block ql-indent-1">所以还是那句话,<span style="color:rgb(237, 35, 8);">有条件的小伙伴强烈建议学习本地部署webUI、comfyUI或者官方新出的SwarmUI</span>,自己坐家里想怎么玩怎么玩谁也限制不了你,甚至还可以创收。没条件的就趁现在行业草创资本拱火之际逮着羊毛使劲薅,哪家免费好用用哪家,至少短时间内肯定是不需要花一毛钱就能玩到市面上流通的大多数SD模型。这里继续附上秋叶老祖推荐的国内AI绘图工具,感兴趣的小伙伴自己去搜索尝试吧。</p> <p class="ql-block ql-indent-1">最后提个小小建议,希望各位道友在晒出自己的AI画作供人欣赏赞叹之余,也能在评论区里为那些对此产生兴趣却不得其门而入的朋友指点迷津,毕竟若是没有分享精神,你我想要像今天这样畅享AI成像乐趣怕只是痴人说梦。饮水思源,人家stability AI连SD源码这样的大杀器都毫无保留的分享出来了,咱也不能让歪果仁看笑话不是┐( ‾᷅㉨‾᷅ )┌</p> <p class="ql-block ql-indent-1">好啦,咱们的入门教程到这里就正式结束了,感谢小伙伴们的支持和关注,葫芦叔也要抓紧时间炼丹去了,今后有什么好玩的还会在<a href="https://www.meipian.cn/4uq78hh3" target="_blank" style="background-color:rgb(255, 255, 255); font-size:18px;">这篇资源汇总</a>里给大家更新的,大伙儿没事就可以去看一眼。有模型炼制需求的,也欢迎找我合作(闲聊勿扰哦)。</p><p class="ql-block ql-indent-1">完结~撒花🌸🌸🌸</p>