目标检测 CenterNet 模型原理与论文精读(一)

news/2024/7/10 0:30:24 标签: 目标检测, 深度学习, 计算机视觉

文章目录

  • 简介
  • Backbone
  • 如何制作数据集的Ground Truth
    • Center的设置
  • 如何计算Loss
  • 总结

简介

在这里插入图片描述
在这里插入图片描述
Faster R-CNN和RetinaNet都是基于Anchor机制的。
Faster R-CNN是需要RPN进行预选框的筛选,300个框左右。
RetinaNet是one-stage的方法,没有RPN,直接暴力枚举所有anchor,直接做分类和回归。一个图片里只存在少量物体,但是我们枚举的框很多,如果在Faster R-CNN 300个框计算loss,会造成正负样本不均衡,loss倾向于负样本的loss。而RetinaNet改进了loss,使用了focal loss,可以大幅度缓解样本不均衡。

在这里插入图片描述
CenterNet是Anchor free的方法。还有CornerNet和ExtremeNet都是keypoint和anchor free的方法。CornerNet是预测目标框左上角和右下角的点。如何知道左上角和右下角是一个物体呢?CornerNet还预测了其他的东西,把他们组合在一起。ExtremeNet是预测5个点,4个边框+1个中心点。后面也是需要group的操作,CenterNet直接预测物体的中心点,以及预测宽高或者offset等,完成物体的检测,非常的简单。
在这里插入图片描述
input size resize成512512,然后进入Backbone,Hourglass是一个沙漏网络,在检测人体骨骼很好用。得到的feature map是128128,分辨率下采样了4倍。将feature map输入3个head,分别预测不同的东西。
heatmap是HWC(128128class类别数,不包含背景)()用于分类;wh:是去预测对应位置的宽高,这里的宽高是heatmap预测出的类别的宽高。
offset:是一个偏移量,是对中心点的调整。因为下采样的时候,精度会损失,对于小物体可能不准确了,offset对于中心点的x,y坐标做一个精细化的调整。HW2,2 就是对x,y的回归。offset也是heatmap预测出的类别的offset。
所以,CenterNet对于物体重合的时候,不能很好的解决。

Backbone

在这里插入图片描述
这两个论文可以看一下。Hourglass在keypoint的检测,效果最好,但是参数和计算量比较大。ResNet可能比它快,但是没有Hourglass好。这里做一个折中,backbone用了DLA。
在这里插入图片描述
中心点最大,其他8个点比较小,那么这个就是中心点,把它设置为1,其他位置为0。但是实际是,我们在标定gt的时候,是用了一个高斯分布,不是只有中心点是1。

如何制作数据集的Ground Truth

Center的设置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Corner说,左上角和右下角只有在一定的范围之内,都是可以约束的,比如设置一个iou,大于ioc阈值的都是可以的,找到半径r,计算sigma=r/3。CenterNet的keypoint的检测,也是借鉴的这个思想。

CornerNet 几种情况:
情况一:
在这里插入图片描述
情况二:
在这里插入图片描述
情况三:
在这里插入图片描述
CenterNet直接用了CornetNet的r,这里具体是不是完全的精确,还不太确定。但是不要纠结太多。拿过来用即可。(不太严谨)

如何计算Loss

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
offset。原始图片512512,output是128128,scale factor=4,实际上x,y向下取整,造成了精度损失,对于很小的物体。这里loss错了,实际是L1,不是smooth L1。

在这里插入图片描述
points —> bounding box的decode过程。

总结

在这里插入图片描述
1.anchor free
2. 可以增加head头,比价灵活


http://www.niftyadmin.cn/n/1207612.html

相关文章

Leetcode 算法面试冲刺 热题 HOT 100 刷题(142 146 148 152 155)(六十二)

文章目录142. 环形链表 II146. LRU 缓存148. 排序链表152. 乘积最大子数组155. 最小栈142. 环形链表 II 想了一个集合的方法,比较简单。 # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val x # s…

C++ 基础与深度分析 Chapter0 C++基础

文章目录什么是C与底层硬件紧密结合对象生命周期的精准控制Zero-Overhead AbstrctionC的开发环境与相关工具C的编译/链接模型总结什么是C C是C语言的一种扩展,更关注性能。与底层硬件紧密结合,这就是自动驾驶和机器人为什么要会C。 C引入了大量的特性&am…

Leetcode 算法面试冲刺 热题 HOT 100 刷题(160 169 198 200 206)(六十三)

文章目录160. 相交链表169. 多数元素198. 打家劫舍动态规划4步法:1、确定状态最后一步子问题2、转移方程3、初始条件和边界情况4、计算顺序200. 岛屿数量206. 反转链表160. 相交链表 尝试写了下,没写出来。 # Definition for singly-linked list. # cla…

Leetcode 算法面试冲刺 热题 HOT 100 刷题(207 208 215 221 226)(六十四)

文章目录207. 课程表215. 数组中的第K个最大元素221. 最大正方形226. 翻转二叉树207. 课程表 不会 什么是拓扑排序: 代码也看吧不懂: from collections import dequeclass Solution:def canFinish(self, numCourses: int, prerequisites:…

小蚂蚁学习数据结构(1)——认识数据结构

2019独角兽企业重金招聘Python工程师标准>>> 去年的时候,有个哥们建议我认真的学习一下数据结构,因为一些杂七杂八的事,就把这事给耽搁下来了,虽然今年也马上就要过完了(不得不感慨时间过的真快啊&#xff…

Leetcode 算法面试冲刺 热题 HOT 100 刷题(234 236 238 239 240)(六十五)

文章目录234. 回文链表236. 二叉树的最近公共祖先238. 除自身以外数组的乘积239. 滑动窗口最大值240. 搜索二维矩阵 II234. 回文链表 非常的简单 class Solution:def isPalindrome(self, head: ListNode) -> bool:if not head:return Trueres []cur headwhile cur:res.ap…

第一篇:GCD多线程的概念

1.什么叫GCD? 简单来说就是:Grand Central Dispatch的简称,中文翻译就是:”牛逼的中枢调度器“ 这是纯C语言,还提供了非常多强大的函数 2.GCD的相对优势: (1)GCD是苹果公司为多核的并…

Leetcode 算法面试冲刺 热题 HOT 100 刷题(253 279 283 287 297)(六十六)

文章目录253. 会议室 II279. 完全平方数283. 移动零287. 寻找重复数297. 二叉树的序列化与反序列化253. 会议室 II 没写出来: class Solution:def minMeetingRooms(self, intervals: List[List[int]]) -> int:if not intervals or len(intervals) 0:return 0cn…