【深層学習】Colab・YOLOv3・darknet でYOLO形式の独自データセットを学習させる手順

【深層学習】Colab・YOLOv3・darknet でYOLO形式の独自データセットを学習させる手順

今回はGoogleColab・YOLOv3・darknetの環境でYOLO形式の独自データセットを学習させる手順を紹介していきます。

深層学習で使用されるデータセットの形式は数種類あるようですが、今回はその中でYOLO形式のデータセットを用意して実施していきます。

手順については以下の記事を参考にさせていただきました。

物体検出に独自データを学習させる(顔ロボット)
Google ColabでYOLOの学習を行う

公式ページのほうにも学習方法などが記載されています。
Yolo-v3 and Yolo-v2 for Windows and Linux
YOLO: Real-Time Object Detection
How to train YOLOv2 to detect custom objects

独自データセットとアノテーションファイルを用意

使用したい画像を収集し、今回の独自データセットとして使用します。画像収集が完了したらアノテーションツールを使用してアノテーションファイルを作成していきます。

今回はペットボトルの画像を30枚用意して管理しやすいように「bottle_0001.jpg」のように全てリネームしておきました。リネームは以下の記事で紹介したツールを利用します。

WordPressなどのブログの画像を用意するときにファイル名を一括変換する方法

また、今回使用する画像はリサイズして画像の大きさをそろえておきました。データセットで使用する画像はサイズが一定のものがよいと書いてある記事もありますが、こちらについては別途考察していきたいと思います。

アノテーションツールにはLabelingを使用しました。画像を読み込んでタグ付けを実施していきます。YOLO形式で保存されるように設定を切り替えておきます。

保存をすると画像と同じフォルダにアノテーションファイルが出力されます。一枚の画像(.jpg)に対して一枚のアノテーションファイル(.txt)が出来上がっていることを確認します。

全てのアノテーションファイルが用意できたら独自データセットの出来上がりです。

GoogleColabのページを用意

GoogleColabのページに移動して新しいノートブックを作成します。名前は任意です。

ランタイプの形式をGPUに切り替えておきます。

以下のコマンドを順番に実行していきます。必要なものに関してはこちらのページで公開されているものをそのまま使用しています。

darknetを取得

YOLOを動作させるためにdarknetフレームワークを取得します。デフォルトのディレクトリから移動していない場合はContentフォルダ配下にダウンロードされます。

yolov3の学習済み重みをダウンロード

〇darknetフォルダ配下に「darknet53.conv.74」をダウンロードしておきます。リストコマンドで「darknet53.conv.74」ファイルが増えていることを確認します。

OPENCVとGPUを有効化します。

その他、以下のコマンドも実行しておきます。

darknetをMake

darknetをMakeしていきます。

画像や各種設定ファイルをアップロード

ここからは準備しておいた画像や設定ファイルをColabにアップロードしていきます。ファイルのダウンロードおよびアップロードは左側のメニューから右クリックで行うことができます。

「yolo-obj.cfg」を用意

まずは以下のパスにある「yolov3.cfg」をローカルにダウンロードし、「yolo-obj.cfg」にリネームします。

リネームしたら中身を以下のように書き換えます。まずはbatchとsubdivisionsを書き換え。

次に学習するクラスの数に合わせてclassesを書き換えます。今回はbottleだけなので1を設定します。書き換えるのは610 行目、696 行目、783 行目となります。

次にフィルターを書き換えます。フィルター数は以下の計算式の結果に書き換えます。今回はクラス数が1なので結果は18となります。書き換えるのは603 行目、689 行目、776 行目となります。
・フィルター数 = (クラスの数+5)×3)

保存した「yolo-obj.cfg」を元のフォルダにアップロードします。

「obj.names」と「obj.data」を用意

「obj.names」というファイルを新規作成し、クラス名を1行ずつ記載して以下のパスにアップロードします。今回はbottleという1行のみを記載しています。

「obj.data」というファイルを新規作成し、以下のフォルダ構成を書き込んだ保存します。今回はクラス数が1なのでclasses= 1としています。

保存したら以下のパスへアップロードします。

「train.txt」と「test.txt」を用意

学習に必要となってくる「train.txt」と「test.txt」を用意します。ファイルの中には今回の学習で使用する画像のパス一覧を記載しておきます。
パス一覧は「train.txt」と「test.txt」で8:2ぐらいとなるようにランダムに割り振っておきます。

「obj」フォルダを作成して「画像」と「アノテーション」を格納

以下のパスに「obj」フォルダを新規作成しておきます。

作成した「obj」フォルダの中に学習で使用する画像とアノテーションファイル一式をアップロードします。
ファイルパスとしては以下のようになります。

以上ですべての準備が整いました。

独自データセットで学習を開始

以下のコマンドを実行して学習を開始します。Windowsでは実行コマンドが異なるようですのでご注意。
ファイルは以下の引数で指定している場所に正しく配置してある必要があります。

1クラスであれば8時間から12時間程度で学習が終わることが多いようです。クラスの数が増えるとそれだけ学習する時間も増えることが分かっています。学習済みの重みができたら性能を確かめていこうと思います。

Colabの90分セッション切れ問題は「UWSC」で解決

Colabで学習を開始してそのまま操作を行わないと90分でセッションが切れてしまいます。今回はその問題を自動化ツールの「UWSC」で解決します。

①「UWSC」の公式ページからツールをダウンロードしてきます。

②UWSCの録画を開始します。

③更新させたいページをクリックします。

④F5キーを押してページを更新します。

⑤録画を終了させます。

⑥上記までの操作をファイルとして保存します。

⑦上記の処理を一定時間で繰り返し行えるように「.UWS」ファイルの中身を編集します。

あとは学習を開始させたらUWSCの再生ボタンを押してセッションが切れないようにします。

ブラウザがクラッシュしてしまうときの対策

①ブラウザのキャッシュを削除する

②ブラウザの拡張機能を無効にする

③実行中の無駄な処理をキルする

④メモリ上昇を抑えるために出力結果を定期的に削除する

1つ星 (2 投票, 平均: 1.00 / 1)
読み込み中...



AIカテゴリの最新記事