Tensorflow バージョンの pointNet++ モデルを最初から構築して実行し、一般的な問題を解決します
- 1. Ubuntu18システムのインストールと初期化
- 2. ソースコードとデータセットのダウンロード
- 3. pointNet++の構築に必要な環境(Anaconda、Cuda、cuDNN、Pytorch、Python)
-
- 1. グラフィックカードドライバーのダウンロードとインストール
- 2. Anaconda と Cuda のインストールと設定
- 3.cudnnのインストールと構成
- cudnn のインストール中に次のエラーが発生した場合: libcudnn7-doc_7.4.2.24-1+cuda10.0_amd64.deb は Debian 形式のパッケージ ファイルではありません
- 4. Python環境とtensorflow依存ライブラリのインストールと設定
- python3-pip ライブラリのインストール時に次のエラーが報告された場合: 次のパッケージには満たされていない依存関係があります。
- tensorflow のテスト時に次のエラーが発生した場合: TypeError: 記述子を直接作成できません。
- 5. gcc5 および g++5 のインストールと設定
- 4. pointNet++ を実行します。
-
- 1. tfのスクリプトファイルを修正する
- 2. コンパイルしてsoファイルを出力
- この手順を実行しないと、コンパイル中に次のエラーが表示される可能性があります: /usr/bin/ld: can not find -ltensorflow_frameworkcollect2: error: ld returns 1 exit status
- chmod および cd コマンドが実行されていない場合、次のエラーが表示されます: gcc: error: tf_sampling_g.cu: No such file or directory
- 3. pointNet++ ソースコードを変更する
- 4. トレーニング モデルを実行する
- 5. 運用上の一般的な問題の解決
-
- 1.报错:{NotFoundError}libcudart.so.10.0: 共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません
- 2.报错:{NotFoundError}/home/sdg/code/pointnet2-master/tf.ops/sampling/tf.sampling_so.s0:( 未定義のシンボル: _ZM10temsorflow120pDefBuilder4AttrESs
- 3.报错:FileNotFoundError: [Errno 2] そのようなファイルまたはディレクトリはありません:'/home/sdg/code/pointnet2-master/data/modelnet40_normal_resampled/shape_names.txt'
- 4.报错:{AttributeError}モジュール 'provider' には属性 'rotate_point_cloud' がありません
- 5.报错: デバイスから 64.00M (67108864 バイト) を割り当てることができませんでした: CUDA_ERROR_OUT_OF_MEMORY: メモリ不足
本次采用的是Tensorflow版的pointNet++模型
服务器环境是Ubuntu18/python3.7/cuda10.0/cudnn7.4/tensorflow-gpu1.4/g++5
参考:ゼロベース再現 pointNet++ モデル チュートリアルおよびpointnet++ pointnet2 コード実行ナニーレベル チュートリアル
1. Ubuntu18システムのインストールと初期化
参考: Ubuntu18 システムのインストールと初期化 (SSH サービス、ネットワーク構成)
Ubuntu16 システムがインストールされている場合は、次のコマンドを実行して Ubuntu18 にアップグレードできます。
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo apt autoremove
sudo do-release-upgrade
2. ソースコードとデータセットのダウンロード
1. pointNet++ ソースコード
ダウンロードアドレス: https: //github.com/charlesq34/pointnet2
ダウンロードしたpointnet2-master.zipファイルをサーバーにコピーし、実行します。unzip pointnet2-master.zip
2. ModelNet40 データセット (メッシュからの XYZ および法線、10k ポイント)
ダウンロードアドレス:modelnet40_normal_resampled.zip
ダウンロードしたデータセットファイルをpointnet2-masterプログラムのデータディレクトリにコピーし、コマンドを実行してunzip modelnet40_normal_resampled.zip
データセットを解凍します。
3. h5 形式の ModelNet40 データセット (メッシュからの XYZ および法線、2048 ポイント)
ダウンロードアドレスmodelnet40_ply_hdf5_2048.zip
ダウンロードしたデータセットファイルをpointnet2-masterプログラムのデータディレクトリにコピーし、unzip modelnet40_ply_hdf5_2048.zip
コマンドを実行してデータセットを解凍します。
3. pointNet++の構築に必要な環境(Anaconda、Cuda、cuDNN、Pytorch、Python)
独自のグラフィックス カード ハードウェアと組み合わせて、次の図に従ってグラフィックス カード ドライバー、cuda、cudnn、tensorflow のバージョンを一致させます。今回選択した環境は
/cuda10.0/cudnn7.4/tensorflow-gpu1.4
1. グラフィックカードドライバーのダウンロードとインストール
以下を参照してください: Ubuntu 物理マシンにグラフィックス カード ドライバーをインストールするいくつかの方法
(1) このグラフィックス カードに適したドライバーを確認します。ubuntu-drivers devices
(2) ドライバー ソースを追加します: sudo add-apt-repository ppa:graphics-drivers/ppa
(3) ソフトウェア ソースを更新します: sudo apt-get update
(4) システムが推奨するグラフィック カード ドライバーをインストールします: sudo apt-get install nvidia-driver-470
(5) nvidia-cuda-toolkit ツールをインストールします: sudo apt-get install nvidia-cuda-toolkit
(6) グラフィック カード ドライバーが適切かどうかをテストします。正常にインストールされました:nvidia-smi
2. Anaconda と Cuda のインストールと設定
Anaconda と Cuda のインストール構成は次を参照できます: Ubuntu は Pytorch 環境を構築します (Anaconda、Cuda、cuDNN、Pytorch、Python、Pycharm、Jupyter)、Cuda のバージョンに注意してください、私は cuda10.0 を使用します
3.cudnnのインストールと構成
ゼロベースの再現 pointNet++ モデルのチュートリアルを参照してください。
cudnn のインストール中に次のエラーが発生した場合: libcudnn7-doc_7.4.2.24-1+cuda10.0_amd64.deb は Debian 形式のパッケージ ファイルではありません
3 番目のパッケージのインストール元が破損していることが原因ですので、次の手順で cudnn7.4 をインストールすることをお勧めします。
(1) まず /usr/local ディレクトリに切り替えて、ディレクトリ CuDNN を作成します。
cd /usr/local
mkdir CuDNN
cd CuDNN
(2) https://developer.nvidia.com/rdp/cudnn-archiveに移動して、必要なファイルをダウンロードします。
(3) ダウンロードしたファイルを /usr/local/CuDNN/ ディレクトリにコピーし、
次のコマンドを実行して CUDNN7 をインストールします。 .4.2、ここにインストールします 順序は次のようにする必要があります。
sudo dpkg -i libcudnn7_7.4.2.24-1+cuda10.0_amd64.deb
sudo dpkg -i libcudnn7-dev_7.4.2.24-1+cuda10.0_amd64.deb
sudo dpkg -i libcudnn7-doc_7.4.2.24-1+cuda10.0_amd64.deb
(4) ファイルを /usr/local/cuda/include フォルダーにコピーし、権限を変更します。
sudo cp /usr/include/cudnn.h /usr/local/cuda/include
sudo chmod a+x /usr/local/cuda/include/cudnn.h
(5) インストールが成功したかどうかを確認するテスト コマンド:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
4. Python環境とtensorflow依存ライブラリのインストールと設定
(1) デフォルトの仮想環境 (ベース環境) をアクティブ化します。source activate
(2) python3.7 に基づいて torch という名前の仮想環境を作成します。conda create -n torch python=3.7
(3) 作成した torch 仮想環境に切り替えます。conda activate torch
(4) python3-pip ライブラリをインストールします。sudo apt-get install python3-pip
python3-pip ライブラリのインストール時に次のエラーが報告された場合: 次のパッケージには満たされていない依存関係があります。
apt-get の代わりに aptitude インストールを使用できます。aptitude は依存関係の問題をよりインテリジェントに処理します。
apt-get install aptitude
sudo aptitude install python3-pip
(5) その他の依存ライブラリをインストールします: pip install numpy scipy matplotlib pylint
(6) tensorflow をインストールします:pip install tensorflow-gpu==1.14.0
インストール後、python -c 'import tensorflow as tf; print(tf.__version__)'
GPU が使用できるかどうかを確認するテストを実行すると、tensorflow のバージョン情報が表示されます 注
: このステップで警告が表示されるのは正常です。 -強迫性障害の場合は、プロンプトに従って応答ファイルを括弧で囲むことができます。「1」が「(1,)」に変更されます。これは Python クラスの問題が原因であり、無視できます。
tensorflow のテスト時に次のエラーが発生した場合: TypeError: 記述子を直接作成できません。
まず を入力してpip uninstall protobuf
既存のバージョンをアンインストールし
、次に を入力してpip install protobuf==3.19.0
対応するバージョンを再インストールします
5. gcc5 および g++5 のインストールと設定
(1) gcc5 および g++5 をインストールします。sudo apt install gcc-5 g++-5
(2) gcc および g++ のバージョン情報を確認します。
gcc -v
g++ -v
バージョンを確認すると、gcc と g++ がまだ gcc7 と g++7 を指していることがわかるため、ソフト リンクを手動で変更する必要があります。
(3) /usr/bin ディレクトリに入り、古いソフト リンクをバックアップします。
cd /usr/bin
sudo mv gcc gcc_backup
sudo mv g++ g++_backup
(4) 新しいソフトリンクを作成する
sudo ln -s gcc-5 gcc
sudo ln -s g++-5 g++
(5) 再度 gcc と g++ のバージョン情報を確認すると、すでに 5 になっています。
gcc -v
g++ -v
4. pointNet++ を実行します。
1. tfのスクリプトファイルを修正する
(1) /pointnet2-master/tf_ops/ ディレクトリに入り、以下のファイルを変更します。
vi tf_ops/sampling/tf_sampling_compile.sh
vi tf_ops/grouping/tf_grouping_compile.sh
vi tf_ops/3d_interpolation/tf_interpolate_compile.sh
(2) tf_sampling_compile.sh を例にとると、元の内容は次のとおりです。
(3) 修正内容は以下の通りです:
1. 今回はtensorflow1.14を使用し、TF1.2の内容をコメントアウトし、TF1.4のコメントを解除します 2.
今回使用したgcc5のバージョンはgccの場合バージョンが 4 より大きい場合、オプション -D_GLIBCXX_USE_CXX11_ABI = 0 はコンパイル スクリプトに必要ありません。削除します。
3. 自分でインストールした cuda と tensorflow のパスを確認します。
- cuda パス: インストールしたバージョンに応じて/usr/local/cuda-${ VERSION } を置き換えます。私のものは /usr/local/cuda-10.0 です。
- tensorflow のパス:
python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())'
コマンドを実行します。出力は tensorflow のパスです。私のパスは /opt/anaconda3/envs/torch/lib/python3.7/site-packages/tensorflow です。
スクリプト内の cuda パスと tensorflow パスを次のように置き換えます。
原内容 | 置き換えられたコンテンツ |
---|---|
/usr/local/cuda-8.0 | /usr/local/cuda-10.0 |
/usr/local/lib/python2.7/dist-packages/tensorflow | /opt/anaconda3/envs/torch/lib/python3.7/site-packages/tensorflow |
(4) 変更内容は次のとおりです。
2. コンパイルしてsoファイルを出力
(1) 次のコマンドを実行して、libtensorflow_framework.so ファイルを取得します (独自の tensorflow ディレクトリに応じて変更します)
cd /opt/anaconda3/envs/torch/lib/python3.7/site-packages/tensorflow/
cp libtensorflow_framework.so.1 libtensorflow_framework.so
この手順を実行しないと、コンパイル中に次のエラーが表示される可能性があります: /usr/bin/ld: can not find -ltensorflow_frameworkcollect2: error: ld returns 1 exit status
(2) 以下のコマンドを実行し、so ファイルをコンパイルして出力します (自分の pointnet2-master のディレクトリに合わせて変更します)
cd /home/sdg/code/pointnet2-master/tf_ops/grouping/
chmod 777 tf_grouping_compile.sh
sh tf_grouping_compile.sh
cd /home/sdg/code/pointnet2-master/tf_ops/sampling/
chmod 777 tf_sampling_compile.sh
sh tf_sampling_compile.sh
cd /home/sdg/code/pointnet2-master/tf_ops/3d_interpolation/
chmod 777 tf_interpolate_compile.sh
sh tf_interpolate_compile.sh
chmod および cd コマンドが実行されていない場合、次のエラーが表示されます: gcc: error: tf_sampling_g.cu: No such file or directory
(3) コンパイルが完了すると、対応する .cu.o および .so ファイルが取得されます。
3. pointNet++ ソースコードを変更する
python2 と python3 の文法的な違いにより、コード内のxrange を range に置き換え、print の後に括弧を追加する必要があります。
4. トレーニング モデルを実行する
(1) 対応する仮想環境に切り替えます: conda activate torch
(2) トレーニング モデルを実行します:python train.py
5. 運用上の一般的な問題の解決
1.报错:{NotFoundError}libcudart.so.10.0: 共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません
エラーの理由: anaconda と cuda の環境変数に問題があります。
解決策: anaconda と cuda のディレクトリを確認し、関連する環境変数を追加します。
2.报错:{NotFoundError}/home/sdg/code/pointnet2-master/tf.ops/sampling/tf.sampling_so.s0:( 未定義のシンボル: _ZM10temsorflow120pDefBuilder4AttrESs
エラーの理由: gcc バージョンが 4 より大きい場合、コンパイル スクリプトにオプション -D_GLIBCXX_USE_CXX11_ABI = 0 は必要ありません。
解決策: 上記 3 つのコンパイル スクリプトの -D_GLIBCXX_USE_CXX11_ABI = 0 を削除します。
3.报错:FileNotFoundError: [Errno 2] そのようなファイルまたはディレクトリはありません:'/home/sdg/code/pointnet2-master/data/modelnet40_normal_resampled/shape_names.txt'
エラーの理由: 関連するファイルが見つかりません。
解決策: data/modelnet40_normal_resampled/ の下にある modelnet40_shape_names.txt ファイルの名前をshape_names.txt に変更します。
4.报错:{AttributeError}モジュール 'provider' には属性 'rotate_point_cloud' がありません
エラーの原因: Python ファイルの名前が、使用されているサードパーティ ライブラリによって引き起こされるエラーと同じです。ソース コードに Provider.py ファイルがあるため、プロバイダ ライブラリをインストールする必要はありません。
解決策: インストールされているプロバイダ ライブラリ (pip アンインストール プロバイダ) をアンインストールすると、インポート プロバイダの赤いフラグは動作に影響しません。
5.报错: デバイスから 64.00M (67108864 バイト) を割り当てることができませんでした: CUDA_ERROR_OUT_OF_MEMORY: メモリ不足
エラーの理由: グラフィックス カードのメモリが不十分です
解決策: グラフィックス カードを交換します (24G ビデオ メモリを推奨)