Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Previsões de Caixas Delimitadoras | Detecção de Objetos
Fundamentos de Visão Computacional

bookPrevisões de Caixas Delimitadoras

Caixas delimitadoras são essenciais para a detecção de objetos, fornecendo uma maneira de marcar as localizações dos objetos. Modelos de detecção de objetos utilizam essas caixas para definir a posição e as dimensões dos objetos detectados dentro de uma imagem. Prever caixas delimitadoras com precisão é fundamental para garantir uma detecção de objetos confiável.

Como as CNNs Predizem as Coordenadas das Caixas Delimitadoras

Redes Neurais Convolucionais (CNNs) processam imagens por meio de camadas de convolução e pooling para extrair características. Para detecção de objetos, as CNNs geram mapas de características que representam diferentes partes de uma imagem. A previsão das caixas delimitadoras é normalmente realizada por:

  1. Extração de representações de características da imagem;
  2. Aplicação de uma função de regressão para prever as coordenadas das caixas delimitadoras;
  3. Classificação dos objetos detectados em cada caixa.

As previsões das caixas delimitadoras são representadas como valores numéricos correspondentes a:

  • (x, y): as coordenadas do centro da caixa;
  • (w, h): a largura e a altura da caixa.

Exemplo: Previsão de Caixas Delimitadoras Utilizando um Modelo Pré-treinado

Em vez de treinar uma CNN do zero, é possível utilizar um modelo pré-treinado como o Faster R-CNN do TensorFlow's model zoo para prever caixas delimitadoras em uma imagem. Abaixo está um exemplo de como carregar um modelo pré-treinado, carregar uma imagem, realizar previsões e visualizar as caixas delimitadoras com os rótulos das classes.

Importar bibliotecas

import cv2
import tensorflow as tf
import tensorflow_hub as hub
import matplotlib.pyplot as plt
from tensorflow.image import draw_bounding_boxes

Carregar modelo e imagem

# Load a pretrained Faster R-CNN model from TensorFlow Hub
model = hub.load("https://www.kaggle.com/models/tensorflow/faster-rcnn-resnet-v1/TensorFlow2/faster-rcnn-resnet101-v1-1024x1024/1")

# Load and preprocess the image
img_path = "../../../Documents/Codefinity/CV/Pictures/Section 4/object_detection/bikes_n_persons.png"
img = cv2.imread(img_path)  

Pré-processar a imagem

img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_resized = tf.image.resize(img, (1024, 1024))
# Convert to uint8
img_resized = tf.cast(img_resized, dtype=tf.uint8) 
# Convert to tensor 
img_tensor = tf.convert_to_tensor(img_resized)[tf.newaxis, ...]

Realizar predição e extrair características da caixa delimitadora

# Make predictions
output = model(img_tensor)

# Extract bounding box coordinates
num_detections = int(output['num_detections'][0])
bboxes = output['detection_boxes'][0][:num_detections].numpy()
class_names = output['detection_classes'][0][:num_detections].numpy().astype(int)
scores = output['detection_scores'][0][:num_detections].numpy()
# Example labels from COCO dataset
labels = {1: "Person", 2: "Bike"}

Desenhar caixas delimitadoras

# Draw bounding boxes with labels
for i in range(num_detections):
    # Confidence threshold
    if scores[i] > 0.5:  
        y1, x1, y2, x2 = bboxes[i]
        start_point = (int(x1 * img.shape[1]), int(y1 * img.shape[0]))
        end_point = (int(x2 * img.shape[1]), int(y2 * img.shape[0]))
        cv2.rectangle(img, start_point, end_point, (0, 255, 0), 2)
        # Get label or 'Unknown'
        label = labels.get(class_names[i], "Unknown")  
        cv2.putText(img, f"{label} ({scores[i]:.2f})", (start_point[0], start_point[1] - 10),
                    cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)

Visualizar

# Display image with bounding boxes and labels
plt.figure()
plt.imshow(img)
plt.axis("off")
plt.title("Object Detection with Bounding Boxes and Labels")
plt.show()

Resultado:

predict_bbox_example

Previsões de Caixa Delimitadora Baseadas em Regressão

Uma abordagem para prever caixas delimitadoras é a regressão direta, onde uma CNN retorna quatro valores numéricos que representam a posição e o tamanho da caixa. Modelos como o YOLO (You Only Look Once) utilizam essa técnica dividindo uma imagem em uma grade e atribuindo previsões de caixas delimitadoras às células da grade.

No entanto, a regressão direta possui limitações:

  • Dificuldade com objetos de tamanhos e proporções variadas;
  • Não lida de forma eficaz com objetos sobrepostos;
  • As caixas delimitadoras podem se deslocar de maneira imprevisível, causando inconsistências.
yolo

Abordagens Baseadas em Âncoras vs. Sem Âncoras

Métodos Baseados em Âncoras

Caixas âncora são caixas delimitadoras predefinidas com tamanhos e proporções fixas. Modelos como Faster R-CNN e SSD (Single Shot MultiBox Detector) utilizam caixas âncora para melhorar a precisão das previsões. O modelo prevê ajustes nas caixas âncora em vez de prever caixas delimitadoras do zero. Este método é eficaz para detectar objetos em diferentes escalas, mas aumenta a complexidade computacional.

Métodos Sem Âncoras

Métodos sem âncoras, como CenterNet e FCOS (Fully Convolutional One-Stage Object Detection), eliminam as caixas âncora predefinidas e, em vez disso, prevêem diretamente os centros dos objetos. Esses métodos oferecem:

  • Arquiteturas de modelo mais simples;
  • Velocidades de inferência mais rápidas;
  • Melhor generalização para tamanhos de objetos não vistos.
anchor_vs_anchorfree
Note
Nota

A (Baseado em âncoras): prevê deslocamentos (linhas verdes) a partir de âncoras predefinidas (azul) para coincidir com o valor real (vermelho). B (Livre de âncoras): estima diretamente os deslocamentos de um ponto até seus limites.

Predição de caixa delimitadora é um componente essencial da detecção de objetos, e diferentes abordagens equilibram precisão e eficiência. Enquanto métodos baseados em âncoras aumentam a precisão utilizando formas predefinidas, métodos livres de âncoras simplificam a detecção ao prever diretamente as localizações dos objetos. Compreender essas técnicas auxilia no desenvolvimento de sistemas de detecção de objetos mais eficazes para diversas aplicações do mundo real.

1. Quais informações uma previsão de caixa delimitadora normalmente contém?

2. Qual é a principal vantagem dos métodos baseados em âncoras na detecção de objetos?

3. Qual desafio a regressão direta enfrenta na previsão de caixas delimitadoras?

question mark

Quais informações uma previsão de caixa delimitadora normalmente contém?

Select the correct answer

question mark

Qual é a principal vantagem dos métodos baseados em âncoras na detecção de objetos?

Select the correct answer

question mark

Qual desafio a regressão direta enfrenta na previsão de caixas delimitadoras?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 3

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 3.45

bookPrevisões de Caixas Delimitadoras

Deslize para mostrar o menu

Caixas delimitadoras são essenciais para a detecção de objetos, fornecendo uma maneira de marcar as localizações dos objetos. Modelos de detecção de objetos utilizam essas caixas para definir a posição e as dimensões dos objetos detectados dentro de uma imagem. Prever caixas delimitadoras com precisão é fundamental para garantir uma detecção de objetos confiável.

Como as CNNs Predizem as Coordenadas das Caixas Delimitadoras

Redes Neurais Convolucionais (CNNs) processam imagens por meio de camadas de convolução e pooling para extrair características. Para detecção de objetos, as CNNs geram mapas de características que representam diferentes partes de uma imagem. A previsão das caixas delimitadoras é normalmente realizada por:

  1. Extração de representações de características da imagem;
  2. Aplicação de uma função de regressão para prever as coordenadas das caixas delimitadoras;
  3. Classificação dos objetos detectados em cada caixa.

As previsões das caixas delimitadoras são representadas como valores numéricos correspondentes a:

  • (x, y): as coordenadas do centro da caixa;
  • (w, h): a largura e a altura da caixa.

Exemplo: Previsão de Caixas Delimitadoras Utilizando um Modelo Pré-treinado

Em vez de treinar uma CNN do zero, é possível utilizar um modelo pré-treinado como o Faster R-CNN do TensorFlow's model zoo para prever caixas delimitadoras em uma imagem. Abaixo está um exemplo de como carregar um modelo pré-treinado, carregar uma imagem, realizar previsões e visualizar as caixas delimitadoras com os rótulos das classes.

Importar bibliotecas

import cv2
import tensorflow as tf
import tensorflow_hub as hub
import matplotlib.pyplot as plt
from tensorflow.image import draw_bounding_boxes

Carregar modelo e imagem

# Load a pretrained Faster R-CNN model from TensorFlow Hub
model = hub.load("https://www.kaggle.com/models/tensorflow/faster-rcnn-resnet-v1/TensorFlow2/faster-rcnn-resnet101-v1-1024x1024/1")

# Load and preprocess the image
img_path = "../../../Documents/Codefinity/CV/Pictures/Section 4/object_detection/bikes_n_persons.png"
img = cv2.imread(img_path)  

Pré-processar a imagem

img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_resized = tf.image.resize(img, (1024, 1024))
# Convert to uint8
img_resized = tf.cast(img_resized, dtype=tf.uint8) 
# Convert to tensor 
img_tensor = tf.convert_to_tensor(img_resized)[tf.newaxis, ...]

Realizar predição e extrair características da caixa delimitadora

# Make predictions
output = model(img_tensor)

# Extract bounding box coordinates
num_detections = int(output['num_detections'][0])
bboxes = output['detection_boxes'][0][:num_detections].numpy()
class_names = output['detection_classes'][0][:num_detections].numpy().astype(int)
scores = output['detection_scores'][0][:num_detections].numpy()
# Example labels from COCO dataset
labels = {1: "Person", 2: "Bike"}

Desenhar caixas delimitadoras

# Draw bounding boxes with labels
for i in range(num_detections):
    # Confidence threshold
    if scores[i] > 0.5:  
        y1, x1, y2, x2 = bboxes[i]
        start_point = (int(x1 * img.shape[1]), int(y1 * img.shape[0]))
        end_point = (int(x2 * img.shape[1]), int(y2 * img.shape[0]))
        cv2.rectangle(img, start_point, end_point, (0, 255, 0), 2)
        # Get label or 'Unknown'
        label = labels.get(class_names[i], "Unknown")  
        cv2.putText(img, f"{label} ({scores[i]:.2f})", (start_point[0], start_point[1] - 10),
                    cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)

Visualizar

# Display image with bounding boxes and labels
plt.figure()
plt.imshow(img)
plt.axis("off")
plt.title("Object Detection with Bounding Boxes and Labels")
plt.show()

Resultado:

predict_bbox_example

Previsões de Caixa Delimitadora Baseadas em Regressão

Uma abordagem para prever caixas delimitadoras é a regressão direta, onde uma CNN retorna quatro valores numéricos que representam a posição e o tamanho da caixa. Modelos como o YOLO (You Only Look Once) utilizam essa técnica dividindo uma imagem em uma grade e atribuindo previsões de caixas delimitadoras às células da grade.

No entanto, a regressão direta possui limitações:

  • Dificuldade com objetos de tamanhos e proporções variadas;
  • Não lida de forma eficaz com objetos sobrepostos;
  • As caixas delimitadoras podem se deslocar de maneira imprevisível, causando inconsistências.
yolo

Abordagens Baseadas em Âncoras vs. Sem Âncoras

Métodos Baseados em Âncoras

Caixas âncora são caixas delimitadoras predefinidas com tamanhos e proporções fixas. Modelos como Faster R-CNN e SSD (Single Shot MultiBox Detector) utilizam caixas âncora para melhorar a precisão das previsões. O modelo prevê ajustes nas caixas âncora em vez de prever caixas delimitadoras do zero. Este método é eficaz para detectar objetos em diferentes escalas, mas aumenta a complexidade computacional.

Métodos Sem Âncoras

Métodos sem âncoras, como CenterNet e FCOS (Fully Convolutional One-Stage Object Detection), eliminam as caixas âncora predefinidas e, em vez disso, prevêem diretamente os centros dos objetos. Esses métodos oferecem:

  • Arquiteturas de modelo mais simples;
  • Velocidades de inferência mais rápidas;
  • Melhor generalização para tamanhos de objetos não vistos.
anchor_vs_anchorfree
Note
Nota

A (Baseado em âncoras): prevê deslocamentos (linhas verdes) a partir de âncoras predefinidas (azul) para coincidir com o valor real (vermelho). B (Livre de âncoras): estima diretamente os deslocamentos de um ponto até seus limites.

Predição de caixa delimitadora é um componente essencial da detecção de objetos, e diferentes abordagens equilibram precisão e eficiência. Enquanto métodos baseados em âncoras aumentam a precisão utilizando formas predefinidas, métodos livres de âncoras simplificam a detecção ao prever diretamente as localizações dos objetos. Compreender essas técnicas auxilia no desenvolvimento de sistemas de detecção de objetos mais eficazes para diversas aplicações do mundo real.

1. Quais informações uma previsão de caixa delimitadora normalmente contém?

2. Qual é a principal vantagem dos métodos baseados em âncoras na detecção de objetos?

3. Qual desafio a regressão direta enfrenta na previsão de caixas delimitadoras?

question mark

Quais informações uma previsão de caixa delimitadora normalmente contém?

Select the correct answer

question mark

Qual é a principal vantagem dos métodos baseados em âncoras na detecção de objetos?

Select the correct answer

question mark

Qual desafio a regressão direta enfrenta na previsão de caixas delimitadoras?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 3
some-alt