YOLOv3をPyTorch1.4で動かしてみた


はじめに

PyTorch1.4で動作するYOLOv3の実装を、Ultralytics LLCという会社が公開しているので試してみた。
備忘録的に書きなぐっているので、内容が雑なのはご容赦。

環境

  • OS: Ubuntu18.04
  • GPU: GeForce GTX 1070

pytorchの動作確認までの手順

  1. Ubuntu18.04をインストールする。
  2. パッケージを最新化する。

    $sudo apt update
    $sudo apt upgrade
    
  3. CUDA Toolkit 10.1 update2 Archiveのインストール

    1. 以下のコマンドを実行する。

      $wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
      $sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
      $sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
      $sudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
      $sudo apt-get update
      $sudo apt-get install cuda-10-1 
      
      • cuda公式サイトのコマンドのままだと最新のバージョン(10.2)がインストールされるので注意。
        この記事投稿時はpytorchは10.2に未対応。
        apt-get install cuda-10-1 のようにバージョンを明示する必要がある。
        また、aptではなく、apt-getを使っている。apt upgradeしたときに問題起こるかも。
      • インストール中に、secure bootのパスワード登録が求められる。適当に登録した。よくわからなかった。
    2. ".bashrc"に以下を追記する。

      $gedit ~/.bashrc
      ---
      export PATH="/usr/local/cuda/bin:$PATH"
      export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
      
  4. anacondaのインストール

    1. インストーラをダウンロードする。
      https://www.anaconda.com/distribution/#download-section
      から、以下を選択する。
      ---
      Python 3.7 version
      64-Bit (x86) Installer (522 MB)
    2. インストーラを実行する。
      $bash Anaconda3-2020.02-Linux-x86_64.sh
  5. pytorch環境構築

    1. 適当にconda環境を切る。

      $conda create -n pytorch1_4 python=3.7
      $conda activate pytorch1_4
      
    2. pytorchをインストールする。
      $conda install pytorch torchvision cudatoolkit=10.1 -c pytorch

    3. pytorch動作確認
      以下のパイソンコードを実行する。

      from __future__ import print_function
      import torch
      x = torch.rand(5, 3)
      print(x)
      print(torch.cuda.is_available())
      ''' 出力
      tensor([[0.1166, 0.4387, 0.5680],
      [0.2340, 0.6470, 0.9463],
      [0.2673, 0.2899, 0.2766],
      [0.1243, 0.6881, 0.5566],
      [0.3168, 0.7495, 0.0149]])
      True
      '''
      

yolov3を動かす

  1. ここのリポジトリをクローンする。
  2. 同ページの Pretrained Weights のリンク先から、拡張子がptのものをダウンロードして、yolov3/weights/に置く。
    今回は、yolov3-tiny.ptを落とした。
  3. サンプル実行する。
$cd yolov3  
$python3 detect.py --cfg cfg/yolov3-tiny.cfg --weights yolov3-tiny.pt --source ./data/samples/zidane.jp

何個かモジュールが無いぞと怒られるので、適宜インストールする。
動いたらyolov3/outputに結果が出力される。

学習とアノテーション

学習手順

  1. tensorboardをインストールする。( pip install tensorboard )
  2. Pretrained Weights のリンク先からyolov3-spp-ultralytics.ptをダウンロードしてweightsディレクトリに置く。
  3. TutorialsTrain Custom Dataの手順を実行する。(手順5、6は必要であれば実施)。

アノテーション

labelImgインストール
  1. ここのリポジトリをクローンする。をクローンする。
  2. 同ページの Python 3 + Qt5 (Recommended) のコマンドを実行する。

    例:
    $sudo apt-get update
    $sudo apt-get install pyqt5-dev-tools
    $cd labelImg
    $pip install -r requirements/requirements-linux-python3.txt
    $make qt5py3
    $python labelImg.py
    
  3. 使い方(Yoloフォーマットでの出力時の注意事項が丁寧)
    https://demura.net/deeplearning/14350.html

余談

最初は、ここの実装を試そうとしたが、推奨PyTorchのバージョンが古い(0.4)のでメンテされてない可能性があるのと、重みファイルのダウンロードに2度ほど失敗したのであきらめた。