GAN演进之路:从原始博弈到StyleGAN的生成对抗实践
我最初接触生成式对抗网络GAN是在它刚火起来那几年当时被一句话震撼到“让两个网络互相博弈最后学会生成以假乱真的图片。”这个概念听起来简直像巫术但真正动手训练过的人都知道这条路远没有想象中平坦。模型不收敛、模式崩塌、训练曲线像过山车这些问题一度劝退了无数初学者。但恰恰是这些坑逼着这个领域在短短几年内迭代出了一大批经典算法从原始GAN一路演进到如今可以生成高清人脸、可控风格图像的成熟体系。这篇总结算是自己的一段学习笔记把从最初版本到当前主流方案的演进脉络、核心思想和踩坑要点梳理一遍希望能帮你少走一些弯路。1. 回到起点原始GAN的博弈思想与先天缺陷1.1 生成器和判别器的对抗博弈要理解整个GAN家族必须先理解原始GAN到底在做什么。它的框架很简单一个生成器Generator负责把随机噪声变成图片一个判别器Discriminator负责判断一张图片是来自真实数据还是生成器伪造的。两者不断对抗生成器努力骗过判别器判别器努力识破生成器。这个过程可以类比成造假币者和验钞员的关系。造假币者不断改进工艺验钞员不断提升鉴别能力两者互相逼着对方进步。理想情况下最终造假币者做出来的钞票和真钞无法区分验钞员只能随机猜测这时候生成器就学到了真实数据的分布。从数学上看原始GAN的优化目标是一个极小极大博弈$$\min_G \max_D \mathbb{E}{x \sim P{data}}[\log D(x)] \mathbb{E}_{z \sim P_z}[\log(1 - D(G(z)))]$$这个公式看起来简单但里面藏着一个非常关键的问题在训练初期生成器生成的样本质量很差判别器很容易就能识破此时 $\log(1 - D(G(z)))$ 的梯度会非常小导致生成器学不到有用的信息。这就是原始GAN训练困难的第一层原因。1.2 原始GAN的理论缺陷与实践困境除了梯度消失问题原始GAN还有一个更隐蔽的问题——JS散度导致的模式崩塌Mode Collapse。在理想情况下我们希望生成器能覆盖真实数据的全部模式比如一个包含10种猫的图片数据集我们希望生成器能生成所有10种猫而不是只会生成其中1种。但JS散度有一个致命特点当生成分布和真实分布完全没有重叠时它的值恒为常数梯度为0。而在高维空间中两个分布的支撑集往往是不重叠的这就导致训练过程极不稳定。实践中表现为两种典型现象一是训练loss振荡剧烈生成质量忽好忽坏二是生成器陷入某一个模式生成出的图片千篇一律。我在第一次训练原始GAN时面对的就是这种情况。跑了上百个epochloss曲线倒是看起来很漂亮地收敛了但生成的图片全部是同一个模样的模糊人脸。当时完全不知道问题出在哪后来才明白这不是调参能解决的而是损失函数本身的设计缺陷。这也是为什么后续所有重要的GAN改进几乎都在围绕如何解决训练不稳定和模式崩塌这两个核心问题展开。2. DCGAN与cGAN架构改进与条件控制的破局2.1 从全连接到卷积DCGAN的架构贡献原始GAN用的是最简单的全连接网络处理图像这种高维数据时力不从心。DCGANDeep Convolutional GAN的出现解决了这个问题它把卷积神经网络引入了GAN的框架从此GAN真正开始具备处理图像的能力。DCGAN提出了一系列至今仍被沿用的架构设计准则生成器用转置卷积进行上采样判别器用步长卷积替代池化层几乎处处使用BatchNorm生成器的输出层除外激活函数在生成器中使用ReLU、在判别器中使用LeakyReLU。这些设计看似是工程细节实际每个都有明确目的——比如不用池化层是为了让网络学会自己的下采样方式用LeakyReLU是为了避免判别器进入死区后梯度全为零。我自己的体会是DCGAN的贡献不只是效果好了一点更关键的是它第一次让GAN的训练变得可控了一些。卷积带来的参数共享和局部感受野让网络更容易捕捉图像的结构特征而不再是像全连接那样毫无章法地学习像素之间的关系。DCGAN的训练稳定性相比原始GAN有了质的提升生成出来的图像也开始有了清晰的物体轮廓。2.2 条件GAN从“生成图片”到“生成指定图片”DCGAN解决了怎么生成的问题cGANConditional GAN则解决了怎么控制生成内容的问题。cGAN的思想非常直观在生成器和判别器的输入端都额外拼接一个条件向量比如类别标签、文本描述让整个过程变成在条件约束下的生成。cGAN的优化目标变成了$$\min_G \max_D \mathbb{E}{x \sim P{data}}[\log D(x|y)] \mathbb{E}_{z \sim P_z}[\log(1 - D(G(z|y)))]$$这里的 $y$ 就是条件。如果你想让模型生成“穿红衣服的人”那就把“红衣服”这个条件的编码和随机噪声拼在一起输入生成器。判别器也不再只看图像真不真还要看它是否符合给定的条件。这个看似简单的改动实际打开了GAN应用的大门。后续的pix2pix、CycleGAN、文本生成图像、超分辨率等方向全都是建立在条件控制的思想之上。可以说没有cGANGAN就只能做一个花瓶——能生成漂亮的图但你不能指挥它生成你想要的图。2.3 我踩过的坑条件信息注入方式的细节在实现cGAN时我发现条件信息的注入方式对效果影响很大。早期做法是把条件向量拼在噪声后面一起输入这种方式在简单数据集上还行但对复杂条件来说容易丢失信息。后来有人提出用条件BatchNorm也就是让BatchNorm的缩放和平移参数由条件信息动态生成这比简单的向量拼接效果好得多。另一个容易忽略的细节是判别器对条件信息的处理不能过强否则判别器会直接忽略图像真实性的判断只根据条件匹配度打分生成器会钻空子——生成一些虽然条件符合但质量很差的图片。我最初实现时给判别器加了过于强大的条件编码层结果生成的图片内容完全符合标签但图像细节全部糊成一片。后来把条件分支简化为一个嵌入层加一个拼接操作效果反而好了很多。3. WGAN系列用Wasserstein距离解决训练不稳定3.1 WGAN的数学动机为什么JS散度不行如果说DCGAN和cGAN是从架构和条件控制的角度改进GAN那么WGANWasserstein GAN就是直接从损失函数层面解决问题。它用Wasserstein距离也叫推土机距离替代JS散度彻底改变了训练的逻辑。Wasserstein距离的直观含义是把一个分布移动成另一个分布最少需要做多少搬运工作。相比之下JS散度在两个分布不重叠时无法提供有效的梯度信号而Wasserstein距离即使在完全不重叠的情况下也能给出一个平滑且有意义的距离度量梯度不为零训练就能持续进行下去。放一个简单的对比距离/散度分布不重叠时梯度训练稳定性计算复杂度JS散度为0梯度消失差低KL散度无穷大或无定义差低Wasserstein距离连续且有意义好较高WGAN的实践改动非常小去掉判别器最后一层的Sigmoid激活函数改为拟合一个分数Critic评论家损失函数不再取对数而是直接计算生成样本和真实样本的分数差值。但有一个重要约束——需要保证Critic满足Lipschitz连续性。原始WGAN用权重裁剪Weight Clipping来实现这一点把权重限制在一个很小的范围内比如 [-0.01, 0.01]。3.2 WGAN-GP梯度惩罚与工程可用的里程碑权重裁剪这个方案实在太粗糙了它会严重限制Critic的表达能力甚至导致梯度爆炸或消失。WGAN-GPGradient Penalty的改进是用梯度惩罚替代权重裁剪在损失函数中增加一项$$\lambda \cdot \mathbb{E}{\hat{x} \sim P{\hat{x}}}[(|\nabla_{\hat{x}} D(\hat{x})|_2 - 1)^2]$$其中 $\hat{x}$ 是从真实样本和生成样本的连线上随机插值得到的样本。这个惩罚项鼓励Critic的梯度范数处处接近1比粗暴地裁剪权重要温和得多也保留了模型的表达能力。我自己用WGAN-GP生成过一批人脸图像稳定性确实远好于之前的模型。不再需要像调教原始GAN那样小心翼翼调整学习率训练过程基本能稳定收敛生成的图像多样性也有了明显提升。但要注意梯度惩罚需要计算二阶导数显存占用和训练时间都会增加。对做研究实验来说完全可接受但如果要在工业环境大规模训练需要仔细权衡计算成本。WGAN-GP之后还有不少后续改进比如WGAN-Div、频谱归一化Spectral Normalization等。频谱归一化后来被广泛采用因为它不依赖梯度惩罚的额外计算而是直接通过权重归一化来约束Lipschitz常数在效率和效果之间取得了很好的平衡。这里就不展开了后面讲StyleGAN时会再提到它。4. 图像到图像翻译pix2pix与CycleGAN4.1 从配对的pix2pix说起图像翻译Image-to-Image Translation是GAN最有商业价值的方向之一。pix2pix是其中最具标志性的工作它解决的是“输入一张素描图输出一张对应的真实图”这类问题。它的核心突破在于把条件GAN和U-Net结构结合起来用U-Net作生成器用PatchGAN作判别器。pix2pix的损失函数是一个组合$$\mathcal{L} \mathcal{L}{cGAN} \lambda \cdot \mathcal{L}{L1}$$这里的L1损失要求生成图像和真实图像在像素级别上尽可能接近。L1项保证生成结果不会偏离输入太远cGAN项保证生成结果看起来真实。两者缺一不可——只用L1会得到模糊但结构正确的输出只用cGAN会得到看起来真实但不忠于输入的幻觉。PatchGAN的思路也很有意思判别器不是对整张图片做真假判断而是对图像中的一个个小块比如70x70分别判断最后取平均。这样做的好处是参数量小、计算量小同时能更好地抓住高频纹理细节。低频结构一致性则由L1损失来保证各司其职。4.2 不配对数据的循环一致性方案pix2pix好用但它的前提是有配对的训练数据。现实中很多时候你并没有一张素描对应的精确真实照片。CycleGAN的贡献在于彻底摆脱了对配对数据的依赖它的核心思想是“循环一致性损失”Cycle Consistency Loss。假设想把马的图片变成斑马的图片CycleGAN同时训练两个生成器$G$ 负责马变斑马$F$ 负责斑马变马。为了让 $G$ 和 $F$ 不胡来要求 $F(G(x)) \approx x$也就是把马变斑马再变回来应该还是同一匹马。这个循环约束把无监督问题变成了有监督问题虽然监督信号不是像素级的精确匹配而是内容结构的保持。实践证明CycleGAN在风格迁移、季节转换、物体变形等任务上效果非常惊人。我记得第一次跑通CycleGAN时看到一张夏天风景图被成功转成冬天雪景那种感觉还是很震撼的。但CycleGAN也有一个众所周知的弱点——它倾向于修改纹理而不改变形状。这种倾向在大多数风格迁移场景中是好事但在某些需要保形的任务中可能造成问题比如它会把图片里的某个物体错误地映射到另一个物体上。另外这类GAN对数据集的多样性非常敏感。我用CycleGAN做动物毛色迁移时如果训练集中背景类型单一模型会出现严重的“背景泄漏”——把整张图片的色调风格都改变了而不是只改变目标物体的外观。解决这个问题的有效思路是数据增强尤其是随机裁剪和颜色抖动能让模型更关注前景物体而非整体环境。5. StyleGAN系列高质量生成与可控性的革命5.1 从潜在空间到风格空间的解耦如果说前面的工作解决了“能不能生成、稳不稳定”的问题StyleGAN则把这个问题提升到了“能不能精细控制”的高度。StyleGAN的生成器架构和之前的网络完全不同它抛弃了直接输入一个随机噪声向量的做法而是先用一个映射网络Mapping Network把随机噪声转换成语义丰富的中间潜在向量 $w$再把 $w$ 通过AdaINAdaptive Instance Normalization注入到生成网络的每一层。这个设计的精妙之处在于中间潜在向量 $w$ 的每个维度可以控制不同层次的特征——粗粒度特征如面部轮廓、姿态由浅层注入的 $w$ 控制细粒度特征如肤色、发型细节由深层注入的 $w$ 控制。这实现了“解耦”Disentanglement让用户可以像调音台一样独立调节图像的不同属性。我第一次感受StyleGAN的威力是做一个人脸属性编辑实验固定所有层的注入向量只修改最浅层的几个通道结果人脸的整体轮廓和年龄感都变了但五官细节完全保持不变。这种控制精度是之前的GAN完全做不到的。5.2 渐进式生成与风格混合的实操细节StyleGAN另一个重要贡献是渐进式生成Progressive Growing也就是在训练过程中逐渐增加生成图像的分辨率先从4x4开始训练然后逐步增加到8x8、16x16直到1024x1024。这个策略让训练过程稳步推进先生成整体结构再补充细节极大提升了高分辨率生成的稳定性。风格混合Style Mixing是StyleGAN在推理阶段提供的一个实用技巧对两张不同的图片分别提取中间向量 $w_1$ 和 $w_2$在生成时让浅层用 $w_1$、深层用 $w_2$就可以把一张图的高级语义特征比如表情和另一张图的底层特征比如色调融合在一起。后来的StyleGAN2解决了原有的一些伪影问题例如水滴状伪影StyleGAN3则进一步压缩了噪声导致的纹理偏移问题。这些迭代本质上都是在追求同一个目标——让生成更真实、控制更精确、训练更稳定。我用StyleGAN2做图像编辑项目时踩过一个值得记录的坑直接把中间向量拼接起来做差值会导致某个属性比如胡须变化时其他属性也跟着漂移生成出四不像的图像。后来改成在特定分辨率层做W空间插值效果才符合预期。换句话说在样式空间中控制属性变化一定要关注各层之间的耦合关系不能想当然地全局操作。6. 当前状况与未来GAN和扩散模型的相互关系6.1 扩散模型的冲击与GAN的坚守任何人都无法忽视扩散模型Diffusion Model在图像生成领域掀起了一股强大的浪潮在人脸画像生成精度和大规模文本生成图像的多样性上扩散模型的表现非常亮眼。曾经GAN在生成质量和速度上的优势正逐渐被扩散模型所超越。我身边有相当多朋友把研究方向从GAN转到了扩散模型。不过这绝不意味着GAN的落幕。GAN在多个方向上依然是不可替代的一是速度优势。GAN是单次前向推理生成不需要像扩散模型那样做几百步的迭代去噪因此在实时交互场景下如实时视频换脸、实时图像风格化仍然是最佳选择。二是隐空间的可控性。GAN的潜在空间经过精心设计后非常干净找到一个合适的 $w$ 向量就能做属性编辑、插值、融合等操作而扩散模型的采样路径目前还很难做到同等程度的语义控制。三是数据效率。在数据量受限的专业领域GAN通常比扩散模型更好训练和收敛我做医疗图像增强的小型实验时这种情况下GAN的表现就比扩散模型更省心。对比维度GAN系扩散模型生成速度快单次前向慢迭代去噪图像多样性容易出现模式崩塌更好控制能力隐空间成熟控制在发展训练难度对抗不稳定相对稳定计算资源相对低相对高6.2 混合架构和可借鉴的思路现实中现在越来越多人做GAN和扩散模型的混合架构比如用GAN的训练技巧判别器、对抗损失来提升扩散模型的采样效率或者用扩散模型的迭代细化来弥补GAN在高频细节上的不足。在我看来理解GAN仍然是理解生成式模型的地基因为对抗损失、判别器机制、隐空间分析这些概念已经被吸收成了整个生成领域共有的思维框架。6.3 基于个人经验的进阶建议如果你刚入门GAN我的建议是先动手复现一个DCGAN哪怕是在小数据集上也比论文看十遍有用。跑通之后再转向WGAN-GP理解损失函数变化带来的实质性影响最后再尝试StyleGAN的隐空间操作。一条比较推荐的路径是在CIFAR-10上先用DCGAN打通训练流程再替换成WGAN-GP观察稳定性差异等熟悉之后再接触多尺度生成。算力有限的情况下也有替代方案尝试使用实例归一化的轻量判别器或者用频谱归一化替代梯度惩罚来降低显存占用不要一上来就想训练1024分辨率的高清模型从64x64分辨率开始先把框架捋清楚再去追求画质上限。我在8G显卡上坚持训练时最大的体会是先用小的batch size把逻辑跑通再逐步调大能省大量时间。7. 写在最后的实战体会这篇总结涉及的方法论跨度有好几年从基础GAN到StyleGAN再到与扩散模型竞争这个过程的演进速度哪怕放在技术圈都算得上惊人。个人最大的感受是训练GAN就像骑一匹烈马不能只用蛮力多种稳定化手段梯度惩罚、归一化、渐进训练等往往需要组合使用而调参经验和诊断能力往往比模型本身的好坏更决定成败。另一个最深刻的体会是很多看似玄学的调参技巧背后都有清晰的理论根源。理解了KL散度与JS散度的问题你自然能理解WGAN为什么要把优化目标改成Wasserstein距离理解了梯度惩罚的原理你就能推理出该用什么强度的惩罚系数。遇到问题时先问为什么再动手调整这也是我在这个领域里收获的最大的财富。如果你打算在自己的项目里应用GAN我的建议是先明确你的瓶颈到底在稳定性、多样性还是可控性然后按这个思路选择技术路线。任何一个问题往上游追溯原理往往能找到比盲目调参更可靠的答案。希望这篇总结对你有些许帮助也期待你在自己的场景中玩出有意思的新花样。

相关新闻

电动汽车性能开发目标模板解析与应用

电动汽车性能开发目标模板解析与应用

1. 项目概述:电动汽车性能开发的导航图在电动汽车研发领域,性能目标设定就像建筑师的蓝图,直接决定了整车开发的方向和边界。这份Ford性能目标模板的独特价值在于,它将传统汽车巨头数十年的整车集成经验与电动化特性深度融合&…

2026/10/14 1:10:05 阅读更多 →
公开课回顾|提示词自我迭代进化:从静态 Prompt 到可进化系统

公开课回顾|提示词自我迭代进化:从静态 Prompt 到可进化系统

本次公开课的核心主题是“提示词自我迭代进化”。虽然课程最后还有一个演示没有完全跑完,但整体方法论已经讲清楚:重点不是一次写出完美提示词,而是让提示词在训练、评估、反馈中不断更新,最终形成可迭代、可回归、可版本化的提示…

2026/10/14 1:10:05 阅读更多 →
strchr函数误用与CTF实战:从qwb2019_one看指针返回值陷阱

strchr函数误用与CTF实战:从qwb2019_one看指针返回值陷阱

1. 从一道CTF题看strchr的真实行为1.1 这道题到底在考什么qwb2019_one 这道题,我第一次看到的时候觉得挺简单——不就是个字符串处理吗?结果上手之后才发现,坑全在strchr这个函数的返回值判断上。题目本身逻辑不复杂,给了你一段输…

2026/10/14 1:10:05 阅读更多 →

最新新闻

【Unity开发】监听Scene场景事件

【Unity开发】监听Scene场景事件

🐾 个人主页 🐾 阿松爱睡觉,横竖醒不来🏅你可以不屠龙,但不能不磨剑🗡目录一、前言二、监听方法(一)SceneManager.sceneLoaded事件(二)SceneManager.LoadScen…

2026/10/14 1:54:16 阅读更多 →
基于Springboot + vue实现的民宿在线预定平台

基于Springboot + vue实现的民宿在线预定平台

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论🔥🔥&am…

2026/10/14 1:54:16 阅读更多 →
MuPDF JavaScript 绑定中 StructuredTextWalker 详解:遍历页面文本、图片、矢量与结构树的完整回调机制

MuPDF JavaScript 绑定中 StructuredTextWalker 详解:遍历页面文本、图片、矢量与结构树的完整回调机制

图形学图像处理 【免费下载链接】mupdf mupdf mirror 项目地址: https://gitcode.com/gh_mirrors/mu/mupdf 点击查看 免费下载 本文以 MuPDF JavaScript 绑定中的 StructuredTextWalker 接口为核心,完整讲解 StructuredText.prototype.walk() 提供的全部…

2026/10/14 1:54:16 阅读更多 →
Gym环境完全指南:核心接口、自定义环境与避坑实践

Gym环境完全指南:核心接口、自定义环境与避坑实践

很多人第一次接触强化学习,跑通第一个示例用的几乎都是Gym环境。我记得自己刚入坑那会儿,光搞明白env.step()到底该传什么、返回值又是什么,就折腾了一整天。网上教程虽然多,但大多数都在讲算法,真正把环境本身讲透的反…

2026/10/14 1:54:16 阅读更多 →
Pyenv详解:Python版本管理的核心原理与工程实践

Pyenv详解:Python版本管理的核心原理与工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 1:54:15 阅读更多 →
并行编程——MPI 和OpenMPI 基本概念学习(一)

并行编程——MPI 和OpenMPI 基本概念学习(一)

文章大纲引言一、MPI 概述二、MPI基础数据类型1、使用MPI_Type_create_struct创建结构体类型数据类型1.1、在C中定义结构体并确定成员偏移量1.2、创建自定义 MPI 数据类型2、使用MPI_Type_create_subarray创建子数组类型数据类型2.1、确定子数组的形状和位置2.2、创建自定义 MP…

2026/10/14 1:53:15 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →