マウスのトラッキングをする (DeepLabCutの使い方)
最近流行っているDeepLabCutを用いた動物のトラッキングを行うための手順の備忘録です。
環境
・MacBook Pro
・pyenv + venv
・学習はGoogle Colabで行う
・2020年12月3日時点
環境構築
まず環境を作ります
既にpyenvをinstall済みのところから始めます
ただし、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)
としてデータセットをマージすることで上記学習ステップに戻り追加の学習ができる
これを繰り返してより良いモデルを作っていくと良い
pandasでクリップボードからDataFrameにする方法 (エクセルからのコピペ)
エクセルファイルからコピペでpandasに読み込みたい時があるのでメモ
エクセルで範囲をコピーしたのちに
pd.read_clipboard()
でよい