4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Yolov9で物体検出(静止画、動画、自作データ)

Last updated at Posted at 2024-06-28

ここではyolov9を使い、静止画、動画、自作データの物体検出方法を記述しています。
windows11 で Google Colab を利用しました。(初心者向け)
(リアルタイム検出はGoogle Colabではできないです)

物体検出イメージ

こんな感じの物体認識を自分のPCで簡単にやってみたい
mac.jpg
動画も

Google ColabでYolov9を体験してみる

普段使っているWindowsのPCでGoogle Colabを使いました。
(めちゃくちゃ初心者向けです)

Google Colabを開く

(Google Colabを使用したことがある方は読み飛ばしてください)
Google Colabを使用したことがない方は順番に操作してください。

  1. google colab と検索すると
    img1.png

  2. google colaboratory を選択し、ノートブックを新規作成をクリックする
    新規にノートブックが開き、カーソルの位置にプログラムを入力していきます。

  3. GPUで処理をすると早いので、まずはランタイムのタイプを変更します。

img2.png

img3.png

ドライブをマウントする

ご自分のgoogledriveにデータをダウンロードするため、アクセスできるようにしておきます。
カーソルの位置に以下を入力します。

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

入力したプログラムを実行するには実行ボタンをクリックします

img4.png

アクセスを許可するのでgoogleドライブに接続をクリック

img5.png

・使用するGoogleアカウントを選択します。
・Google Drive for desktopにログインするので次へをクリック
・追加アクセスを求めていますと表示されたら続行をクリック
 googleドライブ上のMyDriveがマウントされます。
・フォルダアイコンをクリックするとMyDriveフォルダを確認できます。

img6.png img7.png

次のプログラムを入力するので+コードをクリックします。

img8.png

yolov9をダウンロード

先ほどマウントしたMyDriveにyolov9をダウンロードして、
yolov9フォルダにディレクトリを移動します。

!git clone https://github.com/WongKinYiu/yolov9
%cd yolov9

※yolov9のフォルダができてますので確認してみてください。
+コードをクリックして入力画面を追加してください。
weightsフォルダを作成し、学習済みのモデルをダウンロードします。

!mkdir -p weights
!wget -P weights -q https://github.com/WongKinYiu/yolov9/releases/download/v0.1/yolov9-c.pt
!wget -P weights -q https://github.com/WongKinYiu/yolov9/releases/download/v0.1/yolov9-e.pt
!wget -P weights -q https://github.com/WongKinYiu/yolov9/releases/download/v0.1/gelan-c.pt
!wget -P weights -q https://github.com/WongKinYiu/yolov9/releases/download/v0.1/gelan-e.pt

検出

yolov9/data/images/フォルダにサンプル画像 horses.jpg があります。
これを使って検出してみます。

!python detect.py --weights weights/yolov9-c.pt --conf 0.1 --source data/images/horses.jpg --device 0

次のようなエラーが出ると思いますが、yolov9/utils/general.py を開いて 903 行を prediction = prediction[0][1]`に変更してください。
どうやらweightsにyolov9-c.ptまたはyolov9-e.ptを使用した場合はうまくいかないので変更するようです。

img9.png

うまくいくと、結果がruns/detect/exp・・・ に保存されます。
horses.png

好きな画像を入れて検出してみましょう

先ほどのサンプル画像 horse.jpgと同じ場所、yolov9/data/images/ フォルダ内に 好きな画像ファイルを入れて、実行します。

!python detect.py --weights weights/yolov9-c.pt --conf 0.1 --source data/images/入れたファイル名.jpg --device 0

ex.
mac.jpg

ここで検出される項目は学習済モデルをもとにしています。(以下参考)
name.png

動画で確認してみましょう

好きな動画を yolov9/data/images/ フォルダ内に入れて実行してみてください。

!python detect.py --weights weights/yolov9-c.pt --conf 0.1 --source data/images/入れたファイル名.mp4 --device 0

自作データを使って検出

「学習済モデルの中に検出したい項目がない」時や「自作の画像」は学習をさせるところから行います。

ex.項目にlionやtigerがないため不正確 → 新たに学習させて正確に検出
lion_tiger1.jpglion_tiger2.jpg

データの準備

まずは、学習させたいデータ(jpgなどの画像)を準備します。(私はお試しでlion25枚tiger25枚用意しました)

ラベルをつける(アノテーション)

画像認識させるためには「どの部分」を「どんな名前」で認識させるかを登録します。
ラベル付けをするソフトはいろいろありますが、私は labelImg を使いました。

  1. pythonが必要なので pythonのインストール をします
  2. windowsマークより[コマンドプロンプト」または「windows powershell]を起動
  3. コマンドプロンプトの場合は次にpythonと入力し実行する
  4. labelImgのインストール
     pip install labelImgと入力し実行する
  5. labelImgの起動
     labelImgと入力し実行する

アノテーションのやり方は 「yolov5で物体検出(静止画、動画、自作データ、リアルタイム)」のアノテーション(ラベル付け)をご覧ください。

もし、labelImg操作中で、落ちることがあればこちらを参考にしてください。(私は落ちました)

自作データの保存

こんな感じのフォルダを作成し、ラベル付けしたjpgとtxtファイルを保存しておきます。
img10.png

data.yamlの作成

学習に必要な項目を記述したdata.yamlファイルを作成します。
ex. lionとtigerのラベリングをした場合
img11.png

新規作成するので、テキストエディタを開き、
path: データセットの場所
train: 学習用の画像フォルダの場所(path:からの相対)
valid: 検証用の画像フォルダの場所(path:からの相対)
test:  テスト用の画像フォルダの場所(path:からの相対)
nc : ラベルの項目数
names: ラベルの名前
を入力し、yolov9/data/ の中に data.yaml の名前で保存します。

学習を実行する

少ない学習回数 epochs 25 くらいでやってみる

!python train.py \
--batch 16 --epochs 25 --img 640 --device 0 --min-items 0 --close-mosaic 15 \
--data /content/drive/MyDrive/yolov9/data/data.yaml \
--weights /content/drive/MyDrive/yolov9/weights/gelan-c.pt \
--cfg models/detect/gelan-c.yaml \
--hyp hyp.scratch-high.yaml

学習結果はruns/train/exp に保存されます。

学習した結果をもとに物体検出してみる

weightsを学習したファイルに変えます。(runs/train/exp/weights/best.pt)

weightsをyolov9-c.ptから変更した場合はyolov9/utils/general.py を開いて 903 行をprediction = prediction[0]に戻してください。

以下を実行します

!python detect.py --weights runs/train/exp/weights/best.pt --conf 0.1 --source data/images/物体検出したいファイル.jpg --device 0

結果は runs/detect/exp・・・ です。

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?