HRNetをWindowsで動作確認しましたので、その手順を記載します。
HRNet
HRNetとは?
高解像度~低解像度を並列実行することで、高解像度を維持し、各解像度の特徴量のギャップを減少します。
Deep High-Resolution Representation Learning for Human Pose Estimation
K.Sun, B.Xiao, D.Liu, J.Wang, Microsoft Research Asia, 2019.
https://arxiv.org/abs/1902.09212
HRNetのGitHub
GitHubには、姿勢推定用コードだけでなく、様々な用途(領域分割、物体検出、画像分類、顔ランドマーク検出)用コードも公開されています。
動作確認
動作確認対象
領域分割のコードを動作確認しました。
Pytorch 0.4.1、Pytorch 1.1、HRNet + OCRの3バージョンのうち、Pytorch 0.4.1、Pytorch 1.1の2バージョンを動作確認しました。
HRNet-Semantic-Segmentation
https://github.com/HRNet/HRNet-Semantic-Segmentation
動作確認環境
torch 1.4.0
torchvision 0.5.0
Python 3.7.4
Windows 10
GeForce GTX 1050 Ti 専用GPUメモリ 4.0GB
CUDA 10.1
cuDNN 7.6.2
nvidia driver 441.45
Visual Studio 2019
変更点
Inplace-ABN
私の環境では、Inplace-ABNを標準のBNに変更しました。
Inplace-ABNはメモリ消費を削減する効果があります。
しかし、GPU1枚では関係ないとのことです。
また、v0.4.1では、内部でC++ソースコードをコンパイルする必要があります。
開発環境の要件を幾つかクリアする必要があり、私の開発環境では断念しました。
文字コードを英語にする、等で解消できる可能性はあります。
-
v0.4.1
lib\models\seg_hrnet.py
InPlaceABNSyncを削除し、nn.BatchNorm2dに変更。
nn.ReLUのinplaceはFalseからTrueに変更。 -
v1.1
tools\train.py
nn.SyncBatchNorm.convert_sync_batchnormを削除。
分散学習
PyTorchは、Windowsでは、分散学習をサポートしていないので、無効にした。
- v1.1
tools\train.py
nn.parallel.DistributedDataParallelをnn.DataParallelに変更。
lib\utils\utils.py
torch.distributed.is_initializedをis_availableに変更。
開発環境
PyTorch v0.4.1のCUDAは9.2ですが、
上記の変更を行うことで、
v0.4.1コードもCUDA 10.1で動作確認しました。
ハイパーパラメータ
-
v0.4.1
yamlの指定をsmallバージョンに変更。
GPUSを(0,)に変更。
WORKERSを0に変更。 -
v1.1
yamlの指定をsmallバージョンに変更。
GPUSを(0,)に変更。
WORKERSを0に変更。
その他
torchsummaryのsummaryはエラーになります。
動作結果
Pytorch 0.4.1、Pytorch 1.1両方で、train.py, test.py共に動作することを確認しました。
動作確認ですので、値の大小は気にしないでください。
v0.4.1
- train
2020-07-12 11:18:39,433 Epoch: [0/1] Iter:[2900/2975], Time: 0.42, lr: 0.000364, Loss: 0.920190
2020-07-12 11:19:10,873 => saving checkpoint to output\cityscapes\seg_hrnet_w18_small_v1_512x1024_sgd_lr1e-2_wd5e-4_bs_12_epoch484checkpoint.pth.tar
2020-07-12 11:26:09,648 Loss: 0.551, MeanIU: 0.3185, Best_mIoU: 0.3185
2020-07-12 11:26:09,649 [8.90093562e-01 4.82133573e-01 7.44949369e-01 0.00000000e+00
7.46722365e-03 3.42546150e-01 6.24819950e-05 3.81725337e-01
8.42626474e-01 3.17069704e-01 7.76947559e-01 5.12606485e-01
0.00000000e+00 6.06305701e-01 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 1.46073571e-01]
2020-07-12 11:26:09,732 Hours: 0
2020-07-12 11:26:09,732 Done
- test
2020-07-12 16:56:18,841 processing: 400 images
2020-07-12 16:56:18,970 mIoU: 0.3187
2020-07-12 18:09:16,441 MeanIU: 0.3242, Pixel_Acc: 0.8665, Mean_Acc: 0.3931, Class IoU:
2020-07-12 18:09:16,471 [9.09264962e-01 4.76516629e-01 7.60600283e-01 0.00000000e+00
1.47533559e-03 3.58354385e-01 2.10131315e-05 4.02326516e-01
8.55247714e-01 3.37153738e-01 7.78925237e-01 5.36398270e-01
0.00000000e+00 6.49926948e-01 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 9.44377346e-02]
2020-07-12 18:09:16,522 Mins: 157
2020-07-12 18:09:16,522 Done
v1.1
- train
2020-07-13 00:35:23,786 Epoch: [0/1] Iter:[2900/2975], Time: 0.46, lr: 0.000364, Loss: 0.971087
2020-07-13 07:20:23,035 => saving checkpoint to output\cityscapes\seg_hrnet_w18_small_v1_512x1024_sgd_lr1e-2_wd5e-4_bs_12_epoch484checkpoint.pth.tar
2020-07-13 07:20:23,497 Loss: 0.688, MeanIU: 0.2749, Best_mIoU: 0.2749
2020-07-13 07:20:23,498 [0.8741192 0.43420978 0.66894394 0. 0.04506454 0.29985142
0. 0.24258245 0.80402744 0.24535251 0.67287447 0.44294556
0. 0.49247732 0. 0. 0. 0.
0. ]
2020-07-13 07:20:23,592 Hours: 7
2020-07-13 07:20:23,592 Done
- test
2020-07-13 08:36:38,596 processing: 400 images
2020-07-13 08:36:38,596 mIoU: 0.2722
2020-07-13 08:52:25,544 MeanIU: 0.2786, Pixel_Acc: 0.8311, Mean_Acc: 0.3495, Class IoU:
2020-07-13 08:52:25,544 [0.88729298 0.41326129 0.68817204 0. 0.01781714 0.31907421
0. 0.22556153 0.82695122 0.26384412 0.667692 0.47245012
0. 0.51207316 0. 0. 0. 0.
0. ]
2020-07-13 08:52:25,605 Mins: 79
2020-07-13 08:52:25,605 Done
参考
他のコード
HRNetは他にもあります。
Multi-person Human Pose Estimation with HRNet in PyTorch
https://github.com/stefanopini/simple-HRNet
私のコード
私の方で行った変更は上記の通りで、限定的ですので、githubにアップロードしていません。
問合せありましたら、考えます。