LoginSignup
20
18

More than 1 year has passed since last update.

【リアルタム物体検知】YOLACT for Google Colab【YOLOを超えた?】

Last updated at Posted at 2021-06-10

➊はじめに

YOLOは「バウンディングボックス」の物体認識がリアルタイムでできて凄いなぁと思っていました。YOLACTでは「セグメンテーション」の物体認識がリアルタイムでできるようになっているとのことで、どんなものか試したいと思いました。
 

YOLO/YOLACTを使用して「じゃんけん」検出を行った記事と、ローカルPC(YOLACT)+webcamを使用してリアルタイム性を確認した記事もありますので、ご参考にどうぞ。

➋やること

今回は、Google Colabを使用してYOLACT (YOLACT++)をTrial Runします!YOLACTは、ありがたいことにMITライセンスです。

ここまで技術が高くなるとAI認識させるだけでもGPUは必須とのことなので、我らAI趣味人の強い味方であるGoogle Colabを使ってやってみたいと思います。ただ、Google Colabを使用するとwebカメラは使えないので、リアルタイムではなく、予め用意した画像ファイル、動画ファイルを使ってYOLACTの試走を実施したいと思います。

➌バウンディングボックスとセグメンテーションの違い

一応、違いをまとめておきます。
バウンディングボックスセグメンテーション違いを、以下にまとめました。

物体検出 概要 物体検出サンプル ツール
バウンディングボックス 画像内の物体の位置やクラスを検出 1623304097.png YOLO v5
セグメンテーション 画像内の各画素がどのカテゴリーに属するかを検出 1623304143.png YOLACT

➍Google Colabで試走

Google Colabで実施していきます。
Google Colabがよく分からないよという方は、『0からはじめる「Python AIプログラミング」 for Google Colab』で基礎が勉強できますので、こちらをご参照ください。

※サンプル画像、サンプル動画もこちらで用意し共有しています。ファイルはColab上にダウンロードするようにしておりますので、Google Colabにコピペのみで動作確認できると思います。希望が多ければ、Google Colbの実行結果もSHAREしたいと思います。

■YOLACTインストール

詳細は、本家「YOLACT Installation」をご参照ください。

(1) Google ColabのGPUを有効化

  • [ランタイム]→[ランタイムのタイプを変更]→[ハードウェアアクセラレータ]
  • [GPU]を有効→[保存]を押下

(2) ライブラリのインストール

GoogleColab
!pip install cython
!pip install opencv-python pillow pycocotools matplotlib
!pip install torchvision==0.5.0
!pip install torch==1.4.0

(3) YOLACTのダウンロード

GoogleColab
%cd /content
!git clone https://github.com/dbolya/yolact.git

(4) DCNv2の有効化

YOLACT++を使用するためDCNv2を有効化します。

GoogleColab
%cd /content/yolact/external/DCNv2
!python setup.py build develop

(5) 重み付けデータのダウンロード

YOLACT++ models(Resnet50-FPN)をダウンロードします。
こちらからもダウンロードできます。

GoogleColab
%cd /content
!git clone https://github.com/chentinghao/download_google_drive.git

!mkdir -p '/content/yolact/weights'
weights = '/content/yolact/weights/yolact_plus_resnet50_54_800000.pth'

%cd download_google_drive
!python download_gdrive.py 1ZPu1YR2UzGHQD0o1rEqy-j5bmEm3lbyP '$weights'

■画像評価

(1) 入力画像の設定

画像を取得します。

GoogleColab
inimgdir = '/content/yolact/in_img_files/'

!echo '$inimgdir'
!rm -r '$inimgdir'
!mkdir -p '$inimgdir'

%cd /content/download_google_drive
!python download_gdrive.py 19pvKhehjKsszhLAMLjujFQpsSswYOs2U '$inimgdir/pic1.jpg'
!python download_gdrive.py 13c8VOHdIxPzZSmenpxT31z3lnZemsPSo '$inimgdir/pic2.jpg'

画像を表示します。

GoogleColab
import os
import re
import matplotlib.pyplot as plt
import cv2

patternStr = '.+\.(jpg|png)'
pattern = re.compile(patternStr)
for item in os.listdir(inimgdir):
    result = pattern.match(item)
    if result:
        file = os.path.join(inimgdir,item)
        print(file)
        img = cv2.cvtColor(cv2.imread(file), cv2.COLOR_BGR2RGB)
        plt.figure(figsize=(10, 10))
        plt.imshow(img)
        plt.show()

元画像はこんな感じです。

(2) 出力先の設定

GoogleColab
outimgdir = '/content/yolact/out_img_files/'

!echo '$outimgdir' 
!rm -r '$outimgdir'
!mkdir -p '$outimgdir'

(3) 画像評価

GoogleColab
%cd /content/yolact
!echo '$weights'
!echo '$inimgdir'
!echo '$outimgdir'

!python eval.py --trained_model='$weights'\
                --config=yolact_plus_resnet50_config\
                --score_threshold=0.15\
                --top_k=15\
                --images='$inimgdir':'$outimgdir'

(4) 画像評価結果

GoogleColab
import os
import re
import matplotlib.pyplot as plt
import cv2

patternStr = '.+\.(jpg|png)'
pattern = re.compile(patternStr)
for item in os.listdir(outimgdir):
    result = pattern.match(item)
    if result:
        file = os.path.join(outimgdir,item)
        print(file)
        img = cv2.cvtColor(cv2.imread(file), cv2.COLOR_BGR2RGB)
        plt.figure(figsize=(10, 10))
        plt.imshow(img)
        plt.show()

Good!!かなり認識率は良いですね!

■動画評価結果

(1) 入力動画の設定

GoogleColab
inmovdir = '/content/yolact/in_mov_files/'

!echo '$inmovdir'
!rm -r '$inmovdir'
!mkdir -p '$inmovdir'

inmovfile1 = inmovdir + 'video1.mov'
inmovfile2 = inmovdir + 'video2.mov'

%cd /content/download_google_drive
src1 = '1oM5O5fQEu9-cWrUj5EGqfU_TsScjKEMh'
src2 = '1NHjz_PguT1UVGzrsdJDpwM8AgoaTU7w2'

!python download_gdrive.py '$src1' '$inmovfile1'
!ls '$inmovfile1'
!python download_gdrive.py '$src2' '$inmovfile2'
!ls '$inmovfile2'

(2) 出力先の設定

GoogleColab
outmovdir = '/content/yolact/out_mov_files/'

!echo '$outmovdir' 
!rm -r '$outmovdir'
!mkdir -p '$outmovdir'

outmovfile1 = outmovdir + 'video1_out.mov'
outmovfile2 = outmovdir + 'video2_out.mov'

!echo '$outmovfile1'
!echo '$outmovfile2'

(3) 動画評価

しきい値は0.6としています。認識状態により、調整してくださいね。

GoogleColab
%cd /content/yolact/
!echo '$weights'
!echo '$inmovfile1'
!echo '$outmovfile1'

!python eval.py --trained_model='$weights'\
                --score_threshold=0.6\
                --top_k=15\
                --video_multiframe=1\
                --video='$inmovfile1':'$outmovfile1'
GoogleColab
%cd /content/yolact/
!echo '$weights'
!echo '$inmovfile2'
!echo '$outmovfile2'

!python eval.py --trained_model='$weights'\
                --score_threshold=0.6\
                --top_k=15\
                --video_multiframe=1\
                --video='$inmovfile2':'$outmovfile2'

(4) 動画評価結果

以下フォルダに、動画評価結果のファイルができあがっているので、これをLocalPCへダウンロードし、動作を再生します。

/content/yolact/out_mov_files/video1_out.mov
/content/yolact/out_mov_files/video2_out.mov

しきい値を0.6と高めに設定したのにも関わらず、きちんと認識されています。
これはスゴい!ここまで技術が進歩しているとは…
 

➎OMAKE

おまけです😉

なお、動画評価後の「movファイル」をGoogle ColabからローカルPCへダウンロードしなくても、以下のコマンドを叩き「mp4ファイル」へ変換することで、Google Colab上から動画(mp4)を直接参照することができます。

GoogleColab
chg_in ='/content/yolact/out_mov_files/video1_out.mov'
chg_out = '/content/yolact/out_mov_files/video1_out.mp4'

!echo '$chg_in'
!echo '$chg_out'

!ffmpeg -i '$chg_in' '$chg_out'
GoogleColab
from IPython.display import HTML
from base64 import b64encode

mp4 = open(chg_out, 'rb').read()
data_url = 'data:video/mp4;base64,' + b64encode(mp4).decode()
HTML(f"""
<video controls>
      <source src="{data_url}" type="video/mp4">
</video>""")

Google Colab上から、mp4ファイルを直接参照するとこんな感じ…

➏以上

YOLOも凄かったけど、YOLACTを使用すると、こんなにも簡単にセグメンテーション検出ができてしまうことに驚きました👀❗ちなみにYOLACT EDGEというよりFPSが高い改良版も公表されています。なんかワクワクしますよね😊

お疲れ様でした!

20
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
18