目标检测指标-以及YOLOv1简介

一、物体检测评估指标

1.1 IOU

IOU就是交并比,交集和并集之比,GT就是Ground-Truth真实值,红色的就是预测值。

我们希望预测值与真实值越接近越好,IOU越大越好。

1.2 MAP

如上图,右上角Actual是真实值,左边Predicted是预测值。

True Positive是正例且预测正确

False Positive是错误的预测为正例(表明是负例,就是把负例当成正例)

False Negative是错误的预测为负例(表明是正例,把正例当成负例)

True Negative 正确的把负例当作负例

物体检测的结果就是输出一个预测框,并输出置信度。

        任务中一般是TP,FP,FN用的多,TN一般没用,但是一般需要计算P和R

Precision=TP/(TP+FP)

Recall=TP/(TP+FN)

P即精度,表明了描述的正确性,肯定就是正确的除以(正确的+错误的)

R即召回率,表明了覆盖了率,就是正确的除以(正确的+没有预测出的)

        如下图,绿色框为GT,红色框为预测,所以TP=1,即正确的预测出真实值;FP=0,就是错误的预测为正确的,这个图显然为0(没有将背景错误的预测为正例);FN=1,就是错误的预测为负例,就是说正例没有找到,把正例当作负例了。

1.2.1 PR曲线

        如下七张图,绿色是GT,红色是预测,IOU阈值是0.5,第一步就是找到哪些是TP,哪些是FP。

计算完后得到如下数据,根据该数据即可获得Precision-Recall曲线,即PR图

        可以看出,随着置信度下降,准确率在下降,但是召回率在提高。这两个数据是矛盾的,画PR图时,很难又准又全

1.2.2 MAP计算

MAP就是要求PR曲线的面积。这个面积的求法多种多样。

        ①11点插值法,画出0-1.0共11个点,然后向右取PR曲线的最大值,画出矩形,求出面积,如下图,0向右对齐取PR曲线最大值,然后得出矩形,求出面积,最后所有矩形面积相加。

AP=1/11(1+0.66+3*0.4285+6*0)=0.2683

        ②直接计算面积

        不同的阈值的AP求出后再求平均,即可得到MAP,MAP就是A1+A2+A3+A4,我们希望MAP值越接近1越好。MAP在不同的阈值下综合考虑Precision和Recall,所以作为衡量检测指标

        以上都是VOC数据集的计算方法。

        ③对于COCO数据集,阈值不再是0.5,而是从0.5-0.95之间间隔0.05,这样就得出10个阈值,0.5,0.55,0.6……每个阈值都可以算出一个AP,然后将所有的AP求平均值。

COCO数据集这个计算方法更为科学。而VOC数据集的计算方法一视同仁,多劳多得。

1.3 指标分析

         通常情况下,精度越大,召回率越小,而我们希望精度和召回率都较大。Map是综合衡量检测效果的,单看精度或者召回率是不行的。map越大越好。IOU是Intersection Of UnionIOU越大越好

二、深度学习经典检测方法

2.1概述

two-stage(两阶段),Faster-rcnn Mask-Rcnn系列,多了个预选的阶段。

one-stage(单阶段):Yolo系列

2.2优劣势

        one-stage最大的优点就是,速度非常快,适合做实时检测任务,缺点是可能检测效果不是很好

        two-stage通常速度较慢,但是效果会很不错

三、Yolo V1

        经典的one-stage单阶段方法,Yolo即就是You Only Look Once,名字表明了一切,看一遍就完事了,说明将检测任务变得十分简单,把检测问题转化为回归问题,一个CNN就完事了,并且可以对视频进行实时监测,应用领域非常广。

3.1核心思想

        如下图,假设输入是S*S(S=7)的有方格组成的图像,左下角有个狗,中心是坐标x,y(红色的框)并利用经验值得出两种不同的检测框h1w1和h2w2(图中的两个绿色框),现在要把这些经验值进行修正,进行微调(这就是回归任务),就是更改h和w使之最好。

        YoloV1中给出两个候选框(但是实际中完全不够用),然后有个真实值,分别计算h1w1和h2w2的IOU,选择较大的进行更改h和w(微调)。每一个物体都有经验框,然后微调,预测结果会有很多BoundingBox,但是会给出置信度(图中的中间上方的图),然后过滤掉置信度小的BoundingBox,得出最后的实际检测的框。

3.2 网络架构

        输入是448*448*3的图像,是不是这个输入图像被固定了呢?其实这个输入是经过resize后固定的,任何输入图像都可以转化为448*448*3。但是确实是YoloV1把这个输入图像大小固定了,确实是局限了,但是后续的版本会进行改变。卷积神经网络的输入是不能变的(并不是因为conv层的影响,这个只是得出的特征图大小不一样,而是FC层,全连接层是定死的,由最后的conv再得到的FC的过程中的W权重参数矩阵是不能改变的)。

        中间的GoogleNet也不用了解了,用的不多,后面就是卷积神经网络,最终得出7*7*1024的特征图,然后全连接得到4096*1的矩阵,再全连接得到1470*1的矩阵,再reshape成为一个7*7*30(7*7*30=1470)的“特征”(左下角),这个7*7表示输出的是(7小网格*7小网格)的图像30表示每个小网格内有30个值,每一个网格预测出两个框B1(x1,y1,w1,h1,c1)(注:这里的x和y不是实际的坐标值,而是归一化后为0-1的相对于整个图像的相对值)和B2(x2,y2,w2,h2,c2),每个B有5个数据,两个B就有10个数据,这就是30的前10个数据,后20表示的20类别或20分类(这个分类个数是根据实际任务可以改变的),20个里面是判断为该类别的概率值。

        计算机是如何得到这个不同分类的概率值?因为我们会给一个损失函数,我们想要的就是损失函数最小的时候,计算机就会猜出每个值表示的是什么意思,怎么做会迎合这个损失值,使损失最小。

        含义总结:10=(X,Y,W,H,C)*B,最终得出(S*S)*(B*5+ClassesNumber)

3.3 损失函数

         位置误差:对于W,H加上根号的原因是对于大物体,检测框与真实框的差距假如是1单位,而对于小物体,检测框和真实框的差距也是1单位,这样小物体的差距实则是更大的,对于y=√x,值较小时切线斜率大,即数值小的时候,比较敏感。

         置信度误差:不含object目标的(背景)前有权重λnoobj是描述这一项的重要程度的,一般是0.1,表示这一项并不重要。

3.4 NMS非极大值抑制

         对于同一物体,可能会检测到很多的框,根据置信度排序,保留最大的。

3.5 YoloV1存在问题

        ①重合在一起的东西很难检测到。如右图假如狗的后旁边蹲着一只猫,同样的红色框,就难以检测到猫,即每个cell得到两个候选框,只预测一个类别。

        ②小物体检测不到,这个经验框一般都是比较大的物体,小物体检测不到。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++:用红黑树封装map与set-2

文章目录 前言一、红黑树封装map与set中const迭代器1. 框架的搭建2. set实现const迭代器3. map实现const迭代器 二、operator[ ]1. operator[ ]要达成的样子2. insert的改变 三. 解决insert里set中的问题四. 解决map中的operator[ ]总结用红黑树封装map与set代码 前言 前面我们…

jmeter5.6.3安装教程

一、官网下载 需要提前配置好jdk的环境变量 jmeter官网:https://jmeter.apache.org/download_jmeter.cgi 选择点击二进制的zip文件 下载成功后,默认解压下一步,更改安装路径就行(我安装在D盘) 实用jmeter的bin目录作为系统变量 然后把这…

你最擅长使用哪个异步编程模式?

前言 异步编程模式指的是在进行异步编程时所采用的一种编程模式,主要包括TAP、EAP和APM三种模式。 TAP(Task-based Asynchronous Pattern)模式是.NET 4.0中引入的一种异步编程模式,它基于Task类实现,通过Task类的实例…

Linux高阶——1117—TCP客户端服务端

目录 1、sock.h socket常用函数 网络初始化函数 首次响应函数 测试IO处理函数 获取时间函数 总代码 2、sock.c SOCKET() ACCEPT()——服务端使用这个函数等待客户端连接 CONNECT()——客户端使用这个函数连接服务端 BIND()——一般只有服务端使用 LISTEN()——服务端…

1.5万字长文Java集合与数据结构面试题(注:该篇博客将会持续维护 最新维护时间:2024年11月25日)

🧸本篇博客重在讲解Java集合与数据结构面试题,将会实时更新,欢迎大家添加作者文末联系方式交流 📜JAVA面试题专栏:JAVA崭新面试题——2024版_dream_ready的博客-CSDN博客 📜作者首页: dream_rea…

[OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker编译环境镜像下载以及使用方式

T. 已测试目录 主机类型主机版本Docker镜像版本结果WSL2Ubuntu22.04Ubuntu20.04PASSWSL2Ubuntu22.04Ubuntu18.04PASS R. 软硬件要求: 编译硬件需求:做多系统测试,磁盘500GB起步(固态)(机械会卡死),内存3…

40分钟学 Go 语言高并发:【实战】并发安全的配置管理器

【实战】并发安全的配置管理器 一、课程概述 学习要点重要程度掌握目标配置热更新★★★★★理解配置热更新原理,实现动态加载配置并发读写控制★★★★★掌握并发安全的读写控制机制观察者模式★★★★☆理解并实现配置变更通知机制版本管理★★★★☆实现配置版…

游戏陪玩系统开发功能需求分析

电竞游戏陪玩系统是一种专门为游戏玩家提供陪伴、指导和互动服务的平台。这类系统通常通过专业的陪玩师(也称为陪练师)为玩家提供一对一或多对一的游戏陪伴服务,帮助玩家提升游戏技能、享受游戏乐趣,甚至解决游戏中的各种问题。电…

Idea修改Commit Changes模式、idea使用git缺少部分Commit Changes

文章目录 一、模式一1、页面效果如下2、如何打开为这种样式? 二、模式二1、页面效果如下2、如何打开为这种样式? 三、总结 前言:Idea中代码提交到git库时的commit Change有两种模式,每种模式的界面及功能都不太一样。 Commit Cha…

飞书会话消息左右排列

飞书会话消息左右排列 1. 飞书登录后,点击头像,弹出菜单有个按钮设置 2. 3.

VUE3项目 关于金额:分转化为元 ;元转化为分;

1.在components 文件夹下新建moneyHandle.ts 文件 2.ts文件中写如下代码(保留两位小数) //分转化为元 - 正则解决精度 export const regFenToYuan (fen:any) >{var num fen;numfen*0.01;num;var reg num.indexOf(.) >-1 ? /(\d{1,3})(?(?:…

【linux学习指南】初识Linux进程信号与使用

文章目录 📝信号快速认识📶⽣活⻆度的信号📶 技术应⽤⻆度的信号🌉 前台进程(键盘)🌉⼀个系统函数 📶信号概念📶查看信号 🌠 信号处理🌉 忽略此信…

蒙特卡洛方法(Monte Carlo,MC)

目录 1 序言 2 Monte Carlo法计算积分 3 最优化计算Monte Carlo法 1 序言 蒙特卡罗方法(Monte Carlo)是由冯诺依曼和乌拉姆等人发明的,“蒙特卡罗”这个名字是出自摩纳哥的蒙特卡罗赌场,这个方法是一类基于概率的方法的统称。是一种应用随机数来进行…

【ROS2】ROS2 构建系统 colcon 介绍、安装与使用

目录 一、ament 与 colcon二、colcon 模块化安装三、colcon 基本使用介绍3.1 常用命令构建工作空间清理构建结果构建特定的包指定构建系统并行构建扩展构建选项 3.2 其他命令列出所有可用的包忽略某些包查看colcon文档 一、ament 与 colcon ROS2采用了新的编译系统Ament&#…

Unity 2020、2021、2022、2023、6000下载安装

Unity 2020、2021、2022、2023、6000 下载安装 以Unity 6000.0.24fc1下载安装为例: 打开 https://unity.cn/ 优三缔 官方网站; 点击【产品列表】→点击【查看更多】→选择自己需要的版本→点【开始使用】 点击【从Unity Hub下载】 以Windows为例&am…

python自定义枚举类的试验与思考

一 现象 在python的3.4版本之前,是没有枚举类的。 所以,我自定义实现了一个enum类,目录如下: 代码如下: class enum(set):def __getattr__(self, name):if name in self:return nameraise AttributeErrorif __name_…

AIGC实践-使用Amazon Bedrock的SDXL模型进行文生图

一、Bedrock 简介 Amazon Bedrock 是 Amazon Web Services (AWS) 提供的一种生成式 AI 服务。通过 Bedrock,用户可以方便地使用多种基础模型(Foundation Models),包括 OpenAI 的 GPT、Anthropic 的 Claude 等。这些模型可以用于各…

【MySQL】sql注入相关内容

【MySQL】sql注入相关内容 1. 为什么使用sql注入的时候,url传值的时候要使用–而不是– 使用–进行注释的时候需要在后面加一个空格才可以被认为是注释,url传值的过程中会将空格自动忽略,使用则可以在传输中保留为空格符号。(同…

【YOLO】深入理解 CSP 瓶颈模块的变种:Bottleneck、C3、C3k、C2f 和 C3k2

深入理解 CSP 瓶颈模块的变种:Bottleneck、C3、C3k、C2f 和 C3k2 从 YOLOv3 到 YOLOv11,Ultralytics 团队结合当时的主流结构提出了各种适用于 YOLO 的模块,涵盖了不同的创新和优化思路,从而应对不断变化的目标检测需求。这些模块…

Redis中的数据结构详解

文章目录 Redis中的数据结构详解一、引言二、Redis 数据结构1、String(字符串)1.1、代码示例 2、List(列表)2.1、代码示例 3、Set(集合)3.1、代码示例 4、Hash(散列)4.1、代码示例 5…