本家様 https://github.com/xingyizhou/CenterNet
nvidiaのカードとしてA2000を搭載して、cuda-11.5がインストール済み. そんな環境で CenterNet を動かしてみる.
CentOS7であるならCentOS/devtoolsetにて「devtoolset-10」とかを入れてGCC-8を使えるようにしておく. GCC-4系は無理っぽい
BCCDデータセットでモデルを作ってみた CenterNet/BCCD
アノテーション作成・表示ツール FiftyOne、LabelImg
既にanaconda/minocondaの利用環境があれば不要だが、なければ作る. っでpython#g1646275のようにanacondaをここでは仕組みます
[illya@rockylinux ~]$ cat /etc/redhat-release
Rocky Linux release 8.6 (Green Obsidian)
[illya@rockylinux ~]$ getenforce
Enforcing
[illya@rockylinux ~]$ wget https://repo.anaconda.com/archive/Anaconda3-2021.11-Linux-x86_64.sh
[illya@rockylinux ~]$ bash ./Anaconda3-2021.11-Linux-x86_64.sh -h
usage: ./Anaconda3-2021.11-Linux-x86_64.sh [options]
Installs Anaconda3 2021.11
-b run install in batch mode (without manual intervention),
it is expected the license terms are agreed upon
-f no error if install prefix already exists
-h print this help message and exit
-p PREFIX install prefix, defaults to /home/illya/anaconda3, must not contain spaces.
-s skip running pre/post-link/install scripts
-u update an existing installation
-t run package tests after installation (may install conda-build)
[illya@rockylinux ~]$
[illya@rockylinux ~]$ bash ./Anaconda3-2021.11-Linux-x86_64.sh -b -p /home/illya/anaconda3
[illya@rockylinux ~]$ ./anaconda3/bin/conda init
(いったんログアウトして再度ログインすると、下記のように表記される)
(base) [illya@rockylinux ~]$
ドキュメントの通りに進めると Ampere より古いGPUカードでしかもcuda-9.2とかに限定される.
ここでは Ampere なカードで cuda-11.7 とかのライブラリで動くようにしてみた.
(base) [illya@rockylinux ~]$ /usr/local/cuda/bin/nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Tue_May__3_18:49:52_PDT_2022
Cuda compilation tools, release 11.7, V11.7.64
Build cuda_11.7.r11.7/compiler.31294372_0
(base) [illya@rockylinux ~]$ conda update conda -y
(base) [illya@rockylinux ~]$ conda create --name CenterNet python=3.7 -y <--- CenterNetのドキュメントでは「python=3.6」なのだが無理っぽいので3.7へ
(base) [illya@rockylinux ~]$ conda activate CenterNet
(CenterNet) [illya@rockylinux ~]$ conda install pytorch torchvision cudatoolkit=11.3 Cython pillow -c pytorch -y <---「Cython」と「pillow」を追加してます.
cocoapiのインストール. 場所は「$HOME/apps」に置いたけど、別に「$HOME」直下に置いてもも構わない
(CenterNet) [illya@rockylinux ~]$ mkdir apps
(CenterNet) [illya@rockylinux ~]$ cd apps/
(CenterNet) [illya@rockylinux apps]$ git clone https://github.com/cocodataset/cocoapi
(CenterNet) [illya@rockylinux apps]$ cd cocoapi/PythonAPI/
(CenterNet) [illya@rockylinux PythonAPI]$
(CenterNet) [illya@rockylinux PythonAPI]$ which python <-- pythonのありか
~/anaconda3/envs/CenterNet/bin/python
(CenterNet) [illya@rockylinux PythonAPI]$ make
(CenterNet) [illya@rockylinux PythonAPI]$ python setup.py install --user
CenterNetのインストール. これも場所は「$HOME/CenterNet」とします
(CenterNet) [illya@rockylinux PythonAPI]$ cd $HOME/apps
(CenterNet) [illya@rockylinux apps]$ git clone https://github.com/xingyizhou/CenterNet
(CenterNet) [illya@rockylinux apps]$ cd CenterNet/
(CenterNet) [illya@rockylinux CenterNet]$ ls -CF
data/ exp/ experiments/ images/ LICENSE models/ NOTICE readme/ README.md requirements.txt src/
(CenterNet) [illya@rockylinux CenterNet]$ which pip <-- pipのありかの確認
~/anaconda3/envs/CenterNet/bin/pip
(CenterNet) [illya@rockylinux CenterNet]$ cat requirements.txt
opencv-python
Cython
numba
progress
matplotlib
easydict
scipy
(CenterNet) [illya@rockylinux CenterNet]$ pip install -r ./requirements.txt
っで構築
(CenterNet) [illya@rockylinux CenterNet]$ cd src/lib/models/networks
(CenterNet) [illya@rockylinux networks]$ ls -l
total 80
drwxrwxr-x. 3 illya illya 194 May 22 22:05 DCNv2
-rw-rw-r--. 1 illya illya 22682 May 22 22:05 dlav0.py
-rw-rw-r--. 1 illya illya 9942 May 22 22:05 large_hourglass.py
-rw-rw-r--. 1 illya illya 10167 May 22 22:05 msra_resnet.py
-rw-rw-r--. 1 illya illya 17594 May 22 22:05 pose_dla_dcn.py
-rw-rw-r--. 1 illya illya 10054 May 22 22:05 resnet_dcn.py
(CenterNet) [illya@rockylinux networks]$
(CenterNet) [illya@rockylinux networks]$ mv DCNv2/ DCNv2.orig <--- 付属のモデルは古いGPUとかに対応のようで、ここでは外す
(CenterNet) [illya@rockylinux networks]$ git clone https://github.com/jinfagang/DCNv2_latest DCNv2
(CenterNet) [illya@rockylinux networks]$ ls -lF
total 80
drwxrwxr-x. 4 illya illya 205 May 22 22:07 DCNv2/ <--- 取得したこっちを使います
drwxrwxr-x. 3 illya illya 194 May 22 22:05 DCNv2.orig/
-rw-rw-r--. 1 illya illya 22682 May 22 22:05 dlav0.py
-rw-rw-r--. 1 illya illya 9942 May 22 22:05 large_hourglass.py
-rw-rw-r--. 1 illya illya 10167 May 22 22:05 msra_resnet.py
-rw-rw-r--. 1 illya illya 17594 May 22 22:05 pose_dla_dcn.py
-rw-rw-r--. 1 illya illya 10054 May 22 22:05 resnet_dcn.py
(CenterNet) [illya@rockylinux networks]$
total 80
drwxrwxr-x. 4 illya illya 205 Mar 13 08:42 DCNv2
drwxrwxr-x. 3 illya illya 194 Mar 13 08:39 DCNv2.orig
-rw-rw-r--. 1 illya illya 22682 Mar 13 08:39 dlav0.py
-rw-rw-r--. 1 illya illya 9942 Mar 13 08:39 large_hourglass.py
-rw-rw-r--. 1 illya illya 10167 Mar 13 08:39 msra_resnet.py
-rw-rw-r--. 1 illya illya 17594 Mar 13 08:39 pose_dla_dcn.py
-rw-rw-r--. 1 illya illya 10054 Mar 13 08:39 resnet_dcn.py
(CenterNet) [illya@rockylinux networks]$ cd DCNv2
(CenterNet) [illya@rockylinux DCNv2]$ pwd
/home/illya/apps/CenterNet/src/lib/models/networks/DCNv2
(CenterNet) [illya@rockylinux DCNv2]$
(CenterNet) [illya@rockylinux DCNv2]$ export PATH=/usr/local/cuda/bin:$PATH
(CenterNet) [illya@rockylinux DCNv2]$ vi ./make.sh <-- make.shを修正します
#!/usr/bin/env bash
rm *.so
rm -r build/
python3 setup.py build develop
(CenterNet) [illya@rockylinux DCNv2]$ ./make.sh
もう一つ
(CenterNet) [illya@rockylinux DCNv2]$ cd $HOME/apps/CenterNet/src/lib/external
(CenterNet) [illya@rockylinux external]$ make
同封されたテストデータで試してみた
「ctdet_coco_dla_2x.pth」はhttps://github.com/xingyizhou/CenterNetから入手可能です。
(CenterNet) [illya@rockylinux ~]$ python apps/CenterNet/src/demo.py ctdet --demo apps/CenterNet/images/17790319373_bd19b24cfc_k.jpg --load_model ./ctdet_coco_dla_2x.pth
画面を閉じる際は、表示された画像の上で「リターンキー」を押下すること.
もうひとつ人のポーズをトレースするもの
(CenterNet) [illya@rockylinux ~]$ python apps/CenterNet/src/demo.py multi_pose --demo apps/CenterNet/images/17790319373_bd19b24cfc_k.jpg --load_model ./multi_pose_dla_3x.pth
注意 「demo.py」はPascal vocデータセットには対応していない.
https://github.com/xingyizhou/CenterNet/blob/master/readme/MODEL_ZOO.mdのPascal VOCモデルを試すには「demo.py」から派生した修正ファイルを使用する必要がある.
参照 https://github.com/xingyizhou/CenterNet/issues/142#issuecomment-515751950
(CenterNet) [illya@rockylinux ~]$ cp apps/CenterNet/src/lib/opts.py apps/CenterNet/src/lib/opts_voc.py
(CenterNet) [illya@rockylinux ~]$ cp apps/CenterNet/src/demo.py apps/CenterNet/src/demo_voc.py
「apps/CenterNet/src/demo_voc.py」を修正します
|
「apps/CenterNet/src/lib/opts_voc.py」を修正します
|
実行方法は
(CenterNet) [illya@rockylinux ~]$ python apps/CenterNet/src/demo_voc.py ctdet --demo apps/CenterNet/images/17790319373_bd19b24cfc_k.jpg --load_model ~/ctdet_pascal_dla_384.pth
とします.
あとモデルファイルで「ctdet_coco_hg」なら「--arch hourglass」、「ctdet_pascal_resdcn18_384」なら「--arch resdcn_18」、「ctdet_pascal_resdcn101_384」なら「--arch resdcn_101」を別途追記します
つまりは前段の「ctdet_coco_dla_2x.pth」を作ってみます. この作り方を覚えれば自分の課題にも対処ができるかなと.
入手可能なデータセットCOCO、Pascal、KITTIからmodelをどう作るのかが下記URLで示されている.
https://github.com/xingyizhou/CenterNet/tree/master/readme
wget http://images.cocodataset.org/zips/train2017.zip
wget http://images.cocodataset.org/zips/val2017.zip
wget http://images.cocodataset.org/zips/test2017.zip
wget http://images.cocodataset.org/annotations/annotations_trainval2017.zip
wget http://images.cocodataset.org/annotations/image_info_test2017.zip
~/apps/CenterNet/data/coco/
|
+ annotations/
| +--- captions_train2017.json
| +--- captions_val2017.json
| +--- image_info_test2017.json
| +--- image_info_test-dev2017.json
| +--- instances_train2017.json
| +--- instances_val2017.json
| +--- person_keypoints_train2017.json
| +--- person_keypoints_val2017.json
|
+ test2017/
+ train2017/
+ val2017/
cd ~/apps/CenterNet/src
# train
python main.py ctdet --exp_id coco_dla_1x --batch_size 128 --master_batch 9 --lr 5e-4 --gpus 0,1,2,3,4,5,6,7 --num_workers 16
# test
python test.py ctdet --exp_id coco_dla_1x --keep_res --resume
# flip test
python test.py ctdet --exp_id coco_dla_1x --keep_res --resume --flip_test
# multi scale test
python test.py ctdet --exp_id coco_dla_1x --keep_res --resume --flip_test --test_scales 0.5,0.75,1,1.25,1.5
cd ..
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCdevkit_18-May-2011.tar
wget https://s3.amazonaws.com/images.cocodataset.org/external/external_PASCAL_VOC.zip
~/apps/CenterNet/data/voc/
|
+ annotations/
| +--- pascal_trainval0712.json
| +--- pascal_test2007.json
|
+ images/
+ VOCdevkit/
cd ~/apps/CenterNet/src
# train
python main.py ctdet --exp_id pascal_resdcn18_512 --arch resdcn_18 --dataset pascal --input_res 512 --num_epochs 70 --lr_step 45,60
# test
python test.py ctdet --exp_id pascal_resdcn18_512 --arch resdcn_18 --dataset pascal --input_res 512 --resume
# flip test
python test.py ctdet --exp_id pascal_resdcn18_512 --arch resdcn_18 --dataset pascal --input_res 512 --resume --flip_test
cd ..
(CenterNet) [illya@rockylinux ~]$ python apps/CenterNet/src/demo_voc.py ctdet --demo apps/CenterNet/images/17790319373_bd19b24cfc_k.jpg --load_model apps/CenterNet/exp/ctdet/pascal_resdcn18_512/model_last.pth --arch resdcn_18
(base) [illya@centos7 ~]$ conda create -n fiftyone python=3.8
(base) [illya@centos7 ~]$ conda activate fiftyone
(fiftyone) [illya@centos7 ~]$ pip install fiftyone