[目标检测][PyTorch]边界框操作
阅读源码时发现torchvision
提供了许多边界框操作,包括
NMS
- 移除小边界框
- 修剪边界框坐标,保证边界框坐标位于图像内
- 计算边界框面积
IoU
计算
在线文档:torchvision.ops
源码地址:torchvision/ops/boxes.py
当前torchvision
版本:0.6.0a0+82fd1c8
NMS
之前实现了NumPy
版本的NMS - [目标检测]Non-Maximum Suppression。现在可以使用PyTorch
提供的实现
NMS
的目的在于去除冗余的检测框,PyTorch
提供了两个函数实现
1 | def nms(boxes, scores, iou_threshold): |
函数nms
适用于单类别的NMS
操作;而函数batched_nms
适用于多类别的NMS
操作,其能够实现各类别移除各自冗余的检测框。实现步骤如下:
- 从检测框中寻找最大的坐标
- 利用最大坐标值对各类别检测框添加一个偏移,从而保证各个类别的检测框相互分离
- 执行
nms
函数
移除小边界框
移除边长度小于阈值的检测框
1 | def remove_small_boxes(boxes, min_size): |
修剪边界框坐标,保证边界框坐标位于图像内
这一操作适用于图像处理阶段,对图像执行随机裁剪时,需要同时裁剪中心位于裁剪图像内的边界框坐标
1 | def clip_boxes_to_image(boxes, size): |
计算边界框面积
适用在IoU
计算
1 | def box_area(boxes): |
IoU计算
之前实现了Numpy
和PyTorch
的IoU
计算:
现在PyTorch
内置了IoU
的计算
1 | # implementation from https://github.com/kuangliu/torchcv/blob/master/torchcv/utils/box.py |
测试如下:
1 | import numpy as np |