окрестности
- убунту 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, сценарии применения очень широки.
Архитектура
Это схема архитектуры системы, вырезанная из его статьи.
Приведенный выше рисунок содержит 2 части: часть обучения и часть вывода.
Учебная часть включает в себя
-
Pre-processingто есть предварительная обработка, включая различные методы увеличения данных, такие какResize,Flipping,Random erasing,Auto-augment,Random patch,CutoutЖдать -
Backboneмагистральная сеть, напримерResNet,ResNest,ResNeXt,IBN(Instance Batch Normalization),Non-local -
AggregationТо есть агрегация, которая объединяет функции, созданные магистральной сетью, в глобальную функцию, такую какAttention,Gem Pooling,Avg Pooling,Max pooling -
HeadМодуль для нормализации и уменьшения широты сгенерированных глобальных признаков -
Lossчасть, в том числеCross-entropy loss,Triplet loss,Arcface loss,Circle loss -
Кроме того, с точки зрения стратегии обучения мы используем включение
Learning rate,warm-up,Backbone freeze,Consine decay
В мотивировочную часть входят
-
Distance MetricМетрика расстояния, поддерживает евклидово расстояние, косинус иDeep Spatial Reconstruction(DSR) -
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
Оцените обученную модель
python tools/train_net.py --config-file ./configs/Market1501/bagtricks_R50.yml --eval-only MODEL.WEIGHTS "logs/market1501/bagtricks_R50/model_final.pth"
Визуализация результатов обучения
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, надеюсь, что это может быть объединено. Затем мы снова выполняем приведенный выше скрипт.
результаты сохраняются вlogs/market1501/agw_R50/agw_market1501_visВниз
Конвертировать в другие форматы
FastReIDпредоставляет рядpythonСкрипт, который поможет вам быстро внедритьfastreidконвертировать модель в другие форматы, такие какCaffe,ONNX,TRTЖдать
Здесь мы берем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
После конвертации мы готовим несколько фотографий одного и того же человека и помещаем их вinputв папке
выполнить следующий
python tools/deploy/onnx_inference.py --model-path onnx_model/baseline_R50.onnx --input input/*.jpg --output onnx_output