【YOLOv5】ドローン画像からのA4用紙を検出してみよう!
はじめに
大学の講義の一貫として行った内容をメモ程度に残しておきます.
labelimgによる教師データの作成や,YOLOの解説や学習については他の方を参照してください.
※ 整形した最新版(Qiitaの記事)
https://qiita.com/you-ris/items/873c48ac23fcc77d58fe に記載しています.
YOLOでの物体検出
配布したzipファイルを解凍して,自身のGoogle Driveのマイドライブ上に
ドラッグ&ドロップでアップロードしてください.一応下に置いておきます。
https://xgf.nu/injK7
(2024年10月9日(水)まで)
GPUの使用状況
まずはGoogleのGPUを使えるようにします.下の「ランタイムのタイプを変更」から「ハードウェア アクセラレータ」を「GPU」に変更して,保存してください.
今回は既にドローンで撮影した画像をもとに,GoogleColableを用いて検出を行っていきます.用いるデータは授業の際に配布いたします.解凍後,ご自身のGoolgeDriveの任意の場所にアップロードし,開いてください.
!nvidia-smi
!nvidia-smi -L
1行目は使うGPUを確認しています.これを実行(Shiftキー + Enter)してみて下さい.すると以下のような結果が出てくると思いますが特に気にせず眺めるだけにしてください.詳しい内容については,quiverさんの「nvidia-smiでNVIDIA GPU使用状況をモニタリングする」で確認してみて下さい.
GoogleDriveのマウント
from google.colab import drive
drive.mount('/content/drive')
import cv2
import numpy as np
from google.colab.patches import cv2_imshow
次に2行目を実行してください.このコードは,GoogleDriveのマウントや使うメソッドのインポートを行っています.許可の画面が出ると思うので,指示に従ってご自身のアカウントで許可を行ってください.
YOLOのインストール
%mkdir -p /content/drive/MyDrive/A4paperDetection # %mkdir : ディレクトリ(フォルダ)の作成
%cd /content/drive/MyDrive/ # %cd : ディレクトリ(フォルダ)へ移動
!git clone https://github.com/Tana-ris/A4paperDetection # !git clone : Github上にアップロードした授業用フォルダのダウンロード
%cd A4paperDetection/yolov5
%pip install -qr requirements.txt # %pip : 必要なPythonパッケージ(今回はrequirements.txt内に記載)のインストール
import torch
import utils
from IPython.display import Image, clear_output, display # to display images
display = utils.notebook_init() # checks
次に3行目を実行してみて下さい.するとYOLOのモデルのダウンロードが始まり,GoogleDriveのマイドライブ直下に,「A4paperDetection」というフォルダが作られると思います.そして,その中に「yolov5」というフォルダも作られていると思います.
「A4paperDetection」フォルダの中に,学習済みモデル「best.pt」をアップロードしてください.
フォルダ作成と推論実行
4行目は実際に学習を行う時のコードです.今回は時間の関係以上,学習は行いませんので無視してください.
5行目では「A4paperDetection」直下に,「image」と「output」の2つのフォルダを作成しています.
※ 配布したファイルではすでに作成しています。
そして,「image」フォルダにドローンで撮影した画像をアップロードして,以下のコードを実行してみましょう!
# 必要なディレクトリを作成
%mkdir -p /content/drive/MyDrive/A4paperDetection/image
%mkdir -p /content/drive/MyDrive/A4paperDetection/output
%cd /content/drive/MyDrive/A4paperDetection/yolov5
# YOLOv5のdetect.pyを実行
print("YOLOを用いてA4用紙を検出中....")
!python detect.py --source /content/drive/MyDrive/A4paperDetection/image/ \
--weights /content/drive/MyDrive/A4paperDetection/best.pt \
--img 1280 \
--conf 0.3 \
--name /content/drive/MyDrive/A4paperDetection/output/ \
--exist-ok
print(f"検出されたすべての画像を,「/content/drive/MyDrive/A4paperDetection/output/」に出力しました!")
すると推論が始まります.1枚当たり0.1秒前後で実行できると思います.
検出結果は「/content/drive/MyDrive/A4paperDetection/output」に出力されています.YOLOではtifファイルでも推論を行うことが出来ます.
うまく検出できているのがわかりますね!
※ 配布したファイルには,A4用紙の枚数を数えるコードを追記しています。