如何计算 PyTorch 中一组边界框的面积?
torchvision.io包提供了执行不同 IO 操作的函数。为了计算一个边界框或一组边界框的面积,torchvision.io包提供了该box_area()函数。该函数将边界框作为输入参数,并返回每个框的面积。
边界框应该是大小为[N,4]的火炬张量,其中N是要计算区域的边界框的数量。每个边界框由坐标(xmin, ymin, xmax, ymax)指定。换句话说 - 0 ≤ xmin < xmax,并且0 ≤ ymin < ymax。计算的区域是大小为 [N] 的 Torch 张量。
为了计算单个边界框的面积,我们将边界框张量解压缩以使其成为二维张量。
语法
torchvision.ops.box_area(boxes)
参数
box -包含边界框的[N,4]火炬张量。每个边界框都应采用(xmin, ymin, xmax, ymax)格式,其中0 ≤ xmin < xmax,并且0 ≤ ymin < ymax。
输出结果
它返回一个大小为[N]的火炬张量,其中包含边界框的区域。
脚步
导入所需的库。在以下所有示例中,所需的 Python 库是torch和torchvision。确保您已经安装了它们。
import torchimport torchvision
fromtorchvision.ioimport read_image
fromtorchvision.utilsimport draw_bounding_boxes
fromtorchvision.opsimport box_area
image_read()使用函数读取 JPEG 或 PNG 图像。使用图像类型( .jpg或.png)指定完整的图像路径。该函数的输出是一个大小为 [ image_channels, image_height, image_width ] 的火炬张量。
img = read_image('dog.png')
将边界框定义为火炬张量。边界框张量应该是dtype torch.int。如果只计算一个边界框的面积,则取消压缩张量。
bbox = (310, 200, 485, 430)# convert the bbox to torch tensor
bbox = torch.tensor(bbox, dtype=torch.int)
使用 计算区域边界框box_area()。或者,将带有边界框的图像分配给一个新变量。
area = box_area(bbox)
draw_bounding_boxes()使用该函数在图像上绘制边界框。我们将计算出的区域作为标签放在边界框内。
labels= [f"bbox area = {area.item()}"]img=draw_bounding_boxes(img, bbox, labels= labels, width=3,colors=(255,255,0))
将图像张量转换为 PIL 图像并显示。
img = torchvision.transforms.ToPILImage()(img)img.show()
输入图像
我们将在以下示例中使用这些图像作为输入文件。
示例 1
在下面的 Python 程序中,我们计算单个边界框的面积,并将该面积作为标签放在图像上并显示图像。
# Import the required libraries输出结果import torch
import torchvision
fromtorchvision.ioimport read_image
fromtorchvision.utilsimport draw_bounding_boxes
fromtorchvision.opsimport box_area
# read the input image
img = read_image('dog.png')
# bounding box in (xmin, ymin, xmax, ymax) format
# top-left point=(xmin, ymin), bottom-right point = (xmax, ymax)bbox = (310, 200, 485, 430)
# convert the bbox to torch tensor
bbox = torch.tensor(bbox, dtype=torch.int)
print(bbox)
print(bbox.size())
# unsqueeze the bbox to make it 2D
bbox = bbox.unsqueeze(0)
print(bbox.size())
# Compute the bounding box area
area = box_area(bbox)
print("BBOX区域:", area)
labels= [f"bbox area = {area.item()}"]
img=draw_bounding_boxes(img, bbox, labels= labels, width=3,colors=(255,255,0))
# b=a.permute(1,2,0)
# plt.imshow(b)
# plt.show()
img = torchvision.transforms.ToPILImage()(img)
img.show()
tensor([310, 200, 485, 430], dtype=torch.int32)torch.Size([4])
torch.Size([1, 4])
BBOX区域: tensor([40250], dtype=torch.int32)
示例 2
在下面的 Python 程序中,我们计算一组两个边界框的面积,并将这些区域作为标签放在图像上并显示图像。
import torch输出结果from PIL import Image
import torchvision
fromtorchvision.ioimport read_image
fromtorchvision.utilsimport draw_bounding_boxes
fromtorchvision.opsimport box_area
img = read_image('catndog.png')
# bounding box in (xmin, ymin, xmax, ymax) format
bbox1 = [30, 45, 330, 450]
bbox2 = [320, 150, 690, 460]
bbox = [bbox1, bbox2]
bbox = torch.tensor(bbox, dtype=torch.int)
print(bbox)
print(bbox.size())
area = box_area(bbox)
labels = [f"bbox area ={a}" for a in area]
print(labels)
img=draw_bounding_boxes(img, bbox, labels = labels, width=3,colors=[(255,0,0),(0,255,0)])
img = torchvision.transforms.ToPILImage()(img)
img.show()
tensor([[ 30, 45, 330, 450],[320, 150, 690, 460]], dtype=torch.int32)
torch.Size([2, 4])
['bbox area =121500', 'bbox area =114700']
以上是 如何计算 PyTorch 中一组边界框的面积? 的全部内容, 来源链接: utcz.com/z/363471.html