WGAN-GP 实战:256×256 动漫头像生成与训练避坑指南
简介本资源为基于WGAN-GP算法的256×256像素动漫头像生成系统源码面向深度学习入门者、GAN算法研究者及动漫头像生成爱好者帮助解决传统GAN训练不稳定、模式崩塌导致生成图像多样性不足的问题。压缩包共26个文件约1.32MB其中2个Python源文件承担生成器与判别器核心算法实现11个PNG图片展示不同训练阶段生成的头像效果6个XML与1个iml文件用于IDE项目及训练参数配置另含readme说明与Git忽略文件目录结构清晰便于快速上手。目前已有306人学习下载。读者可借此完整理解WGAN-GP的损失函数设计、梯度惩罚机制与网络结构搭建直接运行源码复现训练流程并基于现有框架调整输入条件生成不同性别、发型、表情与配饰的动漫头像适用于在线游戏、虚拟现实、表情包制作等场景也可作为二次开发与算法创新的实操平台。1. 从一张 256×256 的动漫头像说起WGAN-GP 到底解决了什么如果你手头有一批动漫头像素材想训练一个能稳定生成 256×256 新头像的模型大概率会先撞上两个问题一是生成图糊、模式单一二是训练过程像开盲盒判别器一强生成器就梯度消失判别器一弱又完全学不动。WGAN-GP 就是冲着这两个痛点来的——它把原始 GAN 里那个玄学的 JS 散度换成了 Wasserstein 距离再用梯度惩罚Gradient Penalty替代权重裁剪让训练曲线从心电图变成相对可控的下降线。这个方向适合两类人一类是手里有几千到几万张动漫头像、想自己跑一版生成模型的算法爱好者另一类是想拿256×256 动漫头像生成当练手项目、顺便吃透 GAN 训练细节的工程师。它不需要多卡集群单张消费级显卡就能起步但想生成质量过得去数据清洗、网络结构、GP 系数这几处都得抠。下面按先立住原理、再动手复现、最后避坑的顺序拆开讲源码层面的关键片段我会直接给出来。2. WGAN-GP 的核心机制与 256×256 生成任务选型2.1 为什么是 Wasserstein 距离加梯度惩罚原始 GAN 的判别器输出的是概率用 JS 散度衡量真实分布和生成分布的差异。当两个分布几乎不重叠时JS 散度是个常数梯度直接归零这就是训练不动、生成器摆烂的根源。WGAN 改用 Wasserstein 距离也叫 Earth-Mover 距离它衡量的是把生成分布搬成真实分布需要多少代价即使两个分布不重叠这个距离依然能提供有意义的梯度。但原始 WGAN 为了保证判别器满足 1-Lipschitz 连续用的是权重裁剪——把判别器每层权重强行夹到 [-c, c]。这个做法很粗暴c 设大了梯度爆炸设小了梯度消失调参全靠血泪经验。WGAN-GP 的改进是不裁权重而是在损失函数里加一个梯度惩罚项惩罚判别器对输入梯度的范数偏离 1 的程度。公式上判别器损失变成L_D E[D(fake)] - E[D(real)] λ * E[(||∇_x̂ D(x̂)||₂ - 1)²]其中 x̂ 是在真实样本和生成样本之间随机插值得到的点λ 是惩罚系数。这样一来Lipschitz 约束变成软约束训练稳定性和生成质量都比权重裁剪好一大截。2.2 256×256 分辨率对网络结构的要求256×256 不是小分辨率它比 64×64 多了整整 16 倍的像素量。如果直接把 DCGAN 那套结构放大生成器要上采样 4 次才能从 4×4 到 64×64再到 256×256 需要 6 次上采样参数量和显存占用都会飙升。常见做法是生成器用 5 到 6 层转置卷积每层通道数按 512→256→128→64→32→3 递减判别器对称地用步长卷积下采样。这里有个容易翻车的点转置卷积容易产生棋盘格伪影checkerboard artifacts。我一般会把上采样换成最近邻插值 普通卷积的组合或者用 kernel_size 能被 stride 整除的转置卷积能明显减轻网格感。判别器这边WGAN-GP 不需要 BatchNorm因为 BN 会破坏每个样本独立的梯度惩罚改用 LayerNorm 或者干脆不用归一化这是和普通 GAN 结构最大的差别之一。2.3 数据准备动漫头像数据集的清洗与对齐生成质量的上限由数据决定。动漫头像数据集通常来自爬取或公开图库尺寸参差不齐还混着大量非人脸、多人、低质图。我的处理流程是先用一个人脸/头像检测器把主体框出来统一裁剪成正方形再缩放到 256×256。裁剪时留一点边距别把头发和下巴切掉否则生成的头像会普遍缺角。清洗阶段要重点剔除三类图分辨率低于 256 的、主体占比过小的、明显是截图带 UI 元素的。这一步偷懒后面训练再久也救不回来。数据量上单类动漫头像想生成得比较像样建议至少 5000 张起步1 万到 3 万张是比较舒服的区间。数据太少判别器几下就记住全部样本生成器只能过拟合。3. 从零搭一套可复现的 WGAN-GP 训练流程3.1 环境依赖与项目目录结构先把环境固定下来避免版本漂移导致复现失败。我一般用 Python 3.9 到 3.10PyTorch 2.x配一张 8GB 以上显存的卡。依赖清单如下# 建议用 conda 建独立环境避免和系统包冲突 conda create -n wgangp_anime python3.10 -y conda activate wgangp_anime # 安装 PyTorch具体 CUDA 版本按自己驱动选 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 pip install numpy pillow tqdm tensorboard目录结构建议这样组织后面写代码时路径引用才不会乱wgangp_anime/ ├── data/ │ └── faces/ # 清洗后的 256x256 头像 ├── models/ │ ├── generator.py │ └── discriminator.py ├── train.py ├── utils.py └── outputs/ # 保存权重和生成样例data/faces里直接放图片文件即可训练时用ImageFolder或自定义 Dataset 读取。注意所有图必须是 RGB 三通道、256×256格式统一成 jpg 或 png混格式容易在读图时抛异常。3.2 生成器与判别器的网络实现生成器从 100 维噪声出发逐层上采样到 256×256。下面是一个可用的结构通道数和层数都按 256 分辨率调过import torch import torch.nn as nn class Generator(nn.Module): def __init__(self, z_dim100, base_ch64): super().__init__() # 从 1x1 映射到 4x4再逐层上采样 self.fc nn.Linear(z_dim, base_ch * 8 * 4 * 4) self.net nn.Sequential( # 4x4 - 8x8 nn.Upsample(scale_factor2, modenearest), nn.Conv2d(base_ch * 8, base_ch * 8, 3, 1, 1), nn.InstanceNorm2d(base_ch * 8), nn.ReLU(True), # 8x8 - 16x16 nn.Upsample(scale_factor2, modenearest), nn.Conv2d(base_ch * 8, base_ch * 4, 3, 1, 1), nn.InstanceNorm2d(base_ch * 4), nn.ReLU(True), # 16x16 - 32x32 nn.Upsample(scale_factor2, modenearest), nn.Conv2d(base_ch * 4, base_ch * 2, 3, 1, 1), nn.InstanceNorm2d(base_ch * 2), nn.ReLU(True), # 32x32 - 64x64 nn.Upsample(scale_factor2, modenearest), nn.Conv2d(base_ch * 2, base_ch, 3, 1, 1), nn.InstanceNorm2d(base_ch), nn.ReLU(True), # 64x64 - 128x128 nn.Upsample(scale_factor2, modenearest), nn.Conv2d(base_ch, base_ch // 2, 3, 1, 1), nn.InstanceNorm2d(base_ch // 2), nn.ReLU(True), # 128x128 - 256x256最后一层输出 3 通道 nn.Upsample(scale_factor2, modenearest), nn.Conv2d(base_ch // 2, 3, 3, 1, 1), nn.Tanh() # 输出归一化到 [-1, 1] ) def forward(self, z): x self.fc(z).view(z.size(0), -1, 4, 4) return self.net(x)判别器不用 BatchNorm用 InstanceNorm 或 LayerNorm最后输出一个标量分数而不是概率class Discriminator(nn.Module): def __init__(self, base_ch64): super().__init__() def block(in_ch, out_ch, stride2): return nn.Sequential( nn.Conv2d(in_ch, out_ch, 4, stride, 1), nn.InstanceNorm2d(out_ch), nn.LeakyReLU(0.2, True) ) self.net nn.Sequential( # 256 - 128 nn.Conv2d(3, base_ch, 4, 2, 1), nn.LeakyReLU(0.2, True), block(base_ch, base_ch * 2), # 128 - 64 block(base_ch * 2, base_ch * 4), # 64 - 32 block(base_ch * 4, base_ch * 8), # 32 - 16 block(base_ch * 8, base_ch * 8), # 16 - 8 nn.Conv2d(base_ch * 8, 1, 4, 1, 0) # 8 - 1输出分数 ) def forward(self, x): return self.net(x).view(-1)逻辑说明生成器用Upsample Conv而不是转置卷积是为了压棋盘格伪影归一化统一用InstanceNorm2d因为 WGAN-GP 的梯度惩罚是逐样本计算的BatchNorm 会引入样本间依赖破坏惩罚项。判别器最后一层不加 Sigmoid输出的是实数分数这是 WGAN 系列和普通 GAN 在结构上的关键区别。参数上base_ch64是 256 分辨率的常用起点显存吃紧可以降到 32但生成细节会打折。3.3 梯度惩罚项的实现与训练循环梯度惩罚是 WGAN-GP 的灵魂写错了整个训练就白跑。核心是在真假样本之间随机插值对插值点求判别器输出的梯度再惩罚梯度范数偏离 1 的程度def gradient_penalty(D, real, fake, device, lambda_gp10): batch_size real.size(0) # 每个样本采一个随机插值系数 alpha torch.rand(batch_size, 1, 1, 1, devicedevice) # 在真假样本之间插值 interpolated (alpha * real (1 - alpha) * fake).requires_grad_(True) d_interpolated D(interpolated) # 对插值点求梯度 gradients torch.autograd.grad( outputsd_interpolated, inputsinterpolated, grad_outputstorch.ones_like(d_interpolated), create_graphTrue, retain_graphTrue, only_inputsTrue )[0] gradients gradients.view(batch_size, -1) grad_norm gradients.norm(2, dim1) # 惩罚范数偏离 1 的部分 return lambda_gp * ((grad_norm - 1) ** 2).mean()训练循环里判别器每步更新生成器可以每步更新也可以隔几步更新。WGAN-GP 论文建议判别器每更新一次生成器更新一次但实践中判别器多跑几步比如 5 步往往更稳for epoch in range(num_epochs): for real_imgs, _ in dataloader: real_imgs real_imgs.to(device) bs real_imgs.size(0) # ---- 训练判别器 ---- z torch.randn(bs, z_dim, devicedevice) fake_imgs G(z).detach() d_real D(real_imgs).mean() d_fake D(fake_imgs).mean() gp gradient_penalty(D, real_imgs, fake_imgs, device, lambda_gp10) # WGAN-GP 判别器损失假分数减真分数加梯度惩罚 d_loss d_fake - d_real gp opt_D.zero_grad() d_loss.backward() opt_D.step() # ---- 训练生成器 ---- z torch.randn(bs, z_dim, devicedevice) fake_imgs G(z) g_loss -D(fake_imgs).mean() # 生成器想让判别器给假图高分 opt_G.zero_grad() g_loss.backward() opt_G.step()参数说明lambda_gp10是论文默认值实践中 5 到 10 都常见太小约束不住 Lipschitz太大会让判别器梯度被惩罚项主导、学不到东西。优化器用 Adam学习率判别器和生成器都取 1e-4beta 设成 (0.5, 0.9)——注意 WGAN-GP 不要用默认的 0.9/0.9990.5 的 beta1 能减少动量带来的不稳定。判别器更新时fake_imgs要.detach()否则梯度会回传到生成器白白浪费算力还干扰训练。4. 训练不收敛、生成糊、显存爆WGAN-GP 实战避坑清单4.1 判别器损失不降反升生成图全是噪点现象训练几十个 epoch 后判别器损失在正负之间乱跳生成图始终是彩色噪点看不出任何头像轮廓。原因最常见的是梯度惩罚系数lambda_gp设得过大或者插值点采样写错。如果alpha没有按样本维度广播比如写成了标量插值点会退化成所有样本同一个位置梯度惩罚失去意义。另一个原因是判别器学习率过高判别器太强生成器梯度被压死。解决先确认alpha的形状是(batch, 1, 1, 1)保证每个样本独立插值。把lambda_gp从 10 降到 5 试一轮同时把判别器学习率降到 5e-5。如果还是噪点检查生成器最后一层是不是Tanh、数据归一化是不是到 [-1, 1]这两处不匹配会让生成器输出范围完全错位。4.2 生成图有规律的网格纹理现象生成的头像上出现明显的棋盘格或条纹状纹理尤其在头发、背景区域。原因转置卷积的卷积核尺寸和步长不匹配导致上采样时像素覆盖不均匀。这是 GAN 生成高分辨率图的老毛病。解决把生成器里的ConvTranspose2d换成Upsample(modenearest) Conv2d就像 3.2 节给的结构那样。如果坚持用转置卷积确保kernel_size能被stride整除比如 stride2 时用 kernel_size4 而不是 3。另外判别器下采样也可能引入类似伪影可以改用平均池化加卷积。4.3 训练到一半显存溢出现象前几个 epoch 正常跑到中途突然报 CUDA out of memory。原因梯度惩罚需要对插值点求二阶梯度create_graphTrue计算图比普通 GAN 大得多。如果 batch size 设得偏大或者没有及时释放中间变量显存会随训练累积。解决把 batch size 降到 8 或 16256 分辨率下这是比较安全的区间。在梯度惩罚函数里确保retain_graphTrue只在需要时开训练循环里每步结束可以手动torch.cuda.empty_cache()虽然会拖慢速度但能救急。另外把判别器的base_ch从 64 降到 32显存占用能省将近一半。4.4 生成的头像千篇一律缺乏多样性现象生成器能出清晰头像了但翻来覆去就那几种脸型、发色模式崩塌明显。原因判别器过强生成器只学会了少数能骗过判别器的样本或者训练数据本身多样性不足清洗时把长尾样本都删了。解决先检查数据分布别把不同风格的图过度筛选。训练上可以降低判别器的更新频率比如判别器更新 5 次、生成器更新 1 次改成 3:1。还可以给生成器输入加一点截断噪声或者用两个不同随机种子分别生成再对比确认是不是噪声维度被浪费了。如果数据量确实小考虑加轻度数据增强水平翻转、小角度旋转但别用会改变头像语义的增强。4.5 用预训练权重或别人的源码跑不通现象拿到的源码在本地一跑就报错或者生成结果和描述完全不符。原因PyTorch 版本差异导致 API 变化比如torch.autograd.grad的参数名或者源码里写死了作者本地的路径、CUDA 设备号。热词里常出现的源码笔记源码剖析类内容很多是特定环境下的快照直接搬容易水土不服。解决先对齐 PyTorch 大版本2.x 和 1.x 在自动求导接口上有细微差别。把源码里所有硬编码路径改成相对路径或配置项。跑之前先用一个极小数据集比如 100 张图过一遍全流程确认能跑通再上全量数据。遇到报错优先看是不是设备不匹配CPU/GPU 混用或数据类型不匹配float32/float64。5. 把生成质量再往上推一档评估、调参与工程化收尾训练能跑通只是及格线真正决定这个方案值不值得投入的是生成质量能不能稳定复现、能不能量化对比。我一般会固定三件事固定随机种子、固定验证噪声、定期存样例图。具体做法是训练前生成一组固定的噪声向量存下来每个 epoch 用同一组噪声生成头像拼成网格图存到outputs/这样能直观看到生成器随训练的变化而不是靠感觉判断。量化评估上GAN 常用 FIDFréchet Inception Distance和 ISInception Score。FID 越低说明生成分布越接近真实分布是比人眼更靠谱的指标。计算 FID 需要真实图集和生成图集用pytorch-fid这类库几行就能跑# 安装pip install pytorch-fid # 分别准备真实图和生成图两个文件夹然后执行 # python -m pytorch_fid path/to/real path/to/fake注意 FID 对样本量敏感真实图和生成图数量最好一致且都在几千张以上否则数值波动很大别拿几百张算出来的 FID 下结论。另外 FID 依赖 Inception 网络对动漫头像这种非自然图像它的绝对值参考意义有限更适合用来对比自己不同实验版本的相对好坏。调参上除了前面说的lambda_gp和学习率还有两个值得动的旋钮。一是噪声维度z_dim100 是默认值调到 128 或 256 可能提升多样性但也会增加生成器负担二是判别器的更新次数n_criticWGAN-GP 论文用 1实践中 3 到 5 往往更稳代价是训练变慢。我自己的习惯是先用n_critic1、lambda_gp10跑一个 baseline记录 FID 和样例图然后每次只改一个参数做对比避免多参数一起动导致无法归因。工程化收尾上权重保存别只存最后一个 epoch按固定间隔存 checkpoint同时保留对应的优化器状态方便中断后恢复。生成脚本和训练脚本分开推理时只加载生成器能省不少显存。如果要把这个方案交付给别人把数据清洗、训练、评估拆成独立脚本配一份 README 说明每步的输入输出和预期耗时比塞一个大而全的 notebook 靠谱得多。最后说个我踩过的坑早期我总想一步到位把分辨率拉到 256结果训练慢、显存紧、调参周期长一个实验要等大半天。后来改成先在 64×64 上把 WGAN-GP 的流程和参数跑顺确认梯度惩罚、学习率、更新频率都合理再迁移到 256×256效率高了很多。分辨率提升带来的问题八成在低分辨率阶段就已经暴露了早点发现比事后救火划算。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Python疫情数据分析与可视化:从数据清洗到报告打包的完整流程

Python疫情数据分析与可视化:从数据清洗到报告打包的完整流程

简介:一份面向新冠肺炎疫情数据分析与可视化的Python完整课设项目,适合计算机、电子信息工程、数学等专业学生用于课程设计、期末大作业或毕业设计参考。项目经导师指导并获98分,涵盖从数据采集、舆情爬取、时序预测到可视化展示的完整流程&a…

2026/10/10 11:28:38 阅读更多 →
收不到更新弹窗不是 Bug:UpdateReadiness 把通知“吞“了的真相

收不到更新弹窗不是 Bug:UpdateReadiness 把通知“吞“了的真相

收不到更新弹窗不是 Bug:UpdateReadiness 把通知"吞"了的真相 【免费下载链接】tinycast Tinycast — a tiny, fully native macOS launcher, hotkeys, and clipboard history. 项目地址: https://gitcode.com/GitHub_Trending/ti/tinycast 在 mac…

2026/10/10 11:27:37 阅读更多 →
Cloudflare 紧急修复 quiche 拥塞漏洞:一个开源库牵动全球 CDN 神经

Cloudflare 紧急修复 quiche 拥塞漏洞:一个开源库牵动全球 CDN 神经

Cloudflare 紧急修复 quiche 拥塞漏洞:一个开源库牵动全球 CDN 神经 【免费下载链接】quiche 🥧 Savoury implementation of the QUIC transport protocol and HTTP/3 项目地址: https://gitcode.com/GitHub_Trending/qui/quiche 2026 年 10 月&a…

2026/10/10 11:27:37 阅读更多 →

最新新闻

配电主站日志异常检测数据集:构建、标注与建模实践

配电主站日志异常检测数据集:构建、标注与建模实践

1. 数据集定位:配电网数字化的关键一环配电主站系统,这个词在电力行业里算不上冷门,但真正做过配电自动化运维的人都知道,主站系统就像整个配电网的“大脑”,承担着数据采集、状态监控、故障处理、设备控制这些核心职责…

2026/10/10 13:07:00 阅读更多 →
从《易经》到AI治理:如何守护技术尊严

从《易经》到AI治理:如何守护技术尊严

1. 半夜路边摊,老秦一句话把我问住了我到现在都记得那个晚上。不是因为面条多好吃,而是老秦放下筷子,忽然说了句:“你们搞技术的人天天讲AI治理、讲对齐、讲可解释性,讲得头头是道。可对我这种带过队伍的人来说&#x…

2026/10/10 13:07:00 阅读更多 →
Java入门实战指南:从环境搭建到面向对象与避坑技巧

Java入门实战指南:从环境搭建到面向对象与避坑技巧

Java入门这件事,我在不同阶段被问过很多次。有人把课程视频存在网盘里吃灰,有人在笔记软件里收藏了二十篇“新手必看”然后就没有然后了。我理解这种状态:Java不是一门看几眼就能上手的语言,它有一整套名词、概念、工具链&#xf…

2026/10/10 13:07:00 阅读更多 →
Windows临时文件清理实战指南:精准删除不伤系统

Windows临时文件清理实战指南:精准删除不伤系统

1. 为什么“清临时文件”这件事,90%的人永远在做无用功?“磁盘空间不足”弹窗刚消失三小时,又跳出来;某软件启动慢得像在加载一部4K电影;重装系统后第三天,C盘又开始发红——这些不是玄学,是临时…

2026/10/10 13:07:00 阅读更多 →
C++装饰器模式实战:组合优于继承的代码增强艺术

C++装饰器模式实战:组合优于继承的代码增强艺术

接手过数据上报模块的同学,大概率都遇到过类似的场景:最初只是把字符串落到本地文件,后来产品要求在写之前先做加密,再后来又要加签名、压缩,还要统计每次写入耗时。如果每次新需求都在原来的 FileWriter 类里加一个if…

2026/10/10 13:06:59 阅读更多 →
神经网络图绘制方法论:面向工程实践的信息流可视化

神经网络图绘制方法论:面向工程实践的信息流可视化

1. 为什么一张神经网络图能决定你的技术表达力?“这张图放PPT里,老板当场拍板立项”——这不是夸张,是某次跨部门评审会上我亲耳听到的评价。当时隔壁组一位算法工程师用一张结构清晰、配色克制、标注精准的ResNet-50可视化图,3分…

2026/10/10 13:05:57 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →