やること
はじめまして、Suzuです|・ω・)ノ
ポケットにティッシュを入れたまま洗濯を行って洗濯槽内が悲惨なことになった経験ありませんか?(私はあります笑)
洗濯が二度手間になるのは嫌ですよね。
そこで、洗濯を行う前に洗濯槽内に混入したティッシュをカメラと機械学習で検出したいと思います。今回は2023年に公開されたYOLOv8を使ってティッシュの学習を行い、検出と識別を行います。
実行環境
Google Colaboratoryが利用可能です。
プログラミングを行う開発環境としてはvscodeもおすすめです。
Pythonのバージョンは3.12.2です。
参考文献
YOLOv8の公式ページはこちらのサイトをご参照ください。
また、YOLOv8による物体検出の方法は以下のサイトが参考になりました。
Youtubeの「ゼロから始める物体検出」シリーズも参考になります。
ティッシュ画像の収集
Mac内蔵のカメラでティッシュの画像を集めました。PCに入っている撮影アプリ「Photo Booth」を使ってティッシュの写真を撮りまくります。Windowsの場合もプリインのカメラアプリで大丈夫だと思います。
全部で72枚撮りました。
これらを学習データ(trainデータ)と検証用データ(valデータ)に分割して格納します。trainデータとvaldデータの比率は8:2または7:3がおすすめです。
データは以下のように配置しておきます。
ティッシュ画像のアノテーション
次にアノテーションツールを使ってアノテーションを行います。アノテーションでは検出したい物体をバウンディングボックスで囲んでラベリングを行います。例えば、バナナを検出したい場合はバナナを囲んで”banana”とラベル付けを行います。
今回はアノテーションツールの一つである「labelImg」を使います。インストール方法はREADMEを参照してください。
ラベリングの手順は以下のサイトも参考になりました。
注意点としてはYOLO向けのテキストファイルを出力しないといけないのでPascalVOCを「YOLO」に変更してください。
このようなテキストファイルが生成されます。クラス番号(今回は0のみ)、バウンディングボックスの中心X座標、中心Y座標、幅、高さです(小数点なので比率です)。
0 0.518403 0.653646 0.206250 0.315625
アノテーションデータは以下のように配置しておきます。
データセットの完成
「datasets」フォルダをまるごとzipに圧縮します。
データセットのパス、クラス数、クラス名称を指定するファイル「dataset.yaml」ファイルを作成します。データセットはColabにアップするのでパスは「/content」から始めます。
# Path
path: /content/datasets/suzu # dataset root dir
train: /content/datasets/suzu/images/train # train images (relative to 'path')
val: /content/datasets/suzu/images/val # val images (relative to 'path')
# Classes
nc: 1 # number of classes
names: ['tissue'] # class names
zipとdataset.yamlをColabの左側のところにアップロードしたら準備完了です。
続く
②学習編に続きます!