华为DIGIX视觉季军方案源码拆解:从工程结构到复现避坑
简介这份资源是2020华为DIGIX全球校园AI算法精英大赛计算机视觉赛道的第三名解决方案源码包面向计算机、数学、电子信息等专业的学生与算法竞赛爱好者适合作为竞赛项目学习资料帮助理解高分方案的模型设计、训练流程与工程组织方式。压缩包共508个文件约20.91MB以245个Python源码和179个pyc编译文件为主体辅以23个yml、9个yaml、20个xml等配置与数据描述文件另有10个sh脚本、5个md说明及若干工程配置文件覆盖从环境搭建到模型复现的完整链路。目前已有269人学习下载。读者可从中获取完整赛题方案代码、模块化目录结构、训练与推理脚本、参数配置模板及复现思路适合对照研读、二次调试与迁移到同类视觉任务中是进阶算法实践与竞赛复盘的实用参考。1. 从一份季军源码说起这套华为 DIGIX 视觉方案到底能跑出什么如果你正在准备计算机视觉方向的算法竞赛或者想找一个结构完整、能直接跑起来的实战项目来啃那这份 2020 华为 DIGIX 全球校园 AI 算法精英大赛计算机视觉赛道第三名的解决方案源码值得你花时间拆一遍。它不是那种只丢几个 notebook 的“半成品”而是带完整工程配置的代码包——从.flake8、tox.ini这类代码规范文件到多个.iml模块配置再到magic_base、fuxian114、qiege这些一看就是分模块拆解的工程目录说明作者在比赛期间是真的按可维护项目在写而不是临时拼凑。这份资源能解决的核心问题是让你看到一个拿到全球前三的视觉方案在数据预处理、模型结构、训练策略、推理后处理这几个环节上到底做了哪些取舍。适合谁适合已经学过 PyTorch 或 TensorFlow 基础、跑过至少一个完整训练流程、但还没在真实竞赛里拿过名次的同学。如果你连DataLoader都没写过建议先补基础再回来否则这份源码里的很多设计你会看得云里雾里。下面我按“先搞懂它是什么 → 再动手复现 → 最后避开那些血泪坑”的顺序把这份季军方案拆开讲。2. 工程结构拆解从 magic_base 到 qiege每个模块在比赛里干什么2.1 先看清目录这些 .iml 和配置文件不是摆设拿到压缩包解压后第一眼看到的是一堆.iml文件和.flake8、tox.ini、.gitignore。很多人会直接忽略这些觉得“我只关心模型代码”。但恰恰是这些文件能告诉你作者当时用的开发环境、代码检查规则和依赖管理方式。.flake8是 Python 代码风格检查配置说明作者在比赛期间仍然坚持跑 lint保证多人协作时代码风格统一。tox.ini通常用于自动化测试和环境隔离虽然比赛项目不一定有完整测试用例但它的存在意味着作者考虑过“换一台机器能不能跑”的问题。.iml是 IntelliJ IDEA 系列 IDE 的模块文件magic_base.iml、fuxian114.iml、qiege.iml分别对应不同的功能模块——从命名推测magic_base很可能是基础工具库fuxian114可能是复现某个 baseline 或特定版本qiege从拼音看是“切割”大概率跟图像切分或数据划分有关。我一般会先做一件事把.iml文件用文本编辑器打开看里面的sourceFolder和excludeFolder配置。这能快速判断每个模块的源码根目录在哪、哪些是外部依赖、哪些是生成文件。比如如果qiege.iml里sourceFolder指向src/qiege那这个模块的入口就在那。# 查看所有 .iml 文件中的源码目录配置 for f in *.iml; do echo $f grep -E sourceFolder|excludeFolder $f done这段命令的作用是批量提取每个模块的源码路径和排除路径。参数说明grep -E启用扩展正则sourceFolder和excludeFolder是 IDEA 模块文件里的标准标签。跑完你就能画出整个工程的模块依赖草图比盲目翻文件快得多。2.2 模块职责推断从命名反推比赛方案的分层magic_base这个名字很有意思。在竞赛代码里带base的通常是基类或工具集。我推测它至少包含三类东西数据读取的Dataset基类、模型训练的Trainer基类、以及提交格式生成的Submitter基类。为什么这么猜因为华为 DIGIX 这类比赛通常有固定的数据格式和提交要求把公共逻辑抽到base里其他模块继承后只改差异部分是竞赛老手的常见做法。fuxian114里的“fuxian”是“复现”的拼音。很多参赛队伍会先复现往届优秀方案或论文里的 baseline再在此基础上改进。这个模块很可能就是作者复现的某个版本编号 114 可能是内部版本号或日期。如果你要学习这份源码建议从fuxian114入手因为它通常比最终方案更简单、更容易跑通。qiege模块从拼音看是“切割”。在计算机视觉比赛里切割可能指大图切小图、数据划分训练/验证集、或者对检测框进行裁剪。结合华为 DIGIX 视觉赛道的常见任务图像分类、目标检测、图像分割我倾向于认为它负责的是数据预处理阶段的图像切分或样本划分。# 假设 qiege 模块中有一个典型的切分函数结构可能如下 def split_dataset(image_dir, label_file, train_ratio0.8, seed42): 按比例划分训练集和验证集 :param image_dir: 图像根目录 :param label_file: 标签文件路径 :param train_ratio: 训练集比例默认 0.8 :param seed: 随机种子保证可复现 :return: train_list, val_list import random random.seed(seed) with open(label_file, r) as f: lines f.readlines() random.shuffle(lines) split_idx int(len(lines) * train_ratio) return lines[:split_idx], lines[split_idx:]这段代码是很多竞赛项目里数据划分的典型写法。关键参数是seed比赛里如果不固定随机种子每次跑出来的验证集不一样调参就会变成玄学。train_ratio一般设 0.8 或 0.9取决于数据量大小。数据量少的时候可以设 0.9但验证集太小会导致指标波动大这时候常见做法是改用交叉验证。2.3 依赖与环境tox.ini 和 .flake8 透露的工程习惯tox.ini里通常会定义[tox]和[testenv]段指定 Python 版本和依赖安装命令。虽然比赛项目不一定真的跑 tox但你可以从里面看到作者用的 Python 版本和关键依赖。比如如果[testenv]里写了deps torch1.4, torchvision, opencv-python那你就知道这套代码至少需要这些包。.flake8里一般会配置max-line-length、ignore等。如果max-line-length设的是 120说明作者习惯写较长的行你阅读代码时看到长行不用惊讶。如果ignore里包含E501说明作者主动忽略了行长度检查那代码里可能有超长行复制到自己的编辑器时要注意换行。# tox.ini 典型结构示例 [tox] envlist py37, py38 [testenv] deps torch1.4 torchvision opencv-python numpy pandas commands python -m pytest tests/这段配置说明作者考虑了 Python 3.7 和 3.8 两个版本依赖里包含 PyTorch、OpenCV、NumPy、Pandas。如果你本地是 Python 3.9 或更高可能会遇到某些旧版本包不兼容的问题常见做法是建一个 3.7 或 3.8 的虚拟环境。commands里如果指向pytest说明有测试目录但比赛项目里测试往往不完整跑不通也不用慌重点看模型代码。提示不要一上来就pip install -r requirements.txt。先看tox.ini或setup.py里的依赖版本尤其是 PyTorch 和 CUDA 的对应关系。版本对不上后面报错会浪费你大量时间。3. 复现路线从数据准备到提交文件的完整操作链3.1 数据准备先搞清楚比赛的数据长什么样华为 DIGIX 视觉赛道的数据通常以图像文件夹加标签文件的形式给出。标签文件可能是 CSV、JSON 或 TXT。在动手跑代码之前你必须先确认三件事图像总数、类别数、标签格式。很多复现失败的原因不是模型不对而是数据路径写错或标签解析错位。我一般会先写一个极简的统计脚本不依赖项目里的任何模块纯粹用 Python 标准库加 PIL 跑一遍。import os from PIL import Image from collections import Counter image_dir data/train/images label_file data/train/labels.txt # 统计图像数量和尺寸分布 sizes [] for img_name in os.listdir(image_dir)[:100]: # 先抽样100张 img_path os.path.join(image_dir, img_name) with Image.open(img_path) as im: sizes.append(im.size) print(抽样尺寸分布:, Counter(sizes).most_common(5)) # 统计标签类别分布 with open(label_file, r) as f: labels [line.strip().split()[-1] for line in f if line.strip()] print(类别分布:, Counter(labels))这段脚本的作用是快速摸清数据底细。sizes统计图像尺寸如果发现尺寸差异很大说明预处理里必须有 resize 或 padding。Counter(labels)统计类别分布如果严重不均衡训练时就要考虑加权采样或 focal loss。参数[:100]是抽样数量数据量大时可以只抽几百张不用全跑。3.2 模型训练从 fuxian114 模块切入先跑通再调优fuxian114模块很可能是作者复现的 baseline。建议你先找到这个模块的入口文件通常是train.py或main.py。打开后看它引用了哪些配置项学习率、batch size、优化器、epoch 数。这些参数在比赛代码里往往写在config.py或args.py里。# 查找 fuxian114 模块下的入口文件 find . -path ./fuxian114/* -name *.py | xargs grep -l if __name__ 2/dev/null这条命令会列出fuxian114目录下所有包含if __name__ __main__的 Python 文件这些就是可执行的入口。找到后先别急着改代码用默认参数跑一个 epoch看 loss 是否下降、验证指标是否正常。如果第一个 epoch 就报错优先检查数据路径和预训练权重路径。# 典型的训练循环结构参数含义逐行说明 for epoch in range(num_epochs): model.train() for images, labels in train_loader: images images.cuda() # 放到 GPU labels labels.cuda() optimizer.zero_grad() # 清空梯度 outputs model(images) # 前向传播 loss criterion(outputs, labels) loss.backward() # 反向传播 optimizer.step() # 更新参数 model.eval() with torch.no_grad(): for images, labels in val_loader: outputs model(images.cuda()) # 计算验证指标这段训练循环是 PyTorch 的标准写法。关键参数num_epochs控制训练轮数比赛里通常设 50 到 200optimizer.zero_grad()必须在loss.backward()之前调用否则梯度会累积model.eval()和torch.no_grad()在验证阶段必须同时用前者切换 BN 和 Dropout 行为后者关闭梯度计算节省显存。如果验证指标不升反降常见原因是学习率太大或过拟合可以尝试降低学习率或加数据增强。3.3 推理与提交qiege 模块可能负责的后处理逻辑比赛的最后一步是生成提交文件。qiege模块如果负责“切割”那在推理阶段可能用于对测试图像进行切分后分别预测再合并结果。比如测试图像分辨率很大直接 resize 会丢失细节常见做法是切分成多个 patch 分别推理再拼接。def sliding_window_inference(model, image, patch_size512, stride256): 滑动窗口推理适用于大图 :param model: 训练好的模型 :param image: 输入大图numpy array :param patch_size: 每个 patch 的尺寸 :param stride: 滑动步长小于 patch_size 时会有重叠 :return: 合并后的预测结果 h, w image.shape[:2] output np.zeros((h, w), dtypenp.float32) count np.zeros((h, w), dtypenp.float32) for y in range(0, h, stride): for x in range(0, w, stride): patch image[y:ypatch_size, x:xpatch_size] # 对 patch 做预测并累加 pred model(patch) output[y:ypatch_size, x:xpatch_size] pred count[y:ypatch_size, x:xpatch_size] 1 return output / np.maximum(count, 1)这段滑动窗口推理的关键参数是patch_size和stride。patch_size要和模型训练时的输入尺寸一致否则 BN 统计量不匹配。stride小于patch_size时重叠区域会被多次预测并平均能减少边界效应。count数组用来记录每个像素被预测的次数最后做平均。如果显存不够可以把patch_size调小但太小会丢失上下文信息常见做法是 512 或 768。注意提交文件格式一定要严格按比赛要求来。列名、分隔符、小数位数、行顺序任何一个不对都可能导致提交失败。我一般会先拿验证集生成一份提交文件和标准答案对比格式确认无误后再跑测试集。4. 避坑与排查复现这套季军源码时最容易翻车的五个地方4.1 现象跑训练脚本时报 “CUDA out of memory”原因比赛代码的 batch size 和 patch size 通常是在特定显存下调好的。如果你本地显卡显存小于作者当时用的比如作者用 32G V100你用 8G 2070直接跑默认参数必炸。解决先把 batch size 减半如果还不行就减到 1。同时检查是否有不必要的张量保留在显存里比如在验证阶段忘了加torch.no_grad()。如果模型本身太大可以尝试混合精度训练torch.cuda.amp能省不少显存。4.2 现象验证集指标正常但提交后分数很低原因最常见的是提交格式错位。比如验证时用的标签顺序和提交要求的顺序不一致或者预测结果没有做后处理如 sigmoid、softmax、阈值截断。解决拿验证集生成一份提交文件用官方提供的评分脚本如果有跑一遍确认分数和本地验证指标接近。如果没有评分脚本就手动检查前几行和后几行的格式确保列名、分隔符、数值范围都符合要求。4.3 现象fuxian114模块跑不通报 “No module named ‘magic_base’”原因模块之间的导入路径没有配置好。IDEA 的.iml文件里配置了源码根目录但你在命令行跑的时候Python 不知道这些根目录。解决在入口脚本开头手动加sys.path.append把magic_base所在目录加进去。或者更规范的做法是在项目根目录建一个setup.py用pip install -e .把整个项目装成可编辑包。import sys import os # 把项目根目录加到 Python 搜索路径 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))这段代码的作用是把当前文件的上级目录的上级目录加入sys.path。参数说明os.path.abspath(__file__)获取当前文件绝对路径os.path.dirname取目录调两次就得到项目根目录。sys.path.insert(0, ...)保证优先从项目根目录找模块。4.4 现象训练 loss 一直不降或者降了但验证指标不动原因可能是数据标签对不上。比如图像和标签文件的行顺序不一致或者标签编码从 0 开始还是从 1 开始搞错了。解决写一个可视化脚本随机抽几张训练图把标签画在图上人眼确认。如果标签是分类任务检查类别数和模型输出维度是否一致。如果标签是检测任务检查框的坐标格式是xyxy还是xywh归一化没归一化。4.5 现象推理速度极慢一张图要好几秒原因可能是滑动窗口的stride设得太小导致 patch 数量爆炸。也可能是模型没有切到eval模式BN 和 Dropout 还在训练状态。解决先确认model.eval()被调用。然后计算 patch 数量(h/stride) * (w/stride)如果超过几百就适当增大stride。另外可以尝试把模型转成 ONNX 或 TensorRT推理速度能提升几倍但转换过程中要注意算子兼容性。提示比赛代码里的“玄学”参数比如某个特定的随机种子、某个奇怪的预处理顺序往往是有原因的。不要一上来就改先按原样跑通再逐步替换成自己的理解。5. 进阶技巧用这份源码做迁移学习与消融实验的正确姿势这份季军源码最大的价值不是让你原样复现拿个第三名而是给你一个高质量的起点去做迁移学习和消融实验。我一般会按三步走先冻结 backbone 只训分类头再解冻部分层做微调最后全网络微调。每一步都记录验证指标这样你能清楚知道哪部分改进真正带来了提升。# 冻结 backbone 的示例 for name, param in model.named_parameters(): if backbone in name: param.requires_grad False else: param.requires_grad True # 只把需要梯度的参数传给优化器 optimizer torch.optim.Adam( filter(lambda p: p.requires_grad, model.parameters()), lr1e-3 )这段代码的关键是filter(lambda p: p.requires_grad, model.parameters())它只把需要梯度的参数传给优化器避免更新被冻结的层。lr1e-3是分类头常用的学习率比全网络微调时的学习率大一个数量级。如果你发现冻结后指标反而下降可能是 backbone 的特征和当前任务差异太大这时候应该解冻更多层。消融实验的记录方式我习惯用表格管理每行一个实验配置列包括backbone 是否冻结、数据增强策略、学习率、batch size、验证指标。这样跑完十几组实验后一眼就能看出哪个因素影响最大。实验编号backbone数据增强学习率验证 mAP备注exp01冻结无1e-30.62baselineexp02冻结随机裁剪1e-30.65增强有效exp03解冻随机裁剪1e-40.71微调提升明显exp04解冻随机裁剪翻转1e-40.73翻转再涨两个点表格里的验证 mAP只是示例实际比赛可能用 accuracy、F1 或其他指标。关键是每次只改一个变量否则你无法判断是哪个改动起了作用。我见过太多人一次改三四个地方指标涨了也不知道为什么涨跌了也不知道为什么跌最后调参变成纯碰运气。还有一个容易被忽略的点这份源码里的magic_base模块很可能包含了一些通用的数据增强或后处理函数。你可以把这些函数单独抽出来用在自己的项目里。比如如果里面有一个实现得比较完善的mixup或cutmix直接复制到你的代码里比重新写一遍省事得多。但要注意许可证LICENSE文件里如果写的是 MIT 或 Apache一般可以自由使用如果是 GPL你的项目也可能被要求开源。从那以后我每次拿到一份竞赛源码都强制自己先跑通默认配置再画一张模块依赖图最后才动手改代码。这个习惯帮我省下了大量“改了三天发现方向错了”的时间。希望这份拆解能帮到你少走一些我当年走过的弯路。本文还有配套的精品资源点击获取

相关新闻

小白也能轻松玩转龙虾:虾壳云一键部署低成本,桌面快速安装 OpenClaw(附最新安装包)

小白也能轻松玩转龙虾:虾壳云一键部署低成本,桌面快速安装 OpenClaw(附最新安装包)

/* 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 7:48:20 阅读更多 →
开源桌面端Text2SQL工具MuAsk:本地数据库自然语言查询实践

开源桌面端Text2SQL工具MuAsk:本地数据库自然语言查询实践

1. 为什么我要做一款桌面端的 Text2SQL 工具数据这件事,在大多数团队里都有一个尴尬的错位:写 SQL 的人不一定是懂业务的人,懂业务的人往往不会写 SQL。运营想看"上个月复购率最高的十个品类",得先提需求给数据组&#…

2026/10/9 7:48:20 阅读更多 →
Spring Boot商城后端源码从环境配置到项目改造实战指南

Spring Boot商城后端源码从环境配置到项目改造实战指南

简介:基于Spring Boot框架的网上购物商城后端系统源码,面向Java初学者、需要快速实现小型电商后端的学生或开发者。项目涵盖购物车、客服、地址、商品评论等核心业务模块,使用MyBatis Plus操作数据库,提供增删改查、分页查询、条件…

2026/10/9 7:48:20 阅读更多 →

最新新闻

空气悬架建模实战:从变刚度原理到控制标定全流程解析

空气悬架建模实战:从变刚度原理到控制标定全流程解析

坐进一台配了空气悬架的车,从一段满是补丁的国道上下来,你大概率会忍不住感叹一句“这底盘是真的舒服”。但这份体感背后并不是玄学,真正让它和普通螺旋弹簧拉开差距的,是空气弹簧本身的变刚度特性。要把这种特性吃透、真正用于产…

2026/10/9 8:50:13 阅读更多 →
Milvus多租户方案实战:用Partition Key实现数据隔离与高效检索

Milvus多租户方案实战:用Partition Key实现数据隔离与高效检索

刚接触向量数据库的时候,我一度以为多租户只是个"数据库层面顺手支持一下"的小功能。真正把带十来个企业客户的RAG服务推进生产之后才发现,多租户方案的选型能直接决定你半夜被叫起来几次。Milvus这类向量数据库也一样,看起来无非是…

2026/10/9 8:50:13 阅读更多 →
工业物联网网关选型与部署实战:从协议解析到IP规划避坑

工业物联网网关选型与部署实战:从协议解析到IP规划避坑

1. 从"数据上不来"说起:网关在工业现场到底救的什么急这两年聊工业物联网,最常听到的一句话是"设备数据上不来"。不是没有数据,而是数据在设备肚子里出不来。我去过不少工厂,很多设备连了PLC,现场…

2026/10/9 8:50:13 阅读更多 →
MySQL分组TopN查询全解析:三种实现方案与并列名次处理

MySQL分组TopN查询全解析:三种实现方案与并列名次处理

我最近在刷牛客网SQL题库,刷到SQL40“每个月Top3的周杰伦歌曲”时停了一下。表面上是给周杰伦做月度排行榜,底下其实是一道非常标准的 MySQL分组TopN查询 :按月份分组,组内按播放次数排序,每组只保留前三条。这类需求…

2026/10/9 8:50:12 阅读更多 →
多租户架构与Milvus实战:从数据隔离到RBAC权限管控

多租户架构与Milvus实战:从数据隔离到RBAC权限管控

最近Dify社区版1.10一发布,多租户相关的话题又热闹起来了。说起来多租户不算新概念,在SaaS领域早就被讲烂了,但一旦落到AI场景里和向量数据库、RAG知识库、AI客服这些具体业务结合,隔离怎么做、权限怎么控、性能怎么保&#xff0c…

2026/10/9 8:50:12 阅读更多 →
线性回归实战指南:从最小二乘法到Python实现

线性回归实战指南:从最小二乘法到Python实现

1. 动手之前:先搞清楚线性回归在解决什么问题 说个真实场景。我朋友圈里有个做电商运营的姑娘,每个月都要统计店铺的推广花费和销售额,老板总让她预测下个月投多少钱能出多少量。她每次都是拉个Excel折线图,用眼睛瞄一眼增长率&am…

2026/10/9 8:49:10 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

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/8 15:26:32 阅读更多 →
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/8 15:26:40 阅读更多 →
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/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 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/8 21:13:17 阅读更多 →
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/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练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/9 6:17:20 阅读更多 →