快速上手yolov8进行目标检测,顺便读一读yolo的源码

您所在的位置:网站首页 函数调用怎么读 快速上手yolov8进行目标检测,顺便读一读yolo的源码

快速上手yolov8进行目标检测,顺便读一读yolo的源码

2024-04-16 16:39| 来源: 网络整理| 查看: 265

大家好,今天要讲的内容是,快速上手yolov8进行目标检测。

在本节课中,我们将在windows环境,部署yolov8。

使用yolov8提供的python接口,进行目标检测。

另外,我也会进一步讲解,如何阅读yolov8的源码文件。

1.YOLO算法

从它的名字就可以看出,YOLO算法只需要一次前向传播计算,就可以实现,图像的多目标检测任务。

YOLO算法兼顾了识别的准确率和检测速度,因此非常适合在实时检测的应用场景下使用。

例如,视频监控、自动驾驶、无人机等领域,都可以使用YOLO来完成相关的任务。

YOLO算法于2016年首次推出,目前已经升级到v8版本。

简单来说,Yolov1到v3是yolo算法原始作者发布的版本,它的主要作者为Joseph Redmon。

从yolov4开始,后续的升级版本,来自不同的作者和团队开发。

严格来说,它们属于yolo系列的精神续作。

例如,美团、旷视科技等公司的研发团队,都有参与其中。

我们可以在Ultralytics公司的官网上,找到yolo的各个版本,这些版本都有对应的开源代码。

在本节课中,我们将详细介绍yolov8的安装和使用方法。

2.安装yolov8并使用yolo

yolo模型的安装和部署非常简单。

我们使用conda create创建一个新的python环境。

然后激活这个环境:

再输入pip install ultralytics,就完成yolo的安装。

接着,在这个conda环境中,打开python,输入from ultralytics import YOLO这行代码。

这里如果不出现错误,就说明完成了yolo的安装。

打开ultralytics的官网,在quickstart中,可以找到python的样例代码。

下面我们基于这段样例代码,来详细说明yolo接口的使用方法。

我们将样例代码的前两行,复制过来。

第一行表示在代码中导入yolo模块。

然后是“model = YOLO('yolov8n.yaml')”,这句代码表示,读取yolo的配置文件。

但我们要注意的是,官方给出的样例代码中的这个配置文件,yolov8n.yaml,实际并不在yolo的模块中。

调用这句代码后,也不会从互联网中下载这个文件,这一点可能会给新手带来困惑。

3.调试YOLO模块代码

为了弄懂这句代码背后的意义,我们需要找到ultralytics模块的源代码。

并在其中写一些print调试语句,最后找到真实的yaml配置文件,进行阅读。

首先找到刚刚在conda中创建的yolov8环境目录:

从中找到ultralytics模块,具体路径是,envs\yolov8\Lib\site-packages\ultralytics。

继续打开其中的\models\yolo文件夹:

然后打开model.py,会看到刚刚使用到的YOLO类。

这个类继承了Model类,具体的实现在Model类中。

从第一句的导入代码可以知道,Model类在ultralytics下的engine文件夹中的model.py文件中。

找到这个model.py文件后:

我们要在它的init函数中,加几句print调试代码,进行进一步的研究。

init函数传入的model参数,代表了配置文件名或模型的名字。

我们在init函数的第1句前,打印第1个,#1标记,和model的值。

它的下面是一些初始化的代码,我们忽略这些代码,继续向下看。

在suffix = Path(model).suffix,这个位置:

打印第2个,#2 标记,和suffix的值。

然后继续忽略下两行代码,这里要注意if suffix in .yaml这一句。

对于样例代码的调用方式,会走这个分支,也就是进一步调用self._new这个函数。

向下找到_new函数。

函数的第1个cfg参数,就是我们刚刚转入model。

在_new函数中,打印第3个,#3标记和cfg。

下一句代码,yaml_model_load(cfg),是关键内容。

我们可以在ultralytics.nn.tasks中找到这个函数的实现。

打开tasks.py文件,找到yaml_model_load函数。

函数传入的path,就是刚刚的cfg变量。在这个位置打印第4个,#4标记和path变量。

观察下一句很复杂的代码,它具体在干什么,其实我也没搞明白。

实际上,这行代码有什么作用也不重要,在下一句unified_path后,打印第5个标记。

在下面的yaml_load前,打印第6个标记。

实际上,YOLO最终读取的配置文件名,保存在yaml_file中。

这样我们就完成了必要的print调试代码。

运行程序,会得到如下结果。

首先打印了标记1,传入的文件名,yolov8n.yaml。

实际上,这个文件根本就不存在。

其实我也很困惑,为什么样例代码要使用一个根本不存在的配置文件,了解其中原因的小伙伴可以留言讨论一下。

接着打印2、3、4、5这几个标记,这说明我们正确的理解了代码的执行流程。

最后打印的标记6,yaml_file,该变量保存了真正调用的配置文件的路径。

按照这个路径,打开对应的文件夹。

在cfg/models下,保存了yolo各个版本的配置。v8是我们当前使用的版本。

打开v8目录,可以找到我们正在使用的配置文件,yolov8.yaml。

在这个配置文件中,记录着必要的初始化信息。

例如,nc: 80,代表了模型需要识别的类别数量是80。

scales表示模型的规模、backbone是模型的主干,用于特征提取。

head是模型的最后决策部分,用于预测物体的类别和边界框。

4.加载模型并预测结果

弄明白yolo的配置后,下一句model = YOLO('yolov8n.pt'),用于加载模型。

这里要注意,模型最初是没有的,第一次调用,会从互联网中下载yolov8n.pt这个模型。

model.predict,用于预测结果。

这里bus.jpg是官方给的样例数据,我们可以再找一些其他的测试数据,一起进行测试。

另外,有兴趣的同学,可以进一步使用刚刚的调试方法,在代码中写一些print语句,调试并理解其他的接口。

还有一点要说明,即使我们最开始不加载yaml配置,也可以正常使用模型和预测结果,这个yaml配置文件主要是用来训练模型用的。

运行程序,控制台会打印出运行信息。

从信息中可以知道,3个图片的结果,会保存在当前目录下的runs/detect/predict文件夹中。

将结果图片打开,可以看到yolov8的运行结果。

其中在bus.jpg中识别出了行人、汽车等,在image.jpg中,识别出了行人、风筝等等。

那么到这里,快速上手yolov8进行目标检测就讲完了,感谢大家的观看,我们下节课再会。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3