Предложение регионов с помощью Faster R-CNN

Глубокое обучение для работы с изображениями на PyTorch

Michal Oleszak

Machine Learning Engineer

Регионы и якорные блоки

  • Регион: область изображения, которая может содержать объекты интереса, сгруппированные по визуальным характеристикам

region proposals

Глубокое обучение для работы с изображениями на PyTorch

Регионы и якорные блоки

  • Регион: область изображения, которая может содержать объекты интереса, сгруппированные по визуальным характеристикам

region proposals

  • Якорный блок: заранее заданные шаблоны ограничивающих рамок разного размера и формы
Глубокое обучение для работы с изображениями на PyTorch

Модель Faster R-CNN

Faster R-CNN: улучшенная версия R-CNN

rcnn layers

  • Backbone (свёрточные слои)
1 Edward Raff. 2022. Inside Deep Learning.
Глубокое обучение для работы с изображениями на PyTorch

Модель Faster R-CNN

Faster R-CNN: улучшенная версия R-CNN rcnn layers

  • Backbone (свёрточные слои)
  • Сеть предложения регионов (RPN) для генерации ограничивающих рамок
1 Edward Raff. 2022. Inside Deep Learning.
Глубокое обучение для работы с изображениями на PyTorch

Модель Faster R-CNN

Faster R-CNN: улучшенная версия R-CNN

rcnn layers

  • Свёрточные слои (backbone): карты признаков
  • Сеть предложения регионов (RPN): предложения ограничивающих рамок
  • Классификатор и регрессор для формирования предсказаний
1 Edward Raff. 2022. Inside Deep Learning.
Глубокое обучение для работы с изображениями на PyTorch

Сеть предложения регионов (RPN)

архитектура сети предложения регионов

Глубокое обучение для работы с изображениями на PyTorch

Сеть предложения регионов (RPN)

архитектура сети предложения регионов

  • Генератор якорей:
    • Формирует набор якорных блоков разного размера и соотношения сторон
Глубокое обучение для работы с изображениями на PyTorch

Сеть предложения регионов (RPN)

архитектура сети предложения регионов

  • Генератор якорей:
    • Формирует набор якорных блоков разного размера и соотношения сторон
  • Классификатор и регрессор:
    • Определяют, содержит ли блок объект, и задают его координаты
Глубокое обучение для работы с изображениями на PyTorch

Сеть предложения регионов (RPN)

архитектура сети предложения регионов

  • Генератор якорей:
    • Формирует набор якорных блоков разного размера и соотношения сторон
  • Классификатор и регрессор:
    • Определяют, содержит ли блок объект, и задают его координаты
  • Пулинг области интереса (RoI):
    • Приводит предложения RPN к фиксированному размеру для полносвязных слоёв
Глубокое обучение для работы с изображениями на PyTorch

RPN в PyTorch

from torchvision.models.detection.rpn import AnchorGenerator


anchor_generator = AnchorGenerator( sizes=((32, 64, 128),), aspect_ratios=((0.5, 1.0, 2.0),), )
from torchvision.ops import MultiScaleRoIAlign


roi_pooler = MultiScaleRoIAlign( featmap_names=["0"], output_size=7, sampling_ratio=2, )
Глубокое обучение для работы с изображениями на PyTorch

Функции потерь Fast R-CNN

  • Функция потерь классификации RPN:
    • содержит ли регион объект
    • бинарная кросс-энтропия
    • rpn_cls_criterion = nn.BCEWithLogitsLoss()

 

  • Функция потерь регрессии рамок RPN:
    • координаты ограничивающих рамок
    • среднеквадратичная ошибка
    • rpn_reg_criterion = nn.MSELoss()
  • Функция потерь классификации R-CNN:
    • несколько классов объектов
    • кросс-энтропия
    • rcnn_cls_criterion = nn.CrossEntropyLoss()

 

  • Функция потерь регрессии рамок R-CNN:
    • координаты ограничивающих рамок
    • среднеквадратичная ошибка
    • rcnn_reg_criterion = nn.MSELoss()
Глубокое обучение для работы с изображениями на PyTorch

Faster R-CNN в PyTorch

from torchvision.models.detection import FasterRCNN


backbone = torchvision.models.mobilenet_v2(weights="DEFAULT").features
backbone.out_channels = 1280
model = FasterRCNN( backbone=backbone, num_classes=num_classes, rpn_anchor_generator=anchor_generator, box_roi_pool=roi_pooler, )
Глубокое обучение для работы с изображениями на PyTorch

Faster R-CNN в PyTorch

Загрузка предобученной модели Faster R-CNN

from torchvision.models.detection.faster_rcnn import FastRCNNPredictor

model = torchvision.models.detection.fasterrcnn_resnet50_fpn(weights="DEFAULT")

Определение числа классов и размера входа классификатора

num_classes = 2

in_features = model.roi_heads.box_predictor.cls_score.in_features

Замена классификатора модели на классификатор с нужным числом классов

model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes)
Глубокое обучение для работы с изображениями на PyTorch

Давайте потренируемся!

Глубокое обучение для работы с изображениями на PyTorch

Preparing Video For Download...