【代码】CenterNet使用(续)(对五六七部分详解)(六)

2023-11-22 15:30

本文主要是介绍【代码】CenterNet使用(续)(对五六七部分详解)(六),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接上面部分,对五六七部分进行详解,这篇介绍第六部分。

一、回顾

第六部分对得到得dets进行后处理:

      dets = self.post_process(dets, meta, scale)torch.cuda.synchronize()post_process_time = time.time()post_time += post_process_time - decode_timedetections.append(dets)

post_process在ctdet.py中出现:

  def post_process(self, dets, meta, scale=1):dets = dets.detach().cpu().numpy()dets = dets.reshape(1, -1, dets.shape[2])dets = ctdet_post_process(dets.copy(), [meta['c']], [meta['s']],meta['out_height'], meta['out_width'], self.opt.num_classes)for j in range(1, self.num_classes + 1):dets[0][j] = np.array(dets[0][j], dtype=np.float32).reshape(-1, 5)dets[0][j][:, :4] /= scalereturn dets[0]

使用ctdet_post_process进行后处理,

最后得到得dets是一个len=80的张量(列表?)

 其中每个元素是一个N * 5的ndarray。猜测是每个类别中的dets。detections是一个包含dets的列表。

二、详解

主要是ctdet_post_process部分

输入是这些:

ctdet_post_process来源于utils/post_process,代码和解释如下:

def ctdet_post_process(dets, c, s, h, w, num_classes):# dets: batch x max_dets x dim# return 1-based class det dictret = []# 对于每个batchfor i in range(dets.shape[0]):top_preds = {}# 输入dets的左上角,中心点,最长边,(128, 128):heatmap的长宽# 得到变换后的dets,怎么变换的还未知dets[i, :, :2] = transform_preds(dets[i, :, 0:2], c[i], s[i], (w, h))# 输入dets的右上角,。。。同理dets[i, :, 2:4] = transform_preds(dets[i, :, 2:4], c[i], s[i], (w, h))classes = dets[i, :, -1]# 将第j个类的结果放到top_preds[j+1]中,top_preds是一个dictfor j in range(num_classes):inds = (classes == j)top_preds[j + 1] = np.concatenate([dets[i, inds, :4].astype(np.float32),dets[i, inds, 4:5].astype(np.float32)], axis=1).tolist()# 将一张图片的结果放到ret中ret.append(top_preds)return ret

 

 

这篇关于【代码】CenterNet使用(续)(对五六七部分详解)(六)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/411110

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(