🤔 Как происходит детекция без anchor box-ов?



Обнаружение объектов без использования anchor box-ов достигается благодаря архитектурам сетей, таким как YOLOv3, CenterNet, или более современные модели как EfficientDet. В этих методах отсутствует необходимость в заранее определенных anchor box-ах, которые фиксируют потенциальные положения и размеры объектов.



🚩Объяснение



🟠Что такое anchor box-ы и зачем они нужны?

Anchor box-ы — это заранее определенные прямоугольные области, которые используются для предсказания объектов различных размеров и форм в изображении. Они помогают моделям предсказывать координаты объектов с большей точностью, задавая определенные рамки для поиска.



🟠Почему отказ от anchor box-ов?

Подбор оптимальных размеров и аспектных соотношений anchor box-ов требует значительных усилий и экспериментов. Методы без anchor box-ов могут быть более эффективными и точными, поскольку они не ограничены фиксированными рамками и могут адаптироваться к различным масштабам объектов более гибко.



🟠Методы детекции без anchor box-ов

YOLOv3 (You Only Look Once v3): YOLOv3 использует сетку, разбивающую изображение на ячейки, где каждая ячейка отвечает за предсказание объектов в этой области. Вместо фиксированных anchor box-ов, модель учится предсказывать размеры и координаты объектов непосредственно.



🟠CenterNet:

CenterNet использует подход, при котором центр каждого объекта определяется как пик в тепловой карте. Затем сеть предсказывает размеры и оффсеты от этого центра. Этот метод позволяет эффективно находить объекты различных размеров и форм.



🟠EfficientDet:

Включает в себя BiFPN (Bidirectional Feature Pyramid Network) для объединения характеристик с различных уровней сети. EfficientDet использует масштабируемую архитектуру, позволяющую адаптироваться к различным размерам объектов без необходимости в anchor box-ах.

import torch

import torchvision.transforms as transforms

from PIL import Image

from centernet import CenterNet



# Загрузка модели CenterNet

model = CenterNet(num_classes=80)

model.load_state_dict(torch.load('centernet_weights.pth'))

model.eval()



# Загрузка и предобработка изображения

image = Image.open('image.jpg')

transform = transforms.Compose([

transforms.Resize((512, 512)),

transforms.ToTensor(),

transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),

])

image = transform(image).unsqueeze(0)



# Предсказание объектов

with torch.no_grad():

outputs = model(image)

# Обработка результатов

# Преобразование тепловых карт и оффсетов в координаты объектов

boxes, scores, classes = model.decode(outputs)



# Вывод результатов

for box, score, class_id in zip(boxes, scores, classes):

print(f'Object: {class_id}, Score: {score}, Box: {box}')




Ставь 👍 и забирай 📚 Базу знаний