Прогнозування Обмежувальних Рамок
Обмежувальні рамки є ключовими для виявлення об'єктів, забезпечуючи спосіб позначення їхнього розташування. Моделі для виявлення об'єктів використовують ці рамки для визначення позиції та розмірів виявлених об'єктів на зображенні. Точне прогнозування обмежувальних рамок є основою для забезпечення надійного виявлення об'єктів.
Як CNN прогнозують координати обмежувальних рамок
Згорткові нейронні мережі (CNN) обробляють зображення через шари згорток і підвибірки для виділення ознак. Для виявлення об'єктів CNN створюють карти ознак, які відображають різні частини зображення. Прогнозування обмежувальних рамок зазвичай здійснюється шляхом:
- Виділення ознак із зображення;
- Застосування регресійної функції для прогнозування координат рамки;
- Класифікації виявлених об'єктів у кожній рамці.
Прогнози обмежувальних рамок представлені числовими значеннями, що відповідають:
- (x, y): координати центру рамки;
- (w, h): ширина та висота рамки.
Приклад: прогнозування обмежувальних рамок за допомогою попередньо навченої моделі
Замість навчання CNN з нуля можна використати попередньо навчену модель, таку як Faster R-CNN з TensorFlow model zoo, для прогнозування обмежувальних рамок на зображенні. Нижче наведено приклад завантаження попередньо навченої моделі, завантаження зображення, отримання прогнозів і візуалізації обмежувальних рамок із класовими мітками.
Імпорт бібліотек
import cv2
import tensorflow as tf
import tensorflow_hub as hub
import matplotlib.pyplot as plt
from tensorflow.image import draw_bounding_boxes
Завантаження моделі та зображення
# 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)
Попередня обробка зображення
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, ...]
Виконання передбачення та отримання ознак обмежувальних рамок
# 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"}
Відображення обмежувальних рамок
# 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)
Візуалізація
# 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()
Результат:

Регресійні передбачення обмежувальних рамок
Одним із підходів до передбачення обмежувальних рамок є пряма регресія, коли згорткова нейронна мережа (CNN) видає чотири числові значення, що визначають положення та розмір рамки. Моделі, такі як YOLO (You Only Look Once), використовують цю техніку, розбиваючи зображення на сітку та призначаючи передбачення обмежувальних рамок коміркам сітки.
Однак пряма регресія має обмеження:
- Важко працює з об'єктами різних розмірів і співвідношень сторін;
- Не ефективно обробляє перекриття об'єктів;
- Обмежувальні рамки можуть зміщуватися непередбачувано, що призводить до непослідовності.

Підходи на основі якорів та безякорні підходи
Методи на основі якорів
Якорні бокси — це заздалегідь визначені обмежувальні прямокутники з фіксованими розмірами та співвідношеннями сторін. Моделі, такі як Faster R-CNN та SSD (Single Shot MultiBox Detector), використовують якорні бокси для підвищення точності передбачень. Модель прогнозує коригування до якорних боксів, а не створює обмежувальні прямокутники з нуля. Цей метод добре підходить для виявлення об'єктів різних масштабів, але збільшує обчислювальну складність.
Безякорні методи
Безякорні методи, такі як CenterNet та FCOS (Fully Convolutional One-Stage Object Detection), усувають необхідність у заздалегідь визначених якорних боксах і натомість напряму прогнозують центри об'єктів. Ці методи забезпечують:
- Простішу архітектуру моделей;
- Вищу швидкість інференсу;
- Кращу здатність до узагальнення на невідомі розміри об'єктів.

A (На основі якорів): прогнозує зсуви (зелені лінії) від попередньо визначених якорів (сині) для відповідності з еталонною розміткою (червона). B (Безякорний): безпосередньо оцінює зсуви від точки до її меж.
Прогнозування обмежувальних рамок є ключовим елементом виявлення об'єктів, і різні підходи забезпечують баланс між точністю та ефективністю. Методи на основі якорів підвищують точність завдяки використанню попередньо визначених форм, тоді як безякорні методи спрощують виявлення, безпосередньо прогнозуючи розташування об'єктів. Розуміння цих технік допомагає розробляти ефективніші системи виявлення об'єктів для різних практичних застосувань.
1. Яку інформацію зазвичай містить прогноз обмежувального прямокутника?
2. Яка основна перевага методів на основі якорів в задачах детекції об'єктів?
3. З якою проблемою стикається пряме регресування при прогнозуванні обмежувальних прямокутників?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.45
Прогнозування Обмежувальних Рамок
Свайпніть щоб показати меню
Обмежувальні рамки є ключовими для виявлення об'єктів, забезпечуючи спосіб позначення їхнього розташування. Моделі для виявлення об'єктів використовують ці рамки для визначення позиції та розмірів виявлених об'єктів на зображенні. Точне прогнозування обмежувальних рамок є основою для забезпечення надійного виявлення об'єктів.
Як CNN прогнозують координати обмежувальних рамок
Згорткові нейронні мережі (CNN) обробляють зображення через шари згорток і підвибірки для виділення ознак. Для виявлення об'єктів CNN створюють карти ознак, які відображають різні частини зображення. Прогнозування обмежувальних рамок зазвичай здійснюється шляхом:
- Виділення ознак із зображення;
- Застосування регресійної функції для прогнозування координат рамки;
- Класифікації виявлених об'єктів у кожній рамці.
Прогнози обмежувальних рамок представлені числовими значеннями, що відповідають:
- (x, y): координати центру рамки;
- (w, h): ширина та висота рамки.
Приклад: прогнозування обмежувальних рамок за допомогою попередньо навченої моделі
Замість навчання CNN з нуля можна використати попередньо навчену модель, таку як Faster R-CNN з TensorFlow model zoo, для прогнозування обмежувальних рамок на зображенні. Нижче наведено приклад завантаження попередньо навченої моделі, завантаження зображення, отримання прогнозів і візуалізації обмежувальних рамок із класовими мітками.
Імпорт бібліотек
import cv2
import tensorflow as tf
import tensorflow_hub as hub
import matplotlib.pyplot as plt
from tensorflow.image import draw_bounding_boxes
Завантаження моделі та зображення
# 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)
Попередня обробка зображення
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, ...]
Виконання передбачення та отримання ознак обмежувальних рамок
# 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"}
Відображення обмежувальних рамок
# 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)
Візуалізація
# 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()
Результат:

Регресійні передбачення обмежувальних рамок
Одним із підходів до передбачення обмежувальних рамок є пряма регресія, коли згорткова нейронна мережа (CNN) видає чотири числові значення, що визначають положення та розмір рамки. Моделі, такі як YOLO (You Only Look Once), використовують цю техніку, розбиваючи зображення на сітку та призначаючи передбачення обмежувальних рамок коміркам сітки.
Однак пряма регресія має обмеження:
- Важко працює з об'єктами різних розмірів і співвідношень сторін;
- Не ефективно обробляє перекриття об'єктів;
- Обмежувальні рамки можуть зміщуватися непередбачувано, що призводить до непослідовності.

Підходи на основі якорів та безякорні підходи
Методи на основі якорів
Якорні бокси — це заздалегідь визначені обмежувальні прямокутники з фіксованими розмірами та співвідношеннями сторін. Моделі, такі як Faster R-CNN та SSD (Single Shot MultiBox Detector), використовують якорні бокси для підвищення точності передбачень. Модель прогнозує коригування до якорних боксів, а не створює обмежувальні прямокутники з нуля. Цей метод добре підходить для виявлення об'єктів різних масштабів, але збільшує обчислювальну складність.
Безякорні методи
Безякорні методи, такі як CenterNet та FCOS (Fully Convolutional One-Stage Object Detection), усувають необхідність у заздалегідь визначених якорних боксах і натомість напряму прогнозують центри об'єктів. Ці методи забезпечують:
- Простішу архітектуру моделей;
- Вищу швидкість інференсу;
- Кращу здатність до узагальнення на невідомі розміри об'єктів.

A (На основі якорів): прогнозує зсуви (зелені лінії) від попередньо визначених якорів (сині) для відповідності з еталонною розміткою (червона). B (Безякорний): безпосередньо оцінює зсуви від точки до її меж.
Прогнозування обмежувальних рамок є ключовим елементом виявлення об'єктів, і різні підходи забезпечують баланс між точністю та ефективністю. Методи на основі якорів підвищують точність завдяки використанню попередньо визначених форм, тоді як безякорні методи спрощують виявлення, безпосередньо прогнозуючи розташування об'єктів. Розуміння цих технік допомагає розробляти ефективніші системи виявлення об'єктів для різних практичних застосувань.
1. Яку інформацію зазвичай містить прогноз обмежувального прямокутника?
2. Яка основна перевага методів на основі якорів в задачах детекції об'єктів?
3. З якою проблемою стикається пряме регресування при прогнозуванні обмежувальних прямокутників?
Дякуємо за ваш відгук!