#はじめに
CornerNet-Lite: Efficient Keypoint Based Object Detectionの作者の実装である、githubをWindows 10で動かしたので、ここに記しておきます。
#1.CornerNet-Liteとは
昨年発表された、CornerNet: Detecting Objects as Paired Keypointsを軽くしたもののようです。
CornerNetは日本語での解説も一部ありますから、いろいろ探してみてください。私としては、__Fig.1__の、YOLOv3よりAPが高く、スピードが速いというところに魅力を感じました。まだまだ新しい方法ですので、派生のネットワークが出てくるのではないかと思います。
#2.私のPC
-
Windows 10
-
CPU Intel Core i5-4570S 2.9GHz
-
RAM 16GB
-
GPU RTX2070 8GB
なんか微妙にしょぼいですね。。。GPUに見合うCPUとメモリが欲しい。。。すでに、Visual Studio Community 2017やらCUDA10(cuDNN含む)やらは入っているので、そのあたりは参考にならないので注意してください。(もう一台まっさらなPCで再構成できればいいのですが、そうもいきません。。。)
#3.事前準備
私は、Anaconda環境を使いました。ものによってPythonのバージョンとかが微妙に違うので、仮想環境を使うのがよいと思います。Anacondaのインストールはググってください。本来ならば、CornerNet-Lite
の環境を作ってからクローニングしますが、conda_packagelist.txt
があるはずなので、まずはクローニングします。
(base) F:\Users\sounansu\Anaconda3>git clone https://github.com/princeton-vl/CornerNet-Lite.git CornerNet-Lite
はい、CornerNet-Lite
のディレクトリに移って、仮想環境を作りましょう。
(base) F:\Users\sounansu\Anaconda3\CornerNet-Lite>conda create --name CornerNet_Lite --file conda_packagelist.txt --channel pytorch
略
PackagesNotFoundError: The following packages are not available from current channels:
略
Windows用はpackagelist.txt
にかかれたバージョン等がないのでしょう。
というわけで、地道に入れていきましょう。
(base) F:\Users\sounansu\Anaconda3\CornerNet-Lite>conda create --name CornerNet_Lite python==3.7.1 anaconda
略
done
#
# To activate this environment, use
#
# $ conda activate CornerNet_Lite
#
# To deactivate an active environment, use
#
# $ conda deactivate
仮想環境に移ります。
(base) F:\Users\sounansu\Anaconda3\CornerNet-Lite>conda activate CornerNet_Lite
(CornerNet_Lite) F:\Users\sounansu\Anaconda3\CornerNet-Lite>
PyTorchはPytorchサイトで、私は、Stable,windows,conda,python3.7,cuda10でconda install pytorch torchvision cudatoolkit=10.0 -c pytorch
をえらびました。
(CornerNet_Lite) F:\Users\sounansu\Anaconda3\CornerNet-Lite>conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
これで、事前準備は終わったこととして、CornerNet-Liteを入れていきましょう。
#4.CornerNet-Liteの実行
すでに、git clone
しているので、Compiling Corner Pooling Layersから順番にやっていきましょう。
(CornerNet_Lite) F:\Users\sounansu\Anaconda3\CornerNet-Lite>cd core/models/py_utils/_cpools/
(CornerNet_Lite) F:\Users\sounansu\Anaconda3\CornerNet-Lite\core\models\py_utils\_cpools>python setup.py install --user
略
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2
エラーが出ましたが、issueのここを参考に、
diff --git a/core/models/py_utils/_cpools/src/bottom_pool.cpp b/core/models/py_u
tils/_cpools/src/bottom_pool.cpp
index 8a20a43..9f88c66 100644
--- a/core/models/py_utils/_cpools/src/bottom_pool.cpp
+++ b/core/models/py_utils/_cpools/src/bottom_pool.cpp
@@ -1,4 +1,4 @@
-#include <torch/torch.h>
+#include <torch/extension.h>
#include <vector>
diff --git a/core/models/py_utils/_cpools/src/left_pool.cpp b/core/models/py_uti
ls/_cpools/src/left_pool.cpp
index c36fc1b..90b1e81 100644
--- a/core/models/py_utils/_cpools/src/left_pool.cpp
+++ b/core/models/py_utils/_cpools/src/left_pool.cpp
@@ -1,4 +1,4 @@
-#include <torch/torch.h>
+#include <torch/extension.h>
#include <vector>
diff --git a/core/models/py_utils/_cpools/src/right_pool.cpp b/core/models/py_ut
ils/_cpools/src/right_pool.cpp
index 1b2da43..2ff98e1 100644
--- a/core/models/py_utils/_cpools/src/right_pool.cpp
+++ b/core/models/py_utils/_cpools/src/right_pool.cpp
@@ -1,4 +1,4 @@
-#include <torch/torch.h>
+#include <torch/extension.h>
#include <vector>
diff --git a/core/models/py_utils/_cpools/src/top_pool.cpp b/core/models/py_util
s/_cpools/src/top_pool.cpp
index bc63c49..6719357 100644
--- a/core/models/py_utils/_cpools/src/top_pool.cpp
+++ b/core/models/py_utils/_cpools/src/top_pool.cpp
@@ -1,4 +1,4 @@
-#include <torch/torch.h>
+#include <torch/extension.h>
#include <vector>
のように修正しました。もう一度コーナープーリングをコンパイルしましょう。
(CornerNet_Lite) F:\Users\sounansu\Anaconda3\CornerNet-Lite\core\models\py_utils\_cpools>python setup.py install --user
略
Finished processing dependencies for cpools==0.0.0
うまくいったようです。次は、Compiling NMSです。
(CornerNet_Lite) F:\Users\sounansu\Anaconda3\CornerNet-Lite\core\models\py_utils\_cpools>cd ../../../external
(CornerNet_Lite) F:\Users\sounansu\Anaconda3\CornerNet-Lite\core\external>make
1 [main] make 8172 find_fast_cwd: WARNING: Couldn't compute FAST_CWD pointer. Please report this problem to
the public mailing list cygwin@cygwin.com
python setup.py build_ext --inplace
make: python: Command not found
Makefile:2: recipe for target `all' failed
make: *** [all] Error 127
makefileのどこがわるのかよくわからないので、これまたissueのここを参照して、
(CornerNet_Lite) F:\Users\sounansu\Anaconda3\CornerNet-Lite\core\external>python setup.py build_ext --inplace
略
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2
これも、issueにあって
index ca3bd04..c1dfb4c 100644
--- a/core/external/setup.py
+++ b/core/external/setup.py
@@ -7,12 +7,12 @@ extensions = [
Extension(
"bbox",
["bbox.pyx"],
- extra_compile_args=["-Wno-cpp", "-Wno-unused-function"]
+ extra_compile_args={'gcc': ['/Qstd=c99']}
),
Extension(
"nms",
["nms.pyx"],
- extra_compile_args=["-Wno-cpp", "-Wno-unused-function"]
+ extra_compile_args={'gcc': ['/Qstd=c99']}
)
]
のように修正しました。あらためて実行すると、
(CornerNet_Lite) F:\Users\sounansu\Anaconda3\CornerNet-Lite\core\external>python setup.py build_ext --inplace
略
コード生成が終了しました。
次に、まずは、出来合いのウエイトデータでインファレンスが動くかやってみましょう。Downloading Modelsに書かれている、google driveからデータをダウンロードして、<CornerNet-Lite dir>/cache/nnet/CornerNet_Saccade/,<CornerNet-Lite dir>/cache/nnet/CornerNet_Squeeze/,<CornerNet-Lite dir>/cache/nnet/CornerNet/
にそれぞれ入れてください。
これで準備がおわったので、Running the Demo Scriptにあるように、python demo.py
を実行してみましょう。
(CornerNet_Lite) F:\Users\sounansu\Anaconda3\CornerNet-Lite>python demo.py
Traceback (most recent call last):
File "demo.py", line 3, in <module>
import cv2
ModuleNotFoundError: No module named 'cv2'
opencvを入れましょう。
(CornerNet_Lite) F:\Users\sounansu\Anaconda3\CornerNet-Lite>conda install opencv
さて、またpython demo.py
を実行してみましょう。
(CornerNet_Lite) F:\Users\sounansu\Anaconda3\CornerNet-Lite>python demo.py
total parameters: 116969339
loading from F:\Users\sounansu\Anaconda3\CornerNet-Lite\core\..\cache\nnet\CornerNet_Saccade\CornerNet_Saccade_500000.pkl
F:\Users\sounansu\Anaconda3\envs\CornerNet_Lite\lib\site-packages\torch\nn\functional.py:2539: UserWarning: Default upsampling behavior when mode=bilinear is changed to align_corners=False since 0.4.0. Please specify align_corners=True if the old behavior is desired. See the documentation of nn.Upsample for details.
"See the documentation of nn.Upsample for details.".format(mode))
(CornerNet_Lite) F:\Users\sounansu\Anaconda3\CornerNet-Lite>dir demo*.jpg
ドライブ F のボリューム ラベルは 記憶域 です
ボリューム シリアル番号は ACCF-E884 です
F:\Users\sounansu\Anaconda3\CornerNet-Lite のディレクトリ
2019/05/10 22:29 323,088 demo.jpg
2019/05/12 14:38 219,824 demo_out.jpg
2 個のファイル 542,912 バイト
実行結果を置いておきます。
うまくいっているようです。
#おわりに
一応これでインファレンスができるようになりました。途中git make
等もinstallしました。すでに、cudaやVSCをインストールしていたので、そのあたりでのつまずきはなかったです。
もし、うまくいかないとかありましたら、コメントに書いてくださいましたら、わかる範囲でお答えいたします。トレーニングもできるようになっているのですが、いろいろと、トラップが存在します。がんばってトレーニングも投稿しますので、、、期待せずに待っていてください。
では。