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