Google Colaboratoryを使ってYOLOv4-tinyで物体検出を行います。YOLOとはリアルタイム物体検出アルゴリズムで、「You only look once」の頭文字を取って「YOLO」と呼ばれています。YOLOはDarknetというフレームワークで開発されています。

Google Colaboratoryの環境設定

  • Google Colaboratory使用時に、コピーした文字列をセル内に貼り付けしたい(右クリック→貼り付け)場合は、Ctrl+C,Vが使用できます。
  • 先頭に 「! 」を付けるとシェルコマンドを実行できます。
  • マジックコマンドには、 先頭に「%」 を付けるラインマジックと 「%%」を付ける セルマジックがあります。
  • 「%time 」を付けるとそれに続くコードの実行時間を測定して結果を表示します。
  • 「%%bash」を使うとそのセルはPythonではなくてBashが書けるます。
  1. Googleドライブのページで右クリックし、「新しいフォルダ」を選択して「YOLO」フォルダを作成します。
  2. 「YOLO」フォルダを選択して右クリックし、「アプリで開く」→「アプリを追加」を選択します
  3. 「Colaboratory」で検索して「Google Colaboratory」を追加します。
  4. 「YOLO」フォルダを開いて右クリックし、「その他」「Google Colaboratory」を選択してファイルを新規作成します。
  5. コマンドを入力できる画面が表示されます。

  6. GoogleDriveをColaboratoryにマウントします。実行すると認証コードを入力するように求められます。pathは「/content/drive/My\ Drive/YOLO/」になります
  7. from google.colab import drive
    drive.mount('/content/drive')
    

  8. CUDAのバージョンを確認します。
  9. !/usr/local/cuda/bin/nvcc --version
    

  10. CUDA10.0をインストールしてPATHを通します。
  11. !apt install cuda-11-1 -y
    import os
    os.environ['PATH'] += ':/usr/local/cuda/bin'
    os.environ['LD_LIBRARY_PATH'] += ':usr/local/cuda/lib64'
    

  12. Colaboratoryのメニューから「ランタイム」→「ランタイムのタイプを変更」を選択します。
  13. 「ハードウェアアクセラレータ」を選択して「なし」から「GPU」に変更します。
  14. 割り当てられたGPUを確認します。
  15. !nvidia-smi
    

ノートブックを再度開きたいときは、作成された「Untitled0.ipynb」をダブルクリックします。

darknetによる物体検出

  1. darknetダウンロード
    (注:上記項目5の「drive.mount」を実行しないとエラーになります)
  2. %%bash
    cd /content/drive/My\ Drive/YOLO
    git clone https://github.com/AlexeyAB/darknet
    

  3. darknetコンパイル
  4. 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
    

  5. yolov4-tiny.weightsによる画像ファイルに映る物体の検出
  6. 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)}'
    
  • 「./darknet」を実行すると「permission denied」が発生
  • %%bash
    cd /content/drive/My\ Drive/YOLO/darknet
    chmod u+x darknet
    ls -l
    

GPU バックエンドに接続できません

使っていると次の「GPU バックエンドに接続できません」が表示されます。このメッセージは、クラウド共有している計算リソースを、たくさんのユーザーが使っているために、GPU/TPUへのアクセスが制限されたことを示しています。

このメッセージがでるとひたすら待つほかないようです。12時間待てばまた使えるようになるとの情報を見かけました。

三時間ぐらいたつと次のダイアログが表示されます。