最近在看YOLOv8的相关内容,想自己偿试着在本地编译了一下,但对这个项目不是很熟悉,绕了不少弯路,这里记录一下如何在本地编译YOLOv8,我想编译其它AI项目也可以借鉴此方法。
本地编译YOLOv8
第一步:下载源码,命令如下:
1
git clone https://github.com/ultralytics/ultralytics.git
第二步:进入源码目录,命令如下:
1
cd ultralytics
第三步:编译并安装YOLOv8,命令如下:
1
pip install --user <username> -e .
其中,
是本地用户名,如:Windows下的Administrator,Linux下的root。 - -e 是安装方式,表示安装为开发模式。
通过上面的步骤就可以将YOLOv8编译、安装好了。
- 第四步:打包YOLOv8,命令如下:如果你的环境中没有安装过build模块,那执行下面的命令时会报错,此时需要安装build模块:
1
python -m build
1
pip install build
打包好的YOLOv8存放在ultralytics/dist目录下。
yolo命令是如何生成的
上面我就将YOLOv8编译、安装、打包过程向你介绍清楚了,接下来我们看看yolo命令是如何生成的。
yolo命令是ultralytics的入口,它通过命令行参数来调用不同的功能。那么yolo命令是如何生成的呢?
实际上,你打开yolov8源码,可以看到一个pyproject.toml文件,它定义了项目元数据,工具脚本等内容,如项目名称、版本号、依赖项等。
无论我们是编译yolov8,打包yolov8,还是生成yolo命令,都是通过这个文件来实现的。
实际上,当你查看yolov8的源码时,你会发现它里边并没有yolo命令的代码,那yolo命令到底是怎么生成的呢?
要想弄清这个问题,我们必须打开pyproject.toml文件,其中有这样一段代码,如下:
1 | [project.scripts] |
这段代码的含义是编译yolov8时,生成两个命令,一个是yolo,一个是ultralytics。而且这两个命令都是指向ultralytics.cfg:entrypoint这个函数。
那么ultralytics.cfg:entrypoint这个函数在哪儿呢?它是在下面这个文件中定义的:
1 | ultralytics/ultralytics/blob/main/ultralytics/cfg/__init__.py |
因此,当我们编译yolov8时,编译工具就会根据pyproject.toml文件中的定义,生成两个命令yolo和ultralytics,而这两个命令实际上是两个python脚本,在脚本中直接调用了ultralytics.cfg:entrypoint函数。
至此,我们就将yolo命令产生的流程搞清楚了。
将Python脚本编译成二进制文件
pyinstaller是一个将python脚本编译成二进制文件的工具,它支持Windows、Linux、MacOS等操作系统,并且支持Python2和Python3。如果你想将python脚本编译成二进制文件,就可以使用它。
小结
这篇文章简单的记录了一下我对YOLOv8学习中的一点心得,记录于此是为了防止时间长了忘记这个过程,避免下次再浪费大量的时间分析这个过程。