1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/rWySp2020-mmtracking

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
customize_mot_model.md 8.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 19:32 8c2b4a3

Настройка моделей MOT

Мы в основном классифицируем компоненты модели на 5 типов.

  • Трекер: компонент, который связывает объекты на видео с помощью сигналов, извлечённых компонентами ниже.
  • Детектор: обычно детектор для обнаружения объектов на входном изображении, например, Faster R-CNN.
  • Движение: компонент для вычисления информации о движении между последовательными кадрами, например, KalmanFilter.
  • ReID: обычно независимая модель ReID для извлечения вложений признаков из обрезанного изображения, например, BaseReID.
  • Head трека: компонент для извлечения сигналов отслеживания, но использует одну и ту же основу с детектором, например, встраивающая голова или регрессионная голова.

Добавить новый трекер

1. Определить трекер (например, MyTracker)

Создать новый файл mmtrack/models/mot/trackers/my_tracker.py.

Реализовать BaseTracker, который предоставляет основные API для поддержания треков на видео. Мы рекомендуем наследовать новый трекер от него. Пользователи могут обратиться к документации BaseTracker для получения подробной информации.

from mmtrack.models import TRACKERS
from .base_tracker import BaseTracker

@TRACKERS.register_module()
class MyTracker(BaseTracker):

    def __init__(self,
                 arg1,
                 arg2,
                 *args,
                 **kwargs):
        super().__init__(*args, **kwargs)
        pass

    def track(self, inputs):
        # реализация игнорируется
        pass

2. Импортировать модуль

Можно добавить следующую строку в mmtrack/models/mot/trackers/__init__.py:

from .my_tracker import MyTracker

или альтернативно добавить:

custom_imports = dict(
    imports=['mmtrack.models.mot.trackers.my_tracker.py'],
    allow_failed_imports=False)

в конфигурационный файл и избежать изменения исходного кода.

3. Изменить конфигурационный файл

tracker=dict(
    type='MyTracker',
    arg1=xxx,
    arg2=xxx)

Добавить новый детектор

Пожалуйста, обратитесь к учебнику по mmdetection для разработки нового детектора.

Добавить новую модель движения

1. Определить модель движения (например, MyFlowNet)

Создать новый файл mmtrack/models/motion/my_flownet.py.

Вы можете наследовать модель движения от nn.Module, если это модуль глубокого обучения, и от object, если нет.

from ..builder import MOTION

@MOTION.register_module()
class MyFlowNet(nn.Module):

    def __init__(self,
                arg1,
                arg2):
        pass

    def forward(self, inputs):
        # реализация игнорируется
        pass

2. Импортировать модуль

Можно добавить следующую строку в mmtrack/models/motion/__init__.py:

from .my_flownet import MyFlowNet

или альтернативно добавить:

custom_imports = dict(
    imports=['mmtrack.models.motion.my_flownet.py'],
    allow_failed_imports=False)

в конфигурационный файл и избежать изменения исходного кода.

3. Изменить конфигурационный файл

motion=dict(
    type='MyFlowNet',
    arg1=xxx,
    arg2=xxx)

Добавить новую модель ReID

1. Определить модель ReID (например, MyReID)

Создать новый файл mmtrack/models/reid/my_reid.py.

from ..builder import REID

@REID.register_module()
class MyReID(nn.Module):

    def __init__(self,
                arg1,
                arg2):
        pass

    def forward(self, inputs):
        # реализация игнорируется
        pass

2. Импортировать модуль

Можно добавить следующую строку в mmtrack/models/reid/__init__.py:

from .my_reid import MyReID

или альтернативно добавить:

custom_imports = dict(
    imports=['mmtrack.models.reid.my_reid.py'],
    allow_failed_imports=False)

в конфигурационный файл и избежать изменения исходного кода.

3. Изменить конфигурационный файл

reid=dict(
    type='MyReID',
    arg1=xxx,
    arg2=xxx)

Добавить новую голову трека

1. Определить голову (например, MyHead)

Создать новый файл mmtrack/models/track_heads/my_head.py.

from mmdet.models import HEADS

@HEADS.register_module()
class MyHead(nn.Module):

    def

*Здесь текст обрывается.* ```
__init__(self,
         arg1,
         arg2):
    pass

def forward(self, inputs):
    # implementation is ignored
    pass

2. Импортируйте модуль

Вы можете либо добавить следующую строку в mmtrack/models/track_heads/__init__.py,

from .my_head import MyHead

либо добавить

custom_imports = dict(
    imports=['mmtrack.models.track_heads.my_head.py'],
    allow_failed_imports=False)

в конфигурационный файл и избежать изменения исходного кода.

3. Измените конфигурационный файл

track_head=dict(
    type='MyHead',
    arg1=xxx,
    arg2=xxx)

Добавьте новую потерю

Предположим, вы хотите добавить новую потерю как MyLoss для регрессии ограничивающего прямоугольника. Чтобы добавить новую функцию потерь, пользователи должны реализовать её в mmtrack/models/losses/my_loss.py. Декоратор weighted_loss позволяет взвешивать потери для каждого элемента.

import torch
import torch.nn as nn

from ..builder import LOSSES
from .utils import weighted_loss

@weighted_loss
def my_loss(pred, target):
    assert pred.size() == target.size() and target.numel() > 0
    loss = torch.abs(pred - target)
    return loss

@LOSSES.register_module()
class MyLoss(nn.Module):

    def __init__(self, reduction='mean', loss_weight=1.0):
        super(MyLoss, self).__init__()
        self.reduction = reduction
        self.loss_weight = loss_weight

    def forward(self,
                pred,
                target,
                weight=None,
                avg_factor=None,
                reduction_override=None):
        assert reduction_override in (None, 'none', 'mean', 'sum')
        reduction = (
            reduction_override if reduction_override else self.reduction)
        loss_bbox = self.loss_weight * my_loss(
            pred, target, weight, reduction=reduction, avg_factor=avg_factor)
        return loss_bbox

Затем пользователи должны добавить его в mmtrack/models/losses/__init__.py.

from .my_loss import MyLoss, my_loss

В качестве альтернативы вы можете добавить

custom_imports=dict(
    imports=['mmtrack.models.losses.my_loss'])

в конфигурационный файл для достижения той же цели.

Чтобы использовать его, измените поле loss_xxx. Поскольку MyLoss предназначен для регрессии, вам необходимо изменить поле loss_bbox в заголовке.

loss_bbox=dict(type='MyLoss', loss_weight=1.0))

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/rWySp2020-mmtracking.git
git@api.gitlife.ru:oschina-mirror/rWySp2020-mmtracking.git
oschina-mirror
rWySp2020-mmtracking
rWySp2020-mmtracking
master