CenterNet:Objects as Points

CenterNet论文链接

一.背景

1.anchor-base缺点         

(1).anchor的设置对结果影响很大,不同项目这些超参都需要根据经验来确定,难度较大.

(2).anchor太过密集,其中很多是负样本,引入了不平衡.

(3).anchor的计算涉及IOU增加计算复杂度.

2.应用场景

(1).目标检测

(2).3D定位

(3).人体姿态估计

二.网络介绍

输出分支主要由三部分组成

(1)heatmap,大小为(W/4,H/4,C),输出不同类别的物体中心点

(2)offset,大小为(W/4,H/4,2)输出中心点偏移

(3)Height&Weight大小为(W/4,H/4,2),输出中心点检测框的宽高

1.思想

通过预测出目标的heatmap,找出heatmap的峰值就是目标的中心点.

heatmap高斯核半径制作参考这篇文章,和这篇文章。

代码:


import numpy as np
np.set_printoptions(suppress=True)#设置小数显示def gaussian_radius(det_size, min_overlap=0.7):box_w, box_h = det_sizea1 = 1b1 = (box_w + box_h)c1 = box_w * box_h * (1 - min_overlap) / (1 + min_overlap)sq1 = np.sqrt(b1 ** 2 - 4 * a1 * c1)r1 = (b1 + sq1) /2# (2*a1) # (2*a1)a2 = 4b2 = 2 * (box_w + box_h)c2 = (1 - min_overlap) * box_w * box_hsq2 = np.sqrt(b2 ** 2 - 4 * a2 * c2)r2 = (b2 + sq2) / 2# (2*a2)  # (2*a2)a3 = 4 * min_overlapb3 = -2 * min_overlap * (box_w + box_h)c3 = (min_overlap - 1) * box_w * box_hsq3 = np.sqrt(b3 ** 2 - 4 * a3 * c3)print('==b3 + sq3:', b3 + sq3)print('====a3:===', a3)r3 = (b3 + sq3) / 2#(2*a3)  # (2*a3)print('==r1, r2, r3:', r1, r2, r3)return min(r1, r2, r3)gt_numpy = np.zeros((512 // 4, 512 // 4, 3)).astype(np.float32)
box_w_s, box_h_s = 100 / 4, 80 / 4
r = gaussian_radius([box_w_s, box_h_s])
sigma_w = sigma_h = r / 3
# create Gauss heatmap
print('===sigma_w:', sigma_w)
ws = 512 / 4
hs = 512 / 4
grid_x = 64
grid_y = 64
gt_cls = 0
gt_numpy[grid_y, grid_x, gt_cls] = 1
for i in range(grid_x - 3 * int(sigma_w), grid_x + 3 * int(sigma_w) + 1):for j in range(grid_y - 3 * int(sigma_h), grid_y + 3 * int(sigma_h) + 1):if i < ws and j < hs:v = np.exp(- (i - grid_x) ** 2 / (2 * sigma_w ** 2) - (j - grid_y) ** 2 / (2 * sigma_h ** 2))pre_v = gt_numpy[j, i, int(gt_cls)]gt_numpy[j, i, 0] = max(v, pre_v)
print('===gt_numpy.shape:', gt_numpy.shape)middle_gt = gt_numpy[(64 - 3 * int(sigma_h)):(64 + 3*int(sigma_h) + 1),(64 - 3 * int(sigma_w)):(64 + 3 * int(sigma_w)+1), 0]
print(type(middle_gt))
print(np.around(middle_gt, 2))
out_img = gt_numpy[..., 0]*255.
cv2.imwrite('./out_img.jpg', out_img)
import cv2
warped_color = cv2.applyColorMap(out_img.astype(np.uint8), cv2.COLORMAP_JET)
cv2.imwrite('./out_img_color.jpg', warped_color)

   

2.与anchor based区别

(1).不需要阈值区分前后景;

(2).一个目标只需要一个heatmap,避免使用nms,heatmap的峰值就是目标中心点;

(3).下采样步长小只是4,减少了需要多个重复框.

3.heatmap和相应focal loss(分类)

heatmap就是目标的热力图,通道数就是类别数,loss采用focal loss,其按照高斯分布来进行分配,因为除了中心点的heatmap其实没必要完全贡献loss.

Ŷxyc:每个通道预测的heatmap,(x,y)处的值.

Yxyc:每个通道的gt heatmap,(x,y)处的值,服从高斯分布.

α,β: 超参用来控制loss.

N:图片所有的关键点.

pytorch代码示例:


import torchdef modified_focal_loss(pred, gt, alpha, beta):"""focal loss copied from CenterNet, modified version focal losschange log: numeric stable version implementation"""pos_inds = gt.eq(1).float()neg_inds = gt.lt(1).float()neg_weights = torch.pow(1 - gt, beta)# clamp min value is set to 1e-12 to maintain the numerical stabilitypred = torch.clamp(pred, 1e-12)pos_loss = torch.log(pred) * torch.pow(1 - pred, alpha) * pos_indsneg_loss = torch.log(1 - pred) * torch.pow(pred, alpha) * neg_weights * neg_indsnum_pos = pos_inds.float().sum()pos_loss = pos_loss.sum()neg_loss = neg_loss.sum()print('===num_pos:', num_pos)if num_pos == 0:loss = -neg_losselse:loss = -(pos_loss + neg_loss) / num_pos# print(f'num_pos {num_pos},pos_loss {pos_loss},neg_loss {neg_loss}')return lossif __name__ == '__main__':b, c, h, w = 4, 10, 224, 224pred = torch.rand(b, c, h, w)b, c, h, w = 4, 10, 224, 224gt = torch.clamp(torch.rand(b, c, h, w)+0.1, 0., 1.0)print('==pred.shape:', pred.shape)print('==gt.shape:', gt.shape)loss = modified_focal_loss(pred, gt, alpha=2, beta=4)print('=loss:', loss)

4.offset loss(L1)

用offests来矫正下采样造成的检测框偏移,从而让检测框更加紧凑.

   p是key point,R是下采样倍数,这里从预测图的heatmap恢复到原图就会有精度损失,严重影响小物体,所以就通过一个网络分支去学习这种误差.

5.回归loss(L1)

采用L1 loss回归宽高

6.总loss

loss由三部分组成:heatmap分类loss,回归宽高loss,回归偏移loss.

输出类别数+4(宽高,中心点偏移).

7.推理

在heatmap上通过8近邻取得前100个峰值,在对8近邻的点3*3 maxpooling获得中心点,在与预测的宽高,偏移量组合就得出检测框.

:预测的中心点

:预测的中心点偏移量

:预测宽高

 

三.实验结果

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

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

相关文章

初步认识迭代服务器和并发服务器

http://www.cnblogs.com/wolflion/archive/2011/07/13/2539138.html 迭代服务器比较原始&#xff0c;它的原型可以描述成&#xff1a; while(1){new_fd 服务器accept客户端的连接(new_fd accept(listenfd, XX, XX))逻辑处理在这个new_fd上给客户端发送消息关闭new_fd}也就是说…

美国正在衰落的24个行业:“猝不及防”还是“温水煮青蛙”?

来源&#xff1a;资本实验室摘要&#xff1a;技术发展一日千里&#xff0c;外部环境日新月异。在这个变化无处不在的世界&#xff0c;许多行业都在不可避免地经历着或是猝不及防&#xff0c;或是“温水煮青蛙”般的冲击。近期&#xff0c;美国财经网站24/7 Wallst根据过去十年的…

距离与相似度计算

一.余弦相似度 加速计算参考这篇文章 from math import *def square_rooted(x):return round(sqrt(sum([a*a for a in x])), 3)def cosine_similarity(x,y):numerator sum(a*b for a, b in zip(x,y))denominator square_rooted(x)*square_rooted(y)return round(numerator/f…

程序的跳转模式

程序内部有自己的一套跳转语法&#xff0c;如果想跳转&#xff0c;需要参考已有代码的实现方式。 先说一下具体情况&#xff1a; 这几天的心情很不平静&#xff0c;老是感觉自己还在高考的样子&#xff0c;想着是怎么拿下这个考试关。现在明白问题所在了&#xff0c;我必须考虑…

5G 产业链重要细分投资领域

来源&#xff1a;乐晴智库精选▌2019年全球电子产业将保持增长ICInsights预计2018年全球电子产品销售额16220亿美元&#xff0c;同比增长5.1%&#xff0c;2019年将达到16800亿美元&#xff0c;同比增长3.5%&#xff0c;2017~2021年CAGR4.6%。预计2019年通信市场销售额5350亿美元…

CPNDet:Corner Proposal Network for Anchor-free, Two-stage Object Detection

CPNDet论文链接 一.背景 anchor-based方法将大量框密集分布在feature map上&#xff0c;在推理时&#xff0c;由于预设的anchor与目标差异大&#xff0c;召回率会偏低。而anchor-free不受anchor大小限制&#xff0c;在任意形状上会更加灵活&#xff0c;但是像CornerNet这种,先…

Unix/Linux环境C编程入门教程(3) Oracle Linux 环境搭建

Unix/Linux版本众多&#xff0c;我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习。2010年9月&#xff0c;Oracle Enterprise Linux发布新版内核——Unbreakable Enterprise Kernel&#xff0c;专门针对Oracle软件与硬件进行优化&#xff0c;最重要的是Oracl…

最权威北美放射学会年会回顾:AI的进化与下一个前沿

翻译 : 高璇摘要&#xff1a;人工智能在成像领域的前景必须为终端用户带来时间节省、资源优化、精度增益和感知增益&#xff08;接近精准健康方法&#xff09;。前两个是指生产力方面&#xff0c;而后两个是指质量方面。人工智能在成像领域的脚步不会停留在这里——它已经帮助重…

Registry注册机制

前言:不管是Detectron还是mmdetection&#xff0c;都有用到这个register机制&#xff0c;特意去弄明白&#xff0c;记录一下。 首先看Registry代码: # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reservedfrom typing import Dict, Optional, Iterable, T…

Android Volley 库通过网络获取 JSON 数据

本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpClient 以及 HttpConnection 这两个包。前者是 Apache 开源库&#xff0c;后者是 Android 自带 API。企业级应用&#xff0…

python刷题+leetcode(第二部分)

100. 简化路径 思路:栈 class Solution:def simplifyPath(self, path: str) -> str:stack []for path_ in path.split(/):if path_ not in [, ., ..]:stack.append(path_)elif path_ .. and stack:stack.pop()return / /.join(stack) c实现: class Solution { public:s…

这一年,信息技术领域上演的“断舍离”

来源&#xff1a;中国科学报摘要&#xff1a;刚刚踏入2018年&#xff0c;信息技术产业领域就被“熔断”“幽灵”这两个几乎波及全行业的芯片漏洞所笼罩。孰料&#xff0c;该领域接下来上演的剧情——从美国断然发布对中兴通讯的出售禁令&#xff0c;到Uber无人驾驶汽车撞人致死…

20140625 程序 进程 线程 物理存储器

1、程序 .exe就是一个程序 2、进程 运行一个.exe的可执行程序后&#xff0c;就启动了该程序的一个实例&#xff0c;我们称之为“进程”。是资源申请&#xff0c;调度和独立运行的单位&#xff0c;使用系统的运行资源 3、线程 线程有线程内核对象和线程栈组成。 线程内核对象&am…

利用JasperReport+iReport进行Web报表开发

用JasperReportiReport进行Web报表开发 序言在非常多实际的项目里&#xff0c;报表都是当中十分重要的组成部分&#xff0c;比如把查询结果以报表的形式呈现出来。这里所提到的报表可不是简单的二维表&#xff0c;而是拥有复杂表头的、多维的、能够在执行期从数据库中自己主动读…

AN IMAGE IS WORTH 16X16 WORDS :TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE(VIT)

最近看transformer用于CV比较热门&#xff0c;特意去进行了解&#xff0c;这里用分类的一篇文章进行讲解。 NLP中的transformer和代码讲解参考我另一篇文章。 论文链接&#xff1a;AN IMAGE IS WORTH 16X16 WORDS :TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 一.思想 其…

人工智能领域的未来和挑战

来源&#xff1a;创新研究摘要&#xff1a;人工智能是一门综合了计算机科学、生理学、哲学的交叉学科。凡是使用机器代替人类实现认知、识别、分析、决策等功能&#xff0c;均可认为使用了人工智能技术。作为一种基础技术&#xff0c;人工智能在很多行业都有广泛应用。五道集团…

javascript 基础知识1 数据类型

首先javascript是一种具有面向对象能力的&#xff0c;解释型程序设计语言。 js对大小写敏感&#xff0c;一定要采取一致的字符大小写形式&#xff0c;在js中的结束分号&#xff08;&#xff1b;&#xff09;是可选的&#xff0c;为了避免JS语句错误&#xff0c;我们还是要注意添…

2018年科技公司融资纪录十大排行榜!中国四家公司上榜

来源&#xff1a;网易智能摘要&#xff1a;国外媒体近日盘点了2018年全球融资最多的十家机器人技术公司&#xff0c;中国有四家公司上榜&#xff0c;包括商汤科技、优必选、京东和依图科技。获得融资并不能保证取得成功&#xff0c;这是机器人行业在2018年学到的艰难的一课。今…

tensorrt基础知识+torch版lenet转c++ trt

官网文档 API文档 Docker镜像 自定义Plugin仓库 0.安装 1.安装tensorrt 从官网下载.deb包,要注意的是cuda版本 sudo dpkg -i nv-tensorrt-repo-ubuntu1604-cuda10.0-trt7.0.0.11-ga-20191216_1-1_amd64.deb sudo apt update sudo apt install tensorrt Engine plan 的兼…

《自然》预测2019年重大科学事件

携带传感器的象海豹将帮助研究人员收集海洋数据&#xff0c;这是研究南极洲思韦茨冰川任务的一部分。来源&#xff1a;科技日报新年的钟声即将响起&#xff0c;在此辞旧迎新之际&#xff0c;除了埋头总结过去一年的得失&#xff0c;回味一下往事的喜乐&#xff0c;也应该抬头展…