Pythonによるデータ分析・機械学習ブログ

Pythonによるデータの前処理・グラフ化、機械学習、統計解析、画像処理、Webスクレイピング、自然言語処理の基礎について紹介していきます。

MENU

【第17回】Google Colaboratoryを用いたYOLOXの学習

はじめに

 近年、AI(Artificial Intelligence:人工知能)の急速な発展に伴い、それらを用いた技術が活用され始めています。例えば、AIによる画像認識技術として物体検出などがあります。物体検出は「画像の中から特定の物体の位置、種類、個数などの情報を認識する技術」であり、AIを用いて比較的高速に画像内の物体情報を取得することができます。この技術を用いて製造業では品質評価、外観検査、異常検知などに活用されています。

 リアルタイムに物体検出を行うアルゴリズムにYOLO(You Only Look Onse)と呼ばれるものがあり、CNN(Convolutional Neural Network:畳み込みニューラルネットワーク)を用いたアルゴリズムとなっています。2021年8月に公開された最新の物体検出モデルにYOLOXがあり、これはYOLOv5を超える性能と、使いやすいライセンス(Apache License)を両立しています。

 YOLOXなどの物体検出で精度改善等を行う場合、画像にアノテーションを行って学習を行います。アノテーションは一般的にVoTTやlabelmeなどのツールを使い、アノテーションデータはPascalVOC形式のデータとして出力されます。その後、YOLOXの学習用にCOCO形式へ変換し、学習を実行します。

 学習時にはGPUを用いたいため、簡易的にGPUを使用可能なGoogle Colaboratoryを用いて学習を実施したいと思います。

 本記事では、Google Colaboratoryを用いたYOLOXの学習の方法を紹介します。なお、一般的なGPUマシンによる学習実行については以下の記事をご覧ください。

chantastu.hatenablog.com

YOLOXの完全攻略マニュアルも以下のnote記事で紹介しています。

note.com

Aidemy Premium

 

以下が本記事で紹介するコマンドの一覧です。詳しくは以下で説明しています。

 

0. Google ColaboratoryでGPUを使用

まずGoogle Colaboratoryで「ランタイム」→「ランタイムタイプを変更」をクリック。

次に、ハードウェアアクセラレータでGPUを選択して、下部の「保存」ボタンをクリックしてください。これでOKです。

 

1. VoTTによるアノテーションデータセットの作成

VoTTによるアノテーションデータセットの作成については、以下の記事をご覧ください。

chantastu.hatenablog.com

chantastu.hatenablog.com

 

2. データセットをPascalVOC形式からCOCO形式へ変換

PascalVOC形式からCOCO形式へ変換については、以下の記事をご覧ください。

chantastu.hatenablog.com

 

3. YOLOXの動作環境の構築

Google Colaboratoryで動作環境を構築します。

3.1 Google Driveに接続

以下のコマンドでGoogle Driveに接続します。

ご自身のアカウントを選択して、接続を許可してください。そうすると下図のようにdrive/MyDriveが表示されて、Google Driceに接続します。

3.2 git cloneとパッケージインストール

それではYOLOXをダウンロードして、必要なパッケージをインストールします。以下のコマンドを実行してください。

 

Google Colaboratoryでは以下のようになります。

 

4. 学習準備

4.1 データセットの用意

第2章で作成したCOCO形式のデータセットをYOLOX/datasetsディレクトリに置きます。

以下のように保管します。

Google Drive上ではこのように格納します。

4.2 学習定義ファイルの作成

モデルごとの学習定義ファイルのテンプレートはYOLOX/exp/defaultディレクトリに保管されています。今回はyolox_tiny.pthの学習済みモデルを用いて学習を実施したいと思いますので、対応する学習定義ファイルであるyolox_tiny.pyを選択します。YOLOX/exp/defaultディレクトリにあるyolox_tiny.pyは以下のようになっています。

このyolox_tiny.pyをYOLOX直下の階層にコピーして修正します。さらにわかりやすいようにファイル名をyolox_person.pyとします。このファイルに以下のように追記します。今回はCOCOクラスのpersonのみを検出したいと思うので、self.num_classes = 1とします。

4.3 COCOクラス名のファイルを修正

最後にクラス名の修正を行います。今回はCOCOクラスのpersonのみを検出したいと思うので、YOLOX/yolox/data/datasetsディレクトリにあるcoco_classes.pyファイルを以下のように修正します。

4.4 学習済みモデルの取得

学習で使用する学習済みモデルを取得します。今回はyolox_tiny.pthを用います。こちらのリンクから手動で取得することもできます。Standard Models.かLigth Models.のどちらかから取得してください。なお、Standard Models高精度向けで、Light Modelsはエッジ端末向けです。

これで準備完了です。

 

5. 学習

それでは準備が完了したので学習を実行していきます。以下のコマンドを実行することで学習が実行されます。-fには学習定義ファイルであるyolox_person.py、-dにはGPUの数1、-bにはバッチ数4、-cには学習済みモデルが格納されているパスであるmodel/yolox_tiny.pthを指定します。(今回学習定義ファイルはYOLOX/yolox_person.pyのようなディレクトリに置いてあると仮定します。学習済みモデルは、YOLOX/model/yolox_tiny.pthのようなディレクトリに置いてあると仮定します。4.4参照)

学習を開始するとYOLOX/personディレクトリにepochごとのモデルが保存され、学習終了後にバリデーションデータのスコアがよいものがbest_ckpt.pthとして保存されます。

 

6. 学習後の推論

 学習後の確認として学習に用いていない画像を用いたほうが良いですが、ここでは学習に用いた画像で学習後のモデルの動作を確認したいと思います。推論実行のコマンドは以下のようになります。

 推論結果の画像は以下のようになります。今回はpersonのみ検出されるようになっているので、その通りになっていることが確認できます。

 

オススメ書籍

物体・画像認識と時系列データ処理入門

現場で使える!PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装

PyTorchで作る!深層学習モデル・AIアプリ開発入門

 

スキル修得&転職

 近年、DXの進展に伴うデジタル人材の需要の高まりに追いついていない状況が続いていると経済産業省がホームページで記載している通り、DX人材、IT人材が不足しているのが現状です。さらにコンピュータの性能向上やAI技術の発展により、よりDX人材、IT人材の需要が高まってきます。さらには、今後の長期間安定して職がある業種とも考えられます。

以下の求人では、IT業界の転職や、IT未経験だけどIT人材を志望する就活を支援してくれます。無料で会員登録もできるので、まずは登録だけでもして様子を見てみてはいかがでしょうか?

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

 

おわりに

 本記事では、本記事では、Google Colaboratoryを用いたYOLOXの学習の方法を紹介しました。GPU付きの物理マシンを用意するとなると、一般ではなかなか価格的に厳しいと思いますので、気軽に使えるGoogle Colaboratoryは本当にありがたいですね。

 本記事をマスターすることでご自身の検出したい物体に合わせたモデルを作成することができるようになります。具体例を挙げると食品や工業製品の外観検査、人物検知などが実施でき、応用すると業務の自動化や新規ビジネスにも繋がります。