pointNet++ モデルを最初から構築して実行し、一般的な問題を解決するプロセス全体

Tensorflow バージョンの pointNet++ モデルを最初から構築して実行し、一般的な問題を解決します

本次采用的是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 ビデオ メモリを推奨)

おすすめ

転載: blog.csdn.net/weixin_44330367/article/details/132042143
おすすめ