小明明的技术分享
http://www.dongwm.com/atom.xml
2023-05-18T13:29:05.375386Z
Werkzeug
Stable Diffusion高级教程 - Controlnet
206
2023-05-16T00:24:18.442599+00:00
2023-05-16T00:24:18.442599+00:00
dongweiming
本文介绍SD最重要的Controlnet
<h3 id="前言">前言</h3>
<p>在 ControlNet 出现之前,AI 绘画更像开盲盒,在图像生成前,你永远都不知道它会是一张怎样的图。ControlNet 的出现,真正意义上让 AI 绘画上升到生产力级别。简单来说可以用 ControlNet 精准控制 AI 图像的生成效果。</p>
<p>ControlNet 就是在大型扩散生成模型的基础上,再加上一个结构,使得扩散生成模型能够接受一个新的 “图像输入”。并且对模型的输出起到控制作用,使其与输入图像类似。</p>
<p>在实际的 AI 绘图,用户要解决 2 个关键问题:</p>
<ol>
<li>图像的精准控制。例如确定背景、结构等</li>
<li>图像的风格控制。例如确定动作、表情等</li>
</ol>
<p>无论你使用再准确的提示词再好的微调模型也是无法实现的。而通过 ControlNet 的应用模型,可以让这 2 个问题获得解决。所以不仅是常见的人物画像,在建筑、室内、产品图、平面设计、海报等等领域都可以提高生产力甚至做出设计师难以做出的效果。</p>
<h3 id="安装">安装</h3>
<p>需要先安装扩展,点击「Extensions」Tab 下的「Install from URL」子 Tab,然后输入:<a href="https://github.com/Mikubill/sd-webui-controlnet,再点击「Install」,在提示安装完成后,点击「Apply">https://github.com/Mikubill/sd-webui-controlnet,再点击「Install」,在提示安装完成后,点击「Apply</a>and restart UI」按钮重启 UI。</p>
<p>接着需要下载应用模型。我使用了最新的 ControlNet-v1-1-nightly 的模型:</p>
<figure class="highlight bash" data-lang="bash"><table><tbody><tr><td class="code"><pre class="hljs bash"><span></span>wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11e_sd15_ip2p.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11e_sd15_shuffle.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11e_sd15_tile.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11e_sd15_depth.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11f1e_sd15_tile.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11f1p_sd15_depth.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_canny.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_inpaint.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_lineart.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_mlsd.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_normalbae.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_openpose.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_scribble.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_seg.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/blob/main/control_v11p_sd15_softedge.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/blob/main/control_v11p_sd15s2_lineart_anime.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15_softedge.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
wget https://huggingface.co/lllyasviel/ControlNet-v1-1/resolve/main/control_v11p_sd15s2_lineart_anime.pth -P ~/workspace/stable-diffusion-webui/models/ControlNet
</pre></table></figure>
<p>这些模型文件都在 1.3G 左右,文件比较大,可以按需下载。</p>
<h4 id="解决安装报错问题">解决安装报错问题</h4>
<p>我在安装这个插件时,发现报错了:</p>
<figure class="highlight bash" data-lang="bash"><table><tbody><tr><td class="code"><pre class="hljs bash"><span></span>xcrun: error: invalid active developer path <span class="o">(</span>/Library/Developer/CommandLineTools<span class="o">)</span>, missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
</pre></table></figure>
<p>需要安装 Mac 开发工具再重新安装:</p>
<figure class="highlight bash" data-lang="bash"><table><tbody><tr><td class="code"><pre class="hljs bash"><span></span>➜ xcode-select --install
➜ <span class="nb">cd</span> ~/workspace/stable-diffusion-webui
➜ venv/bin/pip install svglib fvcore
</pre></table></figure>
<h3 id="初体验">初体验</h3>
<p>我们通过一个李多惠的照片在 txt2img 模式下生成图片作为例子:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236669883-38f254dd-464d-4f33-b2b4-263a96eec9e6.jpg" alt=""></p>
<p>这个招聘的动作其实是复杂的,用提示词不可能表达出来,现在有了 ControlNet 就非常容易还原,下面是用 canny、openpose 这个两个不同的应用模型,加上对应大模型和提示词最终生成的图:</p>
<p>Counterfeit:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236670546-5f555d12-3deb-4ea9-bbff-d69cb34111e8.jpeg" alt=""></p>
<p>ReV Animated:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236671900-ef72bfdc-73be-46a7-a17d-f92bb1f4400a.jpeg" alt=""></p>
<p>可以看到每个图都固定对了动作,衣服结构、头发等细节也都非常还原。</p>
<p>另外这次我们只讨论动作是不是正确,手部问题一直是 AI 绘画的难点 (SD 很难理解人应该有 5 个手指🤦🏻♀️),负面提示词也很难解决,我之后会专门写一篇文章介绍怎么修复。</p>
<p>接着了解一下各个参数及其意义:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236672180-6d16ac49-982e-4f40-bfe5-f08b55e11d03.pn" alt=""></p>
<ol>
<li>Single Image。上传单张图片。</li>
<li>Batch。处理多张图片。Input Directory 填写的是待处理的图片所在路径。</li>
<li>Enable。在生图时激活 ControlNet,必选。</li>
<li>Low VRAM。生图使用 ControlNet 会吃更多 VRAM,此选项可降低 VRAM 使用量。它是建议 8G 以下显存开启,我 16G 也会开启。</li>
<li>Pixel Perfect。由 ControlNet 自动决定 Preprocessor 分辨率。</li>
<li>Allow Preview。允许预览生图结果,会显示该模型侦测的线条或骨架。一会我们会展开</li>
<li>Preprocessor 预处理器。Preprocessor 是先将上传的图片处理过一轮,例如 Scribbles 会将彩色图片转成线稿。通常 Preprocessor 和下面 Model 二者要一致,但如果你的图片不需要处理 (例如已经在 PS 里处理过了),Preprocessor 可留空。</li>
<li>Model。设置生图的时候使用哪个 ControlNet 模型。</li>
<li>Control Weight。ControlNet 在生图时的权重。</li>
<li>Starting Control Step。开始参与生图的步数。</li>
<li>Ending Control Step。结束参与生图的步数。</li>
<li>Preprocessor Resolution。预处理器的分辨率。当然我也建议勾选上面的「Pixel Perfect」让 ControlNet 自动决定。</li>
<li>Control Mode。控制生图时,要 AI 平衡二者 (Balanced),或是偏重你的提示词 (My prompt is more important),还是偏重 ControlNet (ControlNet is more important)。</li>
<li>Resize Mode。当生成图和原图的尺寸不一致时选择调整模式。</li>
</ol>
<h3 id="应用模型介绍">应用模型介绍</h3>
<p>ControlNet 包含多个应用模型,这小节介绍几个主要的模型。这节的内容大部分来自于延伸阅读链接 5,我觉得比我之前的写的好,所以直接替换了。</p>
<h4 id="OpenPose姿势识别">OpenPose 姿势识别</h4>
<p>通过姿势识别,达到精准控制人体动作。除了生成单人的姿势,它还可以生成多人的姿势,此外还有手部骨骼模型,解决手部绘图不精准问题。以下图为例:左侧为参考图像,经 OpenPose 精准识别后,得出中间的骨骼姿势,再用文生图功能,描述主体内容、场景细节和画风后,就能得到一张同样姿势,但风格完全不同的图。</p>
<p><img src="https://user-images.githubusercontent.com/841395/236655611-fbd16417-30ad-4cac-b057-24ff31ff402b.jpeg" alt=""></p>
<h4 id="Canny边缘检测">Canny 边缘检测</h4>
<p>Canny 模型可以根据边缘检测,从原始图片中提取线稿,再根据提示词,来生成同样构图的画面,也可以用来给线稿上色。</p>
<p><img src="https://user-images.githubusercontent.com/841395/236655636-c1514649-f488-43fa-8c04-1794fef7991b.jpeg" alt=""></p>
<h4 id="HED边缘检测">HED 边缘检测</h4>
<p>跟 Canny 类似,但自由发挥程度更高。HED 边界保留了输入图像中的细节,绘制的人物明暗对比明显,轮廓感更强,适合在保持原来构图的基础上对画面风格进行改变时使用。</p>
<p><img src="https://user-images.githubusercontent.com/841395/236655655-1a9e9825-d703-4c05-84e7-35629dcd0caa.jpeg" alt=""></p>
<h4 id="Scribble黑白稿提取">Scribble 黑白稿提取</h4>
<p>涂鸦成图,比 HED 和 Canny 的自由发挥程度更高,也可以用于对手绘线稿进行着色处理。</p>
<p>![](<a href="https://user-images.githubusercontent.com/841395/23">https://user-images.githubusercontent.com/841395/23</a>...</p>
<p>原文: <a href="https://www.dongwm.com/post/stable-diffusion-controlnet/">Stable Diffusion高级教程 - Controlnet</a></p>
Stable Diffusion高级教程 - 图生图(img2img)模式
205
2023-05-16T00:23:23.342537+00:00
2023-05-16T00:23:23.342537+00:00
dongweiming
介绍Stable Diffusion的图生图(img2img)。顾名思义,除了根据正向和反向提示词之外,还需要基于一张图片生成图。
<h3 id="前言">前言</h3>
<p>现在终于可以介绍 Stable Diffusion 除了文生图 (txt2img) 之外最重要的功能:图生图 (img2img)。顾名思义,除了根据正向和反向提示词之外,还需要基于一张图片生成图。这个模式下功能很多我们挨个说</p>
<h3 id="img2img">img2img</h3>
<p>图生图模式下的默认功能,我们先看一下主界面:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236481184-a2629e58-713a-4def-9c11-5185e906cc68.png" alt=""></p>
<p>上面还是正面提示词和负面提示词,接着是一个上传图片的区域,写着「Drop Image Here - or - Click to Upload」。然后就是相关参数,大部分在文生图里面已经见过,只有<code>Resize mode</code>、<code>Denoising strength</code>是新增的,我们挨个介绍:</p>
<ol>
<li>Resize mode。当上传图片尺寸和要生成的图的尺寸不同时,需要选择调整大小方案。</li>
<li>Sampling Method 用于去噪,平衡生成图的速度和质量。内置多种算法可供选择。目前看起来 DPM++ 2M Karras 用的比较多。</li>
<li>Sampling Steps 是去噪过程的采样步骤数。越多越好,但需要更长的时间。一般在 20-28 之间。</li>
<li>宽度和高度 (Width/Height),输出图像的大小。按需调整即可。</li>
<li>Batch Count 批次数量,我更愿意用下面的 Batch size 调整生产图的总数。</li>
<li>Batch size,每一批次要生成的图像数量。可以在测试提示时多生成一些,因为每个生成的图像都会有所不同。生成的图像总数等于 Batch Count 乘以 Batch size。</li>
<li>CFG (Classifier Free Guidance) scale,提示词相关性, 用于控制模型应在多大程度上遵从您的提示。他有几个只可选: 1 (大多忽略你的提示),3 (更有创意),7 (遵循提示和自由之间的良好平衡),15 (更加遵守提示),30 (严格按照提示操作),常用的是 7,做个平衡。测试时可以换这个值体验区别。</li>
<li>Denoising strength。降噪强度,常翻译成「重绘幅度」,取值范围是 0-1,描述新生成的图片与原图的相似程度,数值越小,采样越少,相似度越高,算的越快 (采样数 = Denoising strength* Sampling Steps)</li>
<li>Seed,生成的每个图像都有自己的种子值,修改这个值可以控制图像的内容。</li>
<li>Script。用户可以编写脚本代码,以实现一些特殊定制的功能。这个未来可以具体说,目前还没有遇到。</li>
</ol>
<p>先具体说说<code>Resize mode</code>(当然上传的图片最好与生图设置的一致):</p>
<ol>
<li>Just resize:调整图片为生图设置的宽高。若上传图片的宽高与生成设置的宽高不一致,则该图片会被压扁。这个我非常不推荐使用,会让图片非常奇怪。</li>
<li>Crop and resize:裁切图片以符合生图的宽高,我最推荐的方式。</li>
<li>Resize and fill:裁切并调整图片宽高,若上传图片的宽高与生成设置的宽高不一致,则多出来的区域会自动填满。</li>
<li>Just resize (latent upscale):调整图片大小为生图设置的宽高,并使用潜在空间放大。</li>
</ol>
<p>这个模式下最主要的就是调<code>Denoising strength</code>参数。我们用下面这张从网上找的新垣结衣的照片来体验:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236483760-3eaae99e-ea3d-43a3-970f-9f67b1df157f.jpeg" alt=""></p>
<p>首先注意,我选择这个图是有 2 个原因的:</p>
<ol>
<li>这个一张人像正面近像,在生成新图后更容易感受到 SD 的模型的作用</li>
<li>照片可以看到手部有动作,我会生成一张有问题的图让你感受到目前图生图模式的问题</li>
</ol>
<p>我希望通过 SD 把这个真人照片做出动漫的效果,咱们先来个较大的<code>Denoising strength</code>的值,为了方便对比我用了固定的 Seed:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236485744-9361d475-e388-484b-94dc-3fe940b0da11.png" alt=""></p>
<p>我直接把生成参数列出来:</p>
<pre><code>a woman with a short hair and a white shirt is posing for a picture with her hand on her chin, a photorealistic painting, Ayami Kojima, precisionism, perfect face
Negative prompt: dongwm-nt,bad finger, bad body
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 8, Seed: 2345567052, Size: 512x512, Model hash: cbfba64e66, Model: CounterfeitV30_v30, Denoising strength: 0.65, Clip skip: 2</code></pre>
<p>这里有一点需要特别的提一下,正面提示词不是我写的。在图生图模式里,生成按钮左边有 2 个选项,分别是「Interrogate CLIP」和「Interrogate DeepBooru」。在上传图片后,可以通过「Interrogate CLIP」反推出提示词,我这个就是这么生成的。另外也说一下「Interrogate DeepBooru」,这说的是一个开源的女孩图片特征提取器,上传图片可以获得图片的标签,我已经把链接都放在了延伸阅读里面:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236488491-8c95751b-7ac4-414e-9c6a-4616fb2e9888.png" alt=""></p>
<p>PS: 如果你选择<code>DeepBooru</code>反推,不能直接使用那些标签,你需要从中筛选需要的、合理的标签,否则结果会完全偏离。</p>
<p>好的,说回来。之前已经说过,<code>Denoising strength</code>的值越大越和原图不符,所以如果你希望「微调」,这个值不应该大于 0.4,现在我们先取了一个更大的值,你可以看到生成图的人物手部的结果是有问题的。而且注意,负面提示词<code>dongwm-nt</code>本身是包含<code>bad finger,bad body</code>这些的。</p>
<h4 id="图生图不是万能的甚至很难达到你的预期">图生图不是万能的甚至很难达到你的预期</h4>
<p>是的,这是我的体验。这个模式下如果你想要生成你想要的效果,对于大模型、微调模型、提示词、参数等都有要求,在前期,你很可能生成奇怪的图,你需要不断尝试总结经验。</p>
<h4 id="不同的Denoisingstrength效果的区别">不同的 Denoising strength 效果的区别</h4>
<p>我们使用 x/y/z 脚本试试不同的重绘幅度值看看生成的效果:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236490765-86728cd4-5c49-4cc6-b6fc-641ad3469009.png" alt=""></p>
<p>可以看到随着 Denoising strength 变大,越来越不像原图了。</p>
<p>同时,我们还可以重叠各种微调模型,下面是使用了 VAE、Lora 和 HyperNetwork 后的效果:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236490781-54a300f3-1987-4bc5-a126-e5e54cb9501f.png" alt=""></p>
<p>这就是微调模型的作用,不过注意,微调后手部后两张还是会有问题。</p>
<p>PS,这个例子用的主模型是:<a href="https://civitai.com/models/4468/counterfeit-v30">https://civitai.com/models/4468/counterfeit-v30</a></p>
<h3 id="绘图(Sketch)">绘图 (Sketch)</h3>
<p>第二个 Tab 是 Sketch,他适合有美术基础的用户,可以给一张现有的图加东西,或者画出你想要的东西,然后再输入提示词完善,我这个没有画画细胞的人基本不用,在这里也举 2 个例子 (我也就这个水平啦)。</p>
<p>因为我们一会要用笔刷编辑图片,我需要用到颜色,所以加启动参数,重启 webui:</p>
<pre><code>./webui.sh --disable-safe-unpickle --gradio-img2img-tool color-sketch</code></pre>
<p>Ok, 先尝试基于现有图做修改的,我用了下面这张图:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236497253-94aa8a39-2078-450c-9fc7-aae451790381.jpeg" alt=""></p>
<p>上传后就进入了编辑模式,然后我用笔刷选了个粉色的把头发涂变色 (当然提示词中并没有提到粉色头发):</p>
<p><img src="https://user-images.githubusercontent.com/841395/236499833-3d115d8f-7ec3-4df4-9296-94253d47dd39.png" alt=""></p>
<p>可以看到<code>Denoising strength</code>到了 0.7 才看起来正常,前面的那个「涂」的效果很明显。所以如果你使用和原图差别很大的颜色涂,那么需要更大的重绘幅度值,但是相对的,生成图和原图差别很大。如果选择对比色较少的例如黑色,那么重绘幅度 0.4 可能就够了。</p>
<p>接着我们试试完全从零画一幅画 (叫「涂鸦」更合适),为了展示 SD 的厉害之处,我特意选择了一个「复杂」的构图,在本灵魂画手非常努力作画后,看一下生成图的效果这样的:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236507697-7a08351f-2530-4ab2-b037-1dc5870e7628.png" alt=""></p>
<p>注意哈,因为这个模式需要上传图,所以我这里只是截了个终端的黑色区域作为背景图。我知道大家看不懂我的 Sketch🤦🏻 ♀️,解释一下,这幅画我希望展示蓝天白云,下面是草地和几棵树 (提示词也非常直白),草地中间还有一点小溪(实在不知道溪水用什么颜色就直接换个绿区别一下)中间黑色的是背景我没涂东西,主要想看看 SD 会怎么理解。</p>
<p>这个效果我还是很满意的,可以说 0.65 的图已经完全达到我的预想了。</p>
<p>PS: 这种绘画的方法需要更大的<code>Denoising strength</code>值,否则用户就得具有极强的画画天赋啦</p>
<h3 id="局部绘制(Inpaint)">局部绘制 (Inpaint)</h3>
<p>用户指定在图像中特定区域进行修改,而保证其他区域不变。这个我认为图生图模式下最又实用价值的模式,类似换脸、换衣服、换背景等等需要都可以通过它来实现。在上面的 Sketch 里面的例子一,我曾经想给新垣结衣换头发颜色,但是需要<code>Denoising strength</code>值比较大才会看起来正常,但是通过也和原图差别非常大了。而局部绘制可以平缓的给新垣结衣换头发颜色。来试试:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236589097-67b70f54-db98-4ea5-9cb1-fd32368d2933.png" alt=""></p>
<p>我涂黑了头发,当然差不多就可以,SD 会清楚你想把头发改颜色,另外要在提示词加上<code>pink hair</code>让 SD 朝着粉色头发来。可以看到随着<code>Denoising strength</code>增大,头发越来越粉。</p>
<p>接着看一下参数:</p>
<p>![](<a href="https://user">https://user</a>...</p>
<p>原文: <a href="https://www.dongwm.com/post/stable-diffusion-img2img/">Stable Diffusion高级教程 - 图生图(img2img)模式</a></p>
Stable Diffusion高级教程 - 微调模型
204
2023-05-16T00:21:57.071108+00:00
2023-05-16T00:21:57.071108+00:00
dongweiming
本文介绍SD的微调模型
<h3 id="前言">前言</h3>
<p>这节我们专门介绍 Stable Diffusion 里面各个微调模型。</p>
<h3 id="为什么会有这么多类型的模型?">为什么会有这么多类型的模型?</h3>
<p>如果你点开 C 站的过滤器,你会发现模型的类型很多:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236610939-a7bbf07d-df0d-4906-88ff-068c72656348.png" alt=""></p>
<p>除了类型为 Checkpoint 的主模型,以外还有非常多的模型,有些你可能听过有些也是第一次看到,当然,未来还会出现更多类型的这种微调模型。根据我的学习,先解释下为什么会有这么多类型的模型。</p>
<p>这么多模型是模型发展历史的产物。在一开始,Stable Diffusion 是从无到有训练大模型,成本很高。因为训练通用大模型非常烧钱,之前我看其他文章,GPT-3 训练一次的成本约为 140 万美元,对于一些更大的 LLM(大型语言模型),训练成本介于 200 万美元至 1200 万美元之间。除了花钱,也非常耗时间,需要一个专门团队维护。</p>
<p>虽然这种基础模型并没不好用,但是他们打下了很好地基础,之后 Stable Diffusion 所有的模型都是在这种模型基础上微调出来的。不过随着 Stable Diffusion 越来越流行,大模型生成的图越来越不满意不同用户的需求,所以就开始诞生各种调整技术的出现。</p>
<p>一开始是对大模型的参数的训练,这就诞生了在 C 站看到的各个 Checkpoint 类型的模型,这种 Checkpoint 主模型需要的 GPU、时间、人员相对于大模型来说已经非常经济了,但是,Checkpoint 只满足一(多)个类用户的需求,但是细分下去还是细节和准确度不够,也不够灵活,势必出现非常垂直的解决方案。</p>
<p>接着出现了 Embedding 模型,由于它只训练负责的文本理解的模块,体积很小,训练也没什么门槛,效果却不错,逐渐被用户接受。然后相继出现了兼顾效果、文件体积、训练时间、训练难度等方面的 Lora、Hypernetwork。就是这样新模型不断涌现,最近几个月最热门的是 Lora,而最近一个月 Lycoris 效果也非常好。</p>
<p>Textual Inversion 之前已经专门写过一篇,而 Controlnet 之后会专门写,所以这篇仅介绍美学梯度、Lora、Hypernetworks、LyCORIS 这几个模型。</p>
<h3 id="美学梯度(AestheticGradients)">美学梯度 (Aesthetic Gradients)</h3>
<p>它的思路是在通过一张或者几张参考图生成一个美学模型,最终对提示词进行调整和加权。</p>
<p>原项目是:<a href="https://github.com/vicgalle/stable-diffusion-aesthetic-gradients">https://github.com/vicgalle/stable-diffusion-aesthetic-gradients</a>,其中 <a href="https://github.com/vicgalle/stable-diffusion-aesthetic-gradients/tree/main/aesthetic_embeddings">aesthetic_embeddings</a> 目录下有一些准备好的 Embedding。</p>
<p>如果你想要使用它,需要使用<a href="https://github.com/AUTOMATIC1111/stable-diffusion-webui-aesthetic-gradients">https://github.com/AUTOMATIC1111/stable-diffusion-webui-aesthetic-gradients</a>这个扩展,这样就可以在「Aesthetic imgs embedding」里面选择对应的 Embedding。</p>
<p>现在它已经是落后的模型方案了,效果相对于其他方案来说比较差,且大模型可能以及集成它的算法,现在已经没什么人用了。</p>
<h3 id="LoRA">LoRA</h3>
<p>LoRA(全称 Low-Rank Adaptation of large language models)直译为大型语言模型的低阶自适应,通过矩阵分解的方式,微调少量参数,并加总在整体参数上,所以它现在主要用来控制很多特定场景的内容生成。</p>
<p>当然我们不需要理解它的算法,你可以简单的认为它是特定概念 (例如画风、动作、特定对象、角色等特征) 图片的训练集即可,他会引导 SD 生成符合训练结果的图片,而不会让 SD 自由发挥。它的模型大小普遍在几十到上百 M,它比较热门的主要原因我觉得是训练难度低且效果非常好。</p>
<p>通过例子看效果,还是用<code>blindbox(大概是盲盒)</code>: <a href="https://civitai.com/models/25995/blindbox">https://civitai.com/models/25995/blindbox</a>。对比下不用 LoRA 和用 LoRA 的区别:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236628218-4fcc32be-e7d5-4b1d-b61e-b0058a90f2ee.jpeg" alt=""></p>
<h3 id="Hypernetwork">Hypernetwork</h3>
<p>Hypernetwork 是 NovelAI 软件开发员 Kurumuz 在 2021 年创造的一个单独的神经网络模型,它和 LoRA 很类似,它是让梯度作用于模型的扩散 (Diffusion) 过程。扩散过程中的每一步都通过一个额外的小网络来调整去噪过程的结果。这个模型主要用于画风。</p>
<p>通过例子看效果,用<code>InCase style</code>: <a href="https://civitai.com/models/5124/incase-style-hypernetwork。对于下不用Hypernetwork和用Hypernetwork的区别">https://civitai.com/models/5124/incase-style-hypernetwork。对于下不用Hypernetwork和用Hypernetwork的区别</a>:</p>
<p><img src="https://user-images.githubusercontent.com/841395/236630209-ed9f2f7e-8e22-4591-bb5e-83a1691211ed.jpeg" alt=""></p>
<p>但是和 Textual Inversion 一样,由于其效果和训练难度的原因(需要设置网络结构、训练参数等),目前并没有成为主流选择。</p>
<h3 id="LyCORIS">LyCORIS</h3>
<p>LyCORIS (Lora beYond Conventional methods) 是最近开始流行的一种新的模型,如其名字是一种超越传统方法的 Lora,但是要比 LoRA 能够微调的层级多,它的前身是 LoCon (LoRA for convolution layer)。</p>
<p>LoCon 和 LoHA (LoRA with Hadamard Product representation) 都是 LyCORIS 的模型算法,如果 C 站模型下载页面如果明确说是 LoCon 那就是 LoHA</p>
<p>现在 stable-diffusion-webui 还没有自带它,所以需要先安装扩展:<a href="https://github.com/KohakuBlueleaf/a1111-sd-webui-lycoris">https://github.com/KohakuBlueleaf/a1111-sd-webui-lycoris</a>。 首先点「Extensions」,再点「Install from URL」把地址输入后点「Install」等待提示完成。</p>
<p>注意和其他扩展不同,安装不能点击「Apply and restart UI」不能...</p>
<p>原文: <a href="https://www.dongwm.com/post/stable-diffusion-models/">Stable Diffusion高级教程 - 微调模型</a></p>
Stable Diffusion高级教程 - VAE
203
2023-05-03T01:46:03.891124+00:00
2023-05-03T01:46:03.891124+00:00
dongweiming
本文介绍SD的微调模型VAE
<h3 id="前言">前言</h3>
<p>这小节我们开始学习 Stable Diffusion 里面的 VAE,它的全称是变分自动编码器 (Variational Auto-Encoder),是机器学习中的一种人工神经网络结构。当然我们都不必了解的它的原理,只需要理解它是在 SD 模型的基础做微调的,类似于我们熟悉的滤镜,让生成的图片调整饱和度。</p>
<h3 id="在页面上显示VAE设置">在页面上显示 VAE 设置</h3>
<p>stable-diffusion-webui 默认页面并没有显示 VAE 设置部分,所以需要先设置一下。首先点击「Settings」,然后点左侧菜单的「User interface」这个 Tab,拉到下面有个选项叫做<code>Quicksettings list</code>,在输入框里面添加<code>,sd_vae,CLIP_stop_at_last_layers</code>:</p>
<p><img src="https://user-images.githubusercontent.com/841395/235550791-5e533fb6-3a40-496b-86a6-e7bb663e4cc0.png" alt=""></p>
<p>最后点击上面的「Apply settings」,在点「Reload UI」就会重新刷新页面,即可看到头部的 VAE 区域:</p>
<p><img src="https://user-images.githubusercontent.com/841395/235550786-f985b23d-a492-4b17-83d2-8c060fda3273.png" alt=""></p>
<p>另外我也顺手打开了<code>Clip skip</code>,在 C 站的图片参数中都有<code>Clip skip</code>选项,默认是 1,需要改成常用的 2,可以简单的理解这个值越高,AI 就会省略越多的分类细项。</p>
<h3 id="下载VAE模型">下载 VAE 模型</h3>
<p>目前我们还没有任何的 VAE 模型,需要下载再使用。VAE 主要是从 Huggingface 下载,而 C 站 VAE 比较少,并没有一个专门的过滤分类,只能通过搜索框输入 vae 过滤:</p>
<p><img src="https://user-images.githubusercontent.com/841395/235550952-aec60057-a516-4b42-afa7-90fe95e19bad.png" alt=""></p>
<p>另外一个方式是看主模型下的提示,很多知名主模型里面会有 VAE 相关的内容,例如有打包 VAE 的模型 (自带的就不需要额外加了),或者在描述中建议你使用什么 VAE。</p>
<p>举个例子: <a href="https://civitai.com/models/6925/realdosmix">RealDosMix</a> 的描述中提到:</p>
<blockquote><p><a href="https://huggingface.co/stabilityai/sd-vae-ft-mse-original/blob/main/vae-ft-mse-840000-ema-pruned.ckpt">https://huggingface.co/stabilityai/sd-vae-ft-mse-original/blob/main/vae-ft-mse-840000-ema-pruned.ckpt</a> <a href="https://huggingface.co/AIARTCHAN/aichan_blend/tree/main/vae">https://huggingface.co/AIARTCHAN/aichan_blend/tree/main/vae</a> Apply VAE. You will get better color results.</p>
</blockquote>
<p>所以我们把这些 VAE 模型下载并把它放入到<code>models/VAE</code>目录下:</p>
<figure class="highlight bash" data-lang="bash"><table><tbody><tr><td class="code"><pre class="hljs bash"><span></span>wget https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.ckpt -O ~/workspace/stable-diffusion-webui/models/VAE/vae-ft-mse-840000-ema-pruned.ckpt
wget https://huggingface.co/AIARTCHAN/aichan_blend/resolve/main/vae/Anything-V3.0.vae.safetensors -O ~/workspace/stable-diffusion-webui/models/VAE/Anything-V3.0.vae.safetensors
wget <span class="s2">"https://huggingface.co/AIARTCHAN/aichan_blend/resolve/main/vae/Berry's%20Mix.vae.safetensors"</span> -O ~/workspace/stable-diffusion-webui/models/VAE/BerrysMix.vae.safetensors
</pre></table></figure>
<p>下载好,然后点击 VAE 设置项右边的刷新按钮就可以看到这些模型了:
...</p>
<p>原文: <a href="https://www.dongwm.com/post/stable-diffusion-vae/">Stable Diffusion高级教程 - VAE</a></p>
Stable Diffusion高级教程 - Script
202
2023-05-01T14:49:35.232980+00:00
2023-05-01T14:49:35.232980+00:00
dongweiming
本文介绍SD的脚本(Script)的用途、常用脚本、安装方法以及如何开发脚本
<h3 id="前言">前言</h3>
<p>这节主要介绍 stable-diffusion-webui 提供的脚本 (script) 功能。脚本和扩展一样也被独立出来,脚本主要是涉及生成图片的逻辑上,不涉及生成算法,类似于 Python 语言的装饰器的用途,可以在生成图片前按照规则调整提示词、参数值等内容,对于执行的每个步骤插入更多的操作。</p>
<h3 id="脚本和扩展的区别">脚本和扩展的区别</h3>
<p>按我的理解,扩展是为了扩充 stable-diffusion-webui 的 UI 界面,所以会涉及前端的静态文件 (如 javascript、CSS 等),所以它会在 Web UI 页面上新增 Tab。</p>
<p>而脚本如其名字,是实现某个功能的 Python 脚本,突出轻便简单,写代码时需要继承<code>scripts.Script</code>这个基类,按照对应的方法编写对应逻辑。</p>
<h3 id="脚本列表">脚本列表</h3>
<p>项目的 wiki 有专门的页面:<a href="https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Custom-Scripts">https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Custom-Scripts</a></p>
<p>这里面列出来当前全部的扩展,但是我还没有用到。目前只用到了官方项目中自带的一些:</p>
<figure class="highlight bash" data-lang="bash"><table><tbody><tr><td class="code"><pre class="hljs bash"><span></span>ls ~/workspace/stable-diffusion-webui/scripts
poor_mans_outpainting.py prompts_from_file.py prompt_matrix.py
custom_code.py postprocessing_codeformer.py sd_upscale.py
img2imgalt.py postprocessing_gfpgan.py xyz_grid.py
loopback.py postprocessing_upscale.py
outpainting_mk_2.py
</pre></table></figure>
<p>这些脚本有的可以在<code>txt2img</code>和<code>img2img</code>模式下都可以使用,有的只能用于<code>img2img</code>模式,请注意。</p>
<p>接下来我重点介绍几个常用的脚本,其他的欢迎大家补充用途和用法</p>
<h4 id="Promptmatrix">Prompt matrix</h4>
<p>如其名字,按照不同的提示词生成图片矩阵。我们过去写提示词,就是一些标签然后逗号隔开。但是如果你想要了解或者不确定几个提示词的组合效果,那么可能你得多次生成,效率低也不方便。</p>
<p>而启用这个脚本后,可以使用<code>|</code>语法分割词,这样会组成多个提示词组合让你一次性的看到效果:</p>
<p><img src="https://user-images.githubusercontent.com/841395/235455919-c778a2de-f2cc-4df8-9d1a-f71287bb40d3.png" alt=""></p>
<p>可以看到正面提示词最后 2 个,用的是<code>headphones|,<lora:blindbox_v1_mix:1>| <lora:iu_V35:1></code>,这样就可以生成一个矩阵图完整的看到这两种 lora 模型以及是否戴耳机的效果:</p>
<p><img src="https://user-images.githubusercontent.com/841395/235455910-2193a7ec-5de0-4310-9e8e-e0fab7a4f5fd.png" alt=""></p>
<p>图里面分别是<code>戴耳机用blindbox</code>、<code>戴耳机用iu</code>、<code>不戴耳机用blindbox</code>、<code>不戴耳机用iu</code>。Btw,可以看到换个 Lora 会让效果差别极大~</p>
<h4 id="X/Y/Zplot">X/Y/Z plot</h4>
<p>无论是初学者还是有一定经验使用 SD 的用户很多时候也不能确定各个参数到底取那个值是最符合需求的,按过去的模式只能是修改参数,然后生成图保存下来,在修改参数然后生成图。不断地循环,最终尝试出最佳的值。但是这个过程是非常漫长繁琐的,而这个<code>X/Y/Z plot</code>脚本可以快速的放我们了解这些功能参数的意义和效果。接下来我们通过调整各个参数生成一个矩阵图,这样非常方便对比出参数的效果。</p>
<p>首先看页面的选择 (提示词等还是用了之前生产的 <a href="https://civitai.com/images/375791?modelVersionId=32988&prioritizedUserIds=266262&period=AllTime&sort=Most+Reactions&limit=20">一张图</a> ,额外加了个负面次<code>nsfw</code>,也就是<code>not safe from work</code>,除此之外我指定了 seed 方便对比):</p>
<p><img src="https://user-images.githubusercontent.com/841395/235453223-243c9dda-26f6-4c74-96a6-29dd4ab7c9ed.png" alt=""></p>
<p>这个例子里 x/y/z 三个维度我都选择了,分别是:</p>
<ol>
<li>采样器,右侧点击黄色图标可以列出全部的采样方案,我这里只列出了部分</li>
<li>CFG scale。<code>5-15 (+3)</code> 表示从 5-12 范围内,按照 + 3 的方式递增,也就是 <code>5,8,11,14</code> 这 4 个值。</li>
<li>Steps。<code>20-35 [3]</code> 是另外一种表达方式,是从 20-35 范围内,找 3 个值,也就是 <code>20,27,35</code> 这 3 个值。</li>
</ol>
<p>注意,你选择的范围越大就越耗时(这是相乘的关系),例如采样器本来有二十多种,我只选择了 3 种。可以通过这样的方式小范围的了解不同参数的值的效果,我这里是一个比较极端的例子 (完成生成大概花了 1 个小时),如果经验多了会慢慢的知道不同参数什么值会更合理。</p>
<p>它的结果的图很大,我截个整体的图,在截取 step 为 27 的子图:</p>
<p><img src="https://user-images.githubusercontent.com/841395/235453805-7d4cdeb5-0386-4828-acd3-c4c95d192279.png" alt=""></p>
<p><img src="https://user-images.githubusercontent.com/841395/235453873-8cc59e28-dcca-427a-b957-79680c6fcd49.png" alt=""></p>
<p>另外不一定需要三个轴都选择,可以只选 2 个甚至 1 个指标,然后生成参数值变化时对图的影响,但是要注意需要固定 seed。</p>
<h3 id="脚本安装">脚本安装</h3>
<p>目前安装脚本也有三种方法,没有推荐偏向,按个人习惯即可。</p>
<h4 id="手动拷贝文件">手动拷贝文件</h4>
<p>第一种是直接把项目中的脚本拷贝到<code>scripts</code>目录下,例如<a href="https://github.com/memes-forever/Stable-diffusion-webui-video">https://github.com/memes-forever/Stable-diffusion-webui-video</a></p>
<p>可以这样:</p>
<p>```bash
wget <a href="https://raw.githubusercontent.com/memes-forever/Stable-diffusion-webui-video/main/videos.py">https://raw.githubusercontent.com/memes-forever/Stable-diffusion-webui-video/main/videos.py</a> -O ~/workspace/stable-diffusion-webui/scripts/vid...</p>
<p>原文: <a href="https://www.dongwm.com/post/stable-diffusion-script/">Stable Diffusion高级教程 - Script</a></p>
Stable Diffusion高级教程 - Extension
201
2023-04-26T13:47:35.961848+00:00
2023-04-26T13:47:35.961848+00:00
dongweiming
本文介绍SD的扩展(Extension)的用途,常用扩展以及如何开发扩展
<h3 id="前言">前言</h3>
<p>这节主要介绍 stable-diffusion-webui 提供的扩展 (extension) 功能。stable-diffusion-webui 为了只保证核心功能并便于管理,将非核心功能解耦并转为扩展和脚本形式提供,这在很多知名项目都有相关实践。这节先介绍扩展。</p>
<h3 id="扩展列表">扩展列表</h3>
<p>项目的 wiki 有专门的页面:<a href="https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Extensions">https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Extensions</a></p>
<p>这里面列出来当前全部的扩展,比如常用的:</p>
<ol>
<li><a href="https://github.com/dtlnor/stable-diffusion-webui-localization-zh_CN">https://github.com/dtlnor/stable-diffusion-webui-localization-zh_CN</a> 简体中文汉化</li>
<li><a href="https://github.com/journey-ad/sd-webui-bilingual-localization">https://github.com/journey-ad/sd-webui-bilingual-localization</a> 双语汉化</li>
<li><a href="https://github.com/civitai/sd_civitai_extension">https://github.com/civitai/sd_civitai_extension</a>C 站的官方扩展,可以自动下载模型</li>
<li><a href="https://github.com/butaixianran/Stable-Diffusion-Webui-Civitai-Helper">https://github.com/butaixianran/Stable-Diffusion-Webui-Civitai-Helper</a> 另外一个 C 站的扩展</li>
<li><a href="https://github.com/DominikDoom/a1111-sd-webui-tagcomplete">https://github.com/DominikDoom/a1111-sd-webui-tagcomplete</a>TAG 自动补全</li>
<li><a href="https://github.com/AUTOMATIC1111/stable-diffusion-webui-aesthetic-gradients">https://github.com/AUTOMATIC1111/stable-diffusion-webui-aesthetic-gradients</a> 根据美学权重优化图片</li>
<li><a href="https://github.com/hnmr293/sd-webui-llul">https://github.com/hnmr293/sd-webui-llul</a> 用于给局部增加细节</li>
<li><a href="https://github.com/Scholar01/sd-webui-mov2mov">https://github.com/Scholar01/sd-webui-mov2mov</a> 制作视频,之后我们还会用得到。</li>
<li><a href="https://github.com/CiaraStrawberry/TemporalKit">https://github.com/CiaraStrawberry/TemporalKit</a> 用于让视频顺滑,之后我们还会用得到它 + Ebsynth。</li>
<li><a href="https://github.com/canisminor1990/sd-webui-kitchen-theme">https://github.com/canisminor1990/sd-webui-kitchen-theme</a> 一个自定义主题,我这里只是提出这个思路,其实还有其他主题就不列出来了,我个人还是比较习惯原版 UI。</li>
<li><a href="https://github.com/AUTOMATIC1111/stable-diffusion-webui-rembg">https://github.com/AUTOMATIC1111/stable-diffusion-webui-rembg</a> 移除图片背景(对,可以用 SD 抠图)。</li>
</ol>
<h3 id="扩展安装">扩展安装</h3>
<p>目前安装扩展有三种方法,没有推荐偏向,按个人习惯即可。</p>
<h4 id="本地克隆">本地克隆</h4>
<p>如官方文档说明,直接克隆代码到 extensions 目录即可</p>
<figure class="highlight bash" data-lang="bash"><table><tbody><tr><td class="code"><pre class="hljs bash"><span></span>git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui-aesthetic-gradients extensions/aesthetic-gradients
</pre></table></figure>
<h4 id="通过UI界面「InstallfromURL」">通过 UI 界面「Install from URL」</h4>
<p>点最后一个 Tab「Extensions」,再点「Install from URL」,和上面的方法差不多,UI 稍微封装了一下:</p>
<p><img src="https://user-images.githubusercontent.com/841395/234532304-098d7487-d540-4fe0-8113-11b2850c8dca.png" alt=""></p>
<p>然后点「Installed」的「Apply and restart UI」重...</p>
<p>原文: <a href="https://www.dongwm.com/post/stable-diffusion-extension/">Stable Diffusion高级教程 - Extension</a></p>
Stable Diffusion高级教程 - Textual Inversion(Embedding)
200
2023-04-26T03:47:08.995476+00:00
2023-04-26T03:47:08.995476+00:00
dongweiming
本文介绍Textual Inversion(Embedding)的具体用途和用法
<h3 id="前言">前言</h3>
<p>今天介绍 Textual Inversion,中文名字是文本反转,在之前的版本里面这个功能叫做 Embedding,也就是文本嵌入。通俗的讲其实就是把提示词打包成为一个提示词。如果你想要稳定的实现某个特定的角色、画风或者动作,通常会输入很多提示词去限定特征,这个是非常有门槛也很考验经验的。Textual Inversion 就是解决这个问题的。</p>
<h3 id="使用别人发布的TextualInversion">使用别人发布的 Textual Inversion</h3>
<p>在 C 站你可以搜到很多已经打包好的 Textual Inversion,打开它的右侧筛选窗口,点击<code>Model types</code>里面的<code>Textual Inversion</code>,这样页面显示的都是打包好的:</p>
<p><img src="https://user-images.githubusercontent.com/841395/234465186-9320e35f-fcda-46f9-920b-489f060df8fa.png" alt=""></p>
<p>例如你想要快速的创建一个《星期三》里面的女主 Addams 风格的图片,其实只需要下载<a href="https://civitai.com/models/4115/jenna-ortega-wednesday-addams-embedding">https://civitai.com/models/4115/jenna-ortega-wednesday-addams-embedding</a>这个 Embedding 包 (只有 30.92kb),然后存放到本地的 embeddings 目录下:</p>
<figure class="highlight bash" data-lang="bash"><table><tbody><tr><td class="code"><pre class="hljs bash"><span></span>mkdir ~/workspace/stable-diffusion-webui/embeddings <span class="c1"># 这个目录可能不存在,需要创建一下</span>
mv ~/Downloads/W3DDDN3SD4Y.pt ~/workspace/stable-diffusion-webui/embeddings
</pre></table></figure>
<p>接着,点击网页右侧「Generate」按钮下面的「show/hide extra networks」按钮会显示一些额外选项,然后点击「Refresh」,在第一个 Tab「Textual Inversion」里面就可以看到这个新的 Embedding 包了,之后就可以直接用<code>W3DDDN3SD4Y</code>作为一个提示词,而不用把那些都输入进来,非常方便。</p>
<h3 id="自定义TextualInversion">自定义 Textual Inversion</h3>
<p>图做多了你会习惯性的使用一些提示词,因为他们会让图的质量变的更好,例如<code>photography, masterpiece, best quality, 8K, HDR</code>等等,那么这正好利用本文的 Textual Inversion 创建一些给自己用,例如我,创建了一个名字叫做 dongwm 的正面,还有一个叫做 dongwm-nt 的负面的。</p>
<p>怎么创建呢,点开页面的「Train」这个 Tab,下面菜单栏第一项就是「Create embedding」,然后输入 Embedding 的名字和相关的提示文本即可,下面是我的正面提示词文本 dongwm 的内容:</p>
<p><img src="https://user-images.githubusercontent.com/841395/234465716-cd5c3649-6314-4c5e-aa29-eb13edf4d068.png" alt=""></p>
<p>点击「Create embedding」按钮就会保存,如果未来你想修改替换它,可以重新准备提示词,然后勾选「Overwrite Old Embedding」再保存。</p>
<p>现在可以在 Tab「Textual Inversion」看到三个 Embedding 包了:</p>
<p>![](ht...</p>
<p>原文: <a href="https://www.dongwm.com/post/stable-diffusion-embedding/">Stable Diffusion高级教程 - Textual Inversion(Embedding)</a></p>
Stable Diffusion高级教程 - 如何使用Stable Diffusion?
199
2023-04-26T03:09:04.589086+00:00
2023-04-26T03:09:04.589086+00:00
dongweiming
本文介绍运行Stable Diffusion的方式,重点是本地部署stable-diffusion-webui,以及体验基本的txt2img
<h3 id="前言">前言</h3>
<p>今天这篇介绍怎么运行 SD,包含在线使用和本地运行 stable-diffusion-webui,并体验效果。</p>
<h3 id="Civitai平台">Civitai 平台</h3>
<p>首先要介绍一个平台: <a href="https://civitai.com/">Civitai</a> 是目前最知名的 Stable Diffusion AI 艺术模型的社区平台,用户把它称为 C 站,它里面有非常多用户上传的模型:</p>
<p><img src="https://user-images.githubusercontent.com/841395/233838320-d2c443d6-9c3c-421f-a287-787b4f1f75e8.png" alt=""></p>
<p>另外可以通过图片过滤,且模型里面会列出相关用户上传的优质图片。图片页面有相关的提示词文本、使用的模型以及采样数据等参数,可以帮助还不熟悉 Stable Diffusion 的用户快速上手:</p>
<p><img src="https://user-images.githubusercontent.com/841395/233838377-f3d5a0da-a5c8-4940-aaef-4dba29435332.png" alt=""></p>
<p>PS: <code>Browing mode</code>选择<code>Everything</code>有惊喜,请做好心理建设哟~</p>
<h3 id="在线使用StableDiffusion">在线使用 Stable Diffusion</h3>
<p>如果你只是想要试玩一下,最简单的方法就是在线访问 Stable Diffusion 官方网站<a href="https://beta.dreamstudio.ai/">https://beta.dreamstudio.ai/</a>,可以免费产生约一百张图,之后需付少许费用。</p>
<p><img src="https://user-images.githubusercontent.com/841395/233838971-cc84eb22-ed17-46bc-9c0d-30267ec280d8.png" alt=""></p>
<p>其实还有一些其他在线服务,但都是阉割版 (例如不支持模型选择,不支持插件等等),无法体现 Stable Diffusion 的真实能力,就不推荐了,大家认准官方就好了。</p>
<h3 id="本地部署StableDiffusion">本地部署 Stable Diffusion</h3>
<p>这个我主推的方式,也是玩 Stable Diffusion 最有意思的地方。目前最主流的方法就是使用 <a href="https://github.com/AUTOMATIC1111/stable-diffusion-webui">https://github.com/AUTOMATIC1111/stable-diffusion-webui</a> 这个项目,本地运行一个 Python 的 Web UI。</p>
<p>首先要明确 AI 绘画需要进行大量的图像处理和计算,所以对于电脑是有硬件要求的:</p>
<blockquote><p> 本地运行需要需要足够大的显存 (独立显卡的内存),最低配置 10GB 显存,越大越好。 内存也不能太小,最好大于 16GB。显存大小决定了你能生成的图片尺寸,一般而言图片尺寸越大,SD 能发挥的地方越多,画面里填充的细节就越多。
通常都是用通过 GPU 来跑 SD,因为 GPU 会加速计算。但用 CPU 跑也是可以的,但是速度会非常慢:例如一张显卡 30 秒就能算好的图,CPU 要算 10 分钟。</p>
</blockquote>
<p>我的电脑是 Macbook M1 架构,所以参照的官方 wiki 文档 <a href="https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Installation-on-Apple-Silicon">Installation on Apple Silicon</a> 配置即可,简单看了下启动脚本,即便不是 Python 开发者我认为也可以顺滑的完成启动过程。接下来是我配置的过程:</p>
<p>首先下载相关依赖和 stable-diffusion-webui:</p>
<figure class="highlight bash" data-lang="bash"><table><tbody><tr><td class="code"><pre class="hljs bash"><span></span>➜ brew install cmake protobuf rust python@3.10 git wget
➜ <span class="nb">cd</span> ~/workspace
➜ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
</pre></table></figure>
<p>目前只是代码克隆下来,还没有任何可用模型,此时可以从文档提到的 <a href="https://huggingface.co/models?pipeline_tag=text-to-image&sort=downloads">Hugging Face</a> 或者 <a href="https://www.Civitai.com">C 站 Civitai.com</a> 下载模型。</p>
<p>模型格式一般是.ckpt 或者.safetensors 作为文件扩展名。格式的区别是:</p>
<p><code>.ckpt</code>: 包含 Python 代码的压缩文件,对于 Python 语言的程序来说很通用方便,缺点是文件很大,一般 2-8G。<code>.safetensors</code>: 只包含生成所需的数据,不包含代码,一般只有几十到几百 M,加载文件也更安全和快速。</p>
<p>我一般从 C 站下载,找了一个例子:<a href="https://civitai.com/models/25995/blindbox">https://civitai.com/models/25995/blindbox</a></p>
<p><img src="https://user-images.githubusercontent.com/841395/233839700-642374fd-0bba-4e6d-aa55-59ea6c9e90ff.png" alt=""></p>
<p>注意,这是一个 Lora 模型 (右侧信息中的 Type 是 LORA),所以和文档说的放在<code>models/Stable-diffusion</code>目录不同,应该放在<code>models/Lora</code>。</p>
<figure class="highlight shell" data-lang="shell"><table><tbody><tr><td class="code"><pre class="hljs shell"><span></span>mv ~/Downloads/blindbox_V1Mix.safetensors ~/workspace/stable-diffusion-webui/models/Lora
</pre></table></figure>
<p>然后拉到页面下面,我找到了一个生成的效果图<a href="https://civitai.com/images/421118?period=AllTime&sort=Most+Reactions&modelVersionId=32988&modelId=25995&postId=128086">https://civitai.com/images/421118?period=AllTime&sort=Most+Reactions&modelVersionId=32988&modelId=25995&postId=128086</a></p>
<p><img src="https://user-images.githubusercontent.com/841395/234440024-c45d5b70-c73c-4e1f-9dc6-038c837cda99.png" alt=""></p>
<p>可以看到生成这个图时候用的各个参数,注意其中的 Model 叫做`revAnimated_v11・,本地也没有需要下载,可以先搜一下就找到了:<a href="https://civitai.com/models/7371/rev-animated">https://civitai.com/models/7371/rev-animated</a></p>
<p><img src="https://user-images.githubusercontent.com/841395/233839915-af9b52e3-13a0-412c-a9ff-bcb28516bdf5.png" alt=""></p>
<p>可以看到右侧的 Type 说明它是一个 CHECKPOINT 的类型,下载并把它放在<code>models/Stable-diffusion</code>目录:</p>
<figure class="highlight bash" data-lang="bash"><table><tbody><tr><td class="code"><pre class="hljs bash"><span></span>mv ~/Downloads/revAnimated_v122.safetensors ~/workspace/stable-diffusion-webui/models/Stable-diffusion
</pre></table></figure>
<p>这里提一下<code>Checkpoint</code>这个模型类型,按我的理解它表示<strong>存档点</strong>,就是可以使用开源的 Stable-diffusion 不同版本的某个点作为模型使用。另外这个模型子类型叫做<code>Checkpoint Merge</code>,也就是它是将多个模型混合在一起,而且合并后不同的模型占了不一样的比例的权重。</p>
<p>然后启动 webUI:</p>
<figure class="highlight bash" data-lang="bash"><table><tbody><tr><td class="code"><pre class="hljs bash"><span></span><span class="nb">cd</span> stable-diffusion-webui
./webui.sh
</pre></table></figure>
<p>第一次启动会下载相关依赖,比较慢,下载完成就会看到启动提示:</p>
<figure class="highlight bash" data-lang="bash"><table><tbody><tr><td class="code"><pre class="hljs bash"><span></span>...
Running on <span class="nb">local</span> URL: http://127.0.0.1:7860
</pre></table></figure>
<p>打开浏览器,访问这个地址就可以看到 Web 页面了。SD 目前支持文生图和图生图 2 个模式,这篇文章先体验文生图,图生图因为需要很多额外的知识我们过段时间铺垫完了再专门写。</p>
<h3 id="文本转图片(txt2img)">文本转图片 (txt2img)</h3>
<p>这是 SD 最基础的功能,将文本提示转换为图像。还是用上面提到的 blindbox 的例子,就用它的各种参数,唯一要提的是「Batch size」选了 8,,就是一次性生成 8 张图 (事实是 9 张,另外一张是全部图的缩略图),然后点右侧的「Generate」,就会开始生成了,大概 10 来分钟 (如果单张图约 1 分钟):</p>
<p><img src="https://user-images.githubusercontent.com/841395/234441778-eb2ecb12-425f-4b7a-8d6f-37e2a0032d9c.png" alt=""></p>
<p>生成的效果非常好。先介绍下各个参数项和用途:</p>
<ol>
<li>左侧最上面「Stable Diffusion checkpoint」是个下拉框,可以选择您想要的模型。有很多已经训练好的模型可供选择,如果你有自己特别的需求,也可以训练自己的模型。</li>
<li>左侧有 2 个文本输入框,上面宽的那个输入正向提示词 (prompt) 文本,表示你希望这个图符合什么要求,下面窄的输入反向提示词 (Negative Prompt) 文本,表示这个图不希望符合什么要求。提示词可以是英文短句或单词,以逗号进行分隔,它们类似标签 (tag) 列表。</li>
<li>Sampling Method 用于去噪,平衡生成图的速度和质量。内置多种算法可供选择。目前看起来 DPM++ 2M Karras 用的比较多。</li>
<li>Sampling Steps 是去噪过程的采样步骤数。越多越好,但需要更长的时间。一般在 20-28 之间。</li>
<li>宽度和高度 (Width/Height),输出图像的大小。按需调整即可。</li>
<li>Batch Count 批次数量,我更愿意用下面的 Batch size 调整生产图的总数。</li>
<li>Batch size,每一批次要生成的图像数量。可以在测试提示时多生成一些,因为每个生成的图像都会有所不同。生成的图像总数等于 Batch Count 乘以 Batch size。</li>
<li>CFG (Classifier Free Guidance) scale,提示词相关性, 用于控制模型应在多大程度上遵从您的提示。他有几个只可选: 1 (大多忽略你的提示),3 (更有创意),7 (遵循提示和自由之间的良好平衡),15 (更加遵守提示),30 (严格按照提示操作),常用的是 7,做个平衡。测试时可以换这个值体验区别。</li>
<li>Seed,生成的每个图像都有自己的种子值,修改这个值可以控制图像的内容。</li>
<li>Script。用户可以编写脚本代码,以实现一些特殊定制的功能。这个未来可以具体说,目前还没有遇到。</li>
</ol>
<p>在生成的过程中会感受到图片从模糊到清晰的过程。如果你特别细心,可以看到正向 prompt 里面比原图多了一个<code><lora:blindbox_V1Mix:1></code>,这个其实是指定了 Lora 模型后添加的,选择 Lora 模型的方法是点开「Genrate」按钮下面中间那个按钮「show/hide extra network」,最右一个 Tab 就是 Lora:</p>
<p>![](<a href="https://user-images.githubuser">https://user-images.githubuser</a>...</p>
<p>原文: <a href="https://www.dongwm.com/post/how-to-use-stable-diffusion/">Stable Diffusion高级教程 - 如何使用Stable Diffusion?</a></p>
Stable Diffusion高级教程 - AIGC发展史和产品对比
198
2023-04-25T14:04:00.207812+00:00
2023-04-25T14:04:00.207812+00:00
dongweiming
本文是Stable Diffusion高级教程的第一篇,介绍AIGC发展史和它与MidJourney的详细对比
<h3 id="前言">前言</h3>
<p>AIGC 相关的内容最近非常热,所以我也来蹭个热度。这篇是这个话题的第一篇,先介绍一下 AIGC 和相关的创作工具。</p>
<h3 id="AIGC">AIGC</h3>
<p>AIGC 全文叫做「AI Gererative Content」,这是继专业生产内容(PGC, Professional-generated Content)、用户生产内容(UGC, User-generated Content)之后的新型内容创作方式。</p>
<p>AIGC 进入大众视野里程碑的一件事是去年 9 月初,下面这幅使用 MidJourney 生成的数字油画《空间歌剧院》:</p>
<p><img src="https://cdn.matpool.com/images/01c1bb14_image003.jpg" alt=""></p>
<p>在美国科罗拉多州博览会 (Colorado State Fair) 的艺术比赛中夺得了第一名,之后大赛评委并未对该幅作品进行改判,并认为即使它是 AI 生成的作品,也依旧配得上这样的成绩,这一新闻被报道后引发了圈内外的广泛讨论。</p>
<p>再之后,一个 B 站 UP 主使用 Midjourney,根据歌词含义生成的图片制作了万能青年旅店的作品《 <a href="https://www.bilibili.com/video/BV1Me4y1B7j4/">杀死那个石家庄人</a> 》火出了圈,接着很多 UP 主发布了类似的「但是每一句歌词都由 AI 作画」主题的作品,例如《Young And Beautiful》、《孤勇者》、《七里香》等。我也是从这个阶段开始关注到这个领域,当然那时候的理解还停留在 AI 绘画(txt2img,也就是输入文字,计算机会把它翻译成图像)这个小方向,其实现在再看,生成的内容的领域是非常广泛的。</p>
<p>通过 AIGC 这种创作方式,可以让我这种毫无绘画基础的非职业用户也可以创作出非常满意的作品。</p>
<h3 id="AIGC的主要创作工具">AIGC 的主要创作工具</h3>
<p>接着我根据时间线列出我认为非常重要的一些创作工具。</p>
<h4 id="DALL-E">DALL-E</h4>
<p>2021 年 1 月,OpenAI 推出了 DALL-E 模型,通过 120 亿参数版本的 GPT-3 Transformer 模型来理解自然语言输入并生成相应的图片。但是它的推出主要用于研究,所以访问权限仅限于小部分测试版用户。这个模型不稳定对于细节理解处理不完善,且会出现严重的逻辑或者事实错误,但是作为开创者,还是得专门提出来的。</p>
<p>在发布 DALL-E 时还发布了 <a href="https://github.com/openai/CLIP">CLIP</a> (Contrastive Language-Image Pre-training,对比图文预训练)。CLIP 是一种神经网络,为输入的图像返回最佳的标题。它所做的事情与 DALL-E 所做的相反 —— 它是将图像转换为文本,而 DALL-E 是将文本转换为图像。引入 CLIP 的目的是为了学习物体的视觉和文字表示之间的联系。</p>
<h4 id="DiscoDiffusion">Disco Diffusion</h4>
<p><a href="https://colab.research.google.com/github/alembics/disco-diffusion/blob/main/Disco_Diffusion.ipynb">Disco Diffusion</a> 是 21 年 10 月开始开源的一个基于 diffusion+CLIP 的深度学习模型,输入文本便能生成图像画面。这个工具通常运行在 Google Colab 平台上,无需本地配置,所以对电脑配置不做要求,在浏览器里面运行即可。</p>
<p>下面是主创是艺术家兼设计师 Somnai 在项目开源时发布的效果图:</p>
<p><img src="https://video.twimg.com/tweet_video/FIE5Zq3VQAIDm00.mp4" alt=""></p>
<p>在实际使用中,它对于景色、主体以及画风方面的内容效果还是不错的,但是人物效果比较差。在 Somnai 加入到 MidJourney 后,这个项目就停止了更新。</p>
<h4 id="DALL-E2">DALL-E 2</h4>
<p>2022 年 4 月,OpenAI 发布了新版本的 <a href="https://labs.openai.com/">DALL-E 2</a> ,它是 DALL-E 的升级版本,另外能对所生成的图像进行二次编辑,现在即使是新用户也需要充值才能生成新图,我没有体验,只是通过官方 Ins 账号展示的动态侧面了解,不过目前现在还可以通过 Bing 体验:<a href="https://www.bing.com/create/">https://www.bing.com/create/</a></p>
<p><img src="https://user-images.githubusercontent.com/841395/234293929-ca16a0fa-c876-48c6-ba49-6245db350063.jpeg" alt=""></p>
<p>感受它生成的画作相对下面说的 2 种比较单一且简单。</p>
<h4 id="MidJourney">MidJourney</h4>
<p>MidJourney 的 v1 是 2022 年 2 月发布的,它火出圈是由于 22 年 7 月份的 v3 版本。</p>
<p>它的特点是综合能力比较全面,艺术性很强,非常像艺术家制作的作品,另外图像生成速度更快,早期主要是很多艺术家会借助 Midjourney 作为创作灵感。另外,因为 Midjourney 搭载在 Discord 频道上,所以有非常良好的社区讨论环境和用户基础。</p>
<p>第二次火其实就是今年 3 月份发布 V5, 官方说这个版本在生成图像的人物真实程度、手指细节等方面都有了显著改善,并且在提示词理解的准确性、审美多样性和语言理解方面也都取得了进步。</p>
<p><img src="https://user-images.githubusercontent.com/841395/234203241-05713fad-401d-4736-8282-85c64f866bd6.png" alt=""></p>
<p>现在新用户已经不再可以免费生成图片了,需要订阅。就不演示了,我有一下两个经验:</p>
<ol>
<li>如果你不了解怎么输入正确有价值的提示词,可以从类似延伸阅读链接 5 这样的网址去生成 prompt,类似网站很多</li>
<li>如果想成为 MidJourney 高手,你需要学会很多技巧,可以网上搜各种相关的文章和视频,例如延伸阅读链接 9 和 10 (当然官方文档也是要看的)</li>
</ol>
<h4 id="StableDiffusion">Stable Diffusion</h4>
<p>2022 年 8 月,Stable Diffusion 开源,</p>
<p>Stable Diffusion 算法上基于 2021 年 12 月提出的潜在扩散模型(LDM / Latent Diffusion Model)和 2015 年提出的扩散模型(DM / Diffusion Model,它是基于 Google 的 Transformer 模型),所以名字里有 Diffusion,我猜 Stable 表示现在算法已经稳定下来了。</p>
<p>有必要先说一下这个项目让人疑惑的点,它是开源的,如果你自己研究过,可以从 Github 上找到三个同名的项目:</p>
<ol>
<li><a href="https://github.com/CompVis/stable-diffusion">https://github.com/CompVis/stable-diffusion</a></li>
<li><a href="https://github.com/runwayml/stable-diffusion">https://github.com/runwayml/stable-diffusion</a></li>
<li><a href="https://github.com/Stability-AI/stablediffusion">https://github.com/Stability-AI/stablediffusion</a></li>
</ol>
<p>首先是慕尼黑大学机器视觉学习组 CompVis 写了这个论文,AI 视频剪辑技术创业公司 Runway 提供专业知识帮助实现了第一个版本,初创公司 StabilityAI 投钱,最终由 Stable Diffusion 推向主流市场 (其实现在已经是 Version 2 了)。所以现在只需要关注第三个项目就可以了。</p>
<p>SD 会在运行时将成像过程分离成 “扩散(diffusion)” 的过程 —— 从有噪声的情况开始,根据 CLIP 对图像和文本之间相关性打分,逐渐改善图像,直到完全没有噪声,这样就逐步接近所提供的文本描述。具体的原理可以看延伸阅读链接 8.</p>
<p>SD 可以在短短几秒钟内生成清晰度高,还原度佳、风格选择很广的图片,它最大的突破是任何人都能免费下载并使用其开源代码,不需要像 MidJourney 和 DALL-E 那样把它作为云服务付费用。</p>
<h4 id="StableDiffusionXL">Stable Diffusion XL</h4>
<p>目前 SD 最让使用者苦恼的 2 个缺点:</p>
<ol>
<li>需要输入非常长的提示词 (prompts)</li>
<li>对于人体结构的处理有瑕疵,经常出现动作和人体结构异常</li>
</ol>
<p>2023 年 4 月,Stability AI 发布了 Beta 版本的 <a href="https://clipdrop.co/stable-diffusion">Stable Diffusion XL</a> ,并提到在训练结束后参数稳定后会开源,并改善了上述的 2 个缺点。</p>
<h3 id="MidJourney和StableDiffusion的对比">MidJourney 和 Stable Diffusion 的对比</h3>
<p>首先要说明的是 AI 绘图是有高度的随机性和风格化的,即便你有比较准确的提示词也许换个 seed 可以让结果反转,其实不好直接对比。我这里只是在侧面来对比:</p>
<ol>
<li>价格。MidJourney 毕竟是为了盈利的,远不如自己部署到自己服务器的开销要低。SD 完胜</li>
<li>友好程度。MidJourney 新手友好,注册即用,相对的 SD 需要有一定技术背景,甚至可以说设计师或者艺术创作者自己不具备部署能力。SD 小胜</li>
<li>功能。SD 除了支持 MidJourney 全部功能外还支持填充修复、自定义模型。SD 小胜</li>
<li>对细节的控制。类似于苹果 (MidJourney) 和安卓 (SD) 的区别,MidJourney 是商业产品,你无法了解它的背后的原理和代码逻辑,所以可控性差、细节优化难 (甚至越调越差),而 SD 由于是开源的且有强大的社区和相关...</li>
</ol>
<p>原文: <a href="https://www.dongwm.com/post/stable-diffusion-history/">Stable Diffusion高级教程 - AIGC发展史和产品对比</a></p>
使用基于GPT-4模型的IDE: Cursor用法全解读
197
2023-03-19T02:54:25.669612+00:00
2023-03-19T02:54:25.669612+00:00
dongweiming
这是一篇使用基于GPT-4模型的IDE: Cursor用法的全解读
<h3 id="前言">前言</h3>
<p>这几天体验了 Cursor ( <a href="https://www.cursor.so/">https://www.cursor.so/</a> ),我觉得它会是一个划时代的产品,非常推荐给你。本文完整的演示它目前提供的功能。</p>
<p>官方介绍它只说了 2 句:</p>
<blockquote><p>Build Software. Fast.
Write, edit, and chat about your code with GPT-4</p>
</blockquote>
<p>我们先看它的快捷键:</p>
<p>有 4 个选项,但是它只有 2 个快捷键,后面 2 个针对选择一段代码后的操作,我挨个具体解释一下它的用法和主要应用场景。</p>
<h3 id="Generate(⌘+K)">Generate(⌘+K)</h3>
<p>在输入框里面输入你需要让它帮助你写什么代码,回车后它就开始自动帮助你写代码了。</p>
<p><img src="https://user-images.githubusercontent.com/841395/226148376-03ea65d7-d95d-4dce-b19a-ecefba64524c.gif" alt="animation"></p>
<h3 id="EditSelection(⌘+K)">Edit Selection(⌘+K)</h3>
<p>可以选择一段代码,然后针对这段代码提出一些修改要求,比如要求 Cursor 修改其中的逻辑、添加注释等:</p>
<p><img src="https://user-images.githubusercontent.com/841395/226148939-74b7488d-f66e-4e6c-b341-18d4a31a5fe7.gif" alt="animation"></p>
<p>Cursor 会帮助你做一些改变,生成 diff 对比,然后提出 2 个选项问你接受 (Accept) 还是拒绝 (Reject),选择接受就会应用改变否则就恢复原状。</p>
<h3 id="Chat(⌘+L)">Chat(⌘+L)</h3>
<p>类似于集成了 chatGPT,你可以在 Cursor 里面使用 chatGPT 去问任何问题,相当于不需要专门去 <a href="https://chat.openai.com">官网</a> 了或者搜索引擎就可以找到答案。<img src="https://github.com/dongweiming/use_cursor/raw/main/chat.gif" alt="animation"></p>
<p>上面的例子里,我想要给程序添加类型注解,直接用 Chat 就可以获取解决方案。这可以让开发者不需要在 Google、StackOverFlow 等网站来回切换,编程过程完整的在 Cursor 里进行,无论是查看报错信息原因、查找代码如何写、学习编程知识等等方面。</p>
<h3 id="ChatSelection(⌘+L)">Chat Selection(⌘+L)</h3>
<p>可以选择一段代码,然后针对这段代码提出一些问题。例如让 IDE 解释一下这段代码的原理、代码结构、找 Bug 等等<img src="https://github.com/dongweiming/use_cursor/raw/main/chat_selection.gif" alt="animation"></p>
<p>这个模式下,对于理解别人写的代码是非常有帮助的,如果你接手了别人的项目,现在有 Cursor 帮助你理解。</p>
<h3 id="隐藏技能">隐藏技能</h3>
<p>接着再分享一些 Cursor 隐藏技能。</p>
<h4 id="添加注释/测试">添加注释 / 测试</h4>
<p>当你选择函数或者类,会提示添加文档字符串 (Add Docstring) 和测试代码 (Add Test)<img src="https://github.com/dongweiming/use_cursor/raw/main/magic1.gif" alt="animation"></p>
<p>不过现阶段这个反应时间比较长,需要稍微耐心一点,另外看上图可以看到当有装饰器时生成的文档注释的位置不对需要手动挪挪,不过未来肯定会修复的。文档字符串时非常爽的,尤其是对于英语不好的同学,想怎么表达非常烧脑,现在好了,直接生成。测试代码是在 Chat 里面给你范例,可以直接参考使用。</p>
<h4 id="Lint">Lint</h4>
<p>不同语言已经自带了相关的 Lint,例如 Python 使用了 pyflakes,如果你的代码写的有相关的问题,左边会有提示,鼠标悬停会提示错误原因:</p>
<p><img src="https://user-images.githubusercontent.com/841395/226150446-a5061555-ba96-4ef0-a962-125a4bf9f0c6.gif" alt="animation">在 Cursor 创始人一开始宣传时,曾经演示过[一个例子](<a href="https://twitter.com/amanrsanger/status/1615">https://twitter.com/amanrsanger/status/1615</a>...</p>
<p>原文: <a href="https://www.dongwm.com/post/how-to-use-cursor-ide/">使用基于GPT-4模型的IDE: Cursor用法全解读</a></p>