ColaboratoryでChainer使ってYoloを動かす
以下のコマンドを打ち込んでChainerをGPUで動かせる環境を構築します。
!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 'cupy-cuda80' 'chainer'
Chainerが正常にインストール確認するため、以下のコードを実行します。エラー出ないのでOKですね。
まぁインストール時に以下のメッセージも出ているので問題ないでしょう!
Successfully installed chainer-4.2.0 cupy-cuda80-4.2.0 fastrlock-0.3 filelock-3.0.4
import chainer
今回はYoloを動かしたいので、”ChainerCV”も以下のコマンドでインストールします。
!pip install chainercv
ChainerCVが正常にインストール確認するため、以下のコードを実行します。エラー出ないのでOKですね。
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
以下のコードで試験用の画像ファイルをアップロードする。
from google.colab import files
uploaded = files.upload()
ちゃんとアップロードできたか、下記コマンドで確認。うん!ちゃんと保存できてる!
!ls
念のため、以下のコードで表示までさせて安心する。アップロードは問題なし!
Yoloといえば、この画像だよね。イヌ可愛い。。
from IPython.display import Image,display_jpeg
display_jpeg(Image('dog.jpg'))
ちなみにココはどこ状態なので、以下のコマンドで確認。…ふーん。”Colaboratory”の一時保存場所は”content”って名前ね。
!pwd
ChainerCVの公式GithubからYoloのサンプルコードをコピーし、実行します。
公式でdemo.pyという名前だが、分かりにくいので、本稿では『Yolo_Chainer.py』と名付ける。
【ChainerCVの公式Github】
https://github.com/chainer/chainercv/blob/master/examples/yolo/demo.py
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()
img = utils.read_image(args.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()
# 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()
おお!!できた!!!
初回はVOC2007の学習モデル読み込むため、少し時間かかりますが、2回目以降はすぐにYoloが実行できます。
Colaboratoryにロードしたファイルや学習モデル、pipでインストールしたchainerまで時間がたつと削除されます!
それが、Colaboratoryの良いところでもあり、悪いところでもあるので、別ーのツールと上手く使い分けたいですね。
上記の通り、ロードしたファイルは削除されてしまいますが、今回作成したテキスト付pythonコード(本サイトでは『技術ノート』と呼んでいます)は『.ipyndファイル』で(今回は『Yolo_Chainer.ipynd』と名付けました。)はGoogle ドライブに保存できます。
Google ドライブに保存した『Yolo_Chainer.ipynd』をColaboratoryから開き、タブの「ランタイム」→「すべてのセルを実行」とすれば、再びChainerでYoloが動かせます。
つまり、『Yolo_Chainer.ipynd』をインストーラ付きYolo用デモファイルとして活用できます。 ちょっとスマートでしょ?
ColaboratoryとChainerで快適な機械学習ライフを満喫してくださいな(^^)