YOLO从零到论文:模型改进与科研实战全攻略
YOLO基础篇 · A11
作者:迪菲赫尔曼
大家好,我是迪菲赫尔曼。
上一篇已经准备好服务器上的课程环境。今天先不训练,而是把后面要读、要改的代码准备好。
"我装了 YOLO"和"我知道自己正在使用哪份 YOLO 源码",是两个不同的状态。 后面要加模块,如果你改的是甲目录,Python 导入的却是乙目录,程序不会因为你在编辑器里保存了文件,就自动读到甲。
所以这篇认真处理版本和路径。没有 Git 基础也能完成,第一次使用固定 ZIP 路线。
1. 本专栏为什么固定版本?
本套正文使用:
text
Ultralytics:8.4.183
官方仓库:ultralytics/ultralytics
源码提交:84694ebf8cd5d126c099626c363f0e0066019c43
版本号方便沟通,提交号进一步明确代码快照。我们后面说"打开 tasks.py",希望你打开的内容能与文章对上。
固定版本不等于以后永不更新。先用一个确定版本理解结构与实验,再依据具体变动迁移,远比每天更新却不知道哪一处接口变了更容易学习。
模型权重也要记录来源。.pt 权重与整份 Python 源码不是同一个文件,下篇安装源码以后,第十一篇才加载指定检测权重。
2. 先看最终要得到什么
服务器目录应整理成:
text
/root/lanyun-tmp/yolo-study/
├── env/
├── code/
│ ├── ultralytics-8.4.183.zip
│ └── ultralytics-8.4.183/
│ ├── pyproject.toml
│ ├── README.md
│ └── ultralytics/
│ ├── __init__.py
│ ├── nn/
│ └── models/
├── images/
├── datasets/
├── weights/
└── outputs/
外层 ultralytics-8.4.183 是源码项目根目录,直接包含 pyproject.toml;内层 ultralytics 是 Python 包目录。
文件夹名字相似,不代表这两层可以随便互换。 下篇安装的是含 pyproject.toml 的外层,不是内层某个 .py 文件。
先在目录树里找 pyproject.toml,再认清内层的 ultralytics 包。

外层含 pyproject.toml 的项目目录用于安装;内层 ultralytics 包包含导入的 init.py。
安装目标是含 pyproject.toml 的外层项目;之后导入的位置会落到内层包里的 init.py。
3. 把固定源码 ZIP 上传过去
本篇提供 固定源码离线 ZIP,它来自上面明确的官方提交,外层名称已统一。先保存到本地学习目录的 code 下。
也可以从 官方提交归档 获取同一份代码。官方归档外层可能带提交号;第一次按随文 ZIP 跟做,减少不必要的目录差异。
下面的上传命令在本地终端执行。 先切到本地 yolo-study,再按 A09 的方法输入示例:
bash
scp -P 2222 ./code/ultralytics-8.4.183.zip root@203.0.113.10:/root/lanyun-tmp/yolo-study/code/
203.0.113.10 和 2222 是文档示例,必须换为你实例实际地址与端口;用户名也按登录指令填写。密码在提示后输入,不写进命令。
传输完成,切回远端终端:
bash
cd /root/lanyun-tmp/yolo-study
ls -lh code/ultralytics-8.4.183.zip
先确认文件存在且大小合理。一个 0 字节文件即使名字叫 ZIP,也不代表源码已经传好了。
4. 在服务器解压,别只在电脑里解压
在已激活课程环境的远端终端执行:
bash
python -m zipfile -e code/ultralytics-8.4.183.zip code
ls code
ls code/ultralytics-8.4.183
-e 表示提取归档内容,最后的 code 是目标目录。不要把这行写进 .py 文件,也不要输入到 Python 的 >>> 后面。
本次应该看到 pyproject.toml 和内层 ultralytics。
如果目标目录已经有自己改过的代码,先停止,不要再解压覆盖。 初次解压、重新下载、保存自己的改动是不同操作。源码回退会在进入 C 组前专门讲。
5. 用三个小检查确认层级
bash
pwd
ls code/ultralytics-8.4.183/pyproject.toml
ls code/ultralytics-8.4.183/ultralytics/__init__.py
第一条应显示课程根目录。后两条分别确认项目描述文件和包版本文件的位置。
再通过 VS Code 远端文件树打开内层 ultralytics/__init__.py,找到:
python
__version__ = "8.4.183"
这是阅读文本,还不是运行验证。不能看见版本字符串,就宣布 Python 已经导入了这里。是否真正使用这份源码,要等下一篇安装后打印 ultralytics.__file__。
6. 三种常见目录问题,分别处理
只看见 ZIP,没有文件夹
说明远端还没有成功解压。先看解压命令的错误,不要在本地多解压几次,期待远端自动同步。
出现了两层同名外层目录
例如:
text
code/ultralytics-8.4.183/ultralytics-8.4.183/pyproject.toml
说明目标路径和归档外层叠加了。先找到真正包含 pyproject.toml 的那层,下一篇安装路径要准确。刚开始没有个人修改时,可以重新整理到第 2 节结构;已经改过时先备份,避免边移动边覆盖。
下载下来只有一个 tasks.py
那是单个源码文件,不是整个项目。模型还依赖其他模块、配置与工具文件。回到固定 ZIP,不要尝试只安装一个 tasks.py。
7. Git 暂时不是门槛,但版本记录不能省
ZIP 通常没有 .git 历史。在这里执行 git log 提示不是仓库,不代表源码损坏。
以后我们会教保存自己的修改、查看差异和回退。第一次先把"代码从哪里来、放在哪里、版本是什么"记录清楚,不要求你先学完 Git。
在服务器 notes.txt 中记录:
text
源码版本:8.4.183
源码提交:84694ebf8cd5d126c099626c363f0e0066019c43
源码根目录:/root/lanyun-tmp/yolo-study/code/ultralytics-8.4.183
当前状态:刚解压官方源码,尚未加入教程模块
下一篇用课程解释器安装这份源码。到那时,我们要同时确认环境路径和源码路径,才能说两条线真正接上了。