【CV】Yolov8:ultralytics目标检测、关键点检测、语义分割

note

  • Yolov8提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例分割模型。和 YOLOv5 一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于满足不同场景需求
  • 骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数,属于对模型结构精心微调
  • Head 部分相比 YOLOv5 改动较大,换成了目前主流的解耦头结构,将分类和检测头分离,同时也从 Anchor-Based 换成了 Anchor-Free
  • Loss 计算方面采用了 TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss
  • 训练的数据增强部分引入了 YOLOX 中的最后 10 epoch 关闭 Mosiac 增强的操作,可以有效地提升精度

一、yolov8和ultralytics简介

  • yolov8:ultralytics公司于2023年1月开源的anchor-free的最新目标检测算法框架
    使用:封装在ultralytics库,https://github.com/ultralytics/ultralytics
  • 支持图片分类,目标检测, 实例分割,目标追踪,关键点检测

二、目标检测

1. 实践例子

import ultralytics
from PIL import Image
from torchkeras.data import get_example_image
import torch
from ultralytics import YOLO

file_path = "/home/andy/torch_rechub_n/nn/torch/cv/"
img2 = Image.open(file_path + 'girl2.jpg')
# model = YOLO(file_path + 'yolov8n-cls.pt')

# 0. 分类
# model = YOLO(file_path + 'yolov8n-cls.pt')

# 1. 目标检测
model = YOLO(file_path + 'yolov8n.pt')

# 2. 语义分割
# model_test = YOLO('yolov8s-seg.pt')

# 3. 关键点检测
# model = YOLO('yolov8s-pose.pt')

#save保存预测可视化, save_txt保存预测
preds = model.predict(source= file_path + 'girl2.jpg',save_txt=True,save=True)
#查看预测结果
Image.open(model.predictor.save_dir/'girl2.jpg')
# model.predict(source=0, show=True)

在这里插入图片描述

2. yolov8模型结构

MMYOLO 中重构的 YOLOv8 模型如下:

在这里插入图片描述

  • 提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例分割模型。和 YOLOv5 一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于满足不同场景需求
  • 骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数,属于对模型结构精心微调
  • Head 部分相比 YOLOv5 改动较大,换成了目前主流的解耦头结构,将分类和检测头分离,同时也从 Anchor-Based 换成了 Anchor-Free
  • Loss 计算方面采用了 TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss
  • 训练的数据增强部分引入了 YOLOX 中的最后 10 epoch 关闭 Mosiac 增强的操作,可以有效地提升精度

三、关键点检测

关键点检测(HRNet):Ultralytics使用了HRNet模型进行关键点检测。HRNet是一种基于高分辨率特征金字塔网络的人体姿态估计算法,其在准确性和速度方面均具有优势。

在这里插入图片描述

四、语义分割

语义分割(DeepLabv3):Ultralytics使用了Google开发的DeepLabv3模型进行语义分割。该模型基于深度卷积神经网络,能够对图像中的每个像素进行分类,并输出像素级别的语义分割结果。

在这里插入图片描述

五、模型训练注意事项

当然更多时候不能直接使用封装库,需要自己训练模型。

1. 提高图片分类准确度

需要综合考虑数据、模型和训练三个方面:

  • 数据增强:通过对图片进行旋转、缩放、平移、翻转等变换,增加训练数据的多样性,从而提高模型的泛化能力和鲁棒性。
  • 模型选择:选择适合特定任务的模型架构,如 ResNet、Inception、VGG 等,可以提高模型的分类准确度。
  • 模型调整:对模型的超参数进行调整和优化,如学习率、批大小、权重衰减等,可以进一步提高模型的性能。
  • 迁移学习:使用已经训练好的模型,如在 ImageNet 数据集上预训练的模型,进行微调可以快速提高模型的分类准确度。
  • 模型集成:将多个模型的输出进行融合,如平均、加权平均、投票等,可以提高模型的分类准确度。
  • 训练技巧:使用正则化方法,如 Dropout、L1/L2 正则化等,可以帮助模型避免过拟合,提高模型的泛化能力。
  • 数据预处理:对图片进行预处理,如归一化、标准化等,可以提高模型的分类准确度。

2. 经典必读和复现论文

网络架构

AlexNet: https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks
ZFNet: https://arxiv.org/abs/1311.2901
VGG16: https://arxiv.org/abs/1505.06798
ResNet: https://arxiv.org/abs/1704.06904
GoogLeNet: https://arxiv.org/abs/1409.4842
Inception: https://arxiv.org/abs/1512.00567
Xception: https://arxiv.org/abs/1610.02357
MobileNet: https://arxiv.org/abs/1704.04861

语义分割

FCN: https://arxiv.org/abs/1411.4038
SegNet: https://arxiv.org/abs/1511.00561
UNet: https://arxiv.org/abs/1505.04597
PSPNet: https://arxiv.org/abs/1612.01105
DeepLab: https://arxiv.org/abs/1606.00915
ICNet: https://arxiv.org/abs/1704.08545
ENet: https://arxiv.org/abs/1606.02147

生成对抗网络

GAN: https://arxiv.org/abs/1406.2661
DCGAN: https://arxiv.org/abs/1511.06434
WGAN: https://arxiv.org/abs/1701.07875
Pix2Pix: https://arxiv.org/abs/1611.07004
CycleGAN: https://arxiv.org/abs/1703.10593

目标检测

RCNN: https://arxiv.org/abs/1311.2524
Fast-RCNN: https://arxiv.org/abs/1504.08083
Faster-RCNN: https://arxiv.org/abs/1506.01497
SSD: https://arxiv.org/abs/1512.02325
YOLO: https://arxiv.org/abs/1506.02640
YOLO9000: https://arxiv.org/abs/1612.08242

实例分割

Mask-RCNN: https://arxiv.org/abs/1703.06870
YOLACT: https://arxiv.org/abs/1904.02689

姿态估计

PoseNet: https://arxiv.org/abs/1505.07427
DensePose: https://arxiv.org/abs/1802.00434
原文链接:https://towardsdatascience.com/guide-to-learn-computer-vision-in-2020-36f19d92c934

Reference

[1] https://github.com/ultralytics/ultralytics
[2] https://github.com/open-mmlab/mmyolo/blob/dev/configs/yolov8/README.md
[3] YOLOv8 深度详解.OpenMMLab​

猜你喜欢

转载自blog.csdn.net/qq_35812205/article/details/130478075