Модель использования Detectron2 | 6

машинное обучение

Автор|facebookresearch Компиляция|Флин Источник | Гитхаб

использовать модель

Модель (и ее подмодели) вDetectron2 состоит из таких функций, какbuild_model,build_backbone,build_roi_headsсоставляют:

from detectron2.modeling import build_model
model = build_model(cfg)  #返回torch.nn.Module

Уведомление,build_modelПросто создайте структуру модели и заполните ее случайными параметрами. Чтобы загрузить существующую контрольную точку в модель, используйтеDetectionCheckpointer(model).load(file_path). Detectron2 может распознавать pytorch.pthМодели формата, а в нашем модельном зоопарке.pklдокумент.

ты можешь пройтиoutputs = model(inputs)Используйте модели. Далее мы объясняем формат ввода/вывода, используемый встроенными моделями вDetectron2.

DefaultPredictor(обнаружить Ron2. прочитать документ S.IO/modules/…) — это оболочка вокруг модели, обеспечивающая поведение по умолчанию для обычного вывода. Он включает в себя загрузку модели и предварительную обработку и работает с отдельными изображениями, а не с пакетами.

Формат ввода модели

Все встроенные модели принимают на вход "list[dict]". Каждый словарь соответствует информации об изображении.

Словарь может содержать следующие ключи:

  • «изображение»: (C, H, W) форматTensor. Значение канала определяетсяcfg.INPUT.FORMATопределение. Нормализация изображения (если есть) будет выполняться внутри модели.

  • "instances": объект Instances со следующими полями:

    • "gt_boxes": объект Boxes, в котором хранятся N ящиков, по одному на каждый экземпляр.
      • "gt_classes": тензор длинного типа, представляет собой вектор из N меток, диапазон [0, num_categories).
      • "gt_masks": объект PolygonMasks или BitMasks, хранящий N масок, по одной для каждого экземпляра.
      • «gt_keypoints»: объект ключевых точек хранит N наборов ключевых точек, по одному для каждого экземпляра.
  • «предложения»: объект «Экземпляры», используемый только в моделях стиля Fast R-CNN, со следующими полями:

    • "proposal_boxes": Объект Boxes, используемый для хранения P ящиков предложений.
    • «objectness_logits»: «Тензор», вектор баллов P, по одному для каждого предложения.
  • "height", "width": желаемая высота и ширина вывода, не обязательно совпадающие с высотой или шириной поля ввода изображения. Например, поле ввода изображения может быть изображением с измененным размером, но вы можете захотеть, чтобы на выходе было исходное разрешение.

    Если предоставлено, модель будет производить выходные данные с этим разрешением вместо того, чтобы принимать разрешение «изображения» в качестве входных данных для модели. Это более эффективно и точно.

  • "сем_сег":Tensor int(В, Ш) формате. Суть семантической сегментации.. Значения представляют собой метки классов, отсчитываемые от 0.

Как подключиться к загрузчику данных:

DatasetMapper по умолчанию (обнаружить Ron2. прочитать документ S.IO/modules/…) — это словарь в указанном выше формате. После того, как загрузчик данных выполнит пакет,list[dict]Встроенные модели его поддерживают.

Выходной формат модели

В режиме обучения встроенная модель выводитdict [str-> ScalarTensor].

В режиме вывода встроенная модель выводит «список [дикт]», по одному словарю на изображение. В зависимости от задачи, которую выполняет модель, каждый словарь может содержать следующие поля:

  • «instances»: объект «Экземпляры» имеет следующие поля:

    • «pred_boxes»: объект Boxes, хранящий N блоков, по одному для каждого обнаруженного экземпляра.
    • "score": "Тензор" представляет собой вектор из N баллов.
    • "пред_классы":Tensor, вектор из N меток в диапазоне [0, num_categories).
    • «pred_masks»: «тензор» формы (N, H, W), маски для каждого обнаруженного экземпляра.
    • «pred_keypoints»: «тензор» формы (N, num_keypoint, 3). Каждая строка в последнем измерении равна (x, y, score). Оценка больше 0.
  • "sem_seg": (num_categories, H, W)Tensor, Прогнозирование семантической сегментации.

  • «предложения»: экземпляр объекта со следующими полями:

    • "proposal_boxes": объект Boxes, в котором хранятся N ящиков.
    • "objectness_logits": вектор-факел из N баллов.
  • "паноптический_сег":(Tensor, list[dict])кортеж из . Тензор имеет форму (H, W), где каждый элемент представляет идентификатор сегмента пикселя. Каждый словарь описывает идентификатор сегмента и имеет следующие поля:

    • "id": идентификатор фрагмента
    • "isthing": является ли фрагмент вещью или материалом
    • "category_id": идентификатор категории этого сегмента. Указывает, что, когда isthing==True, он представляет идентификатор класса вещи, в противном случае он представляет идентификатор класса материала.

Как использовать модель в коде:

Создайте свой собственный с необходимыми ключамиlist [dict]в качестве ввода. тогда позвониoutputs = model(inputs). Например, для логического вывода предоставьте словарю «изображение» и необязательные «высоту» и «ширину».

Обратите внимание, что в режиме обучения все модели должны использоваться в «EventStorage». Статистика тренировок будет храниться:

from detectron2.utils.events import EventStorage
with EventStorage() as storage:
  losses = model(inputs)

Еще одна вещь, о которой следует помнить: модельDetectron2 не поддерживаетmodel.to(device)илиmodel.cpu(). Устройство находится вcfg.MODEL.DEVICEопределяется в и не может быть изменено позже.

Модель частичного исполнения:

Иногда вам может понадобиться получить промежуточные тензоры внутри модели. Ваш API не предоставляется, так как обычно существуют сотни промежуточных тензоров. Промежуточные результаты, которые вам нужны. У вас есть следующие варианты:

  1. Напишите (под)модель. Следуйте инструкциям (обнаружить Ron2.прочитайте документ S.IO/tutorials/i…
  2. Модель частичного исполнения. Вы можете создать модель как обычно, но использовать пользовательский код вместоforward()выполнить его. Например, следующий код получает функции маски перед заголовком маски.
images = ImageList(...)  # 预处理输入张量
model = build_model(cfg)
features = model.backbone(images.tensor)
proposals, _ = model.proposal_generator(images, features)
instances = model.roi_heads._forward_box(features, proposals)
mask_features = model.roi_heads.mask_pooler(features, [x.pred_boxes for x in instances])

Обратите внимание, что оба варианта требуют, чтобы вы прочитали существующий код документации, чтобы понять Как написать код, чтобы получить желаемый результат.

Оригинальная ссылка:обнаружить Ron2.прочитайте документ S.IO/tutorials/no…

Добро пожаловать на сайт блога Panchuang AI:panchuang.net/

sklearn машинное обучение китайские официальные документы:sklearn123.com/

Добро пожаловать на станцию ​​сводки ресурсов блога Panchuang:docs.panchuang.net/