mediapipe:モデル学習

MediaPipeに利用するモデルの学習について

2023年5月10のカンファレンス発表でMediaPipeが大きく進化しました.それに伴いカスタムモデルの作成等の情報がpreviewとして公開されています.一部ノウハウやバージョン情報が少なかったりで知見が必要だったのでこのページに忘備録代わりにまとめます.

mediapipeオフィシャルのチュートリアルでは,colabを利用することが前提になっています.colabを利用する限りは以下の情報は不要です.以下はローカル環境での学習です.デカ目のデータセットで学習が12時間以上必要な場合に限った話です.

最初の環境構築

image classificationやobject detection等のモデル学習に先立ち共通した環境構築が必要です.

  • 動作環境:Linux, Windows(未検証), *macOSは対象外(model makerとかでインストールエラーになる)

馬場の環境は

  • Linux Ubuntu 16.04
  • cuda toolkit : 11.3
  • card: geforce gtx 1080ti

となります.いい加減環境が古いのですが,まだ大丈夫でした.新しいマシンがほしいです.colabに移行もあるかも.

  1. anaconda のインストール
  2. condaで環境構築
    1. conda create -n mediapipe python=3.9
    2. conda activate
    3. pip install –upgrade pip
    4. pip install mediapipe-model-maker

gpuで動作される場合,tensorflowはversion2より,tensorflow-gpuが廃止されていることに注意する.このページ(https://www.tensorflow.org/install/pip?hl=ja)にしたがってgpu対応のtensorflowにしておく. cudatoolkitのメジャーバージョンはシステムにインストールしているcudatoolkitと互換を取らないといけない.例えばシステムがv10に対してv11をcondaでインストールすると,insufficient なるメッセージでシステムのドライバがバージョン互換が保てなくて,インストール等はうまくいくが,実行時にエラーとなる.

  1. anaconda のインストール
  2. condaで環境構築
conda create -n mediapipe python=3.9
conda activate mediapipe
conda install -c conda-forge cudatoolkit=11.8.0
python3 -m pip install nvidia-cudnn-cu11==8.6.0.163 tensorflow==2.12.*
mkdir -p $CONDA_PREFIX/etc/conda/activate.d
echo 'CUDNN_PATH=$(dirname $(python -c "import nvidia.cudnn;print(nvidia.cudnn.__file__)"))' >> $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CONDA_PREFIX/lib/:$CUDNN_PATH/lib' >> $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
source $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
pip install --upgrade pip
pip install mediapipe-model-maker

学習

物体検出の学習は以下のページがメインリソース

GPUを利用刷る場合、上記で設定がうまく行っていればそのままGPUで学習が始まる。一方で複数GPUを持っている場合は、別途オプションを設定する必要がある。 https://developers.google.com/mediapipe/solutions/customization/object_detector#hyperparameters このページでパラメーターの一覧が確認できる。この中のHParamsで学習時の設定ができるが、実はこのページではどのように複数GPUを利用刷るかがわからない。そこで、より細かいAPIページを参照する必要がある。 具体的には https://developers.google.com/mediapipe/api/solutions/python/mediapipe_model_maker/object_detector/HParams このページを参照する。ここで、 * num_gpus: 4 等と設定することで、複数gpuを学習に利用できる。ただし、実際にこのオプションを設定して実行すると distribution_strageryが'off'ではだめだよ、というエラーになる。では distribution_strategyをどうすればよいのかが、実は述べられていない。結果としては、github上のソースコードから、サンプルとして、num_gpusを1以上に設定しているサンプルファイルでは、 distribution_strategyに 'mirrored'を設定しているものがあり、これに倣って 'mirrored' にしたら学習が進んだ。まとめると、 * num_gpus:4, * distribution_strategy='mirrored' でOK.例えばこんな感じ

hparams = object_detector.HParams(
  export_dir='exported_model',
  epochs=120,
  num_gpus=4,
  distribution_strategy='mirrored'
  )

実行

うまくいくとモデルが完成するので,出来上がったモデルを試すページは以下

  • /home/users/2/lolipop.jp-4404d470cd64c603/web/ws/data/pages/mediapipe/モデル学習.txt
  • 最終更新: 2023/10/02 15:14
  • by baba