Мощный отечественный инструмент ReID с открытым исходным кодом

глубокое обучение

окрестности

  • убунту 18.04 64 бит
  • GTX 1070Ti
  • anaconda with python 3.7
  • pytorch 1.6.0 + CUDA 10.1
  • fast-reid 1.3.0

предисловие

FastReIDJD.comAIисследовательский институтSOTAКлассReIDПлатформа для исследования алгоритмов, а также самая полная и производительная на данный момент.ReIDНабор инструментов, включая обучение модели, оценку модели, тонкую настройку модели и развертывание модели. Раздел обучения поддерживает не только одиночную карту, но и мультикарту.GPUобучение, а также поддерживает обучение на нескольких машинах (multiple machines).

FastReIDне только для пешеходовReID, но и для других объектов, таких как транспортные средства.ReID, наборы данных обучаемых транспортных средств по умолчанию включаютVeRi,VehicleIDиVERIWild, сценарии применения очень широки.

Архитектура

Это схема архитектуры системы, вырезанная из его статьи.

fast-reid

Приведенный выше рисунок содержит 2 части: часть обучения и часть вывода.

Учебная часть включает в себя

  1. Pre-processingто есть предварительная обработка, включая различные методы увеличения данных, такие какResize,Flipping,Random erasing,Auto-augment,Random patch,CutoutЖдать

  2. Backboneмагистральная сеть, напримерResNet,ResNest,ResNeXt,IBN(Instance Batch Normalization),Non-local

  3. AggregationТо есть агрегация, которая объединяет функции, созданные магистральной сетью, в глобальную функцию, такую ​​какAttention,Gem Pooling,Avg Pooling,Max pooling

  4. HeadМодуль для нормализации и уменьшения широты сгенерированных глобальных признаков

  5. Lossчасть, в том числеCross-entropy loss,Triplet loss,Arcface loss,Circle loss

  6. Кроме того, с точки зрения стратегии обучения мы используем включениеLearning rate,warm-up,Backbone freeze,Consine decay

В мотивировочную часть входят

  1. Distance MetricМетрика расстояния, поддерживает евклидово расстояние, косинус иDeep Spatial Reconstruction(DSR)

  2. Post processingПостобработка,K-reciprocalиQuery Expansion(QE)

повторяющийся

Создайте новую виртуальную среду

conda create -n pytorch1.6 python=3.7
conda activate pytorch1.6

Затем перейдите к исходному коду, текущая стабильная версияv1.3.0

wget https://github.com/JDAI-CV/fast-reid/archive/refs/tags/v1.3.0.zip
unzip v1.3.0.zip
cd fast-reid-1.3.0

Наконец, установите другие зависимости

# 如果没有gpu的话,就pip install torch torchvision即可
pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
pip install -r docs/requirements.txt

# 使用cython加速
pip install cython
cd fastreid/evaluation/rank_cylib
make all

обучение и проверка

FastReIDРазличные наборы данных уже поддерживаются изначально, напримерMarket-1501,DukeMTMC,MSMT17,VehicleID,VeRiиVERIWild. Набор данных по умолчанию хранится вdatasetпапку, ну и конечно же через переменные окруженияFASTREID_DATASETSуказать другие каталоги или сделать ссылку на реальный каталог данных с помощью программных ссылок.

Здесь мы используемMarket-1501Возьмите набор данных в качестве примера для обучения, сначала загрузите набор данных

Ссылка на сайт:disk.baidu.com/is/1i9loveZX-E…
Код извлечения:up8x

После загрузки извлеките его в каталогdatasetНиже структура каталогов выглядит так

(pytorch1.6) xugaoxiang@1070Ti:~/workshop/fast-reid-1.3.0/datasets$ tree -d
.
└── Market-1501-v15.09.15
    ├── bounding_box_test
    ├── bounding_box_train
    ├── gt_bbox
    ├── gt_query
    └── query

6 directories

Затем вы можете тренироваться, используя команду

python tools/train_net.py --config-file ./configs/Market1501/bagtricks_R50.yml

fast-reid

Оцените обученную модель

python tools/train_net.py --config-file ./configs/Market1501/bagtricks_R50.yml --eval-only MODEL.WEIGHTS "logs/market1501/bagtricks_R50/model_final.pth"

fast-reid

Визуализация результатов обучения

python ./demo/visualize_result.py --config-file "configs/Market1501/AGW_R50.yml" --vis-label --dataset-name 'Market1501' --output 'logs/market1501/agw_R50/agw_market1501_vis' --opts MODEL.WEIGHTS "logs/market1501/agw_R50/model_final.pth"

сообщил об ошибке здесь

Traceback (most recent call last):
  File "demo/visualize_result.py", line 127, in <module>
    distmat = distmat.numpy()
TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

мы модифицируемdemo/visualize_result.pyL127 в

distmat = distmat.numpy()

изменить на

distmat = distmat.cpu().numpy()

Я отправил в официальный репозиторийpr, надеюсь, что это может быть объединено. Затем мы снова выполняем приведенный выше скрипт.

fast-reid

результаты сохраняются вlogs/market1501/agw_R50/agw_market1501_visВниз

fast-reid

fast-reid

Конвертировать в другие форматы

FastReIDпредоставляет рядpythonСкрипт, который поможет вам быстро внедритьfastreidконвертировать модель в другие форматы, такие какCaffe,ONNX,TRTЖдать

fast-reid

Здесь мы беремonnxНапример, взгляните на конкретные шаги

python tools/deploy/onnx_export.py --config-file configs/Market1501/bagtricks_R50.yml --name baseline_R50 --output onnx_model --opts MODEL.WEIGHTS logs/market1501/bagtricks_R50/model_final.pth

fast-reid

После конвертации мы готовим несколько фотографий одного и того же человека и помещаем их вinputв папке

fast-reid

выполнить следующий

python tools/deploy/onnx_inference.py --model-path onnx_model/baseline_R50.onnx --input input/*.jpg --output onnx_output

fast-reid

использованная литература