Автор|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 наборов ключевых точек, по одному для каждого экземпляра.
- "gt_boxes": объект Boxes, в котором хранятся 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 не предоставляется, так как обычно существуют сотни промежуточных тензоров. Промежуточные результаты, которые вам нужны. У вас есть следующие варианты:
- Напишите (под)модель. Следуйте инструкциям (обнаружить Ron2.прочитайте документ S.IO/tutorials/i…
- Модель частичного исполнения. Вы можете создать модель как обычно, но использовать пользовательский код вместо
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/