目标检测基础

2023-11-11

什么是目标检测?简单来说就是“检测图片中物体所在的位置”。
本文只介绍用深度学习的方法进行目标检测,同过举出几个特性来帮助各位理解目标检测任务。同时建议学习目标检测应先具备物体人工智能算法基础和物体分类现实基础。

特性1——Bounding Box输出

为了得到物体的位置(即Bounding Box)的四个参数,bx、by、bh、bw,我们在最后再输出层上面多加四个神经元来输出这四个参数。同理,我们需要什么信息,就多加一个神经元来输出它。例如,我现在检测一张8x8x3的图片中苹果的位置,我们可以通过kernel_size=2x2x3,stride=2的卷积核连续三次提取特征,再用经过kernel_size=1x1x5,stride=1的卷积核,不难计算,最后的图片向量为1x1x5,即输出层有5个神经元,那我们可以将其中四个来作为Bounding Box的输出,一个作为confidence的输出。
或许有人会问,为什么这五个神经元会乖乖的输出Bounding Box的值以及confidence呢?
那因为最后的五个神经元就是我们的输出值,我们会根据这五个输出值进行不断的训练,将它“调教”为我们需要的功能,如果还不清楚整个流程,建议回去学一下反向传播的知识。
注:所以数据都为自己杜撰,不可实际运用。
尺寸计算公式:w = (w - kernel_size + 2padding)/stride +1

特性2——卷积层代替全连接层

目标检测的神经网络一个最明显的特性就是用卷积层代替了全连接层。
在我们做目标分类网络的时候,最后一层甚至许多层都会使用全连接层,而全连接层会吧所有的矩阵展开成一排,例如我们最后的feature_map(经过多次卷积之后的特征输出)是3x3x5,那么展开完应该是45个神经元。而这个45个神经元是代表整张图的feature的呀。所以如果用了全连接层,我们必须得针对整张图进行识别,这正符合了物体分类的任务。但是我们的目标检测,是为了找出图中物体的位置,这样显然会模糊了物体的位置。
让我们再看看用卷积层会如何。
在这里插入图片描述
卷积会使feature_map上的每一个点都在原图上面有所对应的区域,这个区域我们也称为感受野。感受野的大小并不是一定的,这我画的这副图中,feature_map的每一个点对应原图3x3的大小。所以如果我们要检测的物体刚好在左上角的3x3区域内,那么feature_map左上角标红的那五个神经元,就会输出该物体的BoundingBox的四个参数和自信度。
再啰嗦一下,输出层神经元的个数,也就是上图中feature_map的小方格(有45个)。它的多少是我们自己根据需要灵活调整的,方法十分简单,就是通过调整卷积核的大小,步长和数量。

特性3——anchor(default box)

在最后的feature_map中我们会生成像这样的几个default box,它们的尺寸和数量都是由我们自己定义的。例如下图就生成了4个不同比例的default box,这4个default box会成比例的映射到原图上面去,和原图的ground truth(真实框,我们预先标注好的问题的位置)进行比较,然后我们将IOU定义为default box/ground truth。一般来说,IOU大于0.5的我们称之为正样本,小于0.5的我们称之为负样本。
等待更新....
通过对default box的训练,我们可以是default box无限接近于ground truth。那么我们的目标位置检测任务不就完成了吗?
下面再让我们看看到底是如何把default box训练到无限接近ground truth的把。

特性4——位置损失函数

在运用损失函数之前,我们得先知道是要拿预测框(default box)的中心坐标和真实框(ground truth box)的中心坐标进行对比。我们会首先在众多default box(anchor)中选出和ground truth(真实框)IOU最大的那个框来进行训练。
这里以SSD采用的Smooth loss function为例子,其它也大同小异。其中x就是两个坐标的距离。
在这里插入图片描述

附上Pytorch的代码

location_loss = nn.SmoothL1Loss(reduction='none')
loc_loss = location_loss(ground truth, default box)

后记:
对于目标检测而言,损失函数是分为两个部分的,其中一个部分便是我上面提及的位置损失函数(Location Loss function),用于训练预测框,另一个部分就是我们经常接触到的交叉熵损失函数(CrossEntropy loss function),用于对目标进行分类。可以参考这篇博文CrossEntroyloss function

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目标检测基础 的相关文章

随机推荐

  • 基于mykernel的简单时间片轮转多道程序内核代码分析

    一 实验环境 1 mykernel mykernel是由科大孟宁老师建立的一个用于开发您自己的操作系统内核的平台 它基于Linux Kernel 3 9 4 source code 我们可以在这里找到mykernel的源代码 https g
  • 计算机网络课程设计-网络聊天程序的设计与实现

    一 实验题目 网络聊天程序的设计与实现 二 实验目的 了解Socket通信的原理 在此基础上编写一个聊天程序 三 总体设计 一 实验原理 WinSock是一个网络编程接口 可以访问很多种网络协议 它是TCP IP协议的一种封装 通过调用Wi
  • 垃圾回收器(GC)

    目录 垃圾回收 概述 垃圾回收机制 垃圾回收标记阶段 Finaliztion机制 垃圾回收阶段算法 System gc 与STW 垃圾回收器 CMS G1回收算法 查看 JVM 垃圾回收器设置垃圾回收器 垃圾回收 概述 垃圾回收功能是jav
  • 家庭媒体服务器系统,如何创建自己的“家庭媒体流服务器”使用Plex与FreeNAS - 第3部分...

    每个人都有自己的电影 歌曲 视频歌曲 图片等的收藏 他们很多都想知道我们如何流到我们所有的家庭设备 这里是我们可以使用Plex Media Server通过LAN网络在我们的家中使用智能电视 iPad 手机 平板电脑 笔记本电脑等设备流式传
  • 预处理命令 文件包括

    预处理命令 源程序中以 开头的行称为预处理指令 预处理指令并不是C语言的语法成分 而是传给编译程序的指令 包括 宏定义 define undef 文件包含 include 条件编译 if ifdef else elif endif 其他 l
  • Webmin--一个用于Linux基于Web的系统管理工具

    Webmin是一个用于Linux系统管理的开源的基于web的系统管理配置工具 有了这个工具的帮助 我们可以管理内部的系统配置 诸如设置用户账户 磁盘配额 像Apache DNS PHP MySQL 文件共享的服务等 Webmin应用程序是基
  • 问题 J: 36.for循环求阶乘

    题目描述 利用for循环来计算n 的值 输入格式 输入一个整数n n lt 20 输出格式 输出n 的结果是多少 输入样例 3 输出样例 6 这是一道肥肠煎蛋的递归题 边界是n 0 注意定义函数时要用long long哦 完整代码如下 in
  • c++ 第五章 模板

    模板 程序 算法 数据结构 数据结构 能够存储任意类型 算法 能够操作存储任意类型数据结构 泛型编程 泛型编程 面向过程编程 用模板实现函数过程 面向对象编程 用模板实现类 一 基本范例 a 模板定义是以template关键字开头 b 类型
  • Redis高可用高性能缓存的应用系列03 - 缓存过期淘汰策略LRU、LFU

    概述 Redis高可用高性能缓存的应用系列的第3篇 主要介绍Redis缓存过期淘汰策略和内存淘汰策略回收的LRU和LFU的知识点进行说明 Redis过期键删除策略 Redis设置key时 都会设置一个过期时间 那么当过期时间到了都是怎么处理
  • 【地理空间】轨迹相似度算法(DTW、LCSS)

    序列相似度 在现实生活中我们常常需要比较两串数字的相似度 比如两串数字 一维 再比如两条轨迹 二维 那么如何计算两个序列的相似度呢 有人提出了DTW算法 一种计算序列距离的方法 DTW算法原理 算法原理主要参考 https blog csd
  • Databend 设计概述

    Databend 是一个开源的 完全面向云架构的新式数仓 它提供快速的弹性扩展能力 并结合云的弹性 简单性和低成本 使 Data Cloud 构建变得更加容易 Databend 把数据存储在像 AWS S3 Azure Blob 这些云上的
  • JDBC连接数据库的几种方法与简单解析

    首先要知道jdbc 使用Java代码发送sql语句的技术就是jdbc技术 即jdbc是一个接口 用于不同的数据库 oracle mysql sqlserver 的操作 使用jdbc发送sql语句的前提 登录数据库服务器 连接数据库服务器 数
  • windows杀死进程命令

    有时候由于病毒或其他原因 启动了一系列的进程 并且有时杀了这个 又多了那个 这时候我们可以特定选择一种杀 很多人对windows杀死进程命令比较感兴趣 所以今天小编就为大家来详细讲一讲windows命令行关闭进程教程 感兴趣的用户一起来看看
  • LNK2001无法解析的外部符号 _vfprintf

    legacy stdio definitions lib
  • 感动了千千万万人们的西单女孩

    任月丽出生在河北涿州偏僻的农村 由于父母多病 自小由奶奶带大 为了减轻家庭负担 年仅16岁的她孤身一人来到北京 开始在一小餐馆打工 满1个月后老板没给工资 流浪街头时看到有地下歌手在卖唱 从小就喜欢唱歌的她萌生了也要唱歌的想法 遂与一流浪歌
  • 步步为营--深入研究react技术栈 系列一 (jsx、组件、数据流)

    相关技术博客 1 步步为营 深入研究react技术栈 系列一 jsx 组件 数据流 2 步步为营 深入研究react技术栈 系列二 事件 组件性能优化 更多系列文章持续更新中 一 React简介 React 是一个用于构建用户界面的 Jav
  • python出现indexerror,Python:IndexError:列表索引超出范围错误

    Updated look bottom I am stuck I get a IndexError list index out of range Error def makeInverseIndex strlist numStrList
  • 常用4线风扇接口定义

    4根线分别是GND VCC FG PWM 位置可能不同 FG是转速信号 用于CPU侦测转速 转速 频率 30 4极风扇 PWM通过方波占空比控制转速 PWM接地 最低转速 PWM不接最高转速 频率25KHZ 一般Duty 0 20 转速是相
  • 图灵赠书——程序员11月书单

    10月书讯中奖名单 wudalang gd 精通Git 第2版 chszs CCNA学习指南 路由和交换认证 第2版 sujun10 同构JavaScript应用开发 dongfeng9ge 学习JavaScript数据结构与算法 第2版
  • 目标检测基础

    什么是目标检测 简单来说就是 检测图片中物体所在的位置 本文只介绍用深度学习的方法进行目标检测 同过举出几个特性来帮助各位理解目标检测任务 同时建议学习目标检测应先具备物体人工智能算法基础和物体分类现实基础 特性1 Bounding Box