こんにちは。
コンピュータビジョン(『ロボットの眼』開発)が専門の”はやぶさ”@Cpp_Learningです。
本記事ではタイトルの通り『ColaboratoryでChainer使ってYoloを動かす』方法を分かりやすく説明します。
また、Twitterで「トラブルシュート付き『技術ノート』を作成しています」という内容のツイートをしたら、結構評判良かったので…
最近はJupyterでテキスト付きpythonコードを書くことが多い。コードでエラー出てもトラブルシュートを残したいので、あえてエラーが出るコードも残した「技術ノート」を作成し、社内で公開してる。
Jupyter + 技術ノート作成については"MyEnigma"様のサイトがオススメです。https://t.co/Kh5AzqkHaD
— はやぶさ (@Cpp_Learning) June 10, 2018
今回は本ブログの名に恥じない”はやぶさ”の技術ノートを公開したいと思います。
本記事では”Chainer”と”Yolo”については詳しく説明しません。文章が長くなって読むのが辛くなってしまうので…
Contents
Colaboratoryとは
Google Colaboratoryについては下記の記事で紹介しています。もし、Colaboratoryの使い方に不安のある人は、一度読んでみてから、本記事を読むと理解が早いと思います。
Chainer・Yoloについて
冒頭での述べた通り、”Chainer”と”Yolo”については詳しく説明しません。ただ、全く説明しないのも心苦しいので、少しだけ触れます。
Chainerとは
Chainerとは、国産の深層学習フレームワークです。慣れや好みもありますが、使いやすいのでChainer大好きです!(Kerasも大好きです!)
本記事ではChainerファミリのひとつで画像処理に特化したライブラリChainerCVも使ってYoloを動かします。
Yoloとは
Yoloとは、You Look Only Onseの略称でリアルタイム物体検出アルゴリズムの一つです。リアルタイムとあるように、速さが売りのアルゴリズムです。
Yolo公式サイトがちょっちアレなので、損してるとか…してないとか……。個人的には性能の良いYoloも個性的なサイトも大好きです。
ColaboratoryでChainer使ってYoloを動かす
以降から『ColaboratoryでChainer使ってYoloを動かす』の実践編を説明していきます。
環境構築
何をするにも、まずは環境構築から行います。Colaboratoryにアクセスし「Python 3の新しいノートブック」を作成します。
真っ新なノートブックのセルに下記のコードを書い実行しすると、必要なソフトをインストールできます。
!apt -y install libcusparse8.0 libnvrtc8.0 libnvtoolsext1
!ln -snf /usr/lib/x86_64-linux-gnu/libnvrtc-builtins.so.8.0 /usr/lib/x86_64-linux-gnu/libnvrtc-builtins.so
!pip install chainer
!pip install cupy-cuda80
ChainerCVインストール
今回はChainerCVも使いたいので、先ほど同様セルに以下のコードを書いてインストールします。
!pip install chainercv
これで環境構築完了です。
画像ファイル アップロード
Colaboratoryはオンライン実行環境なので、ローカルPCに保存したファイルを参照できません。そのため、Colaboratoryが参照できるようにテスト用の画像ファイルをアップロードしてあげます。
画像に限らず、ファイルのアップロードには以下のコードを使います。
from google.colab import files
uploaded = files.upload()
セルを実行すると「ファイル選択」ボタンが表示されるので、クリックしてアップロードしたいファイルを選択します。今回は「dog.jpg」をアップロードしました。
黄色□のようにSavingが表示されればOKです。
アップロードしたファイルは時間が経つと自動的に削除されるようです。ただ、一時的でもネット上にファイルを保存するため、ファイルの取り扱いには、お気をつけ下さい。
Yolo_Chainer.py 作成
ChainerでYoloを動かすSampleソースコードは、ChainerCV公式Githubから取得できます。ただし、パーサーを使用するため、Colaboratory(Jupyter Notebook)からは実行できません。
そのため、パーサー未使用になるように改良したコード(以降このコードをYolo_Chainer.pyと呼ぶ)をセルに書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# import argparse import matplotlib.pyplot as plt import chainer from chainercv.datasets import voc_bbox_label_names from chainercv.links import YOLOv2 from chainercv.links import YOLOv3 from chainercv import utils from chainercv.visualizations import vis_bbox def main(): ''' parser = argparse.ArgumentParser() parser.add_argument( '--model', choices=('yolo_v2', 'yolo_v3'), default='yolo_v2') parser.add_argument('--gpu', type=int, default=-1) parser.add_argument('--pretrained-model', default='voc0712') parser.add_argument('image') args = parser.parse_args() if args.model == 'yolo_v2': model = YOLOv2( n_fg_class=len(voc_bbox_label_names), pretrained_model=args.pretrained_model) elif args.model == 'yolo_v3': model = YOLOv3( n_fg_class=len(voc_bbox_label_names), pretrained_model=args.pretrained_model) if args.gpu >= 0: chainer.cuda.get_device_from_id(args.gpu).use() model.to_gpu() ''' model = YOLOv3( n_fg_class=len(voc_bbox_label_names), pretrained_model = 'voc0712') gpu = 0 # GPU = 0, CPU = -1 chainer.cuda.get_device_from_id(gpu).use() model.to_gpu() image = 'dog.jpg' img = utils.read_image(image, color=True) bboxes, labels, scores = model.predict([img]) bbox, label, score = bboxes[0], labels[0], scores[0] vis_bbox( img, bbox, label, score, label_names=voc_bbox_label_names) plt.show() if __name__ == '__main__': main() |
パーサーが使用できないため、各設定が固定となります。今回作成した『Yolo_Chainer.py』は以下のような仕様にしました。
- Yoloのバージョン:YoloV3
- GPUの使用/未使用:GPU使用
- 学習モデル:VOC2007
GPU有効化
ColaboratoryでGPUを使う場合、タブの「ランタイム」→「ランタイプのタイプを変更」→「ハードウェア アクセラレータ」→「GPU」で保存します。(下図参照)
Yolo_Chainer.py 動作確認
GPU有効化し、Yolo_Chainer.pyを実行します。下図のような物体検出結果が出れば成功です。
初回は学習モデルをダウンロードするため、時間がかかりますが、2回目からは、すぐにYoloを動かせます。
”はやぶさ”の技術ノート
『ColaboratoryでChainer使ってYoloを動かす』方法を説明しました。最後に、この記事を作成するにあたり、様々な検討を行いながら作成した”はやぶさ”の技術ノートを公開します。
メモあり、エラーレポートありで見栄えは悪いですが、そういったものをあえて残すことで現役エンジニアの思考を視覚化できるため、勉強の手助けになるかなぁ…と考えています。
本記事を読んで下さった皆様が、『自分用の技術ノート』作りたい!!と思ってくれたなら、嬉しく思います。
(『”はやぶさ”流の技術ノート作成方法』の記事もいつか書きたいなぁ。。)
ColaboratoryとChainerで快適な機械学習ライフを満喫してくださいな(^^)