Google Colaboratoryを使ってYOLOv4-tinyで物体検出を行います。YOLOとはリアルタイム物体検出アルゴリズムで、「You only look once」の頭文字を取って「YOLO」と呼ばれています。YOLOはDarknetというフレームワークで開発されています。
Google Colaboratoryの環境設定
- Google Colaboratory使用時に、コピーした文字列をセル内に貼り付けしたい(右クリック→貼り付け)場合は、Ctrl+C,Vが使用できます。
- 先頭に 「! 」を付けるとシェルコマンドを実行できます。
- マジックコマンドには、 先頭に「%」 を付けるラインマジックと 「%%」を付ける セルマジックがあります。
- 「%time 」を付けるとそれに続くコードの実行時間を測定して結果を表示します。
- 「%%bash」を使うとそのセルはPythonではなくてBashが書けるます。
- Googleドライブのページで右クリックし、「新しいフォルダ」を選択して「YOLO」フォルダを作成します。
- 「YOLO」フォルダを選択して右クリックし、「アプリで開く」→「アプリを追加」を選択します
- 「Colaboratory」で検索して「Google Colaboratory」を追加します。
- 「YOLO」フォルダを開いて右クリックし、「その他」「Google Colaboratory」を選択してファイルを新規作成します。
- GoogleDriveをColaboratoryにマウントします。実行すると認証コードを入力するように求められます。pathは「/content/drive/My\ Drive/YOLO/」になります
- CUDAのバージョンを確認します。
- CUDA10.0をインストールしてPATHを通します。
- Colaboratoryのメニューから「ランタイム」→「ランタイムのタイプを変更」を選択します。
- 「ハードウェアアクセラレータ」を選択して「なし」から「GPU」に変更します。
- 割り当てられたGPUを確認します。
コマンドを入力できる画面が表示されます。
from google.colab import drive drive.mount('/content/drive')
!/usr/local/cuda/bin/nvcc --version
!apt install cuda-11-1 -y import os os.environ['PATH'] += ':/usr/local/cuda/bin' os.environ['LD_LIBRARY_PATH'] += ':usr/local/cuda/lib64'
!nvidia-smi
ノートブックを再度開きたいときは、作成された「Untitled0.ipynb」をダブルクリックします。
darknetによる物体検出
- darknetダウンロード
(注:上記項目5の「drive.mount」を実行しないとエラーになります) - darknetコンパイル
- yolov4-tiny.weightsによる画像ファイルに映る物体の検出
%%bash cd /content/drive/My\ Drive/YOLO git clone https://github.com/AlexeyAB/darknet
makefileを次のように編集します。
GPU=1 CUDNN=1 CUDNN_HALF=0 OPENCV=1 AVX=0 OPENMP=0 LIBSO=0 ZED_CAMERA=0 ZED_CAMERA_v2_8=0 ・・・
darknetをコンパイルします。
%%bash cd /content/drive/My\ Drive/YOLO/darknet sed -i 's/GPU=0/GPU=1/g' Makefile sed -i 's/CUDNN=0/CUDNN=1/g' Makefile make
「yolov4-tiny.weights」をダウンロードして、「darknet」フォルダにアップロードします。
%%bash cd /content/drive/My\ Drive/YOLO/darknet ./darknet detector test cfg/coco.data cfg/yolov4-tiny.cfg yolov4-tiny.weights data/dog.jpg
次のように画像から物体検出が出来ました。
ドライブ内に新たにファイルを追加したときの注意点
Google Colaboratory実行中にドライブにファイルを新しく入れたり作ったりしても,ランタイム起動時の設定で動いているので反映されません.
一度 [Restart] > [Restart rumtime] でランタイムを再起動してください
その他のコマンド
- 残り時間確認
!cat /proc/uptime | awk '{printf("残り時間 : %.2f", 12-$1/60/60)}'
%%bash cd /content/drive/My\ Drive/YOLO/darknet chmod u+x darknet ls -l
GPU バックエンドに接続できません
使っていると次の「GPU バックエンドに接続できません」が表示されます。このメッセージは、クラウド共有している計算リソースを、たくさんのユーザーが使っているために、GPU/TPUへのアクセスが制限されたことを示しています。
このメッセージがでるとひたすら待つほかないようです。12時間待てばまた使えるようになるとの情報を見かけました。
三時間ぐらいたつと次のダイアログが表示されます。