Обнаружение объектов и сегментация экземпляров в Python с помощью Detectron2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Обнаружение объектов и сегментация экземпляров в Python с помощью Detectron2

Введение

Обнаружение объектов — большая область компьютерного зрения и одно из наиболее важных приложений компьютерного зрения «в дикой природе». С одной стороны, его можно использовать для создания автономных систем, которые перемещают агентов по средам — будь то роботы, выполняющие задачи, или беспилотные автомобили, но для этого требуется пересечение с другими областями. Однако обнаружение аномалий (например, дефектных продуктов на линии), определение местоположения объектов на изображениях, обнаружение лиц и различные другие приложения обнаружения объектов могут выполняться без пересечения с другими областями.

Обнаружение объектов не так стандартизировано, как классификация изображений, в основном потому, что большинство новых разработок обычно выполняются отдельными исследователями, сопровождающими и разработчиками, а не большими библиотеками и фреймворками. Трудно упаковать необходимые служебные сценарии в такую ​​​​инфраструктуру, как TensorFlow или PyTorch, и поддерживать рекомендации API, которые до сих пор руководили разработкой.

Это делает обнаружение объектов несколько более сложным, обычно более подробным (но не всегда) и менее доступным, чем классификация изображений. Одним из основных преимуществ участия в экосистеме является то, что она дает вам возможность не искать полезную информацию о передовом опыте, инструментах и ​​подходах к использованию. С обнаружением объектов — большинству приходится проводить гораздо больше исследований ландшафта поля, чтобы получить хорошее сцепление.

Detectron2 от Meta AI — сегментация экземпляров и обнаружение объектов

Детектрон2 — это пакет Meta AI (ранее FAIR — Facebook AI Research) с открытым исходным кодом для обнаружения объектов, сегментации и оценки позы — все в одном. Учитывая входное изображение, он может возвращать метки, ограничивающие рамки, оценки достоверности, маски и скелеты объектов. Это хорошо представлено на странице репозитория:

Он предназначен для использования в качестве библиотеки, на основе которой вы можете создавать исследовательские проекты. Он предлагает модельный зоопарк при этом большинство реализаций полагаются на Mask R-CNN и R-CNN в целом, наряду с RetinaNet. У них тоже довольно прилично документации. Давайте запустим пример сценария вывода!

Во-первых, давайте установим зависимости:

$ pip install pyyaml==5.1
$ pip install 'git+https://github.com/facebookresearch/detectron2.git'

Далее мы импортируем утилиты Detectron2 — здесь в игру вступает знание предметной области фреймворка. Вы можете построить детектор, используя DefaultPredictor класс, передав объект конфигурации, который его устанавливает. Visualizer предлагает поддержку для визуализации результатов. MetadataCatalog и DatasetCatalog относятся к API данных Detectron2 и предлагают информацию о встроенных наборах данных, а также их метаданные.

Давайте импортируем классы и функции, которые мы будем использовать:

import torch, detectron2
from detectron2.utils.logger import setup_logger
setup_logger()

from detectron2 import model_zoo
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
from detectron2.data import MetadataCatalog, DatasetCatalog

. requests, мы загрузим изображение и сохраним его на наш локальный диск:

import matplotlib.pyplot as plt
import requests
response = requests.get('http://images.cocodataset.org/val2017/000000439715.jpg')
open("input.jpg", "wb").write(response.content)
    
im = cv2.imread("./input.jpg")
fig, ax = plt.subplots(figsize=(18, 8))
ax.imshow(cv2.cvtColor(im, cv2.COLOR_BGR2RGB))

Это приводит к:

Обнаружение объектов и сегментация экземпляров в Python с помощью Detectron2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Теперь мы загружаем конфигурацию, при необходимости вносим изменения (модели работают на графическом процессоре по умолчанию, поэтому, если у вас нет графического процессора, вам нужно установить устройство на «процессор» в конфигурации):

cfg = get_cfg()

cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")


Здесь мы указываем, какую модель мы хотели бы запустить из model_zoo. Мы импортировали модель сегментации экземпляров на основе архитектуры Mask R-CNN и с магистралью ResNet50. В зависимости от того, чего вы хотите достичь (обнаружение ключевых точек, сегментация экземпляров, паноптическая сегментация или обнаружение объектов), вы загрузите соответствующую модель.

Наконец, мы можем построить предиктор с этим cfg и запустить его на входах! Visualizer class используется для рисования прогнозов на изображении (в данном случае сегментированные экземпляры, классы и ограничивающие рамки:

predictor = DefaultPredictor(cfg)
outputs = predictor(im)

v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
fig, ax = plt.subplots(figsize=(18, 8))
ax.imshow(out.get_image()[:, :, ::-1])

Наконец, это приводит к:

Ознакомьтесь с нашим практическим руководством по изучению Git с рекомендациями, принятыми в отрасли стандартами и прилагаемой памяткой. Перестаньте гуглить команды Git и на самом деле изучить это!

Обнаружение объектов и сегментация экземпляров в Python с помощью Detectron2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Двигаясь дальше — практическое глубокое обучение компьютерному зрению

Ваша любознательная натура заставляет вас идти дальше? Рекомендуем ознакомиться с нашим "Курс": «Практическое глубокое обучение компьютерному зрению с помощью Python».

Обнаружение объектов и сегментация экземпляров в Python с помощью Detectron2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Еще один курс по компьютерному зрению?

Мы не будем заниматься классификацией цифр MNIST или моды MNIST. Они уже давно отслужили свою роль. Слишком много учебных ресурсов сосредоточено на базовых наборах данных и базовых архитектурах, прежде чем позволить продвинутым архитектурам черного ящика взять на себя бремя производительности.

Мы хотим сосредоточиться на демистификация, практичность, понимание, интуиция и реальные проекты. Хочу учиться КАК Вы можете внести разнообразие? Мы проведем вас от того, как наш мозг обрабатывает изображения, до написания классификатора глубокого обучения исследовательского уровня для рака молочной железы, до сетей глубокого обучения, которые «галлюцинируют», обучая вас принципам и теории посредством практической работы, вооружая вас ноу-хау и инструменты, чтобы стать экспертом в применении глубокого обучения для решения задач компьютерного зрения.

Что внутри?

  • Первые принципы зрения и как научить компьютеры «видеть»
  • Различные задачи и приложения компьютерного зрения
  • Ремесленные инструменты, которые облегчат вашу работу
  • Поиск, создание и использование наборов данных для компьютерного зрения
  • Теория и применение сверточных нейронных сетей
  • Обработка смещения домена, совпадения и других смещений в наборах данных
  • Передача обучения и использование времени обучения и вычислительных ресурсов других в ваших интересах
  • Создание и обучение современного классификатора рака молочной железы
  • Как применить здоровую дозу скептицизма к господствующим идеям и понять последствия широко распространенных методов
  • Визуализация «концептуального пространства» ConvNet с использованием t-SNE и PCA
  • Тематические исследования того, как компании используют методы компьютерного зрения для достижения лучших результатов
  • Правильная оценка модели, визуализация скрытого пространства и выявление внимания модели
  • Выполнение исследования предметной области, обработка ваших собственных наборов данных и создание модельных тестов
  • Передовые архитектуры, развитие идей, что делает их уникальными и как их реализовать
  • KerasCV — WIP-библиотека для создания современных пайплайнов и моделей.
  • Как разбирать и читать статьи и реализовывать их самостоятельно
  • Выбор моделей в зависимости от вашего применения
  • Создание сквозного конвейера машинного обучения
  • Ландшафт и интуиция при обнаружении объектов с помощью Faster R-CNN, RetinaNets, SSD и YOLO
  • Экземпляр и семантическая сегментация
  • Распознавание объектов в реальном времени с помощью YOLOv5
  • Обучение детекторам объектов YOLOv5
  • Работа с трансформерами с использованием KerasNLP (надежная библиотека WIP)
  • Интеграция Transformers с ConvNets для создания подписей к изображениям
  • DeepDream

Заключение

Сегментация экземпляров идет на один шаг дальше семантической сегментации и отмечает качественную разницу между отдельными экземплярами класса (человек 1, человек 2 и т. д.), а не только то, принадлежат ли они одному. В некотором смысле — это классификация на уровне пикселей.

В этом кратком руководстве мы кратко рассмотрели, как Detectron2 делает сегментацию экземпляров и обнаружение объектов простыми и доступными через свой API, используя Mask R-CNN.

Отметка времени:

Больше от Стекабьюс