我们分享了YOLO系列的文章,包括前段时间刚刚发布的YOLOv7检测算法,虽然YOLOv7对象检测算法是YOLO最新的模型,且可以支持对象分割,人体姿态检测等,但是最新的YOLO系列检测模型也同步进行了更新,那就是刚刚开源的YOLOv8对象检测算法。只能说AI人工智能领域越来越卷了。
人工智能领域也卷了吗——YOLO系列又被刷新了,YOLOv7横空出世
模型对比
——1——
YOLO系列对象检测算法
YOLO(You Only Look Once)是由Joseph Redmon和Ali开发的一种对象检测和图像分割模型。YOLO的第一个版本于2015年发布,由于其高速度和准确性,瞬间得到了广大AI爱好者的喜爱。
YOLO
YOLOv2 于 2016 年发布,通过合并批量归一化、锚框和维度群集等技术,大大提高了其对象检测算法的精度与速度。
YOLOv3
YOLOv3 于 2018 年发布,通过使用更高效的骨干网络,添加特征金字塔,并利用焦点损失等技术,进一步提高了速度与精确度。
YOLOv4
2020 年,YOLOv4 发布,引入了许多创新,例如使用 Mosaic 数据增强,一个新的无锚检测头,以及新的损失函数等功能。
YOLOv5
2021 年,Ultralytics 发布了 YOLOv5,进一步改进了该模型的性能并添加了新功能,例如支持全景分割和对象跟踪。
YOLOv6
2022年,美团发布了YOLOv6,YOLOv6对Backbone 和 Neck 都进行了重新设计,Head层沿用了YOLO_x中的Decoupled Head并稍作修改。对YOLOv5而言,YOLOv6对网络模型结构进行了大量的更改。除了网络结构上的改进,作者还对训练策略进行了改进,应用了Anchor-free 无锚范式、SimOTA标签分配策略、SIOU边界框回归损失。
YOLOV7
2022年,WongKinYiu团队发布YOLOv7对象检测算法,E-ELAN 是 YOLOv7 主干中的计算块。E-ELAN使用expand、shuffle、merge cardinality来实现在不破坏原有梯度路径的情况下不断增强网络学习能力的能力。
——2——
YOLOv8对象检测算法
2023年,Ultralytics再次发布YOLO更新模型,YOLOv8模型。Ultralytics YOLOv8是YOLO对象检测和图像分割模型的最新版本。YOLOv8 是一种尖端的、最先进的 (SOTA) 模型。
YOLOv8的一个关键特性是它的可扩展性。它被设计为一个框架,支持所有以前版本的 YOLO,可以轻松地在不同版本之间切换并比较它们的性能。
除了可扩展性之外,YOLOv8 还包括许多其他创新,使其成广泛应用在对象检测和图像分割任务上。其中包括新的骨干网络,新的无锚网络检测头和新的损失函数功能。YOLOv8 也非常高效,可以在各种硬件平台(从 CPU 到 GPU)上运行。
YOLOv8 模型的每个类别中有五个模型,用于检测、分割和分类。YOLOv8 Nano是最快和最小的,而YOLOv8 Extra Large(YOLOv8x)是最准确但最慢的。
YOLOv8 使用了以下预训练模型:
- 在 COCO 检测数据集上训练的对象检测,图像分辨率为 640。
- 在 COCO 分割数据集上训练的实例分割,图像分辨率为 640。
- 在 ImageNet 数据集上预训练的图像分类模型,图像分辨率为 224。
YOLOv8 对象检测与对象分割
——3——
YOLOv8对象检测算法的代码实现
YOLOv8对象检测算法的代码实现过程也很简单,官方提供了API接口以及python第三方包安装的方式进行代码的实现过程。
首先需要安装Python>=3.7.0 与PyTorch>=1.7,然后跟安装python第三方包类似的操作,来安装ultralytics库,这样,我们就可以使用YOLOv8对象检测算法了。
pip install ultralyticsyolo task=detect mode=predict model=yolov8n.pt source="images" name=yolov8x_det
YOLOv8对象检测
第一行代码是安装ultralytics,第二行代码便可以使用YOLO指令进行对象检测任务,好吧,我承认现在AI人工智能行业越来越卷了,2行代码就搞定了。
对象检测
task=detect #执行对象检测任务 mode=predict #执行预测或者训练 model=yolov8n.pt #使用哪个模型进行预测或者训练 source="images" #检测的文件名,或者一个文件夹 name=yolov8x_det #保存的文件名,或者一个文件夹
检测完成后,会自动保存结果到指定的文件夹中,我们可以使用一个脚本来进行图片的显示。
def display(dir): plt.figure(figsize=(20, 12)) image_names = glob.glob(os.path.join(result_dir, '*.jpg')) for i, image_name in enumerate(image_names): image = plt.imread(image_name) plt.subplot(2, 2, i+1) plt.imshow(image) plt.axis('off') plt.tight_layout() plt.show()display(runs/detect/yolov8x_det/)
当然,YOLOv8对象检测算法跟YOLOv7类似,同样可以进行对象的分割任务与对象分类任务
对象分割
yolo task=segment mode=predict model=yolov8x-seg.pt source='images' name=yolov8x_segyolo task=classify mode=predict model=yolov8x-cls.pt source='images' name=yolov8x_clsdisplay('runs/segment/yolov8x_seg/')display('runs/classify/yolov8x_cls/')
from ultralytics import YOLO# Load a model#model = YOLO("yolov8n.yaml") # build a new model from scratchmodel = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)# Use the modelresults = model.train(data="coco128.yaml", epochs=3) # train the modelresults = model.val() # evaluate model performance on the validation setresults = model.predict("https://ultralytics.com/images/bus.jpg") # predict on an imagesuccess = model.export(format="onnx") # export the model to ONNX format
对象分类
当然,官方提供了python代码来实现YOLOv8对象检测算法模型
第一行代码,我们导入YOLO模型
第5行代码,我们使用yolov8n预训练模型
第8行代码,我们首先在COCO128数据集上面训练YOLOv8对象检测算法模型
第9行代码,我们在验证集上进行模型的评估
第10行代码,我们进行模型的预测
最后,我们可以导出onnx格式的模型
更多参考:
https://github.com/ultralytics/ultralytics 开源链接
高大上的YOLOV3对象检测算法,使用python也可轻松实现
使用python轻松实现高大上的YOLOV4对象检测算法
基于python的YOLOV5对象检测模型实现
人工智能领域也卷了吗——YOLO系列又被刷新了,YOLOv7横空出世
YOLOv7与MediaPipe在人体姿态估计上的对比