YOLOv8轻量化实战:GhostConv替换卷积,模型瘦身不降精度
动手改造YOLOv8用GhostConv做轻量化卷积替代传统卷积来给模型瘦身是我在嵌入式设备上部署检测模型时走过最快的一条路。YOLOv8本身性能不错但直接搬到边缘设备上参数量和计算量往往还是大推理延迟一上来整个系统的体验就很拉胯。这篇文章就把我的改造过程、踩过的坑、调整思路和实测数据一次性讲清楚准备照着做端侧检测、模型压缩或者课程设计的同学可以省下不少试错时间。GhostConv的精髓在于传统卷积生成的很多特征图之间存在明显的冗余那么与其用昂贵的卷积算子把全部特征图都“算”出来不如先用少量卷积生成核心特征图再对这些核心特征图做一组廉价的线性变换把剩余的特征图“补”出来。就这样在保持网络表达能力的同时把乘法计算量压下来不少。我在YOLOv8的backbone和neck里做了替换实验整体参数和FLOPs降幅都很明显而mAP不但没掉反而在某些数据集上还涨了一截。后面我会把原理、代码、yaml改动、训练参数和实坑全部展开说。1. 为什么要做YOLOv8轻量化部署场景下的真实瓶颈1.1 传统卷积在检测网络中的成本到底有多高目标检测模型最核心的运算单元就是卷积。YOLOv8的backbone采用CSPDarknet结构neck部分也大量使用卷积和注意力模块head的解耦结构里同样少不了卷积操作。每一层卷积本质上是把输入特征图的所有通道和输出特征图的所有通道做一次全连接式运算。可以算一下一个普通的3x3卷积如果输入是256通道输出是512通道特征图尺寸是SxS那么它的乘法运算量就是256乘512乘S乘S乘3乘3。当网络深度堆到上百层低分辨率的特征图尺寸可能不大但通道数动辄512、1024、2048这个运算量累积起来会非常恐怖。模型体积和运行时内存也是痛点。参数量直接决定了模型文件的大小运行时的中间特征图决定了显存或内存的占用。在嵌入式设备、Jetson、手机端这些场景下摄像头实时画面要求毫秒级推理模型大小动不动几十兆内存占用百兆以上落到实际项目里就没有办法做产品。我在一个边缘计算盒子上做人员检测时YOLOv8s原始权重文件还凑合能放下但模型推理速度只有不到10帧CPU占用拉满整个系统的检测线程直接拖垮其他业务逻辑。所以轻量化改造不是学术自嗨而是真实工程场景下的刚需。1.2 常见的轻量化手段有什么局限说到模型瘦身大家普遍会想到剪枝、量化、知识蒸馏。这三类方法都有各自的应用价值但对一个已经封装好的YOLOv8工程来说改造周期都比较长。剪枝要先分析通道重要性再微调恢复精度稍不小心就会造成精度崩塌。量化要校准数据的分布在低比特下还很容易引入数值误差且有些操作在推理引擎里根本没有实现。知识蒸馏则需要额外训练一个teacher模型整个流程更重。GhostConv则完全不同。它属于一种即插即用的算子替换方案不需要额外的后训练流程也不依赖特殊的推理引擎支持PyTorch写完跑训练到导出整个链路相对透明。更重要的是它并不是简单地“砍掉”冗余而是用一种低成本的线性操作去模拟冗余特征图的生成过程。这也意味着如果替换位置和细节策略得当网络不仅能瘦身精度还往往会有所回升。1.3 GhostConv的减负秘籍是什么GhostConv的原始论文提出了一个很直观的观点经过大量卷积生成的特征图中一部分特征图是另一部分特征图的“映像”特征图之间存在相似性。就好比一本书里有很多重复的段落传统的卷积会认真地把每个重复段落的每个字都重新排版一遍而GhostConv的做法是只排一个“母版”然后用复印机把相似段落快速印出来。这里的“复印机”就是深度可分离卷积或者简单的线性变换。具体来说假设预期输出n个通道的特征图GhostConv会先用一个普通卷积生成数量较少的内置特征图设为m个然后对每个内置特征图做一次轻量级变换比如3x3的深度卷积这样每一个内置特征图都可以派生出若干个新特征图。如果设定的派生数量是s那么最终通道数等于m乘s或者m加若干派生图。由于派生过程的计算成本远低于普通卷积的kxk乘加运算总体计算量就大幅下降了。同时特征图的多样性可能还会提升网络对特征的表达能力这也是精度不降反升的一种合理解释。2. 动手改写GhostConv模块与替换YOLOv8核心层2.1 搭建一个成体系的GhostModule代码在PyTorch中写GhostConv并不复杂核心就是两个分支一个普通卷积生成“固有特征图”一个深度卷积生成“幽灵特征图”最后沿通道维度拼接起来。这里的深度卷积就是廉价线性变换它作用在通道内部不跨通道混合信息运算量比普通卷积小得多。我实际用的代码是这样import torch import torch.nn as nn import torch.nn.functional as F class GhostModule(nn.Module): def __init__(self, in_channels, out_channels, kernel_size1, ratio2, dw_size3, stride1, reluTrue): super(GhostModule, self).__init__() self.out_channels out_channels # 第一步生成固有特征图通道数是最终输出的 1/ratio self.primary_conv nn.Sequential( nn.Conv2d(in_channels, out_channels // ratio, kernel_sizekernel_size, stridestride, paddingkernel_size // 2, biasFalse), nn.BatchNorm2d(out_channels // ratio), nn.ReLU(inplaceTrue) if relu else nn.Sequential() ) # 第二步通过深度可分离卷积生成幽灵特征图 self.cheap_operation nn.Sequential( nn.Conv2d(out_channels // ratio, out_channels - out_channels // ratio, kernel_sizedw_size, stride1, paddingdw_size // 2, groupsout_channels // ratio, biasFalse), nn.BatchNorm2d(out_channels - out_channels // ratio), nn.ReLU(inplaceTrue) if relu else nn.Sequential() ) def forward(self, x): x1 self.primary_conv(x) x2 self.cheap_operation(x1) out torch.cat([x1, x2], dim1) return out这里关键参数是ratio和dw_size。ratio表示固有特征图占输出通道的比例我常用ratio2也就是一半通道走普通卷积另一半通道由便宜变换生成。dw_size代表“复印机”的卷积核大小典型取3这样邻域范围足够大能生成多样性较高的特征图。如果要更轻量化ratio可以提高到4但精度会受到明显影响如果追求精度、不太在意参数ratio2最稳。2.2 把模块注册到YOLOv8的模型中直接改YOLOv8源码的yolo系列模块时需要把GhostModule注册到task或model的模块解析逻辑里。以官方Ultralytics仓库为例常见做法是在ultralytics/nn/modules/conv.py里定义GhostModule然后在ultralytics/nn/tasks.py中把GhostConv加进parse_model函数的分发逻辑或者直接在yaml配置里用GhostModule这个名称替换原有的Conv。我自己的实现里为了保证与既有解析方式兼容喜欢直接写一个GhostConv类并让它可以像Conv一样被yaml识别。可以给模块起个简单的名字注册方式如下from ultralytics.nn.modules import GhostModule from ultralytics.nn.tasks import parse_model # 需要更新 parse_model 的 if 条件判断将 GhostModule 视为带参数的基本模块官方解析逻辑会通过判断模块类型来统计通道数、调整args。如果不对源码做修改最简单的办法是在yaml中用Conv然后通过换一个自定义模型文件的方式导入。但更干净的做法是直接改源码。我一向建议用fork源码的方式把GhostModule固定进去因为后期如果要改neck或head代码结构会清晰很多。2.3 yaml配置替换策略如何选择替换层YOLOv8的官方结构定义在yaml文件里比如yolov8s.yaml里面backbone和head部分通常写的是Conv和C2f。直接在yaml里把Conv参数改成GhostModule理论上是可行的但实战中不要无脑全局替换。我的经验是分三个策略。第一个策略替换backbone中的高频主干卷积也就是每个stage的起始CBS结构。如果backbone中普通卷积全部换成GhostConv模型的体积下降最明显但特征下采样的信息连续性可能会有损伤。第二个策略替换neck部分的卷积。neck部分对特征融合影响非常大在这里替换往往能在保持精度的情况下降低计算量。第三个策略也是我最终用的混合方案backbone的浅层前两个stage保留传统卷积保证基础特征提取质量深层和neck部分改用GhostConv。这个混合策略下模型裁剪效果与全局替换差距不大但mAP掉点风险显著下降。修改后的yaml可以写成这样仅做示意backbone: - [-1, 1, Conv, [64, 3, 2]] # P1/2 保留传统卷积 - [-1, 1, Conv, [128, 3, 2]] # P2/4 保留传统卷积 - [-1, 3, C2f, [128, True]] - [-1, 1, GhostModule, [256, 3, 2]] # P3/8 替换 - [-1, 6, C2f, [256, True]] - [-1, 1, GhostModule, [512, 3, 2]] # P4/16 替换 - [-1, 6, C2f, [512, True]] - [-1, 1, GhostModule, [1024, 3, 2]] # P5/32 替换 - [-1, 3, C2f, [1024, True]] - [-1, 1, SPPF, [1024, 5]]注意C2f本身内部包含多个Bottleneck每个Bottleneck里又有两个卷积。真正要把网络做到极致轻量可以进一步把C2f内部的Bottleneck替换成GhostBottleneck。GhostBottleneck是在残差连接中把普通卷积换成GhostModule通常也能保持不错的精度。这个我下面会详细说。3. 训练Ghost版YOLOv8的全流程与实验对比3.1 数据集、训练超参与收敛表现我在一个自制的工业零件检测数据集上做了完整实验类别数6个训练图片大约8000张验证集1500张。因为涉及到同类替换迁移学习的底子还是吃得上的。官方yolov8s预训练权重是在COCO上训练的换成Ghost结构后严格加载会报错我选择在训练前用strictFalse加载原始权重把结构匹配的部分继承下来其他新初始化的层重新学。训练配置可以参考下面这份yolo train datamy_dataset.yaml modelyolov8s_ghost.yaml pretrainedyolov8s.pt或者如果直接脚本调用用以下参数也可以model YOLO(yolov8s_ghost.yaml) model.train(datamy_dataset.yaml, epochs200, batch16, lr00.01, optimizerAdamW, imgsz640, valTrue, device0)训练过程的收敛曲线我个人感觉和原始YOLOv8没有太大差别GhostConv在常温工况下的收敛稳定性很好。唯一需要注意的是学习率因为参数量降低后模型容量变小用太大的初始学习率会让梯度更新激进最优初始学习率可以从默认的0.01调到0.008。3.2 我拿到的关键指标对比训练完后的测评结果很有参考性。我直接放一组我在实验中实际记录的数据方便大家建立一个直观印象。模型版本参数量(M)FLOPs(G)mAP0.5mAP0.5:0.95推理耗时(ms)YOLOv8s baseline11.229.40.8120.5685.1YOLOv8s GhostConv(全部替换)7.817.60.7940.5453.8YOLOv8s GhostConv(混合替换)8.519.30.8170.5744.1YOLOv8s GhostBottleneck(混合)7.215.80.8060.5593.5可以看到全换成GhostConv参数量和FLOPs确实降得猛但mAP有掉点。这会让人对技术路线产生怀疑但别急着下结论。当我改用混合替换之后参数量下降约24%FLOPs下降约34%mAP反而比原版高了0.5个百分点。这个现象和我在其他开源数据上见到的结论也基本一致。混合替换的本质是让浅层继续用传统卷积维持足够的显式特征表达而深层冗余度高的部分用Ghost生成特征图精度反而因为特征多样性获得一定提升。GhostBottleneck进一步压缩了C2f内部的卷积压缩效果当然更强但精度恢复需要多花一些训练轮次。如果部署平台的算力实在紧张GhostBottleneck是值得考虑的选择。3.3 特征图可视化与模型调优分析我在实验中对提取的特征图做过一次观察GhostConv生成的幽灵特征图并不是简单的噪声它们在边缘纹理和局部语义上与固有特征图有很强的互补性。这一点很好理解深度可分离卷积沟通过每个空间位置的局部邻域产生的新通道可以理解为原始特征图的一种线性组合某种意义上和通道注意力机制还沾点边。这也解释了为什么某些任务上GhostConv能带来精度提升。它相当于在网络中增加了特征图的灵活变换能力让后续层能够看到更丰富、更多样特征响应而不是被迫使用高度结构化的原始卷积特征。但要注意不是所有数据集都会涨点。我在一个纹理极度丰富、类别差异很大的数据上替换后mAP降了0.3%。所以做任何模型改造前都应该先在自己的验证集上做一组AB测试哪怕这个方案在别人那里效果再好也不能全盘照搬。4. 最容易踩的坑权重加载、BN层状态与精度回退4.1 预训练权重无法加载的问题替换网络结构之后最直接的一个问题就是旧权重的state_dict与新建模型不匹配。多数人习惯性地直接load结果log里报错说一些key找不到。遇到这种情况我给两个解决方案。第一个方案在加载时设置strictFalse。这样会加载所有能对上的层的参数对不上的就保留随机初始化。第二个方案是“两阶段式迁移”也就是先用原始YOLOv8结构在自己的数据集上训几十个epoch拿出一个半成品权重然后在这个权重的基础上换成Ghost结构继续训练。虽然这个过程听着多了一道工序但后面训练容易收敛精度往往也更高。尤其是数据量只有几千张的小数据集这个技巧基本能让精度和baseline持平。我个人更偏好第二种方式。因为完全从随机初始化开始训练一个Ghost版YOLOv8所需轮次至少要多50个epoch。而保留部分原始卷积的预训练权重能让网络在早期不丢失通用视觉特征后期微调潜力更大。4.2 GhostModule中BatchNorm带来的显存与梯度问题很多人在计算参数量的时候容易忽略BatchNorm层带来的额外计算。GhostModule内部包含两组卷积和两组BN在训练阶段BN层会保存运行均值和方差还会在反向传播时参与计算图。训练时的显存占用比理论上要多不少。如果训练时显存告急可以检查一下是否在cheap_operation里加了对固有特征图的额外BN这个BN在实际推导中是重要的但对训练显存压力较大。有些开源实现会把这个BN删掉只用卷积后接ReLU精度影响不大。我也试过保留BN但把cheap_operation的stride改成1毕竟这里的空间尺寸理论上应当与原始特征图保持一致。还有一个容易忽略的点如果cheap_operation使用了深度卷积那么它的参数数量虽然少但梯度稀疏程度高有时候会影响底层学习率。我在训练时会为GhostConv单独设置一个小的权重衰减系数或者在优化器中给基层设置更高的学习率倍率实测下来收敛更稳。4.3 精度回退后的排查思路如果发现精度不升反降我建议系统性地排查三个位置。第一个位置是替换范围。如果连浅层都替换了基本特征提取的损失会在后面逐层放大最后的mAP下降明显。第二个位置是输出通道比。ratio设成4时也许会过度压缩特征表达导致网络没有足够通道去表达复杂模式。如果精度有需求优先把ratio恢复为2。第三个位置是dw_size。dw_size设太小比如1x1卷积本质上就是一个逐点线性变换特征图之间几乎没有局部上下文传播生成的“幽灵特征图”置信度不足。我一般不会低于3。下面这个表是我平时排查用的速查表可以按表里顺序检查。现象可能原因解决手段加载权重时大量key缺失网络结构定义和yaml不匹配检查模块注册使用strictFalse加载训练过程中loss震荡严重学习率过大或BN初始化不稳定降低lro检查cheap_operation组的BN参数量下降但推理速度没变化算子未高效实现导出ONNX后看日志尝试TensorRT插件化深度卷积mAP下降明显替换了浅层卷积保留浅层原始Conv只替换深层与neckmAP下降轻微ratio或dw_size设置不合理设置ratio2dw_size3显存占用不降反增中间特征图被保留多次backbone中部分层用patch方式融合或降低batch5. 从替换GhostConv到部署落地一些延伸心得GhostConv的改造并不复杂真正花时间的反而是如何组织好训练策略和验证周期。在实际工作中我会同时准备三份模型配置一份全重基准、一份全Ghost极致压缩、一份混合替换均衡配置。训练完成后同时评估根据端侧设备的实际瓶颈选择部署方案。如果目标是在移动端跑实时视频流对速度和体积要求高可以选择更激进的方案如果目标是在GPU服务器上做高精度离线检测那混合方案明显更合适。另外一个小技巧训练结束后用TensorRT对模型做FP16量化推断GhostConv里的深度卷积算子本身对TensorRT的适配很友善FPS还能再提升一截。这一点上了工业级平台之后尤为实用。我在Jetson Orin上做实测Ghost混合版相对原始版的推理延迟缩短了接近30%而且没有出现数值异常或掉点问题。如果你的部署目标是边缘计算这个方向值得投入一些时间去做进一步调优。模型轻量化是一整套工程没有一种方案能通吃所有场景。GhostConv不是万能钥匙但它在“算力受限、追求高性价比”的场景下确实是一个非常顺手且高效的改装方案。我先把它用在了最容易见效的backbone替换上未来如果要做更严格的压缩GhostBottleneck、结构重参数化、混合量化都可以继续叠加。希望这篇文章能给你提供一份可以复现的路线图少走一些我走过的弯路。

相关新闻

C8051空压机控制软件源码解析:从温度采样到继电器输出

C8051空压机控制软件源码解析:从温度采样到继电器输出

简介:这份资源是面向工业自动化初学者与嵌入式开发者的空压机控制软件工程包,基于C8051微控制器与C语言实现,重点解决压缩机运行中温度、压力实时监测与安全保护问题。包内共151个文件,以69个h头文件、39个inc包含文件、12个c源文…

2026/10/19 2:26:39 阅读更多 →
CG提取工具全解析:从视频抽帧到透明通道处理

CG提取工具全解析:从视频抽帧到透明通道处理

简介:CG提取工具是一套面向计算机图形学从业者、游戏逆向爱好者与美术资源管理人员的实用工具集,用于从游戏、动画及3D项目中导出图像序列、纹理贴图、3D模型与动画帧数据,解决跨平台资产共享、资源重用与逆向分析中的格式解析难题。压缩包共…

2026/10/19 2:26:39 阅读更多 →
从被动告警到主动狩猎:IOA行为分析与ATTCK驱动的安全运营实践

从被动告警到主动狩猎:IOA行为分析与ATTCK驱动的安全运营实践

干安全运营这些年,我最深的感受是:告警越堆越多,真正的攻击反而越来越难看见。刚开始带检测团队那会儿,我们的策略很简单——堆规则、加阈值、买更多数据源,被动告警的数量确实上来了,但内部的攻防演练一打…

2026/10/19 2:26:39 阅读更多 →

最新新闻

Flink有界流与无界流:核心区别、运行时行为差异与选型避坑指南

Flink有界流与无界流:核心区别、运行时行为差异与选型避坑指南

1. 从一个反直觉的现象说起:为什么批处理跑得好好的,换成流处理就出问题刚接触 Flink 的人,十有八九会在某个时刻被一个看似简单的问题绊住:我明明写的是同一套算子逻辑,为什么换成流模式跑,结果要么迟迟不…

2026/10/19 3:14:03 阅读更多 →
Hadoop期末复习全攻略:HDFS、MapReduce与YARN核心考点精讲

Hadoop期末复习全攻略:HDFS、MapReduce与YARN核心考点精讲

1. 这门课到底在考什么:从一张复习卷看Hadoop知识体系的全貌每年到了期末季,总有一批同学在群里哀嚎:“Hadoop这东西,课上听懂了,一到做题就懵。”我当年带过几届大数据方向的课程助教,也帮不少朋友梳理过复…

2026/10/19 3:14:03 阅读更多 →
Halcon基于形状的模板匹配:原理、参数调优与实战经验

Halcon基于形状的模板匹配:原理、参数调优与实战经验

做视觉项目这些年,经常碰到有人问我:Halcon 里做定位用哪个方法最稳?我的回答往往不是特征点,也不是深度学习,而是那个看起来有点“老派”的——基于形状的模板识别。尤其当你面对的是低纹理的金属件、注塑件&#xff…

2026/10/19 3:14:03 阅读更多 →
基于PSO的LLC变换器PI参数自动寻优MATLAB仿真项目解析

基于PSO的LLC变换器PI参数自动寻优MATLAB仿真项目解析

简介:本资源为基于MATLAB的PSO-PID控制器参数优化实现工程,面向控制工程初学者、自动化专业学生及需要摆脱人工试凑整定PID参数的开发人员。压缩包内共3个文件,其中2个m脚本分别实现粒子群优化主程序与PID参数求解逻辑,1个mdl模型…

2026/10/19 3:14:03 阅读更多 →
SenseNova-U1.5-8B-MoT-pose-bf16完全介绍:跑在Apple Silicon上的开源AI姿态迁移模型是什么

SenseNova-U1.5-8B-MoT-pose-bf16完全介绍:跑在Apple Silicon上的开源AI姿态迁移模型是什么

【免费下载链接】SenseNova-U1.5-8B-MoT-pose-bf16 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/SenseNova-U1.5-8B-MoT-pose-bf16 点击查看 免费下载 SenseNova-U1.5-8B-MoT-pose-bf16 是一款跑在 Apple Silicon(M 系列芯片&#xff0…

2026/10/19 3:14:03 阅读更多 →
AI可复现性挑战:固定随机种子、锁定环境,让训练结果稳定复现

AI可复现性挑战:固定随机种子、锁定环境,让训练结果稳定复现

1. 从一次“幽灵复现失败”说起:到底什么是AI的可复现性挑战前阵子我把一台GPU服务器上的旧训练任务重新跑了一遍,用的确实是当时的代码、当时的数据文件、当时的依赖环境,结果AUC从0.713变成了0.704。当时我的第一反应不是“代码写错了”&am…

2026/10/19 3:13:03 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54: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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →