目标检测paddlex后使用nms代码优化

2023-10-19 00:32

本文主要是介绍目标检测paddlex后使用nms代码优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在主流的python nms解决方案基础上改了两个bug,还改了输入让它适应paddlex的输出(当然也可以不改)。

paddlex目标检测模型部署后推理,结果是个大列表,里面包字典,字典长这样,bbox里面是[x,y,w,h]

{'category_id': 1,'category': 'face','bbox': [118.9930648803711,33.9634895324707,300.4325942993164,272.63801193237305],'score': 0.956941545009613}

以脸部和眼部的目标检测为例,先写几行让它适应主流的nms解决方案,把结构改为[x1,y1.x2,y2](这边写错变量名了,应该是[x,y,w,h],懒得改了)

import numpy as np
face_list = []
eye_list = []
for d in result:x1 = d['bbox'][0]y1 = d['bbox'][1]x2 = d['bbox'][2] y2 = d['bbox'][3]score = d['score']if d['category_id'] == 1:face_list.append([x1, y1, x2, y2, score])# face_list.append(d)elif d['category_id'] == 0:eye_list.append([x1, y1, x2, y2, score])# eye_list.append(d)face_array = np.array(face_list)
eye_array = np.array(eye_list)

改了bug1:当score最大的锚框出现在左上是少统计的bug。bug2:while有时无限循环,加个counter限制最大循环。

加了最小准确率的参数,有时候有用。返回结果改成了直接返回bbox和score,避免了index的改动问题。

def nms(dets, thresh,base_score):scores = dets[:,4]dets = np.delete(dets,scores<base_score,axis=0)x1 = dets[:,0]y1 = dets[:,1]# x1 = dets[:,2]# y1 = dets[:,3]x2 = dets[:,2] + dets[:,0]y2 = dets[:,3] + dets[:,1]areas = (y2-y1+1) * (x2-x1+1)# print(areas)keep = []# index = scores.argsort()[::-1]index = dets[:,4].argsort()[::-1]# print(dets.shape)counter = 0# while len(index) != 0:while len(index) >= 1:counter += 1if counter>10:print('so many times')breaki = index[0]       # every time the first is the biggst, and add it directlykeep.append(dets[i])# print(i)x11 = np.maximum(x1[i], x1[index[1:]])    # calculate the points of overlap y11 = np.maximum(y1[i], y1[index[1:]])x22 = np.minimum(x2[i], x2[index[1:]])y22 = np.minimum(y2[i], y2[index[1:]])w = abs(x22-x11+1)h = abs(y22-y11+1)overlaps = w*hious = overlaps / (areas[i]+areas[index[1:]] - overlaps)print(ious)idx = np.where(ious>=thresh)[0]idx = np.append(idx,0)index = np.delete(index,idx, axis=0) return keep
thresh = 0.7
keep = nms(eye_array,thresh=thresh,base_score=0.4)
keep

这篇关于目标检测paddlex后使用nms代码优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Tomcat的下载安装与使用教程

《Tomcat的下载安装与使用教程》本文介绍了Tomcat的下载、安装和使用方法,包括在本机和云服务器上部署Tomcat的过程,以及解决启动失败问题的方法... 目录Tomcat的下载安装与使用Tomcat的下载与安装Tomcat在本机运行使用Tomcat在php云服务器上的使用总结Tomcat的下载安装与

Python使用PIL库将PNG图片转换为ICO图标的示例代码

《Python使用PIL库将PNG图片转换为ICO图标的示例代码》在软件开发和网站设计中,ICO图标是一种常用的图像格式,特别适用于应用程序图标、网页收藏夹图标等场景,本文将介绍如何使用Python的... 目录引言准备工作代码解析实践操作结果展示结语引言在软件开发和网站设计中,ICO图标是一种常用的图像

使用Java发送邮件到QQ邮箱的完整指南

《使用Java发送邮件到QQ邮箱的完整指南》在现代软件开发中,邮件发送功能是一个常见的需求,无论是用户注册验证、密码重置,还是系统通知,邮件都是一种重要的通信方式,本文将详细介绍如何使用Java编写程... 目录引言1. 准备工作1.1 获取QQ邮箱的SMTP授权码1.2 添加JavaMail依赖2. 实现

MyBatis与其使用方法示例详解

《MyBatis与其使用方法示例详解》MyBatis是一个支持自定义SQL的持久层框架,通过XML文件实现SQL配置和数据映射,简化了JDBC代码的编写,本文给大家介绍MyBatis与其使用方法讲解,... 目录ORM缺优分析MyBATisMyBatis的工作流程MyBatis的基本使用环境准备MyBati

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

使用Python实现表格字段智能去重

《使用Python实现表格字段智能去重》在数据分析和处理过程中,数据清洗是一个至关重要的步骤,其中字段去重是一个常见且关键的任务,下面我们看看如何使用Python进行表格字段智能去重吧... 目录一、引言二、数据重复问题的常见场景与影响三、python在数据清洗中的优势四、基于Python的表格字段智能去重

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://

Java之并行流(Parallel Stream)使用详解

《Java之并行流(ParallelStream)使用详解》Java并行流(ParallelStream)通过多线程并行处理集合数据,利用Fork/Join框架加速计算,适用于大规模数据集和计算密集... 目录Java并行流(Parallel Stream)1. 核心概念与原理2. 创建并行流的方式3. 适

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、