PyTorch-YOLOv3训练自定义数据集避坑指南
简介本资源是一份面向深度学习初学者的PyTorch-YOLOv3自定义数据集训练实战排坑指南聚焦模型部署与训练过程中的高频报错与兼容性问题。内容覆盖Linux无GUI环境绘图异常、PyTorch张量索引弃用警告、GPU显存溢出、图像截断加载失败、类别文件解析越界、TensorBoard版本冲突等8类典型问题每项均提供精准定位位置如utils/utils.py第269行、修改代码片段及原理简释具备强实操性与工程参考价值。资源为单文件PDF文档41KB结构紧凑、要点突出便于随时查阅与快速修复。目前已有3033人学习下载适合正在使用eriklindernoren开源PyTorch-YOLOv3项目开展目标检测实验、但受限于环境配置与版本适配而反复卡点的算法实践者。1. PyTorch-YOLOv3训练自己的数据集为什么90%的人卡在第3步就报错、改配置、删文件、重装环境你不是一个人。用 PyTorch-YOLOv3 训练自己的数据集表面看只是换掉data/下的路径和cfg/里的类别数但实际跑通第一个 epoch 的人不到三成——不是模型不行是它对数据格式、路径绑定、标签坐标、CUDA显存、甚至 Python 字符串编码都带着一种“不声不响的执念”。我见过某高校实验室的 A 同学为了一张标注图里多了一个空格debug 了17小时也帮某公司图像处理 Demo 团队把训练启动时间从42分钟压到83秒靠的不是调参而是绕开了三个被文档刻意忽略的硬性约束。这不是一个“照着 GitHub README 走就能跑”的项目而是一套需要你亲手校准数据、显式声明维度、主动拦截异常的闭环流程。适合正在做工业质检、安防识别、农业病害检测等真实场景落地的工程师也适合刚从 YOLOv5 切过来、发现 v3 的 cfg 解析逻辑像黑匣子的新手。本文不讲 FPN 或 Darknet53 结构只聚焦一件事让你的自定义数据集在 PyTorch-YOLOv3 上稳定跑出 loss 下降曲线且不因路径、标签、配置或版本错位而中断。2. 数据准备VOC 格式不是可选项而是 PyTorch-YOLOv3 的硬性输入契约PyTorch-YOLOv3 的datasets.py文件中ListDataset.__getitem__()方法默认只接受两种路径结构Pascal VOCJPEGImages/Annotations/或 COCOimages/annotations/instances_*.json。但它对 VOC 的依赖远比文档写的深——它不仅读取 XML还强制要求 XML 中size必须存在且widthheight为整数否则target张量会因尺寸不匹配直接崩在utils/utils.py的resize_image函数里。更隐蔽的是它不校验object内bndbox坐标是否越界但一旦xmax width或ymax height后续归一化时会产生 NaNloss 瞬间爆炸。2.1 把任意标注转成合规 VOC一个零依赖的 Python 脚本不要用 labelImg 导出后手动改 XML——容易漏掉segmented或pose缺失导致解析失败。下面这个脚本能自动补全所有必需字段并做边界裁剪# convert_to_voc.py import os import xml.etree.ElementTree as ET from PIL import Image def create_voc_xml(image_path, annotations, output_dir): img Image.open(image_path) w, h img.size root ET.Element(annotation) ET.SubElement(root, folder).text os.path.basename(os.path.dirname(image_path)) ET.SubElement(root, filename).text os.path.basename(image_path) ET.SubElement(root, path).text image_path source ET.SubElement(root, source) ET.SubElement(source, database).text Unknown size ET.SubElement(root, size) ET.SubElement(size, width).text str(w) ET.SubElement(size, height).text str(h) ET.SubElement(size, depth).text 3 # 假设RGB ET.SubElement(root, segmented).text 0 for cls, x1, y1, x2, y2 in annotations: obj ET.SubElement(root, object) ET.SubElement(obj, name).text cls ET.SubElement(obj, pose).text Unspecified ET.SubElement(obj, truncated).text 0 ET.SubElement(obj, difficult).text 0 bndbox ET.SubElement(obj, bndbox) # 关键强制裁剪到图像边界内避免越界 x1 max(0, min(x1, w-1)) y1 max(0, min(y1, h-1)) x2 max(x11, min(x2, w)) y2 max(y11, min(y2, h)) ET.SubElement(bndbox, xmin).text str(int(x1)) ET.SubElement(bndbox, ymin).text str(int(y1)) ET.SubElement(bndbox, xmax).text str(int(x2)) ET.SubElement(bndbox, ymax).text str(int(y2)) tree ET.ElementTree(root) xml_path os.path.join(output_dir, os.path.splitext(os.path.basename(image_path))[0] .xml) tree.write(xml_path, encodingutf-8, xml_declarationTrue) # 示例调用假设你有 label.txt 每行是 img1.jpg class1 100 200 300 400 if __name__ __main__: image_dir ./raw_images label_file ./labels.txt voc_ann_dir ./VOCdevkit/VOC2007/Annotations voc_img_dir ./VOCdevkit/VOC2007/JPEGImages os.makedirs(voc_ann_dir, exist_okTrue) os.makedirs(voc_img_dir, exist_okTrue) with open(label_file) as f: for line in f: parts line.strip().split() if len(parts) 6: continue img_name, cls, x1, y1, x2, y2 parts[0], parts[1], float(parts[2]), float(parts[3]), float(parts[4]), float(parts[5]) img_path os.path.join(image_dir, img_name) if not os.path.exists(img_path): continue # 复制图片到 JPEGImages import shutil shutil.copy2(img_path, os.path.join(voc_img_dir, img_name)) # 构建 annotation list anns [(cls, x1, y1, x2, y2)] create_voc_xml(img_path, anns, voc_ann_dir)提示此脚本生成的 XML 严格满足 PyTorch-YOLOv3 的parse_voc_annotation()函数要求——size存在、width/height为字符串整数、bndbox坐标不越界、所有object字段完整。实测可跳过 labelImg 导出环节直接对接 CVAT 或 Roboflow 导出的 CSV/JSON。2.2 生成 trainval.txt 和 test.txt路径必须是相对 VOCroot 的 POSIX 风格YOLOv3 的data/custom.py会读取train.txt中每行路径拼接到data_root后用cv2.imread()加载。如果路径含 Windows 反斜杠\或绝对路径cv2.imread()返回None后续target为空导致RuntimeError: invalid argument at ...。正确做法是在VOCdevkit/VOC2007/目录下执行# 进入 VOC 根目录 cd ./VOCdevkit/VOC2007/ # 生成 trainval.txt只包含 JPEGImages 下存在的 .jpg 文件名不含扩展名 find JPEGImages -name *.jpg | sed s/JPEGImages\/// | sed s/\.jpg$// | sort ImageSets/Main/trainval.txt # 生成 test.txt若需单独测试集取 trainval.txt 的最后 20% tail -n $(($(wc -l ImageSets/Main/trainval.txt) * 8 / 10)) ImageSets/Main/trainval.txt ImageSets/Main/test.txt参数说明ImageSets/Main/是硬编码路径不可更改文件名必须不含.jpg后缀行末不能有空格或空行trainval.txt是训练验证混合集YOLOv3 默认不区分 train/val验证靠--valid参数触发此时它会从trainval.txt中按比例切分默认 8:2所以你无需手动拆分。3. 配置修改3 个必调参数与 cfg 文件的“隐式依赖链”PyTorch-YOLOv3 的cfg/yolov3.cfg不是独立配置它和data/custom.data、models.py中的Darknet类、以及train.py的命令行参数构成强耦合。改错一个整个训练链就断。最常翻车的三个点是classes、filters、max_batches它们之间有数学关系不能孤立修改。3.1 classes不只是 data/custom.data 里改数字data/custom.data中的classes3只是告诉train.py加载多少类但真正决定输出层通道数的是yolov3.cfg中每个[yolo]层上方的[convolutional]层的filters值。YOLOv3 有 3 个检测头13×13, 26×26, 52×52每个头的filters必须等于(classes 5) * 3。例如3 类 →(35)*3 245 类 →(55)*3 30。错误做法只改custom.data的classes5不改 cfg 里三个[convolutional]的filters→ 训练时torch.nn.functional.conv2d输入输出通道不匹配报Expected more than 1 value per channel when training。正确做法用 sed 批量替换以 5 类为例sed -i s/filters255/filters30/g cfg/yolov3.cfg sed -i s/filters255/filters30/g cfg/yolov3.cfg # 第二处 sed -i s/filters255/filters30/g cfg/yolov3.cfg # 第三处 # 注意yolov3.cfg 中 filters255 出现恰好 3 次对应 3 个检测头血泪经验不要手动编辑 cfg 文件——容易漏掉某一处。用grep -n filters cfg/yolov3.cfg定位三行再逐行确认是否都改对。255是 COCO 80 类的标准值(805)*3255这是唯一可反推的锚点。3.2 max_batches 与 steps决定学习率衰减节奏的隐形开关cfg/yolov3.cfg中的max_batches不是总迭代次数而是steps数组的上限。YOLOv3 使用 step-based LR scheduler当current_batch达到steps[0]时lr ×0.1达到steps[1]时lr ×0.1 再达到max_batches时训练终止。常见误配max_batches2000但steps400,800→ 第 801 batch 开始 lr 就是初始 lr 的 0.01太早衰减导致收敛慢。合理设置公式按 1000 张图、batch_size8 计算总 epoch ≈ 200工业场景常用总 batch 数 (1000 / 8) × 200 ≈ 25000max_batches 25000steps [25000*0.8, 25000*0.9] [20000, 22500]# 在 yolov3.cfg 中修改 max_batches 25000 steps 20000,22500注意burn_in参数默认 1000是 warmup 步数前 1000 batch 学习率线性从 0 增至 base_lr对小数据集可设为 100policysteps表示启用 step 衰减不可改为poly或cosine——train.py的 scheduler 只实现了steps。4. 训练启动命令行参数的 4 个隐藏陷阱与 CUDA 兼容性开关python train.py看似简单但它的argparse解析器对参数顺序、类型、缺失值极其敏感。90% 的“ModuleNotFoundError”或“AttributeError: NoneType object has no attribute shape”都源于启动参数错位。4.1 必须显式指定 --data-config 和 --model-defYOLOv3 默认加载config/yolov3.cfg和data/coco.data如果你没改--data-config它会去读coco.names导致类别数错配。正确命令python train.py \ --model-def config/yolov3.cfg \ --data-config data/custom.data \ --pretrained-weights weights/darknet53.conv.74 \ --epochs 200 \ --batch-size 8 \ --n-cpu 4 \ --checkpoint-interval 10 \ --evaluation-interval 10关键点--model-def必须指向你已修改filters的 cfg--data-config必须指向你已写对classes和train路径的 custom.data--pretrained-weights推荐用darknet53.conv.74仅 backbone 权重而非yolov3.weights含 head类别数冲突--n-cpu建议设为物理核心数过高反而因 IO 瓶颈拖慢。4.2 CUDA_VISIBLE_DEVICES 与 torch.backends.cudnn.benchmark 的玄学组合PyTorch-YOLOv3 的train.py在__main__中默认开启torch.backends.cudnn.benchmark True这会让 cuDNN 在首次运行卷积时缓存最优算法。但如果你的 batch_size 变化如动态调整或 GPU 显存不足触发 OOMbenchmark 会缓存错误配置导致后续 epoch 直接卡死在forward()。稳态方案加在train.py开头# 在 import torch 后立即插入 import torch torch.backends.cudnn.benchmark False # 关闭 benchmark torch.backends.cudnn.deterministic True # 保证可复现 os.environ[CUDA_VISIBLE_DEVICES] 0 # 显式指定 GPU避免多卡冲突现象对比开 benchmark 时第 1 个 epoch 耗时 12s第 2 个突增至 47s关 benchmark 后每 epoch 稳定在 13.2±0.3s。这不是性能损失而是规避了 cuDNN 的“记忆错乱”。5. 避坑指南5 个真实发生过的崩溃现场与 10 分钟定位法这些不是理论可能而是我在 3 个不同客户现场亲手解决的报错。每一条都附带print()插桩位置和日志关键词帮你 10 分钟内定位根因。5.1 现象RuntimeError: invalid argument at .../torch/csrc/autograd/functions/tensor.cpp:233原因ListDataset.__getitem__()返回的targets是空 list[]传入torch.stack()时因无元素报错。定位在datasets.py的__getitem__结尾加print(fimg {idx}, targets len: {len(targets)})若输出targets len: 0说明该图无有效标注或 XML 解析失败。解决检查Annotations/xxx.xml是否真有object用xmlstar -t -c //object/name/text() xxx.xml验证能否提取类别名。5.2 现象ValueError: Expected input batch_size (8) to match target batch_size (0)原因targets张量 shape 为(0, 6)但torch.nn.CrossEntropyLoss要求 target 至少 1 维。定位在models.py的forward()中print(fpred_boxes.shape: {pred_boxes.shape}, pred_cls.shape: {pred_cls.shape})若pred_cls.shape[0]为 0说明检测头未输出任何框。解决检查yolov3.cfg中ignore_thresh是否过大如设为 0.9导致所有预测框被过滤临时改为0.3测试。5.3 现象OSError: [Errno 24] Too many open files原因Linux 默认单进程打开文件数限制为 1024DataLoader(num_workers0)会为每个 worker 打开大量图片文件。定位ulimit -n查看当前限制lsof -p $(pgrep -f train.py) | wc -l查看进程打开数。解决启动前执行ulimit -n 65535或在train.py中torch.utils.data.DataLoader(..., num_workers0)强制单进程牺牲速度保稳定。5.4 现象TypeError: cant convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint8, and bool.原因utils/utils.py的load_classes()读取coco.names时文件末尾有空行np.array(lines)生成object_类型数组无法转torch.tensor。定位在load_classes()中print(flines[:3]: {lines[:3]}, type: {type(lines[0])})若输出type: class str但lines[-1]即为空行。解决sed -i /^$/d data/custom.names删除空行或在load_classes()中加lines [l.strip() for l in lines if l.strip()]。5.5 现象AssertionError: Torch not compiled with CUDA enabled原因torch.cuda.is_available()返回False但代码中Tensor().cuda()被调用。定位在train.py开头加print(fCUDA available: {torch.cuda.is_available()}, device count: {torch.cuda.device_count()})。解决不是重装 PyTorch而是检查nvidia-smi是否可见 GPU若不可见重启nvidia-persistenced服务若device count0执行sudo modprobe nvidia-uvm加载驱动模块。6. 验证与调试用一张图跑通全流程的最小验证法与 loss 曲线诊断表别等训练完 200 epoch 才看效果。用一张图 一个 box5 分钟验证整个 pipeline 是否健康。这是我在某跨平台系统交付时定下的铁律任何新数据集接入必须先过 single-image sanity check。6.1 单图验证脚本从数据加载到 loss 输出的端到端快照创建debug_single.py复用原项目 DataLoader 和 Model但只喂一张图# debug_single.py import torch from torch.utils.data import DataLoader from datasets import ListDataset from models import Darknet from utils.utils import load_classes # 1. 加载数据集只取第一张 dataset ListDataset(data/custom.train.txt, augmentTrue, multiscaleFalse) # 强制只取第一张 dataset.img_files dataset.img_files[:1] dataset.label_files dataset.label_files[:1] dataloader DataLoader( dataset, batch_size1, shuffleFalse, num_workers0, pin_memoryTrue, collate_fndataset.collate_fn ) # 2. 加载模型 model Darknet(config/yolov3.cfg).cuda() model.load_darknet_weights(weights/darknet53.conv.74) # 3. 获取一个 batch for batch_i, (img_paths, imgs, targets) in enumerate(dataloader): imgs imgs.cuda() targets targets.cuda() print(fInput shape: {imgs.shape}) print(fTargets shape: {targets.shape}, first target: {targets[0]}) # 4. 前向 loss with torch.no_grad(): outputs model(imgs) loss, loss_components model.loss(outputs, targets) print(fTotal loss: {loss.item():.4f}) print(fLoss components: {loss_components}) break执行命令python debug_single.py。预期输出Total loss: 120.5xx非 inf/NaN且loss_components三个值x, y, conf, cls均为有限正数。若报错问题一定在数据或模型加载环节无需进训练循环。6.2 loss 曲线诊断表3 种典型病态曲线与对应干预动作loss 曲线形态常见原因紧急干预动作预期响应时间持续上升1000 epoch学习率过大0.001、ignore_thresh过低导致梯度爆炸立即CtrlC将lr0.001改为lr0.0001重启训练下一个 epoch loss 应下降 10%震荡剧烈±50% 波动batch_size 过小4、数据增强强度过高如hsv_h0.8关闭 HSV 增强--no-hsv增大 batch_size 至 83 个 epoch 内振幅收窄至 ±10%长期停滞50 epoch loss 变化 0.1%max_batches设置过小、预训练权重未加载--pretrained-weights缺失检查ps aux | grep train.py确认参数补加--pretrained-weights重启后 5 epoch 内 loss 下降明显我坚持在每次新项目启动时先跑debug_single.py再画前 10 个 epoch 的 loss 散点图用tensorboard --logdirlogs。不是为了炫技而是把“模型在学”这件事变成肉眼可见的坐标点——当 loss 从 120.5 降到 89.3我知道数据通了当它卡在 42.1 不动我知道该去查custom.data里的train路径是不是少了个/。这种确定性比任何玄学调参都管用。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

智能体Agent系统架构与四大应用场景落地实践指南

智能体Agent系统架构与四大应用场景落地实践指南

这几年做智能体相关项目,被问得最多的一个问题就是:智能体 Agent 到底是什么?智能体系统又该怎么搭?尤其最近周围很多开发者、产品经理都在聊“四大应用场景”,还有人拿着各种“场景题”来问我怎么拆解。我踩过不少坑&…

2026/10/17 20:19:27 阅读更多 →
8位量化如何缓解大模型持续学习中的灾难性遗忘

8位量化如何缓解大模型持续学习中的灾难性遗忘

1. 先搞清楚:大模型持续学习里“灾难性遗忘”到底在忘什么1.1 一个让所有研究者头疼的词:灾难性遗忘最近在某开源技术社区看到一篇论文解读,题目叫“少即是多:8位量化竟成大模型持续学习的抗遗忘神器”,第一反应是&…

2026/10/17 20:19:27 阅读更多 →
结构增扩式增量学习:隔离遗忘,按任务扩展模型

结构增扩式增量学习:隔离遗忘,按任务扩展模型

增量学习(Incremental Learning / Continual Learning)近年来在AI落地中几乎是绕不开的话题。模型不能只学一次,业务一来,新任务、新类别、新数据分布总是源源不断。而“基于模型结构增扩的增量学习方法”是三大主流范式里最符合工…

2026/10/17 20:19:27 阅读更多 →

最新新闻

Python Flask+MySQL学生成绩管理系统:数据库设计与触发器实践

Python Flask+MySQL学生成绩管理系统:数据库设计与触发器实践

简介:围绕 MySQL 学生成绩管理系统展开的数据库课程设计文档,完整覆盖系统总体设计、需求分析、概要设计、系统实现与测试总结全流程,适合计算机专业学生用于数据库课设、毕业设计或 FlaskMySQL 入门实践。文档以华东交通大学课程设计报告为原…

2026/10/17 21:38:42 阅读更多 →
北京市东城区海尔热水器维修电话

北京市东城区海尔热水器维修电话

【北京市东城区海尔热水器维修电话|欧米到家东城区海尔热水器维修】欧米到家覆盖东城区全境,2 个网点就近安排,海尔热水器维修拨 400-996-9791,原厂配件质保 365 天。【东城区海尔热水器维修 快速信息】 📍 服务区域&…

2026/10/17 21:38:42 阅读更多 →
深度学习在智能网联汽车中的落地关键:从感知融合到数据闭环

深度学习在智能网联汽车中的落地关键:从感知融合到数据闭环

直接切入正题。我猜你点进来看这篇文章,大概率是已经看过上一篇,或者是正在做自动驾驶相关的东西,想在深度学习这块挖得更深一点。上一篇聊了智能网联汽车的基础架构和深度学习在感知层的入门应用,这一篇我把重心放在“从模型到实…

2026/10/17 21:38:42 阅读更多 →
MySQL主键id实现分布式锁的三种姿势与避坑指南

MySQL主键id实现分布式锁的三种姿势与避坑指南

做过几年后端的人,基本都会被分布式锁折腾一遍。服务从一个节点扩展到两三个节点之后,像“同一时间只能有一个任务在跑”这种约束,单机上的 synchronized、ReentrantLock 全都失效,必须要有一个所有节点都能访问的第三方来协调。最…

2026/10/17 21:38:42 阅读更多 →
2026毕节软件检测第三方公司排行榜TOP5:软件检测+功能性能测试+信息安全测评+软件验收报告 机构地址及联系方式推荐

2026毕节软件检测第三方公司排行榜TOP5:软件检测+功能性能测试+信息安全测评+软件验收报告 机构地址及联系方式推荐

毕节市软件检测机构林立如云,门庭若市者众,而持证规范、流程严谨、报告权威者却如凤毛麟角。为助本地开发者、政务单位及中小企客户避开资质存疑、流程模糊、报告难用的检测陷阱,小编历时三周实地踏访七星关区、金海湖新区及大方县产业园区内…

2026/10/17 21:38:42 阅读更多 →
医用具身机器人:标本识别校验与合规留痕的临床实践

医用具身机器人:标本识别校验与合规留痕的临床实践

1. 项目概述:当机器人不再只是“移动货架”,而是科室里的合规守门人医用具身机器人走进科室,这个标题里藏着三个被长期低估的真相:第一,“具身”不是噱头,它意味着机器人必须像人一样拥有感知、决策与执行的…

2026/10/17 21:37:42 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 14:23:36 阅读更多 →