
1. 为什么我想把这份 CV baseline 逐段拆开看Datawhale AI 夏令营第五期 CV 方向 Task01 的 baseline一键跑通确实只要二十来分钟在云上租一台 4090clone 下AI_Camp5_baseline_CV装好opencv-python、pandas、matplotlib、ultralytics把视频逐帧抽成 jpg、转成 YOLO 的 txt 标注再用yolov8n.pt训练出best.pt做推理最后打包成result.zip提交。流程顺得像一条流水线但顺不代表懂——我第一遍跑完脑子里全是问号视频帧和标注到底怎么对上的epoch和batch_size各自在动什么训练输出目录里那么多.pt为什么偏偏取best.ptresult.zip格式不对为什么直接评分失败还白耗提交次数这篇就是来解决这些问号的。适合两类人一类是刚跑通 baseline、想真正读懂每一段在干什么的 CV 新手另一类是准备把这份脚本换成自己数据集、但不想盲改参数的实践者。我的做法不是干读代码而是让 Codex CLI 走 TaoToken 对着仓库里的脚本逐个文件拆边问边验证。下面把配置、拆解思路、验证方式和踩过的坑都写清楚你拿到同一把 Key 就能复现。2. 前置在云机器上把 Codex CLI 接到 TaoToken思路很简单云机器上已经有仓库和 Python 环境缺的是一个能读懂整仓、还能逐段解释的编码助手。Codex CLI 适合干这个因为它能在仓库目录里读文件、按你的提问定位到具体脚本。我们要做的只是把它的请求地址指到 TaoToken用一把 Key 统一管理。先打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册账号进控制台创建一把 API Key。创建入口在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 复制出来先存好后面配置要用。如果你还没想好模型怎么选可以先去 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 看看可用列表读代码这种任务选个上下文长、响应稳的就行。注意Base URL 填https://taotoken.net/api不要带/v1也不要加任何查询参数。这是最容易配错的一步配错了表现是请求直接 404 或鉴权失败。3. 可复制配置config.toml 与仓库目录准备Codex CLI 的配置文件一般在~/.codex/config.toml。在云机器的终端里编辑它把 provider 指向 TaoToken# ~/.codex/config.toml model gpt-5-codex model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api chat然后把 Key 写进环境变量别硬编码进配置文件# 写入 shell 配置重开终端或 source 生效 echo export TAOTOKEN_API_KEY你刚创建的那把Key ~/.bashrc source ~/.bashrc # 验证变量已生效只回显前几位避免泄露 echo ${TAOTOKEN_API_KEY:0:6}接着确认仓库在位。baseline 的 clone 命令是apt install git-lfs -y git lfs install git clone https://www.modelscope.cn/datasets/Datawhale/AI_Camp5_baseline_CV.git cd AI_Camp5_baseline_CV ls -la进到仓库目录后再启动 Codex CLI这样它读文件时相对路径才对得上cd AI_Camp5_baseline_CV codex启动后先问一句「列出当前目录下所有脚本文件并说明每个文件大致负责哪一步」确认它能正常读到仓库内容再进入逐段拆解。4. 逐段拆解数据转换、训练参数、推理落盘4.1 数据转换那步视频帧和标注是怎么对上的这是我最想搞懂的一段。baseline 里读取的是 JSON 格式标注同时用cv2.VideoCapture打开视频。核心逻辑是视频按帧号索引标注里也带帧号信息两边靠帧号对齐。你可以让 Codex 直接定位到数据转换脚本然后这样问请阅读仓库里负责数据转换的脚本逐行解释 1. 视频帧是如何按帧号抽取并保存为 jpg 的文件名规则是什么 2. JSON 标注里的帧号字段叫什么如何映射到对应的 jpg 3. 边界框从原始坐标转成 YOLO 的 txt 格式时做了哪些归一化。实测下来YOLO 的 txt 标注每行是类别 x_center y_center width height且都是相对整图宽高的归一化值0 到 1 之间。如果原始标注给的是左上角加宽高的绝对像素坐标转换时就要先算中心点、再除以图像宽高。这一步没转对训练时框会整体偏移loss 降不下去。抽帧数量和标注条数对不上往往就是某些帧没有对应标注、或者标注帧号越界被静默跳过了。4.2 yolov8n.pt 的 epoch 与 batch_size 各自影响什么训练脚本加载yolov8n.pt做微调里面两个参数最容易被问epoch和batch_size。让 Codex 对着训练脚本解释同时结合 ultralytics 的默认行为请解释训练脚本里 epoch 和 batch_size 两个参数 1. epoch 增大对模型精度和训练时间分别有什么影响 2. batch_size 在 4090 上可以设多大显存不够时会报什么错 3. imgsz 和这两个参数之间有没有相互制约。简单说epoch是整套数据被完整过几遍遍数太少欠拟合、太多容易过拟合且费时间batch_size是一次喂进网络的样本数越大梯度越稳但吃显存4090 上可以比小卡设得大一些。imgsz是输入分辨率它和batch_size一起决定显存占用三者要一起调。baseline 默认值能跑通但换成自己的数据集后类别数和图片尺寸变了这几个值就得重新试。4.3 best.pt 的推理结果怎么落到 result 目录训练完runs/detect/train/weights/下通常有best.pt和last.pt两个文件。推理脚本加载best.pt遍历测试集每一帧把检测结果写成 JSON最后汇总到result目录并压缩成result.zip。让 Codex 帮你确认落盘路径和格式请阅读推理与结果保存脚本说明 1. 为什么推理用 best.pt 而不是 last.pt 2. 检测结果 JSON 的字段结构是什么 3. result 目录的层级和最终 zip 的打包方式。best.pt是验证集指标最好的那一版权重last.pt是最后一轮的不一定最优所以推理取best.pt。结果 JSON 一般包含图像标识和检测框列表每个框有类别和坐标。打包时要注意 zip 的根目录结构评分系统按固定路径找文件层级错了就会判格式失败。5. 验证请求与成功结果配置完先做一次最小验证确认 Codex CLI 真的连上了 TaoToken而不是在本地瞎猜。在仓库目录里启动 Codex 后发一条能触发读文件的指令读取当前目录下的 README 或任意一个 .py 脚本用一句话概括它的作用。如果它能准确说出文件名和内容说明请求链路通了。再进一步让它做一次带定位的拆解在仓库里找到负责抽帧的脚本把关键代码段贴出来并逐行注释。成功的结果是它返回的代码段和你在本地cat出来的内容一致注释也对得上。这时候你再去跑 baseline 的一键脚本就能一边看输出一边对照 Codex 的解释哪一步在干什么心里有数。训练跑完后检查runs/detect/train/weights/best.pt是否存在推理跑完后检查result目录里 JSON 数量和测试帧数是否一致最后确认result.zip能正常解压、内部路径符合提交要求。6. 本篇常见错排查抽帧数量与标注条数对不上。先分别统计抽出的 jpg 数量和标注 JSON 里的记录数再看是不是有帧号越界或缺失标注。常见原因是视频帧率换算和标注帧号基准不一致一个从 0 开始、一个从 1 开始差一位就全错位。让 Codex 对比两边的索引起点能快速定位。训练输出目录里该取哪个 .pt。runs/detect/train/weights/下有best.pt和last.pt推理和提交都用best.pt。如果目录里还有train2、train3说明你跑了多次要按时间取最新那次别拿旧权重去推理。result.zip 格式不对导致评分失败还白耗提交次数。每天提交次数有限格式错一次就少一次。打包前先本地解压检查根目录是不是直接就是结果文件还是多套了一层文件夹JSON 字段名和坐标格式是否符合要求。不确定就先小批量跑一遍推理确认格式无误再全量打包。Base URL 配错。填成带/v1或带查询参数的地址会直接请求失败。正确值是https://taotoken.net/api配合env_key读取环境变量里的 Key。Key 没生效。改完~/.bashrc记得source或重开终端否则 Codex 读不到TAOTOKEN_API_KEY表现是鉴权报错。7. 读懂之后换成自己的数据集照着改把这份 baseline 逐段拆明白最大的好处不是跑通一次而是你知道每个文件负责什么、每个参数动哪里。换成自己的数据集时改动集中在三处数据转换脚本里的标注解析和坐标归一化、训练脚本里的类别数和epoch/batch_size/imgsz、推理脚本里的测试集路径和结果输出格式。其余流程可以原样复用。如果你也想让 Codex 对着整仓逐段讲回到 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 拿一把 Key按上面的config.toml配好 Base URLhttps://taotoken.net/api在仓库目录里启动就能开问。长期做编码和 Agent 类任务的话可以看看 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 的套餐只想先验证模型对话效果去 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 试几句也行。接入细节有疑问就翻 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 配置项和报错码都写得比较全。