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

news2024/11/27 22:43:28

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 增强的操作,可以有效地提升精度

文章目录

  • note
  • 一、yolov8和ultralytics简介
  • 二、目标检测
    • 1. 实践例子
    • 2. yolov8模型结构
  • 三、关键点检测
  • 四、语义分割
  • 五、模型训练注意事项
    • 1. 提高图片分类准确度
    • 2. 经典必读和复现论文
      • 网络架构
      • 语义分割
      • 生成对抗网络
      • 目标检测
      • 实例分割
      • 姿态估计
  • Reference

一、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​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/551072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

KVM(一)Linux部署KVM及新建虚拟机

目录 一、准备工作 1.1 防火墙、SElinux 二、安装KVM 2.1 yum源 2.2 安装工具包 2.3 安装KVM组件 2.4 查看磁盘/新建目录 2.5 安装Linux GUI可视化界面 三、KVM桌面版新建虚拟机 3.1 挂载目录 3.2 新建raw/qcow2文件 3.3 新建虚拟机 3.4 KVM命令行新建虚拟机 一、…

Linux rootfs

前言 通过《initrd&init进程》我们知道rootfs 是文件系统的根目录,其包含了操作系统所需的所有文件和目录,包括程序、库文件、配置文件、设备文件等,它是系统启动时必须加载的文件系统之一。当系统启动后,内核会首先挂载 roo…

本地Jrebel 许可服务器搭建

一、下载 下载 JrebelLicenseServer.zip 二、解压 解压后进入 bin 目录 三、服务安装|启动|停止|删除|... 安装服务:JrebelLicenseServer.bat install启动服务:JrebelLicenseServer.bat start停止服务:JrebelLicenseServer.bat stop删除服…

【Three.js】第一、二章 入门指南和基础知识

01.介绍 Three.js 非常庞大,你可以用它做无数的事情。 在第一章中,我们将学习所有基础知识,例如创建第一个场景、渲染、添加对象、选择正确的材料、添加纹理、为所有内容制作动画,甚至将其放到网上。有些人可能会觉得这部分有点…

如何轻松掌握接口测试——POST请求和COOKIE使用技巧?

目录 引言 请求方法: POST请求方法:添加资源(对服务端已存在的资源也可以做修改和删除操作) 实战练习 实战练习2 COOKIE: Status Code:协议状态码 接口文档 结语 引言 对于初学者或者没有接口测试…

[笔记]渗透测试工具Burpsuit《一》Burpsuit介绍

文章目录 前言一、安装配置1.1 环境1.2 安装过程1.3 科技过程 二、常用功能2.1 Manual penetration testing features2.2 Advanced/custom automated attacks2.3 Automated scanning for vulnerabilities2.4 Productivity tools2.5 Extensions 三、拓展功能 前言 Burp Suite(b…

设计原则-单一职责原则

在编程大环境中,评价代码组织方式质量的好坏涉及到各个方面,如代码的可读性、可维护性、可复用性、稳定性等各个方面。而在面向对象语言中也可以通过以下各个方面: 类中方法的设计类中属性的设计类(接口、抽象类、普通类)的设计类与类之间的…

IMU 积分进行航迹推算

IMU 积分进行航迹推算 Reference https://github.com/gaoxiang12/slam_in_autonomous_driving 1.0 递推方程推导 \quad 连续时间内的 IMU 运动学方程: R ˙ R ω ∧ q 1 2 q ω ˙ p ˙ v v ˙ a \dot{\mathbf{R}}\mathbf{R}\omega ^{\wedge} \\ \dot{\mathbf{…

[CTF/网络安全] 攻防世界 weak_auth 解题详析

[CTF/网络安全] 攻防世界 weak_auth 解题详析 弱认证弱认证绕过方法姿势Burp Suite 爆破 总结 题目描述:小宁写了一个登陆验证页面,随手就设了一个密码。 弱认证 weak_auth翻译:弱认证 这个术语通常用来描述一种较弱的安全认证方法或机制&am…

HTML语法、常用标签、表单,CSS选择器。简单登录页面的实现

HTML和CSS粗略介绍 文章目录 HTML和CSS粗略介绍HTML页面第一个HTML页面添加图片和视频 HTML语法规范div标签span标签转义字符 HTML常用标签换行和分割线标题超链接列表元素表格 HTML表单输入框和按钮多行文本 CSS样式CSS选择器input标签选择器id选择器类选择器 组合选择器和优先…

【HackTheBox Bagel】打靶记录

一、namp扫描到5000 8000 22 端口 二、访问8000端口,看到跳转到域名bagel.htb,加入到hosts 看到该url 像文件包含,尝试fuzz一波 尝试找公私钥均未果,找到了cmdline 进一步对其包含 HTTP/1.1 200 OK Server: Werkzeug/2.2.2 …

Java多线程异常处理

文章目录 一. 线程中出现异常的处理1. 线程出现异常的默认行为2. setUncaoughtExceptionHandler()方法处理异常3. setDefaultUncaoughtExceptionHandler()方法进行异常处理 二. 线程组内出现异常 一. 线程中出现异常的处理 1. 线程出现异常的默认行为 当单线程中初出现异常时…

工业缺陷检测数据及代码(附代码)

介绍 目前,基于机器视觉的表面缺陷检测设备已广泛取代人工视觉检测,在包括3C、汽车、家电、机械制造、半导体与电子、化工、制药、航空航天、轻工等多个行业领域得到应用。传统的基于机器视觉的表面缺陷检测方法通常采用常规图像处理算法或人工设计的特征加分类器。一般而言…

【Tomcat下载及使用说明】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 1.什么是Tomcat 2.Tomcat下载流程及注意问题 …

Eclipse将代码收缩if/for/try,支持自定义区域收缩

Hi, I’m Shendi Eclipse将代码收缩if/for/try,支持自定义区域收缩 最近忙于给网站增加功能,在使用 Eclipse 编写 Java 代码时发现一个函数内代码过多,并且 if,for,try这种代码块无法收缩(在IDEA&#xff0…

【快速入门-简单实现】使用Java实现的单播、组播和广播

说明 TCP是一个面向连接的协议,TCP一定是点对点的,一点是两个主机来建立连接的,基于TCP实现的肯定是单播(但单播还可以使用UDP协议实现)。只有UDP才会使用广播和组播。 Java中的单播、组播和广播可以使用TCP或UDP协议来实现,具体取决于应用程…

【C语言】实现猜数字游戏——随机数

🚩纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:C语言 该篇将对 选择与循环语句 进行运用,实现猜数字游戏。 需求:游戏后可以选择再次进行游戏,也可以选择…

【Java-Crawler】HttpClient+Jsoup实现简单爬虫

Java编写网络爬虫 网络爬虫1. 爬虫入门程序 网络爬虫1. 网络爬虫的介绍2. 为什么学习网络爬虫 HttpClient1. Get请求2. 带参数的GET请求3. Post请求4. 带参数的 Post 请求5. 连接池6. 请求参数 Jsoup1. jsoup 介绍2.1 功能1.1-解析url2.2 功能1.2-解析字符串2.3 功能1.3-解析文…

由浅入深Dubbo核心源码剖析环境介绍

目录 1 框架介绍1.1 概述1.2 运行架构1.3 整体设计 2 环境搭建2.1 源码拉取2.2 源码结构2.3 环境导入2.4 测试2.5 管理控制台 1 框架介绍 1.1 概述 Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能&#…

ARM学习笔记_1 模式,寄存器,流水线

ARM arm体积小功耗低性能高,支持thumb ARM双指令集,兼容8/16位器件;大量使用寄存器,指令定长,寻址简单。 ARM是32位架构,Word 32bit, half Word 16bit. 模式 用户模式是用户程序的模式&#…