2026-07-30 训练记录 — SeaShips + RF-DETR
这是一篇个人学习与实操记录,当前主要用于整理 SeaShips 数据集处理与 RF-DETR 训练流程,暂时还没有形成特别成熟的结论或系统化观点。

不过,日拱一卒,功不唐捐。持续积累训练经验和数据处理细节,往往比一次性求全更重要。
1. Q:GitLab 克隆数据集到服务器
两个IP位于同一子网()内,网络连通性正常,没有额外的链路问题。
由于 GitLab 已禁用密码登录,因此只能通过 Personal Access Token 进行认证。需要进入 创建 token,并勾选 read_repository 权限即可满足数据集克隆需求。
执行 GitLab 克隆时,可以直接把 token 写入 URL,这样能够绕过 VS Code credential helper 带来的 socket 相关问题:
# token 直接嵌 URL,绕过 VS Code credential helper 的 socket 问题git -c credential.helper= clone 'https://用户名:token@/datasets/seaships_7000.git'
数据集克隆完成后,记得及时清理安全痕迹,避免 token 泄露:
# 1. 清 shell 历史history | grep 'token'history -d <行号># 2. 改 git remote(去掉 URL 里的 token)cd seaships_7000 && git remote -vgit remote set-url origin https:///datasets/seaships_7000.git
2. 数据集格式转换 — VOC → YOLO
SeaShips(7000) 数据集使用的是 Pascal VOC 标注格式,而 RF-DETR 训练通常要求采用 YOLO 格式,因此在模型训练前必须先完成数据集格式转换。
转换公式(VOC → YOLO)如下:
x_center = (xmin + xmax) / 2 / 图片宽y_center = (ymin + ymax) / 2 / 图片高width= (xmax - xmin) / 图片宽height = (ymax - ymin) / 图片高
YOLO 的 txt 标注文件每一行格式为:class_id x_center y_center width height,并且所有坐标值都需要归一化到 0-1 区间。
目录结构如下:
seaships_yolo/ ├── data.yaml ├── train/images/ + labels/ ├── valid/images/ + labels/ ← 注意 RF-DETR 要求 "valid" 不是 "val" └── test/images/ + labels/
完成 VOC 转 YOLO 后,建议进行人工校验:抽取同一个 xml 文件和对应 txt 文件,手动计算标注框参数,确认转换结果正确无误,避免训练阶段因标签错误影响模型效果。
3. 训练
from rfdetr import RFDETRMediummodel = RFDETRMedium()# 权重自动下载到 ~/.roboflow/models/model.train(dataset_dir="/opt/datasets/seaships_yolo",epochs=100,batch_size=4,)model.sa ve("/opt/datasets/seaships_rfdetr_medium.pt")
在 RF-DETR 训练过程中,可以使用下面的命令持续监控训练进程、GPU 占用和关键指标:
nvidia-smi | grep python # 进程在不在tail -3 /opt/rf-detr/output/metrics.csv# 看 mAP
训练速度偏慢的主要原因是:DETR 系列目标检测模型通常比 YOLO 慢 3-5 倍,因为 Transformer 结构和匈牙利匹配本身就带来更大的计算开销;同时,如果服务器上还有 vLLM 或 Ollama 等服务运行,也会额外占用显存资源,进一步影响训练效率。
4. 续训
每个 epoch 都会自动保存 checkpoint 到 output/checkpoint_N.ckpt。如果训练中断,或者需要继续训练,只要加载最新的 checkpoint 即可恢复续训:
model.train(dataset_dir="/opt/datasets/seaships_yolo",epochs=100,batch_size=4,resume="/opt/rf-detr/output/checkpoint_19.ckpt",# 改成最新编号)
这里需要特别注意,参数名是 resume,而不是 ckpt_path,这一点在实际续训时很容易写错。
5. AI辅助经验
整个操作流程里,基本上是遇到问题就先问 AI 下一步应该怎么做,然后再结合实际环境逐步执行。回顾下来,有几点经验比较重要:第一,先确认是否存在风险以及如何规避,比如 token 泄露、命令历史清理、远程地址暴露等安全问题;第二,关键步骤一定要自己复核,例如数据集格式转换时对照 xml 和 txt 检查标注是否一致;第三,在正式训练前先把完整流程问清楚,包括数据准备、格式转换、训练、监控和续训,不要盲目只跟着“下一步”操作。
