YOLO v8をTouchDesignerで使えるようにするためのメモです。
盛大にハマって2.5日かかりましたので。。
お騒がせしましたが、YOLO v8使えるようになりました。
— Shampagne (@Shampedelica) 2024年5月2日
segmもposeも30FPS出る。
ヒャー#touchdesignerr pic.twitter.com/IyXutgIkgB
サンプルはこちら↓
環境
- os: win11
- TouchDesiner : 2023.11600 (python 3.11.1)
- PCローカルのpython : 3.11.1
- YOLO : v8
- CUDA : 12.1
- cuDNN : 8.9.7
ザックリ手順
- TouchDesignerと同じバージョンのpythonをPCにインストール
- PCのpython環境でYOLOをインストール
- YOLOのインストール先をTouchDesignerのPythonパスに指定する
参考
【TouchDesigner】PyTorchでセマンティックセグメンテーション
TouchDesignerと同じバージョンのpythonをPCにインストール
TDのバージョンによりPythonのバージョンが異なるので、ちゃんと確認します。
TD上でAlt+tでTextPortを開くとPythonのバージョンが先頭に表示されているはずです。
PCへのPythonのインストールは、自分はpyenvが好きです。
複数バージョンを利用する可能性がある人はぜひご利用ください。
【pyenv-win】pyenv のインストールと実行 #Python - Qiita
あとvenvも使うと良いです。比嘉先生の記事を置いておきます。
Extending TouchDesigner @MUTEK.JP
-> 方法3: venv で仮想環境を作成、pipでインストール
PCのpython環境でYOLOをインストール
以下の2つの記事を参考にしました(大感謝)。
yolov8をGPUで動作させる方法 - AIと電子工作系ブログ
CUDA&cuDNN
PyTorchとのかみ合わせがあるので、バージョンはしっかり意識して。
(自信がない人は自分と同じ12.1にしておきましょう)
CUDA12.1
https://developer.nvidia.com/cuda-12-1-0-download-archive
cuDNN (8.9.7 for CUDA 12.x)
https://developer.nvidia.com/rdp/cudnn-archive
YOLO v8
YOLO v8はultralyticsというパッケージをインストールすれば使えるようになります。
ただ、PyTorchがCPU版でインストールされるため、GPU版を入れなおす必要があります。
ここで大ハマリしたのですが、2024.05現在のPyTorchの最新版(2.3.0)だと、自分の環境ではネイティブPythonだとOKだけど、TDのPythonだとモジュール読み込み時にdllの依存が解決できないという問題が生じました。 (torch/lib/shm.dll)
自分がOKだったのは2.1.1です。2.2.0あたりでも平気そうな気がしますので、知見ある方は自分で良さそうなものを選んでみてください。
PyTorchの過去バージョンは↓から探せます。
https://pytorch.org/get-started/previous-versions/
pip install ultralytics pip uninstall torch torchvision pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu121 or pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
ここまでの環境構築が成功すると、↓が動くと思うので確認してみてください。
https://qiita.com/kotai2003/items/32329a90703394d39d5c#object-detection-with-webcam
YOLOのインストール先をTouchDesignerのPythonパスに指定する
TouchDesignerにローカルPCのPythonモジュールのパスを通す方法はいくつかあるので、比嘉先生の記事を再掲します。
http://satoruhiga.com/post/extending-touchdesigner/
-> 外部ライブラリのインストール
「方法2: モジュール探索パスの設定」についてですが、sys.path.append()よりもsys.path.insert(0, NEW_path) のほうが堅いと先生から教わったので、ここに書き残しておきます。
これでTouchDesingerのpythonでYOLOを使うことができるようになりました。
自分は今回初めてScriptTOPを触ったのですが、TD <-> numpyのための前処理・後処理が必要だったので、サンプルコードのままですが以下にコードを記載しておきます。
def onCook(scriptOp): input_image = scriptOp.inputs[0].numpyArray() image = input_image * 255 image = image.astype('uint8') image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # image coordinate # opencv's : top/left # TouchDesigner : bottom/left image = cv2.flip(image, 0) results = model.predict(image) draw_image = results[0].plot() draw_image = cv2.cvtColor(draw_image, cv2.COLOR_RGB2BGR) draw_image = cv2.flip(draw_image, 0) scriptOp.copyNumpyArray(draw_image) return
はい!
あとはYOLOを勉強して好きなことをするだけです <-- イマココ
Home - Ultralytics YOLOv8 Docs
おしまい