深層学習 (ResNet) を用いたマーカーレス動画解析ライブラリ、DeepLabCut のGPU版を Linux (Xubuntu) マシンで使えるようにするための環境構築メモです。Google Colab など外部サーバーを使ってもできるけど、本記事は自分のGPUマシンで解析したい人向けです。今回はサーバーにせず普通にクライアントとして設定します。
DeepLabCut とは
深層学習の1つで、畳み込みニューラルネットワークを発展させた、残差ネットワーク (Residual Network: ResNet) という手法を用いて、動物のマーカーレスなトラッキングを可能にするPythonライブラリです。
トラッキングしたい動画を用意して、アノテーション用に目的のポイント (e.g. 動物の関節) に手動でマーカーを打った後、DeepLabCutに学習させることで、同じ動物が映っている他の動画でも目的のポイントを自動でマーキングしてくれるようになります。複数個体、3次元移動にも対応しています。便利。百聞は一見に如かず↓
PC環境
PC
CPU : インテル Core i7-9700K (3.60GHz-4.90GHz/8コア/8スレッド)
GPU : NVIDIA GeForce GTX 1660 SUPER 6GB GDDR6 (DVI x1,HDMI x1,DisplayPort x1)
メモリ : 16GB DDR4 SDRAM (PC4-21300/8GBx2/2チャネル)
SSD : 512GB NVMe SSD (M.2 2280, 読込速度 3200MB/s, 書込速度 2000MB/s)
HDD : 2TB HDD
OS :Xubuntu 16.04 LTS
NVIDIA Driver : 415.27
CUDA : 10.0
cuDNN : 7
Python : 3.6.10
Anaconda : 4.8.3
TensorFlow(GPU) : 1.10.0
DeepLabCut : 2.1.8.2
Xubuntu 16.04 LTS の環境設定
Xubuntuにしているのは趣味。UbuntuでもWindowsでもいいです。
- Xubuntu のインストール
公式から .iso ファイルをダウンロード Rufus で USB に焼いた - インストールできたらネットにつなぐ
インターネット接続を自動→手動にして、IP打ち込み - 一旦アップデートをかける
# ターミナル (以下、#はコメントアウト)
$ sudo apt update
$ sudo apt upgrade
- デスクトップになにも表示しないようにする (デスクトップ画面右クリックして設定から変更できる)
- フォルダ名を英語にする
# ターミナル
$ LANG = C
$ xdg-user-dirs-gtk-update
Don’t ask me again にチェックを入れて、Update Names をクリックする
その後、再起動すると、Blueman (Bluetooth ソフト) でエラーメッセージが出るので、Blueman を削除する (Bluetooth 使わないので…)
DeepLabCut (DLC) の環境設定
DLC のインストール方法は公式を含めていろいろネットに落ちているが、依存関係 (特に NVIDIA 関係) が結構面倒。私の環境では、以下がうまくいきました。基本は参考資料に書いてある通り進めれば OK (ただし一カ所エラーが出るので注意)
手順
- Anaconda のインストールと仮想環境の構築
- DeepLabCut のインストール
- NVIDIA ドライバのインストール
- CUDA のインストール
- cuDNN のインストール
- TensorFlow のインストール
- エラー対策
1. Anacondaのインストールと仮想環境の構築
Anaconda公式 から最新版の Anaconda (Linux版) をインストールする
今回、ダウンロード先はDownloadsにした
# ターミナル
$ sudo apt upgrade
$ cd Downloads
$ bash Anaconda3-2018.12-Linux-x86_64.sh
一度、ターミナルを抜けて、再度ターミナルから仮想環境を設定する
以下では、DLCという名前の仮想環境を作る
名前は任意だが、Pythonのバージョンは3.6推奨
# $USERの部分は自分のユーザー名を指定するここと (例: iwaoki)
$ /home/$USER/anaconda3/bin/conda create -n DLC python=3.6
作成した仮想環境に入りたいときは
$ conda activate DLC
2. DeepLabCut のインストール
上記で作成した仮想環境の中で DLC と wxPython をインストールする
# 仮想環境DLCに入って
$ pip install deeplabcut
$ pip install https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-16.04/wxPython-4.0.3-cp36-cp36m-linux_x86_64.whl
DLC のサンプルファイルをダウンロードする (Optional)
$ sudo apt-get install git
# $USERは自分のユーザー名
$ cd /home/$USER
$ git clone https://github.com/AlexEMG/DeepLabCut
3. NVIDIA ドライバのインストール
以降、バージョン情報には注意すること (だいたいバージョンの依存関係でつまずく)
参考に TensorFlow 公式の表を置いておきます
NVIDIA ドライバをレポジトリからインストールする
# ターミナル
$ sudo add-apt-repository ppa:graphics-drivers
$ sudo apt-get update
$ ubuntu-drivers devices
NVIDIA ドライバのバージョンは 415
# ターミナル
$ sudo apt-get install nvidia-415
うまくインストールできれば、下記コマンドで NVIDIA ドライバの情報が表示されるようになる
# ターミナル
$ nvidia-smi
4. CUDA のインストール
CUDA のバージョンは 10.0
# ターミナル
$ wget "https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda-repo-ubuntu1604-10-0-local-10.0.130-410.48_1.0-1_amd64.deb" -P /home/$USER/Downloads
CUDA のインストール
# ターミナル
$ sudo dpkg -i cuda-repo-ubuntu1604-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub
$ sudo apt-get update
CUDA Toolkit のインストール
$ sudo apt-get install cuda-toolkit-10.0
5. cuDNN のインストール
公式から .deb ファイルをダウンロードできる
ただしアカウントの登録が必要
# ターミナル
$ cd /home/$USER/Downloads
$ sudo dpkg -i libcudnn7_7.5.0.56-1+cuda9.0_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.5.0.56-1+cuda9.0_amd64.deb
$ sudo dpkg -i libcudnn7-doc_7.5.0.56-1+cuda9.0_amd64.deb
$ cd ..
6. TensorFlow のインストール
上記で作成した仮想環境 (DLC) の中で、TensorFlow-GPU をインストール
# 仮想環境ターミナル
$ conda activate dlc
$ pip install tensorflow-gpu==1.10
TensorFlow-GPU が入ったことを確認する
# 仮想環境ターミナル
$ ipython
> import tensorflow as tf
> sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
以上で、仮想環境 (DLC) からDeepLabCut を実行する準備が整った
7. エラー対策
と思いきや、多分これではエラーが出る
問題は libsdl1.2 がインストールされていないことなので、インストールする
# 仮想環境ターミナル
$ sudo apt-get install libsdl1.2debian
DeepLabCut 実行
仮想環境でPythonを立ち上げて、deeplabcutをインポートすると使える
詳細に関しては DeepLabCut 公式を参照
# Python
> import deeplabcut
# 日付、名前、動画ファイルの順
# 動画ファイルは複数でも大丈夫(ファイル形式は少なくともmp4, avi, msvはOK)
> deeplabcut.create_new_project('20200919','Iwaoki',['test.mp4'])
# パスの設定
# create_new_project()でconfig.yamlファイルが作成されるので、そのパスを指定 ('/~~/config.yaml'部分は各自のディレクトリ参照)
> path_config = '/~~/config.yaml'
# 解析したいビデオファイルのパス
> path_video = ['/~~/.mp4']
# -------------------------------------------------------------------------------------
# 訓練
# 事前にconfig.yamlを編集してマーカーの名前、ラベリングするフレーム数等を決める
> deeplabcut.extract_frames(path_config, 'automatic', 'kmeans')
# GUIが開いて手動でラベリングできる(アノテーション)
> deeplabcut.label_frames(path_config)
# データセットの作成
> deeplabcut.create_training_dataset(path_config)
# 訓練開始
> deeplabcut.train_network(path_config, shuffle=1, displayiters=10, saveiters=500)
# --------------------------------------------------------------------------------------
# 動画解析
# 解析開始
> deeplabcut.analyze_videos(path_config, videofile_path)
# DLCによる自動ラベリング開始
> deeplabcut.create_labeled_video(path_config, videofile_path)
# ラベリングの結果(マーカーのx, y座標とlikelihood)をcsv形式で出力
> deeplabcut.analyze_videos_converth5_to_csv('/~~/folder_path', '.mp4')
以上です。
質問・コメント等あれば下のコメント欄・TwitterのDM・e-mailでお願いします。