matlab基于ssd的角点匹配_基于关键点的目标检测

0 1

前言:基于锚点的目标检测方法

在基于关键点(key points)的目标检测方法出现之前,主流目标检测方法一般先设置一些预先定义好的 锚点 (anchor boxes)。 作为预测物体框的参考,神经网络只需要预测实际的物体框相对于这些锚点的偏移。 这样模型就能在一个位置预测多个不同尺寸的物体框,并且预测相对偏移比预测绝对值要容易一些。

最初,这些锚点的大小是人工设置的,如Faster R-CNN [1]和SSD [2]中使用的锚点。 由于模型预测的是相对偏移,一般来说比较接近锚点的物体框预测要更为准确一些,因此YOLOv2[3]中使用了k-means聚类的方法来选择与训练集样本最为匹配的锚点。

基于锚点的目标检测方法 缺点 在于需要生成大量的锚点以更好的覆盖整个图片中的物体,并且需要人工设计一些参数,比如锚点的数量、大小等。

13b57ffa24028b2bd244b8060bbf97c3.png

图2 SSD中使用的锚点

0 2

基于关键点的目标检测方法

1. CornerNet [4]

CornerNet发表在2018年ECCV,是使用关键点方法进行目标检测的开山之作。CornerNet通过预测物体框左上角和右下角两个角点,来组成最终的物体框,避免了锚点的使用。

物体的特征一般集中在物体内部,比如一个人的身体、头部,其左上角和右下角两个点的特征并不明显,而且不容易确定位置。

为了解决这个问题,文章引入了 Corner pooling 的结构。

在输出层之前的特征图上,针对左上角点,取其右边和下边的最大值之和,针对右下角点,取其左边和上边的最大值之和。

直观上理解,就是我们在左上角处往右下方向看,在右下角处往左上方向看,这样就能看到整个物体。

如果不使用Corner pooling,相当于看的是角点周围,这样对于比较大的物体就很难获得整个物体的特征,会导致大物体的检测效果差。

网络针对左上角和右下角分别输出 三个结果

a. Heatmaps,表示某位置是角点的概率;

b. Offsets,表示实际角点相对于该位置的偏移;

c. Embeddings, 嵌入向量,用于将左上角和右下角进行配对。

生成最终物体框时,取概率最高的k个角点,加上Offsets得到实际位置,再使用Embeddings对左上角和右下角进行配对,取嵌入向量距离超过一定阈值的两个点来组成最终物体框。

损失函数的选择上Heatmaps使用分类损失函数focal loss的变种,Offsets使用回归损失函数smooth L1 loss,Embeddings使用衡量相似度的"pull" loss和"push" loss,损失函数细节可查阅原文。

835e9c613bbd6e2f44e3b13431aac3c9.png

图3 CornerNet结构示意图

0fff5cf66d8dfc59d7e921ed2fff802d.png

图4 Corner pooling

CornerNet一个 明显的缺点 是使用Embeddings进行角点匹配的效果并不太好,可能导致某个物体的左上角匹配到另一个物体的右下角。后续的ExtremeNet、CenterNet等论文都设法修复或避免这一问题。

07635a17b22f821249a60d89b17323f6.png

图5 CornerNet角点配对错误的例子

2. CornerNet-Lite[5]

针对CornerNet速度较慢的问题,CornerNet的研究团队对网络结构进行了优化。

主要从 两方面 入手,分别提出了一个方案。

一:减少处理的像素数量。也就是先用一个轻量的网络确定物体的大概位置,然后再从这个大概的裁切区域上检测物体的具体位置,该网络被称为CornerNet-Saccade。

二:减少每个像素的处理次数。参考了SqueezeNet和MobileNets,使用深度可分离卷积等方法对网络主干进行轻量化,该网络被命名为CornerNet-Squeeze。

CornerNet-Saccade相比CornerNet 速度 上有较大提升而准确率相当;CornerNet-Squeeze则达到与YOLOv3相当的 速度准确率

CornerNet-Lite依然受限于CornerNet角点匹配 错误较多 的缺点。比如CornerNet-Squeeze虽然从文章中给出的结果上看与YOLOv3相当,但是实际使用中容易出现角点匹配错误情况,效果不佳。

fde4b44dac3690e5a5699dbc2ee19b4c.png

图6 CornerNet-Lite作者给出的优化效果

3. CenterNet [6]

CenterNet在CornerNet基础上加入了一个关键点—— 中心点 ,通过检查CornerNet预测框的中心区域是否存在中心关键点,来决定是否保留这个预测框。

中心关键点在pooling阶段使用了Center pooling,同时取上下左右四个方向的最大值。

此外,还对原有的Corner pooling进行了 优化 。 确定中心区域时,对于较大的物体取5*5分割的中间区域,较小物体取3*3分割的中心区域。中心区域的选择过于依赖人工设计的参数,也是该方法的一个缺点。

5cc10250f1dc50a3d37235f2af82f403.png

图7 CenterNet结 构示意图

4. Objects as Points [7]

这篇文章和上一篇CenterNet一样是19年4月份放到网上的,而且也把自己的网络起名为CenterNet...不同于上一篇CenterNet对CornerNet进行修补。 该方法直接抛弃了右上角和右上角两个关键点,只预测一个中心关键点,再加上物体的宽高,构成最终的物体框。

该文章提出的方法 简洁明了 ,在 速度精度 的权衡上也做的比较好,因此比较被看好。 缺点 在于如果两个物体的中心重合只能预测一个,不过这种情况概率很低。

a373b3f78a39521c86135fe81e963aca.png

图8 Objects as Points效果示意图

0 3

小结

基于关键点的目标检测方法或多或少都还存在一些缺点,在实际应用中相比基于锚点的方法也 没有绝对优势 。但是作为近两年目标检测方法的新趋势,我们期待在不远的将来这类方案能有进一步的 突破

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

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

相关文章

python中summary_python summary_study.py

#!/usr/bin/env python#-*- coding:utf-8 -*-import os,sys,time,shutil,refrom _ast import Numfrom django.db.models.sql.datastructures import Join---------------------------此脚本用于之前学习内容的回顾装饰器还需要多看,目前还是不是很清楚类的继承prope…

NLog整合Exceptionless

前言在实际的.Net Core相关项目开发中,很多人都会把NLog作为日志框架的首选,主要是源于它的强大和它的扩展性。同时很多时候我们需要集中式的采集日志,这时候仅仅使用NLog是不够的,NLog主要是负责代码中日志的落地,也就…

40个只有程序员才看得懂的段子

1. 一程序员去面试,面试官问:“你毕业才两年,这三年工作经验是怎么来的?!”程序员答:“加班。”2. 某程序员对书法十分感兴趣,退休后决定在这方面有所建树。于是花重金购买了上等的文房四宝。一…

bra型手机链

左看看,右瞧瞧,真不敢相信这个居然是手机链?带上它出门,回头率一定很高哦!就是有点贵,70元!转载于:https://blog.51cto.com/laizhngn5376/180850

MySQL8的inodb参数设置_MySQL8.0自适应参数innodb_dedicated_server

MySQL8.0有了一个新参数又叫自适应参数 innodb_dedicated_server将innodb_dedicated_server开启的时候,它可以自动的调整下面这四个参数的值:innodb_buffer_pool_size 总内存大小innodb_log_file_size redo文件大小innodb_log_files_in_group redo文件数…

让 gRPC 提供 REST 服务

让 gRPC 提供 REST 服务IntrogRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电…

python提取cad坐标到excel_使用python来操作autocad,并且将坐标点转换成cad可见对象...

由于工作需要,在项目中遇到一个棘手的问题,如何将(mssql)数据库中的BLOB文件转成cad可见图形(可能每个项目需求不一样,解决方式不同)第一步 . 需要转换的图形类型第二步 . 那我们先查询这个字段第三步 试试将这个写入一个文本中 看看是那种图…

10张图看懂瞎忙和高效的区别

时间是最公平的,每个人一天都是24小时,一年都是365天。但是,不同的人的产出却是天差地别。人和人的差距为什么这么大?而且这种差距,并不是家庭背景、权利财富或天赋带来的,仅仅是我们对时间的掌控。正好看到…

pc模式 华为mate30_华为mate30与电脑连不上怎么回事

大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。系统版本为EMUI 10.1,华为mate30与电脑连不上的原因:1、可能是USB线连接不正常。建议更换数据线试试。2、确认电脑上的手机USB 驱动已经安装成功,…

ASP.NET Core 中的配置

背景ASP.NET Core 提供了一个灵活可扩展,基于键值的配置系统. 但是配置系统独立于ASP.NET Core是Microsoft.Extensions 类库的部分. 它可以用于任何类型的应用程序。1、以键-值对的形式读取配置appsettings.json 文件:{"Position": {"Title": &…

Canvas的save和restore

在创建新的控件或修改现有的控件时,我们都会涉及到重写控件或View的onDraw方法。 onDraw方法会传入一个Canvas对象,它是你用来绘制控件视觉界面的画布。 在onDraw方法里,我们经常会看到调用save和restore方法,它们到底是干什么用的…

vs code python 插件_工具篇-vscode效率提升插件

工欲善其事必先利其器,开发前先把所以提升效率的利器搭好会让今后慢慢的编程长路舒服很多,我本来一直用pycharm,后来发现vscode貌似确实会好很多。。。就慢慢转过来了,下面介绍一些我在机器学习编程时经常会用到的一些插件。1. au…

鉴别一个人是否 js 入门的标准竟然是?!

不知不觉跳入前端「大坑」也已经有大半年了,学到了很多知识。为了让知识更好地沉淀,我打算写一系列的知识总结,希望能在回顾知识的同时也能帮到别的同学。忘记在哪里看到过,有人说鉴别一个人是否 js 入门的标准就是看他有没有理解…

面向对象编程设计模式--简单工厂模式讲解(历史上最简单明白的例子)

工作之余,在看资料过程中发现一个极易理解的简单工厂模式的例子,自己亲自试练一番,感觉对这个设计模式不熟悉的朋友,一看马上就知道是什么回事了。 简单工厂模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返的类…

.NET 6 Preview 1 开箱,带你体验新版本

最近 .NET 6 Preview 1 发布了,.NET 统一是此版本的核心。大家可以读一下原文博客:https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-1/.NET 6.0 SDK 和 Runtime 下载地址:https://dotnet.microsoft.com/download/dotnet/6.0…

redis 清空缓存_「镜头回放」简直了!spring中清除redis缓存导致应用挂死

异常场景springWeb应用一直运行正常,同事最近反应,每次版本更新完毕,刷新缓存,就会导致应用挂死。只有重启redis应用才恢复正常。项目概况springWeb项目,常用配置表做了redis缓存,配置表中只有少量数据&…

25岁社招进阿里,从电商到有赞新零售,他仅1年就打开了马云一直想做的新领域!

最近关于「新零售」的声音此起彼伏:阿里巨资收购高鑫零售,腾讯确认入股永辉超市……自2016年10月马云第一次提出了「新零售」概念之后,各巨头跑马圈地,线下成为了必争之地,新零售的蓝海才刚刚打开。而李星,…

优美的测试代码 - 行为驱动开发(BDD)

可理解的代码非常重要,测试代码也是如此。在我看来,优秀的测试代码,必须做到一个重要的事情就是保持测试逻辑的清晰。一个完整的测试案例通常包括三个部分:1. SetUp2. Exercise3. Verifiy4. TearDown一 个测试案例如果能清晰的区分…

C#连接MySQL数据库实例

项目目的:连接mysql查询数据并将数据显示到界面的datagridview里面.Step1:添加动态链接库文件Visual Studio,在 项目(右键)-管理NuGet程序包(N) 然后在浏览里面搜索MySql.Data并进行安装。Step2:using所需要的库using MySql.Data.MySqlClient;step3&…

java字符串比大小_Java字符串比较(3种方法)

字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等。在 Java 中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。下面详细介绍这 3 个方法的使用。equals() 方法equals() 方法将…