Torchreidは、Pytorchで書かれ、ICCV'19プロジェクトのために開発された、Pytorchで開発された深い学習者の再識別のための図書館です。
特徴:
コード:https://github.com/kaiyangzhou/deep-person-reid。
ドキュメント:https://kaiyangzhou.github.io/deep-person-reid/。
ハウツー指示:https://kaiyangzhou.github.io/deep-person-reid/user_guide。
モデル動物園:https://kaiyangzhou.github.io/deep-person-reid/model_zoo。
技術レポート:https://arxiv.org/abs/1910.10093。
ここでは、トーチリードの上に構築されたいくつかの研究プロジェクトを見つけることができます。
osnet_ain_x0_75 、 osnet_ain_x0_5 、およびosnet_ain_x0_25のImagENET-PRETRENEDモデルをリリースしました。事前削除のセットアップは、ピクルに続きます。tools/parse_test_res.pyを参照してください。v1.4.0 :cuhk-sysuの人を検索データセットを追加しました。データセットのダウンロード方法に関するドキュメントをご覧ください(トリミングされた人の画像が含まれています)。v1.3.6 、マルチビューマルチソース地理ローカリゼーション(Zhedong Zhengのクレジット)の新しいデータセットであるUniversity-1652を追加しました。v1.3.5 :CythonコードはWindowsで動作します(Lablablaのクレジット)。v1.3.3 : visrankのバグを修正しました( dsetidを開梱しないことによって引き起こされます)。v1.3.2 : _junk_pids gridとpridに追加しました。これによりcombineall=Trueを設定するときにトレーニングに誤ったラベルギャラリー画像を使用することが避けられます。v1.3.0 :(1)既存の3タプルデータソースにdsetidを追加し、 (impath, pid, camid, dsetid)になりました。この変数はデータセットIDを示し、トレーニング用の複数のデータセットを組み合わせるときに役立ちます(データセットインジケーターとして)。たとえば、 market1501とcuhk03を組み合わせると、前者はdsetid=0が割り当てられ、後者にはdsetid=1が割り当てられます。 (2) RandomDatasetSamplerを追加しました。 RandomDomainSamplerに類似して、 RandomDatasetSamplerサンプラーは、指定された各データセット(量はnum_datasetsによって決定されます)から特定の数の画像( batch_size // num_datasets )をサンプリングします。v1.2.6 : RandomDomainSamplerを追加しました(それぞれbatch_size // num_cams画像を使用してそれぞれnum_camsカメラをサンプリングしてミニバッチを形成します)。v1.2.5 :(1) __getitem__からのDataloaderの出力は、 listからdictに変更されました。以前は、 imgs=data[0]で画像テンソルなどの要素がフェッチされていました。これで、 imgs=data['img']で取得する必要があります。詳細な変更については、このコミットを参照してください。 (2)データローダーを画像化するオプションとしてk_tfm追加しました。これにより、データの増強をImageに個別にk_tfmに適用できます。 k_tfm > 1の場合、 imgs=data['img'] k_tfm画像テンソルを使用してリストを返します。projects/attribute_recognition/参照してください。v1.2.1 :機能抽出のための簡単なAPIを追加しました( torchreid/utils/feature_extractor.py )。指示のドキュメントを参照してください。projects/DMLでリリースされました。v1.2.0にアップグレード。エンジンクラスは、拡張性を向上させるためにモデルに依存しないようになりました。詳細については、エンジンとImagesoftMaxengineを参照してください。 dassl.pytorchへのクレジット。ImageDataManager load_train_targets=Trueを設定することにより、ターゲットデータセットからトレーニングデータをロードでき、トレインローダーにtrain_loader_t = datamanager.train_loader_tでアクセスできます。この機能は、ドメイン適応研究に役立ちます。 Condaがインストールされていることを確認してください。
# cd to your preferred directory and clone this repo
git clone https://github.com/KaiyangZhou/deep-person-reid.git
# create environment
cd deep-person-reid/
conda create --name torchreid python=3.7
conda activate torchreid
# install dependencies
# make sure `which python` and `which pip` point to the correct path
pip install -r requirements.txt
# install torch and torchvision (select the proper cuda version to suit your machine)
conda install pytorch torchvision cudatoolkit=9.0 -c pytorch
# install torchreid (don't need to re-build it if you modify the source code)
python setup.py developインストールする別の方法は、すべてをDockerコンテナ内で実行することです。
make build-imagemake run torchreidをインポートします import torchreid datamanager = torchreid . data . ImageDataManager (
root = "reid-data" ,
sources = "market1501" ,
targets = "market1501" ,
height = 256 ,
width = 128 ,
batch_size_train = 32 ,
batch_size_test = 100 ,
transforms = [ "random_flip" , "random_crop" ]
)3ビルドモデル、オプティマイザー、LR_SCHEDULER
model = torchreid . models . build_model (
name = "resnet50" ,
num_classes = datamanager . num_train_pids ,
loss = "softmax" ,
pretrained = True
)
model = model . cuda ()
optimizer = torchreid . optim . build_optimizer (
model ,
optim = "adam" ,
lr = 0.0003
)
scheduler = torchreid . optim . build_lr_scheduler (
optimizer ,
lr_scheduler = "single_step" ,
stepsize = 20
) engine = torchreid . engine . ImageSoftmaxEngine (
datamanager ,
model ,
optimizer = optimizer ,
scheduler = scheduler ,
label_smooth = True
) engine . run (
save_dir = "log/resnet50" ,
max_epoch = 60 ,
eval_freq = 10 ,
print_freq = 10 ,
test_only = False
)「Deep-Person-Reid/Scripts/」では、モデルを訓練およびテストするための統一されたインターフェイスを提供します。詳細については、「scripts/main.py」および「scripts/default_config.py」を参照してください。フォルダー「configs/」には、出発点として使用できるいくつかの定義済みの構成が含まれています。
以下に、OSNETを訓練およびテストする例を示します(Zhou etal。ICCV'19)。 PATH_TO_DATA Reidデータセットを含むディレクトリであると仮定します。環境変数CUDA_VISIBLE_DEVICES省略されています。これは、GPUのプールがあり、特定のセットを使用するかどうかを指定する必要があります。
Market1501でOSNETをトレーニングするには、そうします
python scripts/main.py
--config-file configs/im_osnet_x1_0_softmax_256x128_amsgrad_cosine.yaml
--transforms random_flip random_erase
--root $PATH_TO_DATA構成ファイルは、Market1501をデフォルトのデータセットとして設定します。 dukemtmc-reidを使用したい場合は、
python scripts/main.py
--config-file configs/im_osnet_x1_0_softmax_256x128_amsgrad_cosine.yaml
-s dukemtmcreid
-t dukemtmcreid
--transforms random_flip random_erase
--root $PATH_TO_DATA
data.save_dir log/osnet_x1_0_dukemtmcreid_softmax_cosinelrコードは自動的に(ダウンロードして)イメージネットの前処理された重みをロードします。トレーニングが完了すると、モデルは「log/osnet_x1_0_market1501_softmax_cosinelr/model.pth.tar-250」として保存されます。同じフォルダーの下に、テンソルボードファイルを見つけることができます。 Tensorboardを使用して学習曲線を視覚化するには、 tensorboard --logdir=log/osnet_x1_0_market1501_softmax_cosinelrをターミナルで実行し、 http://localhost:6006/をご覧ください。
評価は、トレーニングの終了時に自動的に実行されます。訓練されたモデルを使用して再度テストを実行するには、
python scripts/main.py
--config-file configs/im_osnet_x1_0_softmax_256x128_amsgrad_cosine.yaml
--root $PATH_TO_DATA
model.load_weights log/osnet_x1_0_market1501_softmax_cosinelr/model.pth.tar-250
test.evaluate Truedukemtmc-reidでosnetをトレーニングし、market1501でそのパフォーマンスをテストしたいとしますか?
python scripts/main.py
--config-file configs/im_osnet_x1_0_softmax_256x128_amsgrad.yaml
-s dukemtmcreid
-t market1501
--transforms random_flip color_jitter
--root $PATH_TO_DATAここでは、クロスドメインのパフォーマンスのみをテストします。ただし、ソースデータセットのパフォーマンスをテストする場合は、つまりDukemtmc -reidをテストする場合は、2つのデータセットのモデルを個別に評価する-t dukemtmcreid market1501を設定できます。
同じドメイン設定とは異なり、ここではrandom_eraseをcolor_jitterに置き換えます。これにより、目に見えないターゲットデータセットの一般化パフォーマンスが向上します。
モデル動物園では、事前に保護されたモデルを利用できます。
このコードまたは研究でモデルを使用する場合は、次の論文にクレジットを付けてください。
@article{torchreid,
title={Torchreid: A Library for Deep Learning Person Re-Identification in Pytorch},
author={Zhou, Kaiyang and Xiang, Tao},
journal={arXiv preprint arXiv:1910.10093},
year={2019}
}
@inproceedings{zhou2019osnet,
title={Omni-Scale Feature Learning for Person Re-Identification},
author={Zhou, Kaiyang and Yang, Yongxin and Cavallaro, Andrea and Xiang, Tao},
booktitle={ICCV},
year={2019}
}
@article{zhou2021osnet,
title={Learning Generalisable Omni-Scale Representations for Person Re-Identification},
author={Zhou, Kaiyang and Yang, Yongxin and Cavallaro, Andrea and Xiang, Tao},
journal={TPAMI},
year={2021}
}