本家様 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

fiftyone

(base) [illya@centos7 ~]$ conda create -n fiftyone python=3.8
(base) [illya@centos7 ~]$ conda activate fiftyone
(fiftyone) [illya@centos7 ~]$ pip install fiftyone
最新の60件
2023-12-06 2023-12-05 2023-11-30 2023-11-27 2023-11-21 2023-11-19 2023-11-18 2023-11-14 2023-11-10 2023-11-09 2023-11-05 2023-11-03 2023-10-31 2023-10-30 2023-10-26 2023-10-24 2023-10-19 2023-10-16 2023-10-15 2023-10-12 2023-10-11 2023-10-09 2023-10-03 2023-10-02 2023-09-30 2023-09-29 2023-09-26 2023-09-24 2023-09-19 2023-09-18 2023-09-17 2023-09-16 2023-09-14 2023-09-12 2023-09-11 2023-09-08 2023-09-05 2023-09-02 2023-08-30 2023-08-29

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-05-24 (火) 21:07:17