Google ColaboratoryでYOLOv5を使用しオブジェクト検出する

Google ColaboratoryでYOLOv5を使用しオブジェクト検出してみます。

■Python

Google Colaboratory(Google Colab),Python3.7.10

■Google Colaboratoryにアクセスする

まずはGoogle Colaboratory(https://colab.research.google.com/?hl=ja)にアクセスします。

アクセスすると、上部メニューに「ファイル」という項目があるので、クリックします。クリックすると、プルダウンメニューが表示され「ノートブックを新規作成」という項目があるので、こちらをクリックします。

クリックすると、「Googleへのログインが必要」というウインドウが表示されますので、Googleにログインするために、お持ちのGoogleアカウントでログインします。そのために「ログイン」ボタンをクリックします。

クリックすると、「アカウントの選択」というウインドウが表示されますので、お持ちのアカウントを選択します。

選択すると、アカウントのパスワードを入力するウインドウが表示されますので、「パスワードを入力」欄にパスワードを入力し、「次へ」ボタンをクリックします。

クリックすると、2段階認証のプロセスを有効にしている方はプロセスの手順を踏みます。

その後、Google Colaboratory上で新しいノートブックが作成されます。

■ノートブックの設定

作成後、新しいノートブックの上部メニューにある「表示」から「ノートブック情報」をクリックします。

クリックすると、「ノートブック情報」というウインドウが表示されます。ウインドウ内に「ノートブックの設定を開く」という文字が表示されているので、こちらをクリックします。

クリックすると「ノートブックの設定」というウインドウが表示されます。ウインドウ内の「ハードウェアアクセレータ」の矢印マークをクリックします。

クリックするとプルダウンメニューが表示されますので、「GPU」を選択します。

選択後、「Colab を最大限に活用するには、不要な GPU の使用を控えるようにしてください。」と表示されます。気になる方は「詳細」をクリックします。

「このノートブックを保存する際にコードセルの出力を除外する」のチェックボックスにはチェックを入れずに「保存」ボタンをクリックします。

クリックすると、設定が変更されます。

■個人のGoogleドライブを使用する設定

■コード

from google.colab import drive
drive.mount('/content/drive')

変更後、コードセルに上記のコードを記述します。個人(自分)のドライブにある画像、ビデオを使用することができるようになります。

記述後、セルを実行します。

Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=***

Enter your authorization code:

セルを実行すると、上記のメッセージが出力されますので、記載されているURLをクリックします。

クリックすると、URLへアクセスされます。「アカウントの選択」というウインドウが表示されますので、アカウントを選択します。

選択すると「このアプリを Google からダウンロードしたことをご確認ください」というウインドウが表示されますので、「ログイン」ボタンをクリックします。

クリックすると、「ログイン」というウインドウが表示され、「このコードをコピーし、アプリケーションに切り替えて貼り付けてください。」と書かれていますので、その下のコードをコピーします。

コピーしたコードを、先ほど出力された「Enter your authorization code:」の入力欄に貼り付けて、Enterキーを押します。

Enterキーを押すと、ノートブックの左側にフォルダのアイコンがありますので、こちらをクリックし、「drive」のフォルダ内を確認すると「MyDrive」が追加され、個人(自分)のドライブが使用できるようになります。

■YOLOv5リポジトリのクローン作成

次に、YOLOv5リポジトリのクローンを作成します。

!git clone https://github.com/ultralytics/yolov5

ノートブック上にコードセルを追加し、上記のコードを入力し、セルを実行します。

Cloning into ‘yolov5’…
remote: Enumerating objects: 7276, done.
remote: Counting objects: 100% (398/398), done.
remote: Compressing objects: 100% (252/252), done.
remote: Total 7276 (delta 251), reused 263 (delta 146), pack-reused 6878
Receiving objects: 100% (7276/7276), 9.20 MiB | 6.50 MiB/s, done.
Resolving deltas: 100% (4979/4979), done.

実行すると、「Resolving deltas: 100% (4979/4979), done.」と出力されますので、これでクローンの作成完了となります。

■インストール要件

完了後、YOLOv5を使用しオブジェクト検出するために必要なパッケージをインストールします。

!pip install -r yolov5/requirements.txt

インストールのために、コードセルを追加し、上記のコードを入力し、セルを実行します。

Requirement already satisfied: matplotlib>=3.2.2 in /usr/local/lib/python3.7/dist-packages (from -r yolov5/requirements.txt (line 4)) (3.2.2)
Requirement already satisfied: numpy>=1.18.5 in /usr/local/lib/python3.7/dist-packages (from -r yolov5/requirements.txt (line 5)) (1.19.5)
Requirement already satisfied: opencv-python>=4.1.2 in /usr/local/lib/python3.7/dist-packages (from -r yolov5/requirements.txt (line 6)) (4.1.2.30)
Requirement already satisfied: Pillow in /usr/local/lib/python3.7/dist-packages (from -r yolov5/requirements.txt (line 7)) (7.1.2)
Collecting PyYAML>=5.3.1
  Downloading https://files.pythonhosted.org/packages/7a/a5/393c087efdc78091afa2af9f1378762f9821c9c1d7a22c5753fb5ac5f97a/PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl (636kB)
     |████████████████████████████████| 645kB 14.1MB/s 
Requirement already satisfied: scipy>=1.4.1 in /usr/local/lib/python3.7/dist-packages (from -r yolov5/requirements.txt (line 9)) (1.4.1)
Requirement already satisfied: torch>=1.7.0 in /usr/local/lib/python3.7/dist-packages (from -r yolov5/requirements.txt (line 10)) (1.9.0+cu102)
Requirement already satisfied: torchvision>=0.8.1 in /usr/local/lib/python3.7/dist-packages (from -r yolov5/requirements.txt (line 11)) (0.10.0+cu102)
Requirement already satisfied: tqdm>=4.41.0 in /usr/local/lib/python3.7/dist-packages (from -r yolov5/requirements.txt (line 12)) (4.41.1)
Requirement already satisfied: tensorboard>=2.4.1 in /usr/local/lib/python3.7/dist-packages (from -r yolov5/requirements.txt (line 15)) (2.5.0)
Requirement already satisfied: seaborn>=0.11.0 in /usr/local/lib/python3.7/dist-packages (from -r yolov5/requirements.txt (line 19)) (0.11.1)
Requirement already satisfied: pandas in /usr/local/lib/python3.7/dist-packages (from -r yolov5/requirements.txt (line 20)) (1.1.5)
Collecting thop
  Downloading https://files.pythonhosted.org/packages/6c/8b/22ce44e1c71558161a8bd54471123cc796589c7ebbfc15a7e8932e522f83/thop-0.0.31.post2005241907-py3-none-any.whl
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=3.2.2->-r yolov5/requirements.txt (line 4)) (1.3.1)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=3.2.2->-r yolov5/requirements.txt (line 4)) (0.10.0)
Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=3.2.2->-r yolov5/requirements.txt (line 4)) (2.8.1)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=3.2.2->-r yolov5/requirements.txt (line 4)) (2.4.7)
Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from torch>=1.7.0->-r yolov5/requirements.txt (line 10)) (3.7.4.3)
Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (1.8.0)
Requirement already satisfied: protobuf>=3.6.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (3.12.4)
Requirement already satisfied: requests<3,>=2.21.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (2.23.0)
Requirement already satisfied: absl-py>=0.4 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (0.12.0)
Requirement already satisfied: setuptools>=41.0.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (57.0.0)
Requirement already satisfied: werkzeug>=0.11.15 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (1.0.1)
Requirement already satisfied: wheel>=0.26; python_version >= "3" in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (0.36.2)
Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (0.4.4)
Requirement already satisfied: grpcio>=1.24.3 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (1.34.1)
Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (3.3.4)
Requirement already satisfied: google-auth<2,>=1.6.3 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (1.31.0)
Requirement already satisfied: tensorboard-data-server<0.7.0,>=0.6.0 in /usr/local/lib/python3.7/dist-packages (from tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (0.6.1)
Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.7/dist-packages (from pandas->-r yolov5/requirements.txt (line 20)) (2018.9)
Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from cycler>=0.10->matplotlib>=3.2.2->-r yolov5/requirements.txt (line 4)) (1.15.0)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests<3,>=2.21.0->tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (2.10)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests<3,>=2.21.0->tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (1.24.3)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests<3,>=2.21.0->tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (2021.5.30)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests<3,>=2.21.0->tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (3.0.4)
Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.7/dist-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (1.3.0)
Requirement already satisfied: importlib-metadata; python_version < "3.8" in /usr/local/lib/python3.7/dist-packages (from markdown>=2.6.8->tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (4.5.0)
Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.7/dist-packages (from google-auth<2,>=1.6.3->tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (0.2.8)
Requirement already satisfied: rsa<5,>=3.1.4; python_version >= "3.6" in /usr/local/lib/python3.7/dist-packages (from google-auth<2,>=1.6.3->tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (4.7.2)
Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from google-auth<2,>=1.6.3->tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (4.2.2)
Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.7/dist-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (3.1.1)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata; python_version < "3.8"->markdown>=2.6.8->tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (3.4.1)
Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /usr/local/lib/python3.7/dist-packages (from pyasn1-modules>=0.2.1->google-auth<2,>=1.6.3->tensorboard>=2.4.1->-r yolov5/requirements.txt (line 15)) (0.4.8)
Installing collected packages: PyYAML, thop
  Found existing installation: PyYAML 3.13
    Uninstalling PyYAML-3.13:
      Successfully uninstalled PyYAML-3.13
Successfully installed PyYAML-5.4.1 thop-0.0.31.post2005241907

実行すると、「Successfully installed」と出力されます。これが出力されれば、正常にインストールは完了となります。

!cd /content/yolov5

完了後、「/content/yolov5」ディレクトリに移動するため、コードセルを追加し、上記のコードを入力してセルを実行します。

■YOLOv5を使用しオブジェクト検出する

実行後、単一のコマンドだけでYOLOv5を使用しオブジェクト検出することが可能となりました。

!python <detect.pyへのパス> --source <画像/動画/Youtubeビデオへのパス> --weights <ウェイト(重み)へのパス> --conf <最小信頼値>

YOLOv5を使用しオブジェクト検出するための基本的な単一のコマンドは上記になります。

■著作権フリーの写真を使用し、オブジェクト検出する

今回は上記の著作権フリーの写真(Pixabayからダウンロードした写真)を、個人(自分)のドライブ(MyDrive)にアップロードし、オブジェクト検出してみます。なお、「taxi.jpg」という名前で保存し、「content/drive/MyDrive/(フォルダパス)」内に置きます。

!python /content/yolov5/detect.py --source /content/drive/MyDrive/taxi.jpg --weights yolov5s.pt --conf 0.25

その後、コードセルを追加し、上記のコードを記述し、セルを実行してみます。

!python /content/yolov5/detect.py --source /content/drive/MyDrive/taxi.jpg --weights yolov5s.pt --conf 0.25
detect: weights=['yolov5s.pt'], source=/content/drive/MyDrive/taxi.jpg, imgsz=640, conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, update=False, project=runs/detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False
requirements: /content/requirements.txt not found, check failed.
YOLOv5 🚀 v5.0-223-gb83e1a4 torch 1.9.0+cu102 CUDA:0 (Tesla K80, 11441.1875MB)

Downloading https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt to yolov5s.pt...
100% 14.1M/14.1M [00:00<00:00, 26.5MB/s]

Fusing layers...
/usr/local/lib/python3.7/dist-packages/torch/nn/functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at /pytorch/c10/core/TensorImpl.h:1156.)
return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)
Model Summary: 224 layers, 7266973 parameters, 0 gradients
image 1/1 /content/drive/MyDrive/taxi.jpg: 448x640 7 cars, Done. (0.064s)
Results saved to runs/detect/exp
Done. (1.303s)

実行すると、今回用意した写真内からオブジェクト検出を開始します。開始後、しばらくすると「Done.(完了)」と出力されます。これでオブジェクト検出は完了です。

■オブジェクト検出した結果を確認する

完了後、オブジェクト検出した結果を確認してみます。

確認する際は、ノートブックの左側にフォルダのアイコンがありますので、こちらをクリックすると、「runs」というフォルダが生成されていることが確認できます。このフォルダをクリックし、「detect」の「exp」フォルダを確認すると、今回用意した画像ファイル「taxi.jpg」と同じ名前のファイルが確認できます。このファイルを開きます。

開くと、YOLOv5を使用したことで、写真内のタクシーが「car(車)」として認識されていることが確認できました。

コメント

タイトルとURLをコピーしました