生物系研究者のpythonとか画像解析とか論文とか

主に生物系研究で使えるpythonとか画像解析とか論文の話とかをザックリ書きます

スポンサードリンク

マウスのトラッキングをする (DeepLabCutの使い方)

最近流行っているDeepLabCutを用いた動物のトラッキングを行うための手順の備忘録です。

環境

MacBook Pro
・pyenv + venv
・学習はGoogle Colabで行う
・2020年12月3日時点

環境構築

まず環境を作ります
既にpyenvをinstall済みのところから始めます

mlwbio.hatenablog.com

ただし、pythonのinstall時にオプションが必要なので以下の様にします

env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.7.7

作業ディレクトリで

pyenv local 3.7.7
python -m venv venv
source venv/bin/activate

次に必要なライブラリをインストールします
この時点では deeplabcutのバージョンとしてベータ版ですが2.2b8というのがあったのでそれをインストールしています
特に理由がなければバージョン指定はしなくて良いと思われます
ただしwxpythonはバージョン指定が必要です
まずpipをアップデートしてからインストールします

pip install --upgrade pip
pip install jupyter tensorflow==1.13.1 wxpython==4.0.7 deeplabcut==2.2b8

インストールできたらリポジトリをcloneしておきます

git clone https://github.com/DeepLabCut/DeepLabCut.git
プロジェクト作成とラベルづけ
python
import deeplabcut
deeplabcut.create_new_project('ProjectName','YourName', ['/usr/FullPath/OfVideo1.avi', '/usr/FullPath/OfVideo2.avi', '/usr/FullPath/OfVideo1.avi'], copy_videos=True, multianimal=False) 

ProjectNameを自分のプロジェクト名に置き換え
YourNameを自分の名前に置き換え
[]内に動画のパスを配置、動画が一つの場合は ['/usr/FullPath/OfVideo1.avi']、となる (list形式)
動画をプロジェクトフォルダにコピーする場合はcopy_videos=True、そうでなければFalse、基本Trueでよい
複数の個体をトラッキングする場合はmultianimal=True、どうでなければFalse
上記を実行するとconfigのpathが出てくるので以下の様にpathを指定しておく

config_path = '/usr/FullPath/Ofconfig.yaml'

次にcofigファイルを書き換える
configファイルは作成されたプロジェクトディレクトリの直下にある
書き換える必要があるのは2箇所で
bodypartsとskeleton
bodypartsはラベルするボディパーツのことで、例えばマウスの鼻、右耳、左耳、尻尾の付け根をラベルするときは以下のように書くと良い

bodyparts:
- nose
- right_ear
- left_ear
- tail

skeletonはplot時に点と点をどう繋ぐかという情報で、例えば鼻と右耳、鼻と左耳、鼻と尻尾の付け根、というように矢印のようなものを描くとしたら以下のようになる

skeleton:
- - nose
  - tail
- - nose
  - right_ear
- - nose
  - left_ear

ただしあとでGUIで描くことができる

次に学習データを作るためにframeをextractする
いくつか指定する項目があるが基本以下でOK

deeplabcut.extract_frames(config_path, mode='automatic', algo='kmeans', userfeedback=False, crop=False)

labelingを行う

deeplabcut.label_frames(config_path)

注意点
saveは最後に押す
押してから続きをやろうとするとエラーが出る
最後に以下でラベル付き画像を出力

deeplabcut.check_labels(config_path)

もっとラベルをつけたい場合は

deeplabcut.extract_frames(config_path, mode='manual', crop=False)

として動画を読み込めば好きなframeをラベルづけに回せる

ラベルづけまでできたら Google Colab を用いた学習に移動する
もしconfigファイルでskeletonを決めていなければ

deeplabcut.SkeletonBuilder(config_path)

これでGUIを使ってskeleton を決めることができる

学習

以下のnotebookを使えば良い
colab.research.google.com まず自分のgoogle driveにコピーを保存 (ドライブにコピーを保存ボタン) してコピーしたnotebookを使うと良い
最初に自分の mydriveにプロジェクトディレクトリを丸々アップロードしておく
次にアップロードしてプロジェクトディレクトリ内のconfigファイルを開き
project_pathとvideo_setsのpathを変更する必要がある
これはnotebookのセルをいくつか実行してmydriveをマウントした後に、colabの左のファイルタブからディレクトリを辿り、プロジェクトディレクトリを右クリックしてパスをコピーすると簡単
あとはnotebookを進めていけば勝手に学習できる
最後に動画を出力できるが、

deeplabcut.create_labeled_video(path_config_file,videofile_path, videotype=VideoType, trailpoints=30,  draw_skeleton = True)

などとすると、skeletonを描いたり、検出して点がしばらく残ってくれるので軌跡が追えたりする

追加学習

Google driveのプロジェクトディレクトリをダウンロードし、手元のプロジェクトディレクトリと置き換える
ただしconfigのpathを書き換えることを忘れずに

deeplabcut.extract_outlier_frames(config_path, ['videofile_path'])

これで間違っていそうなframeを抜き出してくれるので、学習データを追加し、
最後に

deeplabcut.merge_datasets(config_path)

としてデータセットをマージすることで上記学習ステップに戻り追加の学習ができる
これを繰り返してより良いモデルを作っていくと良い

スポンサードリンク