本家様 https://github.com/xingyizhou/CenterNet

nvidiaのカードとしてA2000を搭載して、cuda-11.5がインストール済み. そんな環境で CenterNet を動かしてみる.
CentOS7であるならCentOS/devtoolsetにて「devtoolset-10」とかを入れてGCC-8を使えるようにしておく. GCC-4系は無理っぽい

BCCDデータセットでモデルを作ってみた CenterNet/BCCD
アノテーション作成・表示ツール FiftyOneLabelImg

conda環境の準備

既に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 ~]$

CenterNet 構築

ドキュメントの通りに進めると 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

2022y03m13d_053409579.png

画面を閉じる際は、表示された画像の上で「リターンキー」を押下すること.

もうひとつ人のポーズをトレースするもの

(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

2022y05m22d_141406681.png

注意 「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/demo.py        2022-05-22 22:05:02.520256453 +0900
+++ ./apps/CenterNet/src/demo_voc.py    2022-05-23 23:28:37.201004945 +0900
@@ -7,7 +7,7 @@
 import os
 import cv2
 
-from opts import opts
+from opts_voc import opts
 from detectors.detector_factory import detector_factory
 
 image_ext = ['jpg', 'jpeg', 'png', 'webp']

「apps/CenterNet/src/lib/opts_voc.py」を修正します

--- apps/CenterNet/src/lib/opts.py      2022-05-22 22:05:02.522256470 +0900
+++ apps/CenterNet/src/lib/opts_voc.py  2022-05-23 23:46:11.504512577 +0900
@@ -335,9 +335,9 @@
 
   def init(self, args=''):
     default_dataset_info = {
-      'ctdet': {'default_resolution': [512, 512], 'num_classes': 80,
-                'mean': [0.408, 0.447, 0.470], 'std': [0.289, 0.274, 0.278],
-                'dataset': 'coco'},
+      'ctdet': {'default_resolution': [512, 512], 'num_classes': 20,
+                'mean': [0.485, 0.456, 0.406], 'std': [0.229, 0.224, 0.225],
+                'dataset': 'pascal'},
       'exdet': {'default_resolution': [512, 512], 'num_classes': 80,
                 'mean': [0.408, 0.447, 0.470], 'std': [0.289, 0.274, 0.278],
                 'dataset': 'coco'},

実行方法は

(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」を別途追記します

modelを作ってみる

つまりは前段の「ctdet_coco_dla_2x.pth」を作ってみます. この作り方を覚えれば自分の課題にも対処ができるかなと.
入手可能なデータセットCOCO、Pascal、KITTIからmodelをどう作るのかが下記URLで示されている.
https://github.com/xingyizhou/CenterNet/tree/master/readme

  • cocoデータセット 本家様 https://cocodataset.org/
    https://cocodataset.org/#downloadから
    2017 Train, 2017 Val, 2017 Testのイメージデータとannotationファイルを取得する
    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
    これらファイルを解凍して、下記のようなannotationsフォルダを作る
    ~/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/
    「~/apps/CenterNet/experiments」にモデルの作り方があって「coco_dla_1x」なら
    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 ..
    になるみたい. 実行中のログは「~/apps/CenterNet/exp/ctdet/coco_dla_1x」に記載される.
    モデルの構築ですが、本家様は使っているノードがTITAN V GPUが8枚のマシンで作っているようで小さい計算ノードでは無理がある.
    batch_sizeを小さくすれば一応は動くかと.

  • Pascal VOCデータセット 本家様http://host.robots.ox.ac.uk/pascal/VOC/
    「CenterNet/src/tools/get_pascal_voc.sh」を参考にフォルダを構成を作る. 一部ファイルが見えないがamazonさんに置いてあるみたい.
    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 ..
    これも動かなく、「--batch_size XX」を入れると動いた
    っで完成したモデルファイルを使ってみる
    (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
    2022y05m23d_235836322.png
    ぅーん、、上手く拾えていない? 下図は本家様の「ctdet_pascal_resdcn18_384.pth」を使った場合
    2022y05m24d_000207167.png

fiftyone

(base) [illya@centos7 ~]$ conda create -n fiftyone python=3.8
(base) [illya@centos7 ~]$ conda activate fiftyone
(fiftyone) [illya@centos7 ~]$ pip install fiftyone

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2022-05-24 (火) 21:07:17 (123d)