#Paper Reading# Objects as Points

本文介绍了一种高效的目标检测方法CenterNet,该方法基于关键点估计,直接预测目标中心点,避免了传统方法中冗余候选框的生成及NMS等后处理操作,实现了端到端的训练。在COCO数据集上取得了state-of-art的效果,同时在姿态估计和3D目标检测方面也有出色表现。

论文题目: Objects as Points
论文地址: https://arxiv.org/abs/1904.07850
论文发表于: arxiv 2019

论文大体内容:
本文主要提出了CenterNet的方法,来解决object detector中效率低的问题。CenterNet不但能够端到端训练,还能在效率和精度上做trade-off,并且在COCO数据集[1]上取得state-of-art的效果。

Motivation:
传统的object detector往往会产生大量冗余的候选object框,然后再classify它们,最后进行NMS[2]等后处理操作。这样导致整个过程太复杂且效率低下。

Contribution:
本文作者提出CenterNet的方法来提升object detection的效率。CenterNet是一种anchor-free的目标检测方法,直接将目标作为一个点去预测,不使用NMS等后处理操作,而且将这种方法应用到姿态估计和3D目标检测的问题上,取得state-of-art的效果。


1. Object detection的进展:
RCNN:生成大量的候选区域,然后classify每个候选区域是否object,典型的two-stage;
Fast-RCNN:候选集改为候选features集,就不用重复提取特征,提升速度;
Faster-RCNN:使用anchor(3组1:1,1:2,2:1共9个框),提升速度;

2. 本文作者提出的CenterNet能够实现End-to-End的训练,顾名思义,直接寻找目标的中心点(采用关键点估计方法来预测中心点),再根据这个中心点去预测目标的形状、尺寸。

3. 整体的Loss主要有3部分:
①L_k:中心点损失函数,使用了Focal Loss;
②L_off:为了弥补因为输出stride造成的量化误差,作者另外设计了一个局部offset来补偿,其损失函数采用L1 loss;
③L_size:对中心点的损失L1 loss;



4. 代码开源于[5];


实验
5. Dataset
COCO数据集[1],是微软团队提供的用于进行图像识别的数据集;

6. 实验结果
trade-off效果;

实际效果;


参考资料: 
[1] https://cocodataset.org/
[2] https://nicehuster.github.io/2018/03/07/nms/
[3] https://nicehuster.github.io/2019/05/07/CornerNet-Objects%20as%20Points/
[4] https://zhuanlan.zhihu.com/p/66048276
[5] https://github.com/xingyizhou/CenterNet


以上均为个人见解,因本人水平有限,如发现有所错漏,敬请指出,谢谢!

### 作用解析 在提供的代码中,`#define PAPER_TOTAL_NUM 80` 是一个宏定义,用于设置纸张总数的上限值。该宏定义的作用主要体现在以下几个方面: 1. **控制纸张数量范围**: - `PAPER_TOTAL_NUM` 被定义为 80,表示系统支持的最大纸张数量为 80。这一限制通常与设备的硬件设计或软件逻辑相关,例如用于限制存储纸张数量相关的数据表范围或操作范围[^1]。 - 在函数 `CalPaperNum` 中,该宏用于控制循环的终止条件,循环变量 `i` 的最大值被限制为 `PAPER_TOTAL_NUM - 3`,即 77。这样可以确保在查找纸张数量时不会超出预设的范围,避免访问越界或无效数据。 2. **数据表匹配**: - `CalPaperNum` 函数通过读取外部存储器(如 AT24C02)中的数据来匹配当前频率对应的纸张数量。`PAPER_TOTAL_NUM` 的值决定了存储器中预存的纸张数量-频率数据表的最大条目数。例如,若 `PAPER_TOTAL_NUM` 为 80,则最多支持 40 对(频率和纸张数量)数据的存储与匹配。 3. **硬件限制**: - 在实际硬件设计中,80 可能是基于传感器精度、机械结构或存储器容量等因素的综合考量。例如,若设备的传感器无法精确区分超过 80 张纸的信号差异,或者存储器空间不足以存储更多数据,则限制为 80 是合理的。 ### 上下文解析 #### 宏定义在代码中的使用 宏定义 `#define PAPER_TOTAL_NUM 80` 出现在代码的顶部,其作用范围覆盖整个文件。以下是其在代码中的具体应用场景: 1. **循环控制**: - 在 `CalPaperNum` 函数中,`PAPER_TOTAL_NUM` 被用于限制循环的上限: ```c for (i = 2; i < PAPER_TOTAL_NUM - 3; i += 2) ``` 这一行代码表明,循环变量 `i` 从 2 开始,每次递增 2,直到 `i` 达到 `PAPER_TOTAL_NUM - 3`(即 77)为止。这种设计确保了在读取存储器数据时不会超出预设的范围。 2. **数据表匹配**: - 在 `CalPaperNum` 函数中,`PAPER_TOTAL_NUM` 的值直接影响了数据表的匹配逻辑。通过 `At24c02Read` 函数读取存储器中的数据,并计算对应的频率值,进而与当前频率进行比较,以确定纸张数量。 #### 代码片段示例 以下是一个简化的代码片段,展示了 `PAPER_TOTAL_NUM` 的使用场景: ```c uint8_t CalPaperNum(uint16_t frequence) { char i; for (i = 2; i < PAPER_TOTAL_NUM - 3; i += 2) { // 读取存储器中的数据并计算频率 // 比较当前频率与存储器中的频率范围 if ((freq2 - (0.4) * (freq2 - freq1) <= frequence) && (frequence < freq2 + (0.6) * (freq3 - freq2))) { num = i / 2; return num; } } return 0; } ``` #### 可能的修改需求 如果需要调整 `PAPER_TOTAL_NUM` 的值,例如将其从 80 更改为 100,则需要确保以下几点: 1. **存储器数据**: - 确保存储器中包含足够的数据条目,以支持新的纸张数量范围。 2. **循环逻辑**: - 调整 `CalPaperNum` 函数中的循环逻辑,以适应新的上限值。 3. **硬件限制**: - 确保硬件能够支持新的纸张数量范围,包括传感器精度和机械结构的调整。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值