¿Cómo calcular el área de un conjunto de cuadros delimitadores en PyTorch?

En este artículo, veremos cómo calcular el área de un conjunto de cuadros delimitadores en PyTorch. Podemos calcular el área de un conjunto de cuadros delimitadores utilizando el método box_area() del módulo torchvision.io.

método box_area()

Este método acepta cuadros delimitadores como entrada y devuelve el área de los cuadros delimitadores dados. Los cuadros delimitadores de entrada deben ser tensores de antorcha con tamaño [N,4], donde N representa el número de cuadros delimitadores para los que se calculará el área. Se espera que los cuadros delimitadores tengan el formato (x_min, y_min, x_max, y_max), donde 0 ≤ x_min < x_max, y 0 ≤ y_min < y_max. Antes de calcular el área de un cuadro delimitador, usamos Unsequeeze para convertir este tensor de cuadro delimitador en un tensor 2D.

Sintaxis: torchvision.ops.box_area(cajas)

Parámetro:

  • cuadros: este método acepta cuadros delimitadores como entrada.

Retorno: Este método regresa el área para cada caja.

Implementación paso a paso

Paso 1: Importe las bibliotecas requeridas.

Python

import torch
import torchvision
from torchvision.io import read_image
from torchvision.utils import draw_bounding_boxes
from torchvision.ops import box_area

Paso 2: Lea la imagen de entrada de su computadora.

Python

img = read_image('img.png')

Paso 3: define un cuadro delimitador y convierte este cuadro en un tensor de antorcha.

Python

b_box = [80, 70, 500, 200]
b_box = torch.tensor(b_box, dtype=torch.int)

Paso 4: abre el cuadro delimitador dado para convertirlo en un tensor 2D. Ejecute este paso solo si queremos calcular el área de un solo cuadro delimitador; de lo contrario, omita este paso.

Python

b_box = b_box.unsqueeze(0)

Paso 5: Calcule el área del cuadro delimitador definida anteriormente y almacene esta área calculada en una variable para su uso posterior.

Python

area = box_area(b_box)

Paso 6: configure esta área calculada en la etiqueta.

Python

label = [f"b_box area = {area.item()}"]

Paso 7: Dibuje un cuadro delimitador en la imagen y coloque la etiqueta definida anteriormente en el cuadro.

Python

img = draw_bounding_boxes(img, b_box, labels=label,
                          width=4, colors=(255, 0, 0))

Paso 8: transforma esta imagen en una imagen PIL

Python

img = torchvision.transforms.ToPILImage()(img)

Paso 9: Muestre la imagen de salida.

Python

img.show()

La siguiente imagen se utiliza para la demostración:

 

Ejemplo 1:

en este ejemplo, estamos calculando el área de un solo cuadro delimitador y configuramos esta área calculada como una etiqueta.

Python

# Import the required libraries
import torch
import torchvision
from torchvision.io import read_image
from torchvision.utils import draw_bounding_boxes
from torchvision.ops import box_area
  
# read input image from your computer
img = read_image('img.png')
  
# bounding box are xmin, ymin, xmax, ymax
b_box = [80, 70, 500, 200]
  
# convert the bounding box to torch tensor
b_box = torch.tensor(b_box, dtype=torch.int)
  
# unsqueeze the given bounding box to make
# it 2D tensor
b_box = b_box.unsqueeze(0)
  
# Compute the bounding box area
area = box_area(b_box)
  
# set this computed area on label
label = [f"b_box area = {area.item()}"]
  
# draw the above define bounding box on image
# Set the above define label on image
img = draw_bounding_boxes(img, b_box, labels=label,
                          width=4, colors=(255, 0, 0))
  
  
# transform this image to PIL image
img = torchvision.transforms.ToPILImage()(img)
  
# display result
img.show()

Producción:

 

Ejemplo 2:

en este ejemplo, estamos calculando el área de varios cuadros delimitadores y configuramos esta área calculada como una etiqueta para cada cuadro.

Python

# Import the required libraries
import torch
from PIL import Image
import torchvision
from torchvision.io import read_image
from torchvision.utils import draw_bounding_boxes
from torchvision.ops import box_area
  
# read input image from your computer
img = read_image('img.png')
  
# create boxes
b_box1 = [80, 70, 500, 200]
b_box2 = [80, 230, 500, 300]
b_box3 = [580, 70, 720, 300]
b_box = [b_box1, b_box2,b_box3]
  
# convert the bounding box to torch tensor
b_box = torch.tensor(b_box, dtype=torch.int)
  
# Compute the bounding box area
area = box_area(b_box)
  
# set this computed area on label
labels = [f"b_box area ={n}" for n in area]
  
# draw the above define bounding boxes on image
img=draw_bounding_boxes(img, b_box, labels = labels, width=4,
                        colors=["orange", "white","red"])
  
# transform this image to PIL image
img = torchvision.transforms.ToPILImage()(img)
  
# display result
img.show()

Producción:

 

Publicación traducida automáticamente

Artículo escrito por mukulsomukesh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *