spconvの古いVer1.2.1のインストールが苦労したメモ

AI

3D物体検出でspconvのライブラリを使っていたところエラーが出ました。

元々参照していたのが古いVer1.xのライブラリでした。

何とか環境維持しつつ、エラー消すために再度ビルドした内容を紹介します。

 

spconvの古いVer1.2.1のインストールが苦労したメモ

3D物体検出(Voxelnet、Second)の手法でspconvというライブラリがよく使われています。

LIDARなどのカメラ座標を変換する際に使用されています。

GitHub - traveller59/spconv: Spatial Sparse Convolution Library
Spatial Sparse Convolution Library. Contribute to traveller59/spconv development by creating an account on GitHub.

 

最新のVer2.xはpipでspconvインストールできます。

但し、古いの3D物体検出のコードだと古いspconv(Ver1.x)が利用されています。

ソースもあるので再度コンパイルすれば良いのですが、結果エラー出るケースも多々です。

 

実行環境

あくまで下記の環境の一例ですが、エラーと対応した内容を参考までに紹介します。

  • Vitis AI 2.5
  • spconv v1.2.1
  • 第6回AIエッジコンテストのリファレンス環境

 

第6回AIエッジコンテストのリファレンスをVitis AI 2.5の環境で動かそうとしました。

 https://github.com/pometa0507/6th-ai-reference2

SECONDという3D物体検出の手法がベースとなっています。

上記例では古いspconv(v1.2.1)が使われていました。

 

最終的にはFPGAで使えるようにしたく、Vitis AIのdocker上の環境でテストしています。

Vitis AIの環境については下記記事で紹介しています。

VItis AI 2.5やPetaLinuxなどインストールしてみたメモ

Vitis AI GPU dockerの環境構築をしたメモ

 

本当に個人的なメモです。

一応その当時はVitis AI上で古いspconvを実行出来ましたが、正しい手順かは不明です。

(CUDAのVerの整合も取れていないです)あくまで参考までにお願いします

 

Vitis AI上でspconv1.2.1をビルドするとエラー

まずは何も考えずに、Vitis AIのGPU版の環境下で古いspconvをビルドすると…

 

下記のようにGPUのCUDAのMakeが無いよ、とエラーがでます。

 

これはVitis AIのデフォルトにはcuda-toolokitとかが入っていないからだと思います。

Vitis AIのConda環境が複雑な環境なためです。下記記事で一度紹介しています。

Vitis AIでPytorchのConda環境を新しく構築してみた

 

ただ、cuda-toolokitを入れなおして環境変数とか触っても下記のようなエラーが出ます。

GPUのmake環境整えるの少し面倒だな…と思って、別の手段を試してみました。

(本来は、使う環境でビルドするべきなのですが…)

 

新しいspconvをpipで入れてもエラー

新しいspconvを入れて試してもエラーになりました。pipで簡単に入れれます。

spconvのGithub上に各CUDAのVerに合わせたビルド済の環境が置かれています。

 https://github.com/traveller59/spconv

 

pipでインストールして、使おうとするとインポートでエラーになりました。

やはり古いspconvのソースファイルから少し弄る必要がありそうです。

ImportError: cannot import name 'non_max_suppression' from 'spconv.utils' 

 

 

Colab上でspconv1.2.1をビルドしたのを持ってくる

第6回AIエッジコンテストのリファレンスはColab上でも実施できました。

Colab上では簡単に古いspconvをビルド出来る環境が整っています。

 https://github.com/pometa0507/6th-ai-reference2/blob/master/notebook/colab/1-2_create_dataset_metadata_colab.ipynb

 

また2022年の秋ごろはColabのPythonのVerも3.7でした。

(Vitis AI上でデフォルトのCondaを入れ替えた環境でもPython3.7)

そのためColab上で一度ビルドしたものを、Vitis AI上に持っていき、動くのかテストしました。

(ただ本来CUDAのVerとか色々帳尻合わせないといけないと思います。)

 

※現在はColabのPythonのVer3.7から上がって、全く同じ手法は取れなくなっています。

おそらくPythonのVerを合わせれば同様なことは出来ると思います。

(再確認までは出来ていないです。すみません)

 

ソースファイルを修正する

その当時、単純にColabでビルドしたspconvをVitis AIに持っていってもエラーになりました。

インストールはできるのですが、pipの時と同様に下記エラーが出ました

ImportError: cannot import name 'non_max_suppression' from 'spconv.utils'

 

spconvのGithubの履歴を見て色々試したのですが、下記を直すと実行出来ました。

ビルド周辺の怪しいバグを手当たり次第、テストしていました。

BUG: bug fix that allows for a pip installation without the missing libcuhash.so error. Can now be uploaded to a pypi server by sioan · Pull Request #268 · traveller59/spconv
BUG: bug fix that allows for a pip installation without the missing libcuhash.so error. Can now be uploaded to a pypi server.

 

最終的には古いspconv(v1.2.1)のソースファイルに、上記修正を盛り込む形でした。

「setup.py」と「spconv/__init__.py」の2つのファイルを直しました。

数か所なので下記のようにColab上で対応した後に再ビルドしています。

 

Colab上での再度ビルド

その当時のColabでのビルドした履歴(Gist)も貼り付けておきます。

やっていることはリファレンスの手順と変わりません。

 

古いspconv(1.2.1)をインストール出来ました

何とかVitis AI環境上で古いspconv(1.2.1)がインストール出来ました。

(正直と色々と怪しいビルドなのですが…)

 

Successfully installed spconv-1.2.1

 

3D物体検出の評価を試しても結果はOK

念のためにデータセットを整えて、Vitis AI上でも3D物体検出の評価結果を確認します。

リファレンスの結果と同じになりました。

特にspconv関連でもエラー無しでした。とりあえずインストールがOKとします。

 https://github.com/pometa0507/6th-ai-reference2/blob/master/notebook/colab/1-4_inference_colab.ipynb

 

Vitis AI上での実行したコマンド

Vitis AIのdocker上で実行したコマンドとしては下記となります。

(リファレンス参考にデータセットの前処理・学習などは実施済の環境です。)

 

まとめ

古い3D物体検出を動かす時には古いspconvを使う機会があると思います。

ただGithubの履歴を見ながら、地道にエラーを消していくしかなかったです。

やはり可能な限り、新しい環境(mmdetection3dなど)を使いたいところです。

 

もし同様なエラー出ている方がいれば、ご参考にしてください。

コメント