ディープラーニング - ubuntu18.04+RTX3080 に RandLA-NET をインストールした全記録

1. まず、RandLA-NET の github アドレスを見つけます
https://github.com/QingyongHu/RandLA-Net
2. RandLA-Net のインストール ドキュメントを確認し、作成者が使用しているシステムが Ubuntu 16.04 であることと、環境構成を確認します。は Python 3.5 + Tensorflow 1.11 + CUDA 9.0 + cuDNN 7.4.1 なので、Python 3.5 + Tensorflow 1.11 + CUDA 9.0 + cuDNN 7.4.1 の環境も使用することにしましたが、CUDA 9.0 をダウンロードしたところ、 Ubuntu 18.04には適用されません。
ここに画像の説明を挿入

3. システムを再インストールする必要がないので、Ubuntu 18.04 をサポートする環境をインストールすることにしました.
図に示すように、Python、Tensorflow、CUDA、cuDNN のバージョンは厳密に対応しています。著者のテスト環境では引き続き Tensorflow v1 を使用できるため、Python 3.5+Tensorflow 1.14+CUDA 10.0+cuDNN 7.4.1 を選択しました。
ここに画像の説明を挿入
4. 次に、Tensorflow、CUDA、cuDNN のインストールを開始します。
4.1 CUDAのインストール
CUDAのダウンロードアドレス 図
に示すように、公式のインストールガイドに従ってインストールを開始し、インストールパッケージをダウンロードして、コマンドを実行します

Run `sudo sh cuda_10.0.130_410.48_linux.run`

ここに画像の説明を挿入
以下のインストールオプションを選択する際に「y」をクリックした結果、グラフィックカードドライバーのcudaバージョンも変更され、コンピューターが再起動してしまい、グラフィックカードドライバーがなくなっていたことが原因であることが判明しました。 Linux-x86_64 410.48 用の NVIDIA アクセラレーテッド グラフィックス ドライバーをインストールしますか? グラフィックス カードの cuda ドライバーが上書きされないように、n を選択します。

  Do you accept the previously read EULA?   # ctrl+c 可加快速度
  accept/decline/quit: accept
  
  Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
  (y)es/(n)o/(q)uit: n
  
  Install the CUDA 10.0 Toolkit?
  (y)es/(n)o/(q)uit: y
  
  Enter Toolkit Location
   [ default is /usr/local/cuda-10.0 ]: 
  
  Do you want to install a symbolic link at /usr/local/cuda?
  (y)es/(n)o/(q)uit: y
  
  Install the CUDA 10.0 Samples?
  (y)es/(n)o/(q)uit: y
  
  Enter CUDA Samples Location
   [ default is /home/user ]: 

そこで、cudaをアンインストールした後、グラフィックカードドライバーとcudaを再インストールする予定です。https://blog.csdn.net/baidu_37366055/article/details/124299588によると、アンインストールして再起動すると、コンピューターが黒い画面になっていることが判明したので、黒い画面の問題を解決し始めました。私の他のブログhttps://editor を参照してください。 csdn.net/md/?articleId =127470370
黒い画面の問題を解決した後、グラフィックス カード ドライバーも再インストールされ、cuda のインストールを続けます。今度は「Linux-x86_64 410.48 用 NVIDIA アクセラレーション グラフィックス ドライバーをインストールしますか? n」を選択します。インストール結果は以下の通りです。

- Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-10.0
Samples:  Installed in /home/***, but missing recommended libraries
  Please make sure that
  - PATH includes /usr/local/cuda-10.0/bin
  - LD_LIBRARY_PATH includes /usr/local/cuda-10.0/lib64, or, add /usr/local/cuda-10.0/lib64 to /etc/ld.so.conf and run ldconfig as root
  To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-10.0/bin

次に、環境変数
sudo gedit ~/.bashrcを追加します。

  export PATH="/usr/local/cuda-10.0/bin:$PATH"
  export LD_LIBRARY_PATH="/usr/local/cuda-10.0/lib64/:$LD_LIBRARY_PATH"

source ~/.bashrc
最後にインストールが成功したかどうかをテストします

    cd ~/NVIDIA_CUDA-10.0_Samples/1_Utilities/deviceQuery
    sudo make
    ./deviceQuery

パスが
4.2 に成功したことが示され、cuDNN のインストールが開始されます。cuDNN
のダウンロード アドレス
https://blog.csdn.net/fulin9452/article/details/111560913には 2 つのインストール方法が記載されており、ubuntu ユーザーには deb パッケージを使用することが推奨されています。 , しかし、私はこの方法に従います インストール後、テストが失敗したことが判明しました。そこで、tgz のインストール方法に切り替えます。
解凍ファイル

sudo tar -xvf cudnn-10.0-linux-x64-v7.6.5.32.tgz

ファイルをコピーする

sudo cp cuda/include/* /usr/local/cuda-10.0/include/
sudo cp cuda/lib64/* /usr/local/cuda-10.0/lib64/

最後にインストールが成功したかどうかをテストします

 cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2  #查看cudnn的版本

5. 次に、Tensorflow のインストールを開始します。
オンライン チュートリアルによると、conda を使用して Tensorflow 仮想環境を作成し、そこに Tensorflow をインストールします。後で作成した randlanet 仮想環境では使用できないことがわかります。異なる仮想環境間の環境は相互に使用できないことを理解していますが、cuda と cudnn はローカルにインストールされており、その後の成功したテストでは、仮想環境がローカル環境を使用できることが示されています。Tensorflow はローカルまたは randlanet 仮想環境にインストールできます。仮想環境を把握した後、Tensorflow を randlanet 仮想環境にインストールしました。もちろん、インストールするには手順 6 を完了する必要があります。インストール コマンドは次のとおりです。

pip install tensorflow-gpu==1.14.0

インストールが成功したかどうかをテストする
仮想環境で実行する

python
import tensorflow as tf
tf.__version__
tf.test.is_gpu_available()

その結果、protobuf のバージョン エラーが import tensorflow で tf として報告されるため、protobuf のバージョンが更新されます。

pip install --upgrade "protobuf==3.20.*"

バージョンが出力され、エラーが報告されなければ、インストールは成功です。
6. 次に、いよいよ RandLA-NET のインストールを開始します。
公式インストールガイドに従って、ローカルの RandLA-NET パスで次の 4 つの手順を実行します。

conda create -n randlanet python=3.5#创建名为randlanet的虚拟环境,python编译器版本3.5
source activate randlanet#激活虚拟环境,以后只要跑该虚拟环境下的程序,都需要先激活
pip install -r helper_requirements.txt#安装依赖
sh compile_op.sh#编译c++程序

7. 次に、データの準備を開始します

準備したデータをkitti形式でパス「/home/username/catkin_ws/RandLA-Net/data/semantic_kitti/dataset/sequences」配下に置き、ファイルdata_prepare_semantickitti.py内のデータ読み取りアドレスは絶対パスとします。図に示すように、
ここに画像の説明を挿入
python utils/data_prepare_semantickitti.py を実行すると、データ準備作業は比較的時間がかかります...
8. その後、考えているトレーニング作業を開始できます。

トレーニングスクリプトを実行する

python main_SemanticKITTI.py --mode train --gpu 0

その結果、まだ多くの質問が私を待っています...

  • まず、データ読み取りパスを変更する必要があります
    ここに画像の説明を挿入
  • Python3.5バージョンは廃止されました

9. 次に、Python を 3.7 に変更し、Python 3.7 + Tensorflow 1.14 + CUDA 10.0 + cuDNN 7.4.1 を使用してトレーニングを再開します。このとき、
open3d が使用できないというエラーが報告されます。以上、コメントアウトするとスムーズに解決します。ただし、まだいくつかの問題があり、具体的な問題は忘れられていますが、情報を確認したところ、現在の構成では tf2.0 以降を使用する必要があることがわかりました。
10. そこで、cuda と cudnn を再インストールしないように、Python 3.7+Tensorflow 2.0+CUDA 10.0+cuDNN 7.4.1 を選択しました。
tf 1.0 から tf 2.0 への変更は大きな変更です。案の定、コードでは多くの文法エラーが報告されましたが、いくつかの試みの後、すべてのバージョン切り替えの問題を解決するには、わずかな修正だけで済みました。意思

import tensorflow as tf

と置換する

import tensorflow.compat.v1 as tf

RandLANET.py に tensorflow.compat.v1 を tf としてインポートした後に追加します

tf.disable_v2_behavior()

次に、nearest_neighbors の問題があります。これは C++ でコンパイルされて生成されたファイルであることがわかりました。最初は怖かったです。どうすれば解決できますか? Python では C++ が不足してしまいました。苦労した後、原因がわかりました。エラーは、複数のダイナミック ライブラリでファイルが異なるバージョンでコンパイルおよび生成されるためでした。解決策は、これらのダイナミック ライブラリとすべてのコンパイル済みファイルをビルドし、lib を削除し、再コンパイルして問題を解決することです。いよいよフォワードプロパゲーションとバックプロパゲーションのトレーニング段階に入りました。そうです、思うように通常のトレーニングが開始できませんでした。CUDA がエラーを報告しました。情報を確認したところ、30 シリーズのグラフィックス カードは CUDA 11 と CUDA 11 のみをサポートしていることがわかりました。その上。
11. 最後に Python3.7+Tensorflow2.5+CUDA 11.2+cuDNN8.1 を再インストールし
、最終的に通常のトレーニング プロセスに入り、その後 2 日間の長いトレーニング時間が続きました...
12. tensorboard を使用して
RandLA-NET を視覚化し、 train_log の視覚化ファイル。RandLA-NET パスの下に次のコマンドを入力します。

tensorboard --logdir=train_log

Webページ上の図の出力URL http://localhost:6006を開きます
ここに画像の説明を挿入13.batch_size、batch、spoch、stepsの意味

  • バッチとバッチサイズは
    2000 個のデータサンプルがあると仮定し、バッチサイズ = 100 に設定すると、バッチ = 2000/100 = 20 となります。
    注:
    バッチサイズには通常 32、64、128 などの 2 の N 乗がかかり、バッチの計算は次のようになります。も丸められます。
  • ステップ、反復、エポック
    ステップと反復: どちらもまったく同じ意味で、どちらもパラメータ更新の数を指します。
    エポックの場合: すべてのサンプルがトレーニングされ、1 エポックとしてカウントされます。
    サンプルは合計 2000 個あり、batch_size=100 なので、batch=20 となります。
    Epoch=1 は、2000 個のサンプルすべてがトレーニングに 1 回参加することを意味し、この時点では、step=iteration=batch=20 になります。これは、ステップと反復がパラメーターの数を表し、深層学習は、batch_size データを実行した後にのみ実行されるためです。パラメータはバックプロパゲーション後にのみ更新されます。
    したがって、epoch=2 の場合、step=iteration=20*2=40 と推定できます。
    参考: https://blog.csdn.net/qq_41915623/article/details/124847431

14. トレーニングが完了したら、テストを開始します

sh jobs_test_semantickitti.sh

テストは、テスト フォルダーの下にあるテスト セットの各フレームの予測結果を生成します。テスト プロセスでは、リアルタイムのセグメント化された点群を同時に表示することはできず、最後に予測されたラベルと元の点群を使用してのみ視覚化できます。

15. オフライン可視化
しかし、作成者が可視化に open3d を使用していることがわかり、以前にコメントアウトしたため、open3d の問題を再考せざるを得ませんでした。表示では helper_tool.py が使用されています。
まず、以前にインストールしたヘルパーツールを削除します。

pip uninstall open3d-python

次に、次のコマンドでインストールします

conda install -c open3d-admin open3d

インストールが完了したら、プロンプトに従って、さまざまなバージョンの文法問題を解決してください。
ただし、作者は連続マルチフレーム予測点群を表示するツールを提供していなかったので、その情報を読んで作者のアニメーションと同じ視覚効果を書いたコードは次のとおりです。

from helper_tool import Plot
from os.path import join, dirname, abspath
from helper_tool import DataProcessing as DP
import numpy as np
import os
import pickle
import yaml
import open3d as open3d
import time
 
def get_file_list_test(dataset_path):
    seq_list = np.sort(os.listdir(dataset_path))
    test_file_list = []
    for seq_id in seq_list:
        seq_path = join(dataset_path, seq_id)
        pc_path = join(seq_path, 'velodyne')
        if int(seq_id) >= 11:
            for f in np.sort(os.listdir(pc_path)):
                test_file_list.append([join(pc_path, f)])
                # break
    test_file_list = np.concatenate(test_file_list, axis=0)
    return test_file_list
 
def get_test_result_file_list(dataset_path):
    seq_list = np.sort(os.listdir(dataset_path))
    test_result_file_list = []
    for seq_id in seq_list:
        seq_path = join(dataset_path, seq_id)
        pred_path = join(seq_path, 'predictions')
        for f in np.sort(os.listdir(pred_path)):
            test_result_file_list.append([join(pred_path, f)])
            # break
    test_file_list = np.concatenate(test_result_file_list, axis=0)
    return test_file_list
 
 
if __name__ == '__main__':
    dataset_path = '/home/mdj/catkin_ws/RandLA-Net/data/semantic_kitti/dataset/sequences'
    predict_path = '/home/mdj/catkin_ws/RandLA-Net/test/sequences'
    test_list = get_file_list_test(dataset_path)
    test_label_list = get_test_result_file_list(predict_path)
    BASE_DIR = dirname(abspath(__file__))
 
    #  remap_lut  #
    data_config = join(BASE_DIR, 'utils', 'semantic-kitti.yaml')
    DATA = yaml.safe_load(open(data_config, 'r'))
    remap_dict = DATA["learning_map"]
    max_key = max(remap_dict.keys())
    remap_lut = np.zeros((max_key + 100), dtype=np.int32)
    remap_lut[list(remap_dict.keys())] = list(remap_dict.values())
    #  remap_lut  #
    
    plot_colors = Plot.random_colors(21, seed=2)
    vis = open3d.visualization.Visualizer()
    vis.create_window()
    for i in range(len(test_list)):
        time.sleep(0.01)
        pc_path = test_list[i]
        labels_path = test_label_list[i]
        points = DP.load_pc_kitti(pc_path)
        # 用深蓝色画初始点云 #
        # rpoints = np.zeros((points.shape[0],6),dtype=np.int)
        # rpoints[:,0:3] = points
        # rpoints[:,5] = 1
        # Plot.draw_pc(rpoints)
        # print("888888888888888888")
 
        # 画对应的预测点云 #
        labels = DP.load_label_kitti(labels_path, remap_lut)
        Plot.draw_pc_sem_ins(points, labels, vis, plot_colors)

この時点で、連続マルチフレーム点群を完全に視覚化できます。その効果は次のとおりです。

ここに画像の説明を挿入

16. ros-randlanet インストールテスト
ros-randlanet は以前に構築した仮想環境を引き続き利用できるため、randlanet 仮想環境で ros-randlanet を実行します。
まず、ros_main.py 内のインタープリターのパスを仮想環境の Python インタープリターのパスに変更する必要があります。
次に、pytorch をインストールする必要があります。pytorch と cuda には厳密な対応関係があり、公式 Web サイトには cuda11.2 に対応する pytorch バージョンがありません。こちらhttps://blog.csdn.net/didadifish/article/details/127487635解決策が提供されているので、これをダウンロードしてインストールしました
ここに画像の説明を挿入!!!
最後に、起動を開始すると、
ここに画像の説明を挿入図に示すように ros_main.py に問題があることを示すプロンプトが表示され、図に示すようにインタープリターのパスを変更します。
ここに画像の説明を挿入

これまでのところ、起動ファイルは正常に起動できます。

おすすめ

転載: blog.csdn.net/weixin_40826634/article/details/127493809