Как использовать модель DETR Facebook для обнаружения и маскировки воздушных кабелей на изображениях?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать модель DETR Facebook для обнаружения и маскировки воздушных кабелей на изображениях?

Сообщение Anonymous »

В настоящее время я работаю над проектом, в котором мне нужно обнаружить и замаскировать воздушные кабели на изображениях с помощью модели Facebook DETR (DEtection TRansformers). Я подготовил набор данных с использованием CVAT (инструмент аннотации компьютерного зрения), в котором я аннотировал изображения воздушных кабелей и экспортировал набор данных в формат COCO 1.0. Несмотря на следующие руководства и примеры, я сталкиваюсь с проблемами, связанными с тем, что модель не обнаруживает никаких аннотаций и не обеспечивает ожидаемый результат.
Сведения о наборе данных:Набор данных содержит изображения воздушных кабелей, аннотированные с использованием CVAT.
Экспортируемый набор данных находится в формате COCO 1.0, включая аннотации для 100 изображений.
Образцы данных аннотаций включают информацию о размерах изображения, именах файлов, и детали сегментации воздушных кабелей.

Код: Выделить всё

{"licenses":[{"name":"","id":0,"url":""}],"info":{"contributor":"","date_created":"","description":"","url":"","version":"","year":""},"categories":[{"id":1,"name":"over_head_cable","supercategory":""}],"images":[{"id":1,"width":3472,"height":4624,"file_name":"IMG_20240504_094743692_BURST000_COVER.jpg","license":0,"flickr_url":"","coco_url":"","date_captured":0}......"annotations":[{"id":1,"image_id":1,"category_id":1,"segmentation":{"counts":[2506,59,185,341,4034,69,179,343,4030,75,174,347,4025,81,170,349,4021,87,166,351,4018,91,162,355,4014,95,159,357,4011,99,156,359,4008,103,153,361,4005,127,13,77,3,17,20,363,700,17,3,27,13,17,3,17,3,47,23,27,23,17,3,17,3,17,3025,135,1,109,11,369,691,59,1,99,11,39,11,69,3018,251,1,379,681,169,1,49,1,79,3011,636,675,305,3007,640,669,311,3003,644,663,317,2998,648,659,321,2995,651,655,325,2992,654,651,329}]}}] #this is sample data, actual data has contents for 100+ images
**
Постановка проблемы:**
После загрузки файла COCO JSON и запуска модели DETR на изображениях я не получает желаемого результата.
Выходное изображение остается таким же, как и входное, без каких-либо масок или выделенных областей для обнаруженных воздушных кабелей.
Несмотря на правильную настройку модели и предварительную обработку изображений, кажется, что DETR не обнаруживает никаких аннотаций.
Обзор моей работы:
Итак, я импортировал необходимые библиотеки, такие как Torch, torchvision, PIL, json, os. и matplotlib.pyplot.
Загружен файл COCO JSON, содержащий аннотации набора данных.
Созданы имена классов и список КЛАССОВ на основе категорий в файле JSON.
Определены функции для преобразования координат ограничивающего прямоугольника, изменение масштаба рамок и настройка преобразования изображений.
Загрузила предварительно обученную модель DETR из репозитория моделей Facebook.
Предварительно обработала изображения, пропустила их через модель и извлекла из выходных данных ограничивающие рамки и метки.
/>Пыталась нарисовать ограничивающие рамки вокруг обнаруженных объектов, но не получила ожидаемых результатов.

Код: Выделить всё

import torch
import torchvision
from torchvision import transforms as T
from torchvision.utils import draw_bounding_boxes
from PIL import Image
import json
import os
import matplotlib.pyplot as plt

# Path to your COCO JSON file
json_file = '/content/instances_default.json'

# Load the JSON data
with open(json_file, 'r') as f:
coco_data = json.load(f)

# Extract the class names
class_names = [cat['name'] for cat in coco_data['categories']]

# Create the CLASSES list with 'N/A' and your class names
CLASSES = ['N/A'] + class_names

# These variables are for loading for pytorch hub
MODEL_REPO = "facebookresearch/detr:main" # The model repo
MODEL_NAME = "detr_resnet50" # The model

!wget -O wire.jpg https://i.ibb.co/qxTBn8k/IMG-20240504-101029464-BURST004.jpg

im = Image.open("wire.jpg")
im

def box_cxcywh_to_xyxy(x):
"""
This is to convert the bounding boxes from DETr format to xy coordiante pairs
"""
x_c, y_c, w, h = x.unbind(1)
b = [(x_c - 0.5 * w), (y_c - 0.5 * h),
(x_c + 0.5 * w), (y_c + 0.5 * h)]
return torch.stack(b, dim=1)

def rescale_boxes(out_bbox, size):
"""
Rescale the bounding boxes to the original image height and width so they can be overlaid.
"""
img_w, img_h = size
b = box_cxcywh_to_xyxy(out_bbox)
b = b * torch.tensor([img_w, img_h, img_w, img_h], dtype=torch.float32)
return b

transforms = T.Compose([
T.Resize(800), # Resizes too 800px while maintaing the aspect ratio
T.ToTensor(),
T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) # Imagenet normalization
])

img = transforms(im).unsqueeze(0)

model = torch.hub.load(MODEL_REPO, MODEL_NAME, pretrained=True)

model = model.eval()

out = model(img)

probs = out["pred_logits"].softmax(-1)[0, :, :-1] # processing output to return bounding boxes and labels
keep = probs.max(-1).values > 0.7 # only predictions with 0.7 probability or higher
bboxes_scaled = rescale_boxes(out['pred_boxes'][0, keep], im.size)

labels = [CLASSES[i] for i in probs[keep].argmax(1)]

tensor_img = torch.tensor((T.ToTensor()(im) * 255), dtype=torch.uint8) # draw_bounding_boxes requires images in this format.

bb = draw_bounding_boxes(tensor_img, boxes=bboxes_scaled, width=6) # this function will automatically overlay bounding boxes over the image
# imported at beginning of file

# draw figure
fig = plt.figure(figsize=(14, 8))
plt.imshow(bb.permute(1, 2, 0)) # convert it into a image that matplotlib can display
Ожидаемый результат:
Я ожидаю, что модель DETR точно обнаружит воздушные кабели на изображениях и предоставит маскированные выходные изображения. выделение обнаруженных кабелей.
Вместо ограничивающих рамок я требую, чтобы выходные изображения содержали маски для обнаруженных кабелей.
Мне нужно руководство о том, как изменить код, чтобы убедитесь, что DETR обнаруживает аннотации и предоставляет замаскированные выходные изображения.
Любая информация о том, почему DETR может не обнаруживать аннотации, или предложения по альтернативным подходам для достижения желаемого результата будут очень признательны.
Среда:
Google Colab
Python 3.x
PyTorch
torchvision
Еще раз, любая помощь или предложения по решению этой проблемы будут высоко оценены. Заранее благодарим за помощь!

Подробнее здесь: https://stackoverflow.com/questions/784 ... bles-in-im
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»