【Datawhale AI夏令营】从零上手CV竞赛Task2

news2024/11/12 19:54:24

文章目录

  • 前言
  • 一、YOLO是什么?
  • 二、YOLO的历史
  • 三、性能指标
  • 四、 性能指标计算公式
  • 五、性能优化
  • 总结


前言

本文的Task2是对Task1的baseline代码进行优化的过程。

一、YOLO是什么?

首先简单介绍一下YOLO模型:
物体检测算法主要分为两类:One-Stage(一阶段)和Two-Stage(两阶段)模型。

  • One-Stage模型,如YOLO(You Only Look Once)和SSD(Single Shot Detection),直接在单次网络评估中预测图像中所有物体的类别和位置信息。这种方法的优点是速度快,适合实时应用,但可能在精度上不如Two-Stage模型。
  • Two-Stage模型,如Faster R-CNN,首先使用区域提议网络(Region Proposal Network, RPN)生成候选区域,然后对这些区域进行分类和边界框的精细调整。这种方法的优点是精度高,但速度相对较慢 。

其中YOLO就是一种经典常用的One-Stage模型。

在这里插入图片描述
YOLO,全称为"You Only Look Once",是一种流行的实时目标检测算法,由Joseph Redmon等人于2015年首次提出。YOLO的核心思想是将目标检测任务视为一个单一的回归问题,直接从图像像素到边界框坐标和类别概率的映射。这种设计使得YOLO能够以非常快的速度进行目标检测,同时保持较高的精度,特别适合需要实时处理的应用场景。

二、YOLO的历史

YOLO(You Only Look Once)是一种革命性的目标检测算法,以其快速和高效的性能而闻名。自2015年YOLOv1的首次推出以来,YOLO系列已经经历了多次迭代,每一次迭代都在速度、准确性和计算效率方面做出了显著的贡献。

在这里插入图片描述

版本号年份主要贡献与特点
YOLOv12015实时端到端物体检测,将检测视为回归问题,单次网络评估预测位置和类别。
YOLOv22016引入批量归一化,高分辨率分类器,全卷积网络,能检测超过9000个类别。
YOLOv32018使用更深的Darknet-53网络,引入特征金字塔网络提高多尺度目标检测能力。
YOLOv42020结合CSPNet、PANet、SAM等技术,提高特征提取和检测效率。
YOLOv52020使用Pytorch框架,不同大小模型版本适应不同环境,易用性和性能显著改进。
YOLOv62021多种不同尺寸模型适应工业应用,继续在YOLO系列基础上改进。
YOLOv72022架构变化和一系列免费包提高准确率,保持实时性。
YOLOv82023新功能和改进,包括新的骨干网络、Anchor-Free检测头和新损失函数,提升性能和灵活性。
YOLOv92023引入可编程梯度信息(PGI)和基于梯度路径规划的通用高效层聚合网络(GELAN)架构。
YOLOv102024通过消除非最大抑制(NMS-Free)和优化各种模型组件,实现了最先进的性能。

三、性能指标

YOLO代码在训练和验证的时候会自动计算出loss值以及mAP等性能指标,如下表所示。

缩写作用描述
epoch表示模型在整个训练数据集上进行了一次前向和后向传播的完整周期。
train/box_loss衡量模型预测的边界框与真实边界框之间差异的损失值。
train/cls_loss衡量模型预测的类别与真实类别之间差异的损失值。
train/dfl_loss衡量模型对难分类样本的关注程度,减少易分类样本的影响。
metrics/precision(B)在训练过程中,预测为正类别中实际为正类别的比例。
metrics/recall(B)在训练过程中,所有实际正类别中被模型正确预测为正类别的比例。
metrics/mAP50(B)在50%的IoU阈值下计算,衡量模型的整体性能。
metrics/mAP50-95(B)在0.5到0.95的IoU阈值范围内计算,提供更全面的模型性能评估。
val/box_loss模型在未见过的验证集上的边界框损失,用于监控模型的泛化能力。
val/cls_loss模型在验证集上的分类损失,用于监控模型的泛化能力。
val/dfl_loss模型在验证集上的难易样本平衡损失。

四、 性能指标计算公式

  1. Precision (精确率)

    精确率衡量的是模型预测为正类别中实际为正类别的比例。计算公式为:

    Precision = True Positives (TP) True Positives (TP) + False Positives (FP) \text{Precision} = \frac{\text{True Positives (TP)}}{\text{True Positives (TP)} + \text{False Positives (FP)}} Precision=True Positives (TP)+False Positives (FP)True Positives (TP)

  2. Recall (召回率)

    召回率衡量的是所有实际正类别中被模型正确预测为正类别的比例。计算公式为:

    Recall = True Positives (TP) True Positives (TP) + False Negatives (FN) \text{Recall} = \frac{\text{True Positives (TP)}}{\text{True Positives (TP)} + \text{False Negatives (FN)}} Recall=True Positives (TP)+False Negatives (FN)True Positives (TP)

  3. mAP (Mean Average Precision)

    平均精度 (AP) 是针对每个类别的精度-召回曲线下面积,mAP 是所有类别的平均值。对于 mAP@50 (IOU=0.5) 和 mAP@50:95 (IOU从0.5到0.95) 的计算公式为:

    AP = ∫ 0 1 Precision ( r )   d r \text{AP} = \int_{0}^{1} \text{Precision}(r) \, dr AP=01Precision(r)dr

    mAP = 1 N ∑ i = 1 N AP i \text{mAP} = \frac{1}{N} \sum_{i=1}^{N} \text{AP}_i mAP=N1i=1NAPi

    其中,(N) 是类别的总数,(\text{AP}_i) 是第 (i) 类别的平均精度。

五、性能优化

最后就是最重要的优化baseline,我一开始看到代码的时候的想法就是换用更大的模型,然后跑几十个epoch(原来的是2个epoch),并且使用更多的数据作为训练集和验证集。

所以我选择了yolov8系列中最大的yolov8x。

!wget http://mirror.coggle.club/yolo/yolov8x-v8.2.0.pt -O yolov8x.pt
model = YOLO("yolov8x.pt")

results = model.train(data="/mnt/sdb1/yolo-dataset/yolo.yaml", epochs=2, imgsz=1080, batch=16, device="0,1,2,3,4,5,6,7")

然后为了训练大模型,我租用了8块4090显卡,但是训练的epoch为了节省时间仍然保持原来的2个不变,最后得到的Model summary如下:

Ultralytics YOLOv8.2.82 🚀 Python-3.10.13 torch-2.2.2+cu118 CUDA:0 (NVIDIA GeForce RTX 4090, 24217MiB)
                                                            CUDA:1 (NVIDIA GeForce RTX 4090, 24217MiB)
                                                            CUDA:2 (NVIDIA GeForce RTX 4090, 24217MiB)
                                                            CUDA:3 (NVIDIA GeForce RTX 4090, 24217MiB)
                                                            CUDA:4 (NVIDIA GeForce RTX 4090, 24217MiB)
                                                            CUDA:5 (NVIDIA GeForce RTX 4090, 24217MiB)
                                                            CUDA:6 (NVIDIA GeForce RTX 4090, 24217MiB)
                                                            CUDA:7 (NVIDIA GeForce RTX 4090, 24217MiB)
Model summary (fused): 268 layers, 68,127,420 parameters, 0 gradients, 257.4 GFLOPs

然后是训练的各类违章行为识别统计:

                   all       2595      19658      0.566      0.279      0.344      0.205
                非机动车违停       2591      12666      0.992      0.607      0.754      0.438
                 机动车违停       2591       5737      0.792      0.314      0.434      0.352
                 垃圾桶满溢        791        791       0.48      0.196      0.189     0.0299
                  违法经营        232        464          0          0          0          0

以及训练输出的一些数据图表:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


总结

最后的评分为0.1325094937099511。
可以看出虽然对于垃圾桶满溢和违法经营识别的不是很好,但是相比于之前的baseline(评分0.004)有了巨大的提升。

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

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

相关文章

MSTP多实例生成树的配置

SW1配置: vlan batch 1 to 100 interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 2 to 4094 interface GigabitEthernet0/0/2 port link-type trunk port trunk allow-pass vlan 2 to 4094 stp mode mstp //修改生成树的模式为…

【多线程】创建线程到底是多少种方法?

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 创建线程的两种方式总结(最官方)1.1 继承 Thread 类1.2 实现 Runnable 接口1.3 优先考虑使用第二种 —— …

三. Spring Boot 当中的“容器功能” 和 “配置绑定” 的详细剖析(附+源代码流程)

三. Spring Boot 当中的“容器功能” 和 “配置绑定” 的详细剖析(附源代码流程) 文章目录 三. Spring Boot 当中的“容器功能” 和 “配置绑定” 的详细剖析(附源代码流程)1. Spring Boot 是继续支持了 Spring 当中的注解的1.2 Spring 当中的 Component,Controller…

通过visual studio进行dump文件调试和分析

0、前言 很多时候程序crash之后需要分析原因。对于C/C程序,一般最常见的场景和方法就是根据dump文件进行分析。 1、分析的前提条件 进行dump文件分析,需要以下文件: 进程crash时产生的dump文件程序源码进程对应的程序exe文件编译exe文件时产…

QT Quick QML 添加海康威视SDK云台控制模块

文章目录 1. 配置海康威视 SDK 下载SDK文件移植工程文件添加 2. 函数调用流程接口参考代码 3. 代码后端核心代码前端核心代码 GitHub 源码: QmlLearningPro ,选择子工程 HkwsDemo.pro (暂未上传) QML 其它文章请点击这里: QT QUICK …

Monibuca实战:如何用Go语言打造高效的直播后端

简介 Monibuca(简称:m7s) 是一个开源的实时流媒体服务器开发框架,使用 Go 语言编写。 它的设计目标是提供一个高性能、可扩展、易于定制的实时流媒体服务器解决方案。 Monibuca 的核心理念是模块化,允许开发者根据需…

文件禁止外发的方法有哪些?企业如何禁止文件外发:六个控制文件外发的小窍门!

想象一下,企业信息如同珍贵的宝藏,而文件外发就像不经意间打开的后门,让宝藏暴露在风雨之中!今天,我们就来聊聊如何给这扇后门加上六道坚实的锁,确保企业信息的安全无虞。让我们一起探索六个控制文件外发的…

Mask R-CNN论文原理讲解

论文:arxiv.org/pdf/1703.06870 代码:maskrcnn-benchmark:Fast, modular reference implementation of Instance Segmentation and Object Detection algorithms in PyTorch. - GitCode Mask R-CNN简介 Mask R-CNN是何凯明大神的新作。Mask R-CNN是一种在有效检测…

武器弹药制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

武器弹药制造领域作为国防工业的重要组成部分,其数字化转型更是关乎国家安全与军事实力提升的关键。随着5G、物联网、大数据、云计算及人工智能等先进技术的融合应用,武器弹药制造5G智能工厂物联数字孪生平台应运而生,正逐步成为推进制造业数…

分享5款支持论文写作网站先稿后付的网站!

在当今学术研究和学术写作领域,AI论文写作工具已经成为不可或缺的助手。这些工具不仅能够提高写作效率,还能帮助研究人员生成高质量的论文内容。特别是那些提供“先稿后付”服务模式的网站,更是为用户提供了极大的便利和保障。以下是五款值得…

记录|SPC公式小结

目录 前言一、基本缩写二、Xbar和R的控制线三、相关系数表更新时间 前言 参考文章: 参考视频: SPC公式小结 一、基本缩写 二、Xbar和R的控制线 三、相关系数表 更新时间 2024.08.29:创建

旗帜分田(华为od机考题)

一、题目 1.原题 从前有个村庄,村民们喜欢在各种田地上插上小旗子,旗子上标识了各种不同的数字。 某天集体村民决定将覆盖相同数字的最小矩阵形的土地的分配给为村里做出巨大贡献的村民, 请问,此次分配土地,做出贡献…

DevEco Studio5 新建项目

Deveco Studio安装结束之后,开始新建一个项目: 1.点击Create Project新建项目 2.选择空的项目–>点击next 3.配置项目信息–>点击Finish 4.进入项目 6.右上方目前处于No Devices(无设备)状态–>点击下拉三角–>点击Devide Manager管理设…

Life long learning

现象:一个model进行multi-task learning做的还可以,说明模型是可以同时学会多个任务的,但是如果训练过程是1个task 1个task的顺序进行,模型就会发生灾难性的遗忘现象,只会做刚学完的task。 目标:让模型不要…

94.WEB渗透测试-信息收集-Google语法(8)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:93.WEB渗透测试-信息收集-Google语法(7) • Filetype • Filetype…

二叉树前序,中序,后序非递归遍历(Java)

1. 思路: 首先创建一个栈和顺序表,按照根左右的前序遍历顺序去遍历这棵树,一直往左孩子方向遍历,每遍历到一个结点就入栈并且加入到顺序表里,如果没有左孩子了,就拿出栈顶元素,看它是否有右孩子…

2024年牛客网最全1000道Java中高级面试题包含答案详解,看完稳了

我相信大多 Java 开发的程序员或多或少经历过 BAT 一些大厂的面试,也清楚一线互联网大厂 Java 面试是有一定难度的,小编经历过多次面试,有满意的也有备受打击的。因此呢小编想把自己这么多次面试经历以及近期的面试真题来个汇总分析&#xff…

JavaScript进阶指南之Event Loop

JavaScript进阶指南之Event Loop 引言 简要介绍主题: 在JavaScript的世界中,Event Loop是一个核心机制,它决定了代码的执行顺序,尤其是在处理异步任务时。对于初学者来说,理解Event Loop的工作原理是迈向JavaScript进…

设计模式篇(DesignPattern - 结构型模式)(持续更新迭代)

目录 模式一:适配器模式 一、简介 二、案例一(充电器问题) 1. 类适配器 2. 对象适配器 3. 接口适配器 三、应用 1. HandlerAdapter(SpringMVC 源码应用) 四、总结 模式二:桥接模式 一、简介 1.…

20240829版图的层次

1 最常用 Esc:取消操作 i:插入元件版图 c:复制 m:移动 u:撤销上一步操作 q:查看属性 f:全局视图 e:显示设置(图层、栅格、走线模式等) r:矩形填充…