CenterNet做2D和3D目标检测
论文Objects as Points
源码GitHub地址
CenterNet是全卷积的神经网络,不需要额外的NMS的后处理,属于one-stage的检测方法。
1、2D目标检测
通过预测目标的中心点keypoint、由于下采样带来的中心点的偏移offset及尺寸size来获取目标的bounding box。
(1)keypoint: Y ^ \hat{Y} Y^
- 输出的为二值heatmap, Y ^ ∈ [ 0 , 1 ] W R × H R × C \hat{Y}\in[0,1]^{\frac{W}{R}\times\frac{H}{R}\times C} Y^∈[0,1]RW×RH×C 1为keypoint,0为background。对于detection,C为类别数。R为下采样率。文中R=4。
对每个ground-truth keypoint p p p首先计算一个低分辨率的 p ~ = ⌊ p R ⌋ \widetilde{p}=\lfloor\frac{p}{R}\rfloor p =⌊Rp⌋, p ~ \widetilde{p} p 又作用在Gaussian核 Y x y c = e x p ( − ( x − p ~ x ) 2 + ( y − p ~ y ) 2 2 σ p 2 ) Y_{xyc}=exp(-\frac{(x-\widetilde{p}_x)^2+(y-\widetilde{p}_y)^2}{2\sigma^2_p}) Yxyc=exp(−2σp2(x−p x)2+(y−p y)2)
如果同一类别的高斯核有重叠,选取原则是element-wise maximum。又称为peaks。 - Loss
Focal Loss
(2)offset: O ^ \hat{O} O^
- 由于多次下采样带来的目标中心的偏移, O ^ ∈ R W R × H R × 2 \hat{O}\in R^{\frac{W}{R}\times \frac{H}{R}\times 2} O^∈RRW×RH×2
- L1 Loss
(3)size: S ^ \hat{S} S^
- 预测目标的width和height。 S ^ ∈ R W R × H R × 2 \hat{S}\in R^{\frac{W}{R}\times \frac{H}{R}\times 2} S^∈RRW×RH×2 ,这里用的就是原始的坐标,没有进行归一化。
- L1 Loss
(4)Bounding Box的计算
( x − w 2 + o f f s e t ( x ) , y − h 2 + o f f s e t ( y ) x + w 2 + o f f s e t ( x ) , y + h 2 + o f f s e t ( y ) ) (x-\frac{w}2+offset(x),y-\frac{h}2+offset(y)\\x+\frac{w}2+offset(x),y+\frac{h}2+offset(y)) (x−2w+offset(x),y−2h+offset(y)x+2w+offset(x),y+2h+offset(y))
x,y为keypoint的预测值,w,h为size,offset(x)和offset(y)为偏移预测。
对于keypoint,文中选取的原则是大于等于与该peaks相连的8个neighbor中的前100个。实现方法为3x3的max pooling。
def _nms(heat, kernel=3):pad = (kernel - 1) // 2hmax = nn.functional.max_pool2d(heat, (kernel, kernel), stride=1, padding=pad)keep = (hmax == heat).float()return heat * keep
def _topk(scores, K=100):batch, cat, height, width = scores.size()topk_scores, topk_inds = torch.topk(scores.view(batch, cat, -1), K)topk_inds = topk_inds % (height * width)topk_ys = (topk_inds / width).int().float()topk_xs = (topk_inds % width).int().float()topk_score, topk_ind = torch.topk(topk_scores.view(batch, -1), K)topk_clses = (topk_ind / K).int()topk_inds = _gather_feat(topk_inds.view(batch, -1, 1), topk_ind).view(batch, K)topk_ys = _gather_feat(topk_ys.view(batch, -1, 1), topk_ind).view(batch, K)topk_xs = _gather_feat(topk_xs.view(batch, -1, 1), topk_ind).view(batch, K)return topk_score, topk_inds, topk_clses, topk_ys, topk_xs
2、3D目标检测
(1)depth:
- depth直接计算有困难,因此 d = 1 σ ( d ~ ) − 1 ∈ [ 0 , 1 ] R W R × H R × 1 d=\frac1{\sigma(\widetilde{d})}-1\in [0,1]R^{\frac{W}{R}\times\frac{H}{R}\times1} d=σ(d )1−1∈[0,1]RRW×RH×1.
- L1 Loss
(2)3D dimension
- d i m ∈ R W R × H R × 3 dim\in R^{\frac{W}{R}\times\frac{H}{R}\times3} dim∈RRW×RH×3
- L1 Loss
(3)orientation
- 用一个标量来回归比较困难。所以选取用8个标量。即 o r i e n t a t i o n ∈ R W R × H R × 8 orientation\in R^{\frac{W}{R}\times\frac{H}{R}\times8} orientation∈RRW×RH×8,一共分了两部分方向角,一个是 [ π 6 , − 7 π 6 ] [\frac{\pi}6,-\frac{7\pi}6] [6π,−67π],另一个是 [ − π 6 , 7 π 6 ] [-\frac{\pi}6,\frac{7\pi}6] [−6π,67π],每个方向角用4个标量来表示。其中2个标量用softmax做分类,另外两个做角度回归。
- L1 Loss
3、Human Pose部分,待补充
4、Network
(1)Backbone
detection、pose都用同一个backbone来提取特征。文中选取的Backbone有ResNet18、ResNet101、DLA34、Hourglass104。
其中ResNet18和DLA34采用来DCN(deformable convolution,可形变卷积),把每个上采样层的3x3的卷积用DCN来替换。
- ResNet:用了3个上采样来提高输出的分辨率,三个上采样层的输出通道分别为256,128,64,在每个上采样之前加了一个3x3的DCN。上采样的卷积核初始化为bilinear interpolation。
- DLA34:skip connection用DCN代替。同样,每个上采样层用3x3的DCN。
(2)Head
在backbone后,接3x3conv-Relu-1x1conv得到网络的输出。
其中3x3conv的channel,对于DLA34是256。
5、Training
- input:512x512
- output:128x128
- data augmentation:random flip and random scaling(from 0.6 to 1.3),cropping and color jitter。(对3D检测不用data augumentation)
- optimizer:Adam
- ResNet18/DLA34:batch_size=128,8 GPU, lr=5e-4,120epochs,learning rate dropped 10× at 90 and 120 epochs,
CenterNet做2D和3D目标检测相关推荐
- 3D目标检测综述:从数据集到2D和3D方法
本文经机器之心(almosthuman2014)授权转载,禁止二次转载. 作者:Yilin Wang, Jiayi Ye 机器之心编译 编辑:Panda 目标检测一直是计算机视觉领域中一大难题.近日, ...
- 使用Disentangling形式的损失函数回归2D和3D目标框
本文介绍一篇 ICCV 2019 的论文『 Disentangling Monocular 3D Object Detection』.详细信息如下: 论文链接:https://arxiv.org/ab ...
- OpenPCDet:点云3D目标检测开源库
本文转载自知乎,已获作者授权转载. 链接:https://zhuanlan.zhihu.com/p/152120636 随着自动驾驶与机器人技术的不断发展,基于点云表征的3D目标检测领域在近年来取得了 ...
- CVPR2020 | 阿里结构感知3D目标检测,KITTI BEV 排行榜第一!
本文转载自机器之心. 阿里巴巴达摩院在自动驾驶 3D 物体检测方面又有新成果发布.近日,计算机视觉顶会 CVPR 2020 接收论文结果发布,达摩院一篇名为<Structure Aware Si ...
- AAAI 2020 Oral | 华科提出TANet:提升点云3D目标检测的稳健性
点击我爱计算机视觉标星,更快获取CVML新技术 本文转自机器之心. 机器之心发布 机器之心编辑部 2020 年 2 月 7 日-2 月 12 日,AAAI 2020 将于美国纽约举办.不久之前,大会官 ...
- Multi-Modal 3D Object Detection in Autonomous Driving: a Survey(自动驾驶中的多模态3D目标检测综述)论文笔记
原文链接:https://arxiv.org/pdf/2106.12735.pdf 1.引言 1.1 单一传感器3D目标检测 基于图像的3D目标检测.低费用换来满意的性能.但存在遮挡. ...
- CVPR 2020 | 3D目标检测泛化问题研究
3D目标检测被广泛用于自动驾驶,但在德国收集的数据训练的检测器可以在美国的道路上表现的好吗?实验证明,这种情况会精度下降严重,作者进一步发现主要是不同场景中汽车的大小差异过大导致的,通过简单的尺度归一 ...
- 首个实时单目3D目标检测算法:RTM3D,代码将开源
o 点击我爱计算机视觉标星,更快获取CVML新技术 基于单目图像的3D目标检测是在输入RGB图像的情况下估计目标的3D包围框,在自动驾驶领域非常有用. 今天来自中科院沈阳自动化所等单位的学者公布论文提 ...
- Facebook 开源3D目标检测框架VoteNet,曾刷新两大数据集最高精度
点击我爱计算机视觉标星,更快获取CVML新技术 VoteNet为Facebook何恺明等人于今年4月在论文Deep Hough Voting for 3D Object Detection in Po ...
最新文章
- Git最新版从零开始详细教程(迅速搞定~)
- 50 jQuery拷贝对象与多库共存
- 一步一步学习Ultimus - 三、系统设置
- C#字符串与unicode互相转换
- c++ 管理员身份_CATIA的管理员模式和多版本环境变量设置
- IT项目管理总结:第九章 项目人力资源管理
- iOS之深入解析Xcode 13正式版发布的40个新特性
- iview tabs里面放入 i-switch slot的写法
- [Leedcode][JAVA][第67题][二进制求和][位运算][字符串]
- python以垂直方式输出hello world_python3提问:垂直输出Hello World,全部代码不超过2行....
- m1MacBook的TensorFlow虚拟环境---pytables的安装
- 简单的窗体抖动托管c++
- 【数据结构笔记41】散列表/哈希表的性能分享
- 尼得科向全新的伺服技术挑战
- 对话系统 | (4) 任务型对话系统基础
- 指纹识别技术的基本原理及过程
- 程序员的修炼之道 从小工到小工
- 计算机技术与软件专业技术资格 (水平) 考试 - 报考指南
- Linux网卡流量限制
- matlab信号时序图,怎么看时序图,电路原理图(转)
热门文章
- 柠檬浏览器 for linux,柠檬浏览器app官网下载_柠檬浏览器最新官网下载_18183软件下载...
- 网络和网路互联的设计
- 微信小程序---文本域输入带最大字数限制
- 2022-11-16 AndroidS 新建产品lunch
- ibatis java.util.Map作为parameterClass和resultClass(转)
- 国产 CAE 软件研发
- fuchsiaos和鸿蒙os区别,谷歌Fuchsia OS和华为鸿蒙系统(HarmonyOS)没有必然联系
- perl中正则匹配中文字符
- SpringBoot Actuator
- RNN attention model intution