AIGC图像困局
<h1 id="aigc图像困局" class="atx">AIGC图像困局</h1><blockquote>
<p>算法技术的历史,是"用小资源干大事"的心酸历。</p>
</blockquote>
<p>在写深度学习优化器算法巧思速览之前其实本来计划是先写现在这篇的,只是那个时候手上热乎的思路还是优化器相关,所以这篇博文就延后到今天才写。</p>
<p>这个标题起得很大,真写起来,篇幅真的太长了,所以只能想到哪写到哪。</p>
<p>2012年,Alex Krizhevsky的AlexNet在ImageNet上达到的精度震惊了世界,而那个时候也只做了一件事就是在224x224的分辨率下识别一千类物体。</p>
<p>而十年后的今天,AI的发展日新月异,但我们仍在为如何让模型输出高质量的1024×1024图片视频而努力。</p>
<p>不是技术进步太慢,而是这其中的涉及到的技术难处比想象中更甚。</p>
<hr>
<h2 id="引言" class="atx">引言</h2>
<p>刚入行时候,博主第一个图像任务是语义分割,也就是俗话说的抠图。</p>
<p>这个在博主其他文章也可能看到相关信息。</p>
<p>从那个时候起,就有一个毒瘤或者是技术顽疾让人深恶痛绝。</p>
<p>它就是分辨率,由于技术的局限性,也因为算力的局限性,我们只能在小分辨率的图像里进行训练,而当你想要适配高分辨率的时候,对不起,重训或者外挂传统算法去打补丁。</p>
<p>如果在抠图领域,最经典的问题就是抠发丝,因为如果分辨率过低,是看不见发丝的,更别谈抠发丝是一种苦哈哈的细活。</p>
<p>采用高分辨率,是看见发丝了,计算量却暴涨了。</p>
<p>对于很多场景需要的“实时”抠图,只能跪了,因为单是训练的算力就不能接受了,更别提最终使用。</p>
<p>当然存在一些传统算法,可以为我们铺路,例如利用导向滤波进行后处理细化细节。</p>
<p>既然我们有大分辨率的图片信息,那直接利用起来就好了,细节我们从大分辨率图片里找回来就是了。</p>
<p>当然也可以作为一种先验辅助训练。</p>
<p><strong>那个时期 resnet, unet 百家争鸣。</strong></p>
<p>后来gan的出现,迎来了图像生成的大爆发。</p>
<p>而图像生成这个事,跟抠图,抠发丝是不一样的,因为它是完全生成新的图片,或者生成局部再贴回原图,几乎没有任何原始信息可以合理有效地补充。</p>
<p>而gan带来两层挑战,它需要几乎同时或者交替训练两个模型,一个负责生成,一个负责鉴别。</p>
<p>这里的计算量就已经不小了,如果还要支持更大的分辨率,显存就岌岌可危了,</p>
<p>gan在早期提出的时候本身训练也是不稳定的,后来为了稳定训练才提出来很多正则化惩罚以及归一化的思路。</p>
<p><strong>那个时期,你不gan不行。</strong></p>
<p> </p>
<p>在transformer(注意力架构)提出后很多年,</p>
<p> Attention Is All You Need</p>
<p>一直到了2022年Stable Diffusion彻底引暴了图像生成领域。</p>
<p>也就是新冠三年疫情的最后一年末。</p>
<p>所以从Stable Diffusion的技术路线谈起,是个不错的例子。</p>
<p>关于Stable Diffusion的技术原理补充,</p>
<p>可移步大话AI绘画技术原理与算法优化 一览。</p>
<h2 id="分辨率是aigc的阵痛" class="atx">分辨率是AIGC的阵痛</h2>
<h3 id="11-算力的三次方诅咒" class="atx">1.1 算力的三次方诅咒</h3>
<p>分辨率对计算资源的吞噬是<strong>非线性</strong>的:</p>
<ul>
<li><strong>像素维度</strong>:分辨率×2 → 像素数×4</li>
<li><strong>注意力维度</strong>:序列长度×4 → 计算量×16(O(N²))</li>
<li><strong>内存维度</strong>:激活值×4 → 显存占用×4(中间状态爆炸)</li>
</ul>
<p>综合效应:分辨率×2 → <strong>总成本×64</strong>。</p>
<p>这意味着512×512到1024×1024不是"两倍工作量",而是<strong>64倍</strong>。</p>
<h3 id="12-数据的沙漠" class="atx">1.2 数据的沙漠</h3>
<p>LAION-5B的统计真相:</p>
<ul>
<li>短边<512像素的图像:87%</li>
<li>短边<1024像素的图像:98%</li>
<li>短边>2048像素的图像:0.3%</li>
</ul>
<p>高分辨率图像不仅少,而且<strong>分布偏移</strong>。4K照片的拍摄设备、构图习惯、后期处理流程与手机快照完全不同。</p>
<p>模型在512×512上学习到的"世界知识",在4K上可能完全失效。</p>
<h3 id="13-频率的牢笼" class="atx">1.3 频率的牢笼</h3>
<p>奈奎斯特采样定理在深度学习中的残酷映射:</p>
<blockquote>
<p>训练分辨率决定了模型能学习的最高频率。</p>
</blockquote>
<p>512×512的模型,其压缩空间通常是64×64。这意味着<strong>任何小于8像素的细节都无法被表达</strong>——不是模糊,是<strong>根本不存在</strong>。</p>
<p>模型从未见过更细的纹理,它不知道"毛孔"应该长什么样。</p>
<h3 id="14-第一个核心困局" class="atx">1.4 第一个核心困局</h3>
<blockquote>
<p><strong>训练分辨率是模型认知的"上限",推理分辨率是用户需求的"幻想"。</strong></p>
</blockquote>
<p>所有架构演化,都是在这个物理限制下的工程妥协。</p>
<hr>
<h2 id="sd15:u-net的困境,只能打补丁了。(2022)" class="atx">SD1.5:U-Net的困境,只能打补丁了。(2022)</h2>
<blockquote>
<p>“第一次把扩散模型带到可用的工业级质量”</p>
</blockquote>
<h3 id="21-架构的先天残疾" class="atx">2.1 架构的先天残疾</h3>
<p>SD1.5的U-Net架构有三个致命设计:</p>
<p><strong>视觉的硬边界</strong></p>
<p>U-Net的encoder-decoder结构,下采样到8×8时,每个特征点理论上能看到64×64的原始区域。</p>
<p>但对于2048×2048的图像,64×64只是3%的画面。模型<strong>根本看不见全局</strong>,只能凭统计规律猜测。</p>
<p><strong>压缩的密度陷阱</strong></p>
<p>KL-VAE将512×512压缩到64×64×4,每个压缩向量负责8×8像素的重建。这意味着:</p>
<ul>
<li>纹理:可学习(重复模式)</li>
<li>结构:可学习(大尺度形状)</li>
<li><strong>精确几何</strong>:不可学习(亚像素级定位)</li>
</ul>
<p><strong>注意力的局部性</strong></p>
<p>U-Net的注意力只在同分辨率特征图内进行,跨尺度的信息融合依赖skip connection的通道拼接。</p>
<p>这种<strong>层次化而非全局化</strong>的设计,让SD1.5擅长"画得像",不擅长"画得对"。</p>
<h3 id="22-推理端的绝望补救" class="atx">2.2 推理端的补救</h3>
<p>面对用户的4K需求,SD1.5只能诉事后工程:</p>
<p><strong>方案A:插值</strong></p>
<p>双三次插值将64×64 压缩向量拉到256×256再解码。</p>
<p>新像素完全由卷积核权重决定,<strong>零语义理解</strong>。</p>
<p>结果:建筑线条弯曲,文字无法辨认,人脸变成橡皮泥。</p>
<p><strong>方案B:超分网络</strong></p>
<p>ESRGAN作为后置处理器,用对抗学习"编造"高频细节。</p>
<p>结果:砖墙纹理逼真但重复,皮肤毛孔存在但位置错误,</p>
<p><strong>统计上合理,物理上荒谬</strong>。</p>
<p><strong>方案C:Tiled生成</strong></p>
<p>将4K画布切成16个512×512 叠片独立生成,切片堆叠。</p>
<p>结果:每个tile质量完美,拼接处光照突变,人物长出四个耳朵。</p>
<h3 id="23-sd15的本质-verdict" class="atx">2.3 SD1.5的本质</h3>
<blockquote>
<p><strong>SD1.5从未"理解"过高分辨率,它只是用低分辨率的认知,通过工程技巧伪装成高分辨率。</strong></p>
</blockquote>
<p>这种伪装在:</p>
<ul>
<li>自然风景(低频主导):可接受</li>
<li>人脸特写(结构敏感):崩坏</li>
<li>文字排版(精确几何):灾难</li>
</ul>
<p><strong>新困局产生</strong>:U-Net的局部性无法突破,必须换架构。VAE的一致性也是崩坏的。</p>
<p>SD1.5 的高分辨率是“插值 + 幻觉”。</p>
<hr>
<h2 id="sdxl:分工的艺术(2023)" class="atx">SDXL:分工的艺术(2023)</h2>
<blockquote>
<p>补上了 SD1.5 在“高频细节”和“结构一致性”上的缺口</p>
</blockquote>
<h3 id="31-架构层面的第一次革命" class="atx">3.1 架构层面的第一次革命</h3>
<p>SDXL没有抛弃U-Net,但做了<strong>结构性分工</strong>:</p>
<p><strong>更密的压缩空间</strong></p>
<p>从64×64提升到更精细的表征(实际实现为更高效的VAE压缩),每个压缩向量负责的像素区域减小,<strong>频率上限提升约40%</strong>。</p>
<p>这不是简单的"放大压缩",而是重新训练VAE,让编码器学习<strong>更高效的语义压缩</strong>——用同样的比特数表达更多信息。</p>
<p><strong>基础 + 细化的双阶段流水线</strong></p>
<p>核心洞察:<strong>结构和纹理是不同频率的现象,应该用不同模型处理</strong>。</p>
<ul>
<li><strong>基础模型</strong>(U-Net):在相对低分辨率下运行,负责构图、语义、大尺度结构</li>
<li><strong>细化模型</strong>(另一个U-Net):接收基础模型的输出作为条件,负责高频细节、纹理、局部对比度</li>
</ul>
<p>这类似于传统图像处理中的<strong>拉普拉斯金字塔</strong>:</p>
<p>基础处理低频,细化处理高频残差。</p>
<p><strong>原生1024与可外推性</strong></p>
<p>SDXL的训练分辨率达到1024×1024,且通过改进的位置编码(插值型),可以外推到2048×2048仍保持可用质量。</p>
<h3 id="32-为什么分工有效?" class="atx">3.2 为什么分工有效?</h3>
<p>从信号处理视角,SDXL的分解是<strong>频率解耦</strong>:</p>
<pre><code class="fenced-code-block">图像 = 低频结构(可压缩)+ 高频细节(可预测)
↓ ↓
基础模型 细化模型
(全局理解) (局部生成)</code></pre>
<p>基础模型只需要"知道"画面有张脸,细化模型负责"画"出毛孔。这种解耦让:</p>
<ul>
<li>基础的注意力负担减轻(分辨率固定)</li>
<li>细化的生成空间受限(已有结构指导),幻觉减少</li>
</ul>
<h3 id="33-sdxl的新边界" class="atx">3.3 SDXL的新边界</h3>
<p><strong>仍然无法突破的墙</strong>:</p>
<ul>
<li>U-Net的视野问题依旧,只是被细化模型部分缓解</li>
<li>两阶段串行,推理时间×2</li>
<li>外推到4K时,细化模型的局部性导致<strong>细节与结构脱节</strong>(如头发丝漂浮在空中)</li>
</ul>
<p><strong>新困局产生</strong>:U-Net的局部性是天生的,必须彻底换架构。</p>
<hr>
<h2 id="flux:transformer的全局视野(2024)" class="atx">FLUX:Transformer的全局视野(2024)</h2>
<blockquote>
<p>补上了 U-Net 架构无法突破的“全局视野”缺口</p>
</blockquote>
<h3 id="41-为什么必须是dit?" class="atx">4.1 为什么必须是DiT?</h3>
<p>FLUX的架构切换(U-Net → DiT)不是追热点,而是<strong>物理必然</strong>:</p>
<p><strong>注意力的全局性</strong></p>
<p>DiT的注意力是<strong>全连接</strong>的:每个切片能看见所有其他切片。对于2048×2048的图像(256×256 切片),这意味着<strong>任意两点间的信息传递只需一层</strong>。</p>
<p>对比U-Net:信息从左上角传到右下角需要经过4次下采样-上采样循环,每次都有信息损失。</p>
<p><strong>Scaling的友好性</strong></p>
<p>Transformer的<strong>性能随计算量可预测提升</strong>(scaling law)。U-Net的卷积结构在达到一定深度后收益递减,而DiT可以通过增加层数、头数、维度持续改进。</p>
<p><strong>位置编码的外推性</strong></p>
<p>FLUX采用RoPE(旋转位置编码),其设计本质是<strong>相对位置编码</strong>。这使得:</p>
<ul>
<li>训练时:模型学习的是"距离为k的 切片 如何交互"</li>
<li>推理时:任意距离的交互都遵循同一函数,<strong>自然外推</strong></li>
</ul>
<h3 id="42-flux的三重突破" class="atx">4.2 FLUX的三重突破</h3>
<p><strong>更密的压缩</strong></p>
<p>相比SDXL,FLUX的压缩空间进一步压缩效率提升,在同等计算预算下能表达更高频率。</p>
<p><strong>单阶段端到端</strong></p>
<p>不再需要SDXL的基础+细化分工,单个DiT同时处理结构和细节。这得益于注意力的全局性——模型自己学会了<strong>在需要时关注全局,在需要时聚焦局部</strong>。</p>
<p><strong>Tiled生成的质变</strong></p>
<p>FLUX的tiled效果远超SDXL,因为:</p>
<ul>
<li>边界切片的注意力可以看到相邻堆叠的上下文(若实现为 注意力堆叠)</li>
<li>光照、风格的统计特性由全局注意力隐式约束,无需显式同步</li>
</ul>
<h3 id="43-flux的物理极限" class="atx">4.3 FLUX的物理极限</h3>
<p><strong>注意力平方²的苦难依旧</strong></p>
<p>DiT解决了U-Net的局部性,但<strong>没有解决计算复杂度</strong>。2048×2048的图像在压缩空间为256×256,注意力矩阵大小为65536×65536,单精度存储需16GB,计算不可行。</p>
<p><strong>单尺度的频率天花板</strong></p>
<p>FLUX仍然是单尺度压缩。虽然比SDXL更密,但<strong>固定的压缩比</strong>意味着频率上限固定。想要真正的4K细节,必须接受更大的压缩,进而触发显存爆炸。</p>
<p><strong>新困局产生</strong>:全局性有了,但算力不够;想要更密压缩,但内存不够。需要<strong>更高效的注意力</strong>或<strong>多尺度架构</strong>。</p>
<hr>
<h2 id="z-image:轻量与多尺度的平衡(2024-2025)" class="atx">Z-Image:轻量与多尺度的平衡(2024-2025)</h2>
<blockquote>
<p>“成本、速度、落地”</p>
</blockquote>
<h3 id="51-阿里的工程判断" class="atx">5.1 阿里的工程判断</h3>
<p>Z-Image的设计哲学与FLUX不同:</p>
<blockquote>
<p><strong>不是"更大更强",而是"刚好够用,极致高效"。</strong></p>
</blockquote>
<p>这是基于阿里云的产品场景:</p>
<ul>
<li>淘宝商品图:需要1024-2048,但要求<strong>结构稳定</strong>(不能变形)、<strong>推理快速</strong>(实时生成)</li>
<li>钉钉文档插图:需要<strong>轻量部署</strong></li>
<li>通义APP:需要<strong>低功耗</strong></li>
</ul>
<h3 id="52-架构层面的创新" class="atx">5.2 架构层面的创新</h3>
<p><strong>轻量DiT</strong></p>
<p>比FLUX更少的层数、更小的维度:</p>
<ul>
<li>浅层:宽注意力,捕获全局</li>
<li>深层:窄注意力+MLP,细化局部</li>
</ul>
<p>这种<strong>异构设计</strong>让同样计算量下,有效视野更大。</p>
<p><strong>多尺度特征融合(核心创新)</strong></p>
<p>Z-Image不依赖单尺度压缩,而是在DiT内部<strong>显式维护多分辨率特征</strong>:</p>
<pre><code class="fenced-code-block">输入图像 → 多尺度编码(1×, 1/2×, 1/4×, 1/8×)
↓
跨尺度注意力(每个尺度能看到其他尺度)
↓
渐进式上采样 + 特征融合
↓
输出</code></pre>
<p>这类似于传统计算机视觉中的<strong>图像金字塔</strong>,但完全可学习、端到端训练。</p>
<p><strong>效果</strong>:</p>
<ul>
<li>高频:从1×尺度获取</li>
<li>结构:从1/8×尺度获取</li>
<li>一致性:跨尺度注意力保证</li>
</ul>
<p><strong>高效注意力变体</strong></p>
<p>采用<strong>局部-全局混合 注意力</strong>:</p>
<ul>
<li>局部窗口:计算密集型,但O(N)复杂度</li>
<li>全局token:可学习的"汇总"token,数量固定(如64个),与图像尺寸无关</li>
</ul>
<p>这让Z-Image的显存占用与分辨率<strong>线性相关</strong>,而非平方相关。</p>
<h3 id="53-z-image的定位" class="atx">5.3 Z-Image的定位</h3>
<table>
<thead>
<tr><th>维度</th><th>Z-Image</th><th>FLUX</th><th>SDXL</th></tr>
</thead>
<tbody>
<tr>
<td>设计目标</td>
<td>产品落地</td>
<td>质量极限</td>
<td>工业稳定</td>
</tr>
<tr>
<td>架构</td>
<td>轻量异构DiT</td>
<td>标准DiT</td>
<td>U-Net分工</td>
</tr>
<tr>
<td>多尺度</td>
<td><strong>显式融合</strong></td>
<td>隐式单尺度</td>
<td>两阶段分工</td>
</tr>
<tr>
<td>注意力</td>
<td>局部-全局混合</td>
<td>标准全局</td>
<td>局部层次</td>
</tr>
<tr>
<td>外推能力</td>
<td>强(2K-4K)</td>
<td>很强(4K+)</td>
<td>弱(<2K)</td>
</tr>
<tr>
<td>推理速度</td>
<td><strong>最快</strong></td>
<td>中等</td>
<td>最慢(双阶段)</td>
</tr>
<tr>
<td>工程成本</td>
<td><strong>最低</strong></td>
<td>高</td>
<td>中</td>
</tr>
<tr>
<td>适用场景</td>
<td>实时生成</td>
<td>专业创作</td>
<td>传统工业</td>
</tr>
</tbody>
</table>
<h3 id="54-z-image的妥协" class="atx">5.4 Z-Image的妥协</h3>
<p><strong>为了效率牺牲的质量</strong>:</p>
<ul>
<li>极端复杂场景(如拥挤街道)的全局一致性弱于FLUX</li>
<li>最高频率细节(如毛发、织物纹理)不如FLUX真实</li>
<li>艺术性、创造力略逊于大规模DiT</li>
</ul>
<p><strong>但这是正确的工程选择</strong>:</p>
<blockquote>
<p>对于90%的商业场景,"90分质量、100分速度"比"100分质量、50分速度"更有价值。</p>
</blockquote>
<hr>
<h3 id="位置编码演化的总览" class="atx">位置编码演化的总览</h3>
<p>除了主要架构的变化之外,还有语义模块位置编码的演化。</p>
<p>因为</p>
<p><strong>位置编码的演化,就是 AIGC 模型空间认知能力的演化。</strong></p>
<p>SD1.5 靠卷积“猜位置”,SDXL 开始显式编码位置,FLUX 建立了可外推的全局坐标系,而 Z-Image 则在工程成本下构建了多尺度的高效位置体系。</p>
<p>高分辨率生成的突破,不仅来自更大的模型或更强的 注意力,更来自“模型终于知道自己在画布的哪里”。</p>
<table>
<thead>
<tr><th>代际</th><th>架构</th><th>空间位置编码</th><th>时间位置编码</th><th>文本位置编码</th><th>特点</th></tr>
</thead>
<tbody>
<tr>
<td>SD1.5</td>
<td>U-Net</td>
<td><strong>无显式 2D PE</strong>(卷积隐式)</td>
<td>sin-cos</td>
<td>CLIP 1D</td>
<td>局部性强,无法外推</td>
</tr>
<tr>
<td>SDXL</td>
<td>U-Net++</td>
<td><strong>显式 2D sin-cos</strong></td>
<td>sin-cos++</td>
<td>双编码器 1D</td>
<td>多尺度增强,但仍局部主导</td>
</tr>
<tr>
<td>FLUX</td>
<td>DiT</td>
<td><strong>2D RoPE(可外推)</strong></td>
<td>RoPE/sin-cos</td>
<td>Transformer 1D</td>
<td>真正的全局坐标系</td>
</tr>
<tr>
<td>Z-Image</td>
<td>轻量 DiT</td>
<td><strong>多尺度 + 局部相对 + 全局抽象</strong></td>
<td>sin-cos</td>
<td>Transformer 1D</td>
<td>工程最优,线性成本</td>
</tr>
</tbody>
</table>
<hr><hr>
<h2 id="结语:架构演化的必然性" class="atx"><span style="font-size: 14px">回顾四代架构:</span></h2>
<ul>
<li><strong>SD1.5</strong>(U-Net):证明了扩散模型可行,但暴露了局部性局限</li>
<li><strong>SDXL</strong>(U-Net+分工):用工程分工绕过局限,但复杂度爆炸</li>
<li><strong>FLUX</strong>(DiT):用Transformer解决局部性,但算力瓶颈显现</li>
<li><strong>Z-Image</strong>(轻量DiT+多尺度):用效率优化平衡质量与成本</li>
</ul>
<p>每一步都不是"更好"的简单替代,而是<strong>在约束条件下的当前最优</strong>。</p>
<ul>
<li>
<p>SD1.5:低算力时代的最优</p>
</li>
<li>
<p>SDXL:高频细节的最优</p>
</li>
<li>
<p>FLUX:全局一致性的最优</p>
</li>
<li>
<p>Z-Image:成本与落地性的最优</p>
</li>
</ul>
<p>这或许是AI工程化的终极真理:</p>
<p><strong>没有最好的架构,只有最合适的架构。</strong></p>
<p> </p>
<p><strong>把一些成熟的传统算法,适配到现有的模型架构里去,永远不会过时。</strong></p>
<p>之所以说传统算法永不过时,并不是怀旧,而是工程现实。</p>
<p>无论模型架构如何迭代,分辨率、算力、频率上限这些物理约束始终横在那里——它们不会因为你换了 U‑Net、换了 DiT、换了多尺度结构就自动消失。</p>
<p>而传统算法恰恰能在这些“结构性短板”上提供一种稳定、可控、可解释的补偿路径:</p>
<p>不依赖大规模数据,不受模型形态限制,却能在关键环节把模型无法表达的细节补回来。</p>
<p>基于这样的判断,博主开始尝试把传统图像处理重新嵌入到现代 AIGC 推理链路中,</p>
<p>探索一种不依赖重训、不依赖超分、却能真正吃下高分辨率的方案。</p>
<p>这条路并不轻松,但确实走通了。</p>
<p>为了让模型在高分辨率下保持结构稳定、细节可信,博主实现了一套纯传统算法的分辨率适配方案,</p>
<p>可以作为插件无缝接入各种开源模型架构。</p>
<p>虽然还不够完美,但已经证明这条路线是可行的,而且潜力巨大。</p>
<p>例如 GFPGAN 的原生分辨率只有 512×512,但通过这套方案,不需要超分、不需要重训,就能稳定支持 4K 人脸修复</p>
<p>,质量和成本都在可控范围内。</p>
<p> facefusion LivePortrait 等模型同样能直接受益。</p>
<p> </p>
<blockquote>
<p>在训练场景下,它可以作为结构先验;</p>
<p>在推理场景下,它可以作为轻量插件。</p>
</blockquote>
<p>理论上再做一次二次微调,效果会更进一步。</p>
<p>这套方案也可以写成纯 C 的算法库部署到移动端,只是工作量巨大,目前精力有限,还没完全落地。</p>
<p>但方向是明确的:传统算法与现代模型的结合,仍然有很大的工程空间。</p>
<p>一起努力吧。</p>
<hr>
<p>博主之前为了把推理性能压榨到极限,也做了不少“苦活”.</p>
<p>特别是把transformer注意力移植到TF,写了个猥琐发育的Chunked Flash Attention in Keras,</p>
<p>那时Flash Attention 还没发布,</p>
<p>现在这个版本整理开源了,可用于粗略学习理解。</p>
<p>博主已经彻底抛弃TensorFlow/Keras,</p>
<p>(自从看到有人提交代码,审核都没通过就被合入主干代码了,真瞎了我的狗眼。)</p>
<p>一起拥抱PyTorch吧。</p>
<p>SD1.5 时代,为了推理速度和显存压到极限:</p>
<p><strong>TO C 性价比为王:</strong></p>
<ul>
<li>
<p><strong>权重预计算</strong>(减少重复计算)</p>
</li>
<li>
<p><strong>Flash Attention</strong>(降低显存)</p>
</li>
<li>
<p><strong>FP16/INT8 量化</strong>(端侧可运行)</p>
</li>
<li>
<p><strong>跨框架迁移(TF ↔ Torch ↔ ONNX ↔ TFLite)</strong></p>
</li>
<li>
<p><strong>端侧蒸馏 Encoder,实现 1 秒级推理</strong></p>
</li>
<li>
<p><strong>多模型并行部署,显存复用</strong></p>
</li>
</ul>
<p>这里给新手一个建议,跨框架迁移 这个事做好了,对学习和研究有莫大的帮助。</p>
<p>只有把底层实现吃透了,开发和debug才能事半功倍。</p>
<p>所以,不失为一个很好的学习思路。</p>
<p>疫情结束之后,博主回到广东,</p>
<p>给某游戏大厂做了一段时间的游戏场景出图的定制化。</p>
<p><strong>TO B 质量为王</strong></p>
<ul>
<li>
<p><strong>超高分辨率 </strong>显存要挤到极限</p>
</li>
<li>
<p><strong>干净的脏</strong> 素材细节要求极高</p>
</li>
<li>
<p><strong>高保真生成</strong> 设定一致性必须严格</p>
</li>
<li>
<p><strong>语义可控</strong> 小数据训练,泛化性不能丢</p>
</li>
</ul>
<p>但无论 TO C 还是 TO B,问题本质都一样: <strong><br></strong></p>
<blockquote>
<p><strong>算法研发,就是用小资源干大事。</strong></p>
</blockquote>
<p>在这之间有些算法博主也做出来了,还没开源。</p>
<p>大厂就开源了他们的版本,打法粗暴,一地鸡毛。</p>
<p>无可厚非,博主从开源项目中也学到了不少,开源这个事情,利弊都很明显。</p>
<p>这些操作就很容易意识到:</p>
<ul>
<li>
<p>不跟大厂硬钢 → 拿不到资源</p>
</li>
<li>
<p>跟在大厂后面 → 肉汤喝不到,锅还被砸</p>
</li>
</ul>
<p>最后下了决心,裸辞深挖底层。</p>
<p>战场发生什么,已经不重要了,只问自己:</p>
<blockquote>
<p><strong>想做什么,想达成什么。</strong></p>
</blockquote>
<p>现在回头看,选择毋庸置疑是对的,</p>
<p>路还很长,还需要继续推进。</p>
<p>以上,仅以此文共勉之。</p>
<p>若有各种其他问题可以通过以下方式联系博主交流学习。</p>
<p><strong>微信:</strong> Dbgmonks<br><strong>QQ:</strong> 200759103<br><strong>邮箱:</strong> gaozhihan@vip.qq.com</p>
<p><strong>注:</strong> 不注明来意者一律拒绝。</p><br><br>
来源:https://www.cnblogs.com/cpuimage/p/19660222
頁:
[1]