Anchor-free детекторы – это модели, которые выполняют детекцию объектов без использования заранее определенных anchor box-ов. Существует несколько вариаций таких детекторов, каждая из которых использует свои методы для определения объектов на изображении.
CenterNet определяет объекты через нахождение их центров. Основная идея заключается в том, что центр каждого объекта отображается на тепловой карте, а размеры объекта и смещения от центра предсказываются отдельно. Используется для нахождения центров объектов. Размеры (ширина и высота) и смещения от центра объекта до его границ предсказываются отдельно. Высокая точность, особенно при детекции мелких объектов.
CornerNet детектирует объекты путем нахождения углов объектов и объединения этих углов в пары. Модель предсказывает позиции верхнего левого и нижнего правого углов объекта. Углы комбинируются для формирования полных рамок объектов. Точность и возможность детектировать объекты различных форм и размеров.
FCOS предсказывает объекты на основе каждого пикселя изображения. Для каждого пикселя предсказываются расстояния до границ объекта (слева, справа, сверху, снизу). Одновременно предсказывается вероятность того, что данный пиксель принадлежит какому-либо объекту. Простота реализации, хорошая производительность и гибкость.
RepPoints использует набор представительных точек для описания формы и положения объектов. Множество точек, которые описывают контур объекта. Модель учится предсказывать положения этих точек и их распределение. Более точное описание сложных форм объектов и высокая точность.
DETR использует архитектуру трансформеров для детекции объектов. Используется для анализа изображения и предсказания объектов. Модель обучается использовать фиксированное количество запросов для предсказания объектов. Высокая точность и возможность обработки сложных сцен.
import torch
from torchvision.models.detection import fcos_resnet50_fpn
# Загрузка модели FCOS
model = fcos_resnet50_fpn(pretrained=True)
model.eval()
# Загрузка и предобработка изображения
from PIL import Image
import torchvision.transforms as T
image = Image.open('image.jpg')
transform = T.Compose([
T.Resize((512, 512)),
T.ToTensor(),
T.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)
# Вывод результатов
for box, score, label in zip(outputs[0]['boxes'], outputs[0]['scores'], outputs[0]['labels']):
print(f'Object: {label}, Score: {score}, Box: {box}')
Ставь 👍 и забирай 📚 Базу знаний