前言

在复现DPR论文过程中,遇到了计算IOU和NMS的问题。传统目标检测大多基于anchor,给出的预测也是矩形框,所以需要进行相应的修改,以套用到不规则四边形回归框上。

注1:编者水平有限,如有谬误,欢迎指正。若要转载,请注明出处,谢谢。
注2:实现参考了TextBoxes++部分源码和SSD pytorch部分源码,并非完全原创。
联系方式:
邮箱:yue_zhan@yahoo.com
QQ:1156356625


  • 计算IOU
import shapely
from shapely.geometry import Polygon,MultiPoint  #多边形def get_iou(a,b):''':param a: box a [x0,y0,x1,y1,x2,y2,x3,y3]:param b: box b [x0,y0,x1,y1,x2,y2,x3,y3]:return: iou of bbox a and bbox b'''a = a.reshape(4, 2)poly1 = Polygon(a).convex_hullb = b.reshape(4, 2)poly2 = Polygon(b).convex_hullif not poly1.intersects(poly2):  # 如果两四边形不相交iou = 0else:try:inter_area = poly1.intersection(poly2).area  # 相交面积union_area = poly1.area + poly2.area - inter_areaif union_area == 0:iou = 0else:iou = inter_area / union_areaexcept shapely.geos.TopologicalError:print('shapely.geos.TopologicalError occured, iou set to 0')iou = 0return iou

这里基本用的是TextBoxes++的实现源码,去掉了一些冗余。

  • 计算NMS
def NMS_quadrangle(bboxes, overlap=0.5, top_k=200):'''An implement of quadrangle NMS:param bboxes: top k bboxes(sorted with confidence):param overlap: IOU threshold:return:bboxes after NMS'''# bboxes = bboxes[:-1].transpose(0,1)top_k = min(bboxes.size()[0], top_k)keep = torch.zeros(top_k)count = 0idx = torch.Tensor(range(top_k)[::-1]).int()if not bboxes.numel():return bboxeswhile idx.numel() > 0:a = idx[-1]keep[count] = acount += 1if not idx.numel():breakidx = idx[:-1]iou = torch.Tensor([get_iou(bboxes[a],bboxes[b]) for b in idx])idx = idx[iou.le(overlap)]bboxes =bboxes.index_select(dim=0,index=keep[:count].long())return torch.where(bboxes < 0,torch.full_like(bboxes,0),bboxes)

基于anchor的NMS比较好写成tensor操作,但是不规则四边形,暂时没有想到好的处理方式。这部分代码只在inference过程测试过,速度要求不高,如果需要并入训练过程可能需要考虑计算iou部分如何做成矩阵运算。

不规则四边形回归框计算IOU与NMS相关推荐

  1. 两个不规则四边形IOU计算方法

    1 引言 我们常用的目标检测为矩形框检测,但是我们有时检测出来的框为不规则的四边形,如下图为常见的遥感图像,此时我们在使用矩形框计算IOU的方式就不再适用.我们可以将问题进行抽象,有木有计算两个不规则 ...

  2. 点在不规则图形内算法python_目标检测算法中规则矩形和不规则四边形IOU的Python实现...

    交并比(Intersection-over-Union,IoU),目标检测中使用的一个概念,我们在进行目标检测算法测试时,重要的指标,是产生的预测框(candidate bound)与标记框(grou ...

  3. RCNN系列论文学习:RCNN、FastRCNN、FaterRCNN、MaskRCNN(包含IOU、NMS介绍)

    最近在看图像分割方面的东西,发现MaskRCNN里面有好多东西不是很理解,于是就打算简单梳理一下.找了很多博客,还有视频.这里简单记录一下. RCNN RCNN的英文是 Region based CN ...

  4. 【目标检测】概念理解:region proposal、bounding box、anchor box、ground truth、IoU、NMS、RoI Pooling

    最近刚接触图像识别,理解一些概念十分困难,尤其是动不动就冒出个看不懂的英语,让人抓狂.查了不少资料后做一个总结并加上一些自己的理解,理解若有误,烦请大家指出,相互学习. 本文主要对region pro ...

  5. 【论文解读】Confluence:物体检测中不依赖IoU的NMS替代算法论文解析

    导读 基于IoU的NMS实际上是一种贪心算法,这种方法得到的结果往往不是最优的,Confluence给出了另一种选择. 论文地址:https://arxiv.org/abs/2012.00257 摘要 ...

  6. python3实现cv2+numpy裁剪不规则四边形图片

    python3实现cv2+numpy裁剪不规则四边形图片 功能 效果图![在这里插入图片描述](https://img-blog.csdnimg.cn/a3dd447909db43489050b3b8 ...

  7. 不规则四边形填充平面 - Townscaper 网格生成算法复现

    不规则四边形填充平面 - Townscaper 网格生成算法复现 源码 github.com/FutaAlice/OrganicQuadGrid 前言 Townscaper,一款关于城镇建造的游戏. ...

  8. 计算几何@_@不规则四边形求法

    一.托勒密定理(感觉有联系) 凸四边形 托勒密定理指出凸四边形两组对边乘积之和不小于两条对角线的乘积,等号当且仅当四边形为圆内接四边形,或退 化为直线取得(这时也称为欧拉定理).狭义的托勒密定理也可以 ...

  9. 计算不规则四边形的面积+代码实现

    求两点间距离 /***** 求两点间距离*****/ float getDistance(CvPoint pointO, CvPoint pointA) {float distance;distanc ...

最新文章

  1. 网上的说TB6560存在的问题
  2. 5GS 协议栈 — GTPv1-U 协议
  3. c语言中结构体的用法
  4. MarkdownPad2基础语法
  5. 建立TCP连接时的三次握手与四次挥手问题
  6. jQuery Ajax全解析
  7. Java静态代理、动态代理与CGLib代理
  8. SSL certificate problem: unable to get local issuer certificate 的解决方法
  9. 黑盒攻击的分类_「图像分类」图像分类中的对抗攻击是怎么回事?
  10. LINUX SHELL的神器,sed
  11. java中的.运算符_java中的各种运算符
  12. 1000道Python题库系列分享六(40道)
  13. 2022广东省安全员B证第四批(项目负责人)考试题模拟考试题库及答案
  14. C语言学习笔记(3)函数
  15. MATLAB下机器人可视化与控制---simulink篇(1)
  16. 解决mmdetection训练过程loss为nan的问题
  17. yum下载速度慢解决,提速飞起来
  18. 管理后台 - 轮播图片管理功能
  19. 备份 mysql 数据库
  20. 设置IE主页的几种方法

热门文章

  1. 使用Jsoup实现简单的页面信息爬取
  2. 智能电子中的自动化控制中的工业自动化
  3. 华清远见-重庆中心-JAVA高级阶段技术总结/知识点梳理/面试题解析
  4. Minecraft 正版
  5. CC2530学习(三)定时器定时(轮询)
  6. 五节北方计算机学校,北方计算机在全国排名
  7. C#之读取数据:DataReader对象
  8. c语言指针加括号,C语言数组,指针和方括号赋值和输出产生不同结果?
  9. 入职中国银行内审部门
  10. TCP/IP网络编程——理解网络编程和套接字编程