深度学习 基本理论 3 :物体检测(Anchor base/NMS/softmax/损失函数/BCE/CE/zip

1、 Anchor base和Anchor free

1.1 Anchor base

  1. Anchor base,译为基于锚点的一个物体检测方法,也可以叫做基于一组预定义的框
  2. 模型会预测每个锚点是否存在对象,并预测需要对锚点进行的调整以更好地适应该对象
  3. Anchor base物体检测方法:Fast R-CNN、SSD、YOLO、RetinaNet

1.2 Anchor Free

  1. Anchor Free,无锚点方法则不依赖于预定义的锚点框
  2. 直接在图像的每个空间位置预测对象的存在或对象的特征
  3. CenterNet、CornerNet、FCOS 、DETR

2、NMS基本流程

非极大值抑制(Non-Maximum Suppression, NMS),是当物体检测中同一个物体最后预测出多个候选框的情况,采用NMS后可以有效解决这个问题。

  1. 收集所有边界框
  2. 根据置信度(即预测该框的概率)进行排序
  3. 取出最高置信度的框,与其他所有的框计算IOU
  4. 如果计算出某一个IOU的值,超过设定的阈值(假设是0.5),则认为这个框是重复的,则删除这两个框中置信度比较低的那一个
  5. 重复3-4过程,最终剩下的框全部都是预测的边界框
  6. 这个过程也就是说,置信度最高的那一个框永远都不会被移除,且其他的框也只会与这个框计算IOU值

3、常用的损失函数

3.1 回归

MSE:预测值与真实值差值的平方
MAE:预测值与真实值差值的绝对值

3.2 分类

CE:Cross-EnTropy,二元交叉熵,【(y标签对应的值)乘以(p预测正类别的概率值取对数)的相反数】+【1-(y标签对应的值)乘以(1-p预测正类别的概率值取对数)】的相反数,然后会累加样本数,再除以样本数的就是损失的均值

BCE:Binary Cross-EnTropy,多元交叉熵,(y标签对应的值)乘以(p预测该类别的概率值取对数)的相反数,然后会累加每个类别和样本数,再除以样本数的就是损失的均值

4、BCE和CE除了预测种类个数的区别还有其他区别吗?

BCE通常与sigmoid激活函数一起使用,最后输出是单个神经元,输出预测为正类的概率
CE通常与softmax激活函数一起使用,最后输出是多个神经元,输出每个类别的概率分布

5、两个list变成对应的字典,一个是key一个是values

# Given two lists, one for keys and the other for values, we will convert them into a dictionary.
keys = ['key1', 'key2', 'key3']
values = [1, 2, 3]# Creating the dictionary using zip function
dictionary = dict(zip(keys, values))

6、zip怎么理解和使用

zip 是 Python 中一个非常有用的内置函数,它用于将多个可迭代对象(如列表、元组等)中的元素配对,创建一个新的迭代器。其工作原理可以通过以下几个要点来理解:

  1. 配对元素zip 函数将多个可迭代对象中的对应元素组合在一起,形成一个个元组。例如,如果有两个列表 list1 = [1, 2, 3]list2 = ['a', 'b', 'c']zip(list1, list2) 会生成 [(1, 'a'), (2, 'b'), (3, 'c')]

  2. 不同长度处理:如果可迭代对象的长度不同,zip 会停止于最短的输入序列的末尾。例如,如果一个列表有 3 个元素,另一个列表有 4 个元素,那么 zip 生成的迭代器将只包含 3 个元组

  3. 转换为其他数据结构:虽然 zip 返回的是一个迭代器,但你可以将其转换为列表或字典等其他数据结构。例如,list(zip(list1, list2))dict(zip(list1, list2))

  4. 多个迭代对象zip 不仅限于两个迭代对象,它可以接受任意数量的迭代对象

  5. 解压缩:使用 * 运算符,可以将 zip 的结果“解压缩”回多个独立的序列

下面展示 zip 函数的基本用法:

# 将两个列表压缩成一个由元组组成的列表
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
zipped = list(zip(list1, list2))
print(zipped)  # 输出: [(1, 'a'), (2, 'b'), (3, 'c')]# 将两个列表转换为字典
keys = ['key1', 'key2', 'key3']
values = [1, 2, 3]
dictionary = dict(zip(keys, values))
print(dictionary)  # 输出: {'key1': 1, 'key2': 2, 'key3': 3}# 解压缩
pairs = [(1, 'a'), (2, 'b'), (3, 'c')]
numbers, letters = zip(*pairs)
print(numbers)  # 输出: (1, 2, 3)
print(letters)  # 输出: ('a', 'b', 'c')

7、除了交并比(即IOU)还有没有其他计算两个候选框的重叠程度方法

除了交并比(IoU)之外,确实存在其他几种方法来评估和处理目标检测中的边界框重叠情况。这些方法各有特点,适用于不同的场景和需求。以下是一些常见的替代方法:

  1. 交集面积(Intersection Area):直接计算两个边界框的交集面积。
  2. 中心距离(Center Distance)
    • 计算两个边界框中心点之间的距离。
    • 适用于判断边界框是否足够接近,可能用于跟踪或者一些需要边界框位置精确度的应用

8. GIOU:广义交并比

(Generalized Intersection over Union, GIoU),GIoU 在 IoU 的基础上增加了对边界框的尺寸和形状差异的考量,首先计算常规的 IoU,然后找到包含两个边界框的最小闭合区域(通常是一个更大的矩形)

在IoU的计算中,只有当两个边界框存在重叠时,IoU的值才会大于0。这意味着如果两个框不重叠,IoU将始终为0,即使这两个框非常接近。这就是IoU的一个局限性,因为它无法区分“完全不重叠但非常接近”的情况和“相距很远”的情况。

  1. 计算常规IoU:首先计算两个边界框之间的标准IoU。
  2. 找到最小闭合区域:接着,找到能够同时包含这两个边界框的最小闭合矩形区域。
  3. 计算GIoU:GIoU的值是标准IoU减去最小闭合区域与两边界框并集的面积差占最小闭合区域面积的比例。公式可以表示为:

G I o U = I o U − ∣ C − U ∣ ∣ C ∣ GIoU = IoU - \frac{|C - U|}{|C|} GIoU=IoUCCU, 其中,C 是最小闭合区域的面积,U是两边界框并集的面积。

这种计算方式允许GIoU在没有重叠的情况下提供比0更丰富的信息。此时,GIoU不仅表明两个框之间没有重叠(IoU为0),而且还提供了关于它们相对位置和大小的信息。GIoU的值可能小于0,如果两个框完全不重叠但相对较接近,其值将接近0;如果两个框相距很远,其值将更小。

9、DIOU 距离交并比

(Distance Intersection over Union, DIoU)

  • 基本概念:DIoU 除了考虑 IoU 外,还加入了两个边界框中心点之间的距离。
  • 计算方法
    • 计算两个边界框中心点的欧氏距离。
    • 根据中心点距离和 IoU 计算 DIoU。
  • 优点:DIoU 在调整边界框对齐和重叠的同时,还能保持中心点的一致性,特别适用于需要精确中心对齐的应用

10、CIOU完整交并比

(Complete Intersection over Union, CIoU)

  • 基本概念:CIoU 是目前最全面的变体,它考虑了 IoU、中心点距离以及长宽比的一致性。
  • 计算方法
    • 计算 IoU 和两个边界框中心点的距离。
    • 加入对边界框长宽比的考量。
    • 综合这三个因素来计算 CIoU。
  • 优点:CIoU 通过考虑更多的几何因素,能够更准确地评估和优化边界框的位置、尺寸和形状。

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

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

相关文章

STM32-04-STM32时钟树

STM32时钟树 什么是时钟? 时钟是具有周期性的脉冲信号,最常用的是占空比50%的方波。(时钟是单片机的脉搏,搞懂时钟走向及关系,对单片机使用至关重要)。 时钟树 时钟源 2个外部时钟源 高速外部振荡器(HSE…

教你如何将本地虚拟机变成服务器,供其它电脑访问

场景:最近在做数据仓库的作业,需要团队协作,买不起阿里云服务器,所以想到能不能将我本地机上的虚拟机变成服务器,供其它同学的电脑访问。在虚拟机上安装hadoop和hive,然后同学机子上安装kettle进行连接。最…

离线安装jenkins:使用rpm安装包

目录 一、安装jdk1.8二、安装yum软件包三、下载rmp安装包四、安装jenkins的rpm安装包五、创建jenkins文件目录六、设置环境变量七、配置jdk位置八、配置Jenkins配置文件九、启动Jenkins十、访问Jenkins十一、安装Jenkins插件 一、安装jdk1.8 根据博客Linux操作系统安装jdk1.8并…

实战经验分享,Python 连接 Oracle 踩坑实录

最近的一个测试任务需要测试 oracle 同步 hive 数据库的性能,那就需要对 oracle 数据库灌注测试数据。我就又打开了我的IDE,准备把我之前一下可以灌50w数据到 MySQL 的代码,改一改,直接用。 因为我在网上看到,语法上也…

网络安全复习--简答整理

-----------------------------------------------------教材如上图------------------------------------------------------------ 1.对称加密和非对称加密各有什么特点?加密解密过程中有什么区别?优点P38【考】 对称加密的特点:在针对同一…

MVC设计模式和与三层架构的关系

MVC设计模式和与三层架构的关系 MVC是一种设计模式,将软件按照模型、视图、控制器来划分: M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为数据承载Bean&#x…

http1 http2 http3的区别

HTTP/1.1、HTTP/2和HTTP/3是HTTP协议的不同版本,它们在性能、效率和安全性方面有一些区别。 HTTP/1.1:HTTP/1.1是最早的HTTP版本,它使用传统的文本格式进行通信。它的主要特点是每个请求需要建立一个新的TCP连接,这称为"串行…

用C语言实现动态数组Vector

代码仓库地址 1. 动态数组原理 定义一个结构体类型,在结构体中用指针指向一个在堆空间开辟的一块内存。 2. 编写头文件 在头文件里定义Vector的数据结构和相关操作,可以通过修改 “typedef char* Element;” 来修改存储的数据的类型; #ifn…

python代码 重命名指定目录下 文件夹 or 文件

代码十几秒的事,为什么要手动去改一天呢!直接放源码~ 重命名指定目录下所有文件夹 import os import redef extract_first_three_numbers_from_folder_name(folder_name):numbers = re.findall(r\d+, folder_name)return numbers[:3]def rename_folders_with_prefixes(dire…

歌手荆涛演唱的春节回家:传统与现代的交织,歌声里的乡愁与期盼

随着冬日渐寒,春节的脚步愈发临近。这是一个充满温馨与期待的时刻,一个穿越时空、凝聚亿万华夏儿女情感的盛大节日。春节,它不仅仅是一个传统习俗的展现,更是一种心灵的归宿,一种文化的传承。 在悠久的历史长河中&…

Selenium 学习(0.18)——软件测试之基本路径测试

1、基本路径法测试的概念 是一种白盒测试方法,它在程序控制流图的基础上,通过分析控制构造的环行复杂性,导出基本可执行路径集合,从而设计测试用例的方法。 要保证在测试中程序的每一个可执行语句至少执行一次 【这和语句…

很有用!小企业如何从零开始制作产品手册?

对于初创公司和小企业来说,创造一份高效、吸引人的产品手册可能不是特别简单,特别是当资源和预算有限的时候。然而,一份良好的产品手册可以帮助你传达你的品牌故事,展示你的产品,甚至可以帮助你提高销售额,…

泛型编程-常用模板

例举C11 常用模板 一.变参模板 当我们需要处理不定数量的参数时,C的变参模板(variadic templates)提供了一种灵活的解决方案。变参模板允许我们定义接受任意数量参数的函数或类模板。 变参模板主要分为三部分: 模板形参包&#x…

Transformers 2023年度回顾 :从BERT到GPT4

人工智能已成为近年来最受关注的话题之一,由于神经网络的发展,曾经被认为纯粹是科幻小说中的服务现在正在成为现实。从对话代理到媒体内容生成,人工智能正在改变我们与技术互动的方式。特别是机器学习 (ML) 模型在自然语言处理 (NLP) 领域取得…

【仙丹秘法】如何炼制一颗稳定的仙丹

提示词始终保持不变 1:收集素材 制作lora_v1 2: 制作lora_v1 产生 1个人物 含 你想要的服装 导入 pose_1 到 control 1 生成人物 (white_background:1.1),front view,1boy,blue sleeveless t-shirt,blue shorts,detailed eyes,best quality,masterpiece,high res…

第三站:C/C++基础-二维数组

二维数组的概念 一维数组本身是多个大小相同的内存块,从0开始逐渐递增所组成的在横向上的有序"组合", 二维数组就是很多个一维数组在纵向上的组合,每一个一维数组就是二维数组在纵向上的从0开始的逐渐递增的一个单位,(所以一维数组在二维数组的基础上,每一个内存块…

L1-010 比较大小(Java)

题目 本题要求将输入的任意3个整数从小到大输出。 输入格式: 输入在一行中给出3个整数,其间以空格分隔。 输出格式: 在一行中将3个整数从小到大输出,其间以“->”相连。输入样例: 4 2 8 输出样例: 2->4->8解题思路 输入三个整数:…

Spring 基于注解的AOP见解4

5.基于注解的AOP配置 5.1创建工程 5.1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…

SUDA-计算机网路-期末复习提纲

写在前面 帮苏大的同学整理的计网复习材料&#xff0c;用的是他们老师划定的范围。 1.负责互联网协议开发、标准制定、地址分配的国际组织名称及其主要职责 (1) 地址支持组织&#xff08;ASO&#xff09;负责IP地址系统的管理。 (2) 域名支持组织&#xff08;DNSO&#xff09;…

LeetCode(242)有效的字母异位词⭐

给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输…