Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Förutsägelser av Avgränsningsrutor | Objektdetektering
Grunder i Datorseende

bookFörutsägelser av Avgränsningsrutor

Avgränsningsrutor är avgörande för objektigenkänning och används för att markera objektens positioner. Objektigenkänningsmodeller använder dessa rutor för att definiera position och dimensioner för identifierade objekt i en bild. Noggrann förutsägelse av avgränsningsrutor är grundläggande för att säkerställa tillförlitlig objektigenkänning.

Hur CNN:er förutsäger koordinater för avgränsningsrutor

Konvolutionella neurala nätverk (CNN:er) bearbetar bilder genom lager av konvolutioner och pooling för att extrahera egenskaper. För objektigenkänning genererar CNN:er feature maps som representerar olika delar av en bild. Förutsägelse av avgränsningsrutor uppnås vanligtvis genom:

  1. Extrahera egenskapsrepresentationer från bilden;
  2. Applicera en regressionsfunktion för att förutsäga koordinater för avgränsningsrutor;
  3. Klassificera de identifierade objekten inom varje ruta.

Förutsägelser för avgränsningsrutor representeras som numeriska värden som motsvarar:

  • (x, y): koordinaterna för rutans centrum;
  • (w, h): rutans bredd och höjd.

Exempel: Förutsäga avgränsningsrutor med en förtränad modell

Istället för att träna en CNN från grunden kan vi använda en förtränad modell såsom Faster R-CNN från TensorFlows model zoo för att förutsäga avgränsningsrutor på en bild. Nedan visas ett exempel på hur man laddar en förtränad modell, laddar en bild, gör förutsägelser och visualiserar avgränsningsrutorna med klassetiketter.

Importera bibliotek

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

Ladda modell och bild

# 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)  

Förbehandla bilden

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, ...]

Gör en prediktion och extrahera bounding box-egenskaper

# 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"}

Rita bounding boxes

# 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)

Visualisera

# 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()

Resultat:

predict_bbox_example

Regressionsbaserade förutsägelser av avgränsningsrutor

Ett tillvägagångssätt för att förutsäga avgränsningsrutor är direkt regression, där ett CNN returnerar fyra numeriska värden som representerar boxens position och storlek. Modeller som YOLO (You Only Look Once) använder denna teknik genom att dela upp en bild i ett rutnät och tilldela förutsägelser av avgränsningsrutor till rutnätsceller.

Direkt regression har dock begränsningar:

  • Svårigheter med objekt av varierande storlek och proportioner;
  • Hanterar inte överlappande objekt effektivt;
  • Avgränsningsrutor kan förskjutas oförutsägbart, vilket leder till inkonsekvenser.
yolo

Ankarbaserade vs. Ankarfria metoder

Ankarbaserade metoder

Ankarboxar är fördefinierade avgränsningsrutor med fasta storlekar och proportioner. Modeller som Faster R-CNN och SSD (Single Shot MultiBox Detector) använder ankarboxar för att förbättra prediktionsnoggrannheten. Modellen förutser justeringar av ankarboxarna istället för att förutsäga avgränsningsrutor från grunden. Denna metod fungerar bra för att detektera objekt i olika skalor men ökar den beräkningsmässiga komplexiteten.

Ankarfria metoder

Ankarfria metoder, såsom CenterNet och FCOS (Fully Convolutional One-Stage Object Detection), eliminerar fördefinierade ankarboxar och förutser istället objektens centrum direkt. Dessa metoder erbjuder:

  • Enklare modellarkitekturer;
  • Snabbare inferenshastigheter;
  • Förbättrad generalisering till okända objektstorlekar.
anchor_vs_anchorfree
Note
Notering

A (Anchor-baserad): förutspår förskjutningar (gröna linjer) från fördefinierade ankare (blå) för att matcha markdata (röd). B (Anchor-fri): uppskattar direkt förskjutningar från en punkt till dess gränser.

Förutsägelse av avgränsningsrutor är en viktig komponent inom objektigenkänning, där olika metoder balanserar noggrannhet och effektivitet. Anchor-baserade metoder ökar precisionen genom att använda fördefinierade former, medan anchor-fria metoder förenklar detektionen genom att direkt förutsäga objektens positioner. Förståelse för dessa tekniker underlättar utformningen av bättre system för objektigenkänning i olika tillämpningar.

1. Vilken information innehåller en bounding box-prediktion vanligtvis?

2. Vilken är den främsta fördelen med ankarbaserade metoder inom objektdetektering?

3. Vilken utmaning möter direkt regression vid prediktion av bounding boxar?

question mark

Vilken information innehåller en bounding box-prediktion vanligtvis?

Select the correct answer

question mark

Vilken är den främsta fördelen med ankarbaserade metoder inom objektdetektering?

Select the correct answer

question mark

Vilken utmaning möter direkt regression vid prediktion av bounding boxar?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 3

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Suggested prompts:

Can you explain the difference between anchor-based and anchor-free methods in more detail?

What are some common challenges in bounding box prediction?

How does the choice of method affect the performance of object detection models?

Awesome!

Completion rate improved to 3.45

bookFörutsägelser av Avgränsningsrutor

Svep för att visa menyn

Avgränsningsrutor är avgörande för objektigenkänning och används för att markera objektens positioner. Objektigenkänningsmodeller använder dessa rutor för att definiera position och dimensioner för identifierade objekt i en bild. Noggrann förutsägelse av avgränsningsrutor är grundläggande för att säkerställa tillförlitlig objektigenkänning.

Hur CNN:er förutsäger koordinater för avgränsningsrutor

Konvolutionella neurala nätverk (CNN:er) bearbetar bilder genom lager av konvolutioner och pooling för att extrahera egenskaper. För objektigenkänning genererar CNN:er feature maps som representerar olika delar av en bild. Förutsägelse av avgränsningsrutor uppnås vanligtvis genom:

  1. Extrahera egenskapsrepresentationer från bilden;
  2. Applicera en regressionsfunktion för att förutsäga koordinater för avgränsningsrutor;
  3. Klassificera de identifierade objekten inom varje ruta.

Förutsägelser för avgränsningsrutor representeras som numeriska värden som motsvarar:

  • (x, y): koordinaterna för rutans centrum;
  • (w, h): rutans bredd och höjd.

Exempel: Förutsäga avgränsningsrutor med en förtränad modell

Istället för att träna en CNN från grunden kan vi använda en förtränad modell såsom Faster R-CNN från TensorFlows model zoo för att förutsäga avgränsningsrutor på en bild. Nedan visas ett exempel på hur man laddar en förtränad modell, laddar en bild, gör förutsägelser och visualiserar avgränsningsrutorna med klassetiketter.

Importera bibliotek

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

Ladda modell och bild

# 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)  

Förbehandla bilden

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, ...]

Gör en prediktion och extrahera bounding box-egenskaper

# 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"}

Rita bounding boxes

# 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)

Visualisera

# 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()

Resultat:

predict_bbox_example

Regressionsbaserade förutsägelser av avgränsningsrutor

Ett tillvägagångssätt för att förutsäga avgränsningsrutor är direkt regression, där ett CNN returnerar fyra numeriska värden som representerar boxens position och storlek. Modeller som YOLO (You Only Look Once) använder denna teknik genom att dela upp en bild i ett rutnät och tilldela förutsägelser av avgränsningsrutor till rutnätsceller.

Direkt regression har dock begränsningar:

  • Svårigheter med objekt av varierande storlek och proportioner;
  • Hanterar inte överlappande objekt effektivt;
  • Avgränsningsrutor kan förskjutas oförutsägbart, vilket leder till inkonsekvenser.
yolo

Ankarbaserade vs. Ankarfria metoder

Ankarbaserade metoder

Ankarboxar är fördefinierade avgränsningsrutor med fasta storlekar och proportioner. Modeller som Faster R-CNN och SSD (Single Shot MultiBox Detector) använder ankarboxar för att förbättra prediktionsnoggrannheten. Modellen förutser justeringar av ankarboxarna istället för att förutsäga avgränsningsrutor från grunden. Denna metod fungerar bra för att detektera objekt i olika skalor men ökar den beräkningsmässiga komplexiteten.

Ankarfria metoder

Ankarfria metoder, såsom CenterNet och FCOS (Fully Convolutional One-Stage Object Detection), eliminerar fördefinierade ankarboxar och förutser istället objektens centrum direkt. Dessa metoder erbjuder:

  • Enklare modellarkitekturer;
  • Snabbare inferenshastigheter;
  • Förbättrad generalisering till okända objektstorlekar.
anchor_vs_anchorfree
Note
Notering

A (Anchor-baserad): förutspår förskjutningar (gröna linjer) från fördefinierade ankare (blå) för att matcha markdata (röd). B (Anchor-fri): uppskattar direkt förskjutningar från en punkt till dess gränser.

Förutsägelse av avgränsningsrutor är en viktig komponent inom objektigenkänning, där olika metoder balanserar noggrannhet och effektivitet. Anchor-baserade metoder ökar precisionen genom att använda fördefinierade former, medan anchor-fria metoder förenklar detektionen genom att direkt förutsäga objektens positioner. Förståelse för dessa tekniker underlättar utformningen av bättre system för objektigenkänning i olika tillämpningar.

1. Vilken information innehåller en bounding box-prediktion vanligtvis?

2. Vilken är den främsta fördelen med ankarbaserade metoder inom objektdetektering?

3. Vilken utmaning möter direkt regression vid prediktion av bounding boxar?

question mark

Vilken information innehåller en bounding box-prediktion vanligtvis?

Select the correct answer

question mark

Vilken är den främsta fördelen med ankarbaserade metoder inom objektdetektering?

Select the correct answer

question mark

Vilken utmaning möter direkt regression vid prediktion av bounding boxar?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 3
some-alt