Yolo の学習済みモデルでサクッと物体検出をしてみる

こんにちは cedro です。

CIFAR10などの画像データセットは、1枚の写真の中には必ず1つのクラスの物体しか写っていないわけですが、実際の写真を見てみると、人と犬が一緒に写っていたり、バイクの後ろに自動車が写っていたりと、1枚の写真の中に複数のクラスの物体が写っているのが普通です。

そのため、1枚の写真の中の、何処に何が写っているのかを検出する、「物体検出」をしたいというニーズが出てきます。

今回は、物体検出をするニューラルネットワークの中で、特に高速処理が可能な「Yolo」学習済みモデルを使って、Macでサクッと「物体検出」をやってみます。

 

Yoloって何?

「Yolo」とは、You only look once(あなたは一度見るだけです の頭文字を取ったもので、物体位置検出クラス分類を同時に行うことで、高速処理を可能にしたニューラルネットワークです。

ちなみに、通常「Yolo」というと、You only live once(人生は一度きり)という意味なのですが、これをもじったと思われます。

          引用元:物体認識アルゴリズムを FPGA に実装するための基礎研究(吉元 裕真 、田向 権)

動作原理は、画像を正方形にリサイズした後、CNNで、バウンディングボックスと呼ばれる長方形の線による「物体検出」7×7のグリッドそれぞれの「クラス分類」を並行して行い、最後にこの2つの結果を合体するというものです。

 

冒頭の写真で言うと、こんな出力結果になります。二匹の犬とそれを連れている人物二人、そして後ろにいる一人も検出しています。

 

Yoloをインストールします

インストール環境は以下の様です。
マシン:MacBook Air (13-inch,2017), 1.8GHz Core i5, メモリ8GB
OS   : macOS Sierra 10.12.6
プログラム:Wgetインストール済み

Yolo最新バージョンは Yolov3 で、前回と比べると若干スピードは落ちたものの、検出精度が大幅にアップしたとのことです。今回は、最新バージョンをインストールします。

git cloneで、自分のPCに「Yolo」のプログラムをコピーします。
git clone https://github.com/pjreddie/darknet.git と入力します。

cd darknet  と入力し、先程コピーしたフォルダーに移ります。
make  と入力し、ビルドします。

ビルドできたか確認してみます。
./darknet  と入力して、usage: ./darknet <fuction>  と返ってくればOKです。

yolov3重みパラメータ(237MB)をダウンロードします。
wget https://pjreddie.com/media/files/yolov3.weights  と入力します。

まず、サンプル画像(dog.jpg)で物体検出してみます。
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg  と入力します。

10秒ほど待つと、検出精度は、bicycle:99%、truck:92%、dog:99% (最後の3行)と出ました。

さて、検出結果を表示させてみましょう。
open predictions.png  と入力します。

犬、自転車、トラックと3つのクラスの物体検出がされていますね。

 

これは、darknet フォルダーの中身です。結果の出力は、predictions.png に毎回上書きされていきますので、保存したい場合はコピーして下さい。

自分が物体検出させたい画像データを入れておく、pic フォルダーを追加しました。後は、
./darknet detect cfg/yolov3.cfg yolov3.weights pic/○○○.jpg  と入力すれば物体検出します。

 

色々試して見る

これはオフィスの写真。人物、TVモニター、キーボード、ラップトップ、カップと様々なクラスのものを物体検出していますね。

 

これは、レストランデートでしょうか。人物、ワイングラス、イス、テーブルに加えて、ネクタイも物体検出していますね。

 

そして、これはインドの交差点動画静止画に切り出して物体検出し、その後GIF動画にしてみました。リアルタイム物体検出のイメージが湧くと思います(笑)。

こんなにも、手軽に物体検出ができるなんて凄過ぎる! 技術革新が日々進んでいる感じがします。

では、また。

 

7 件のコメント

  • cedroさん

    お世話になっております。
    hiroです。

    あれから、neural network consoleを継続して使用しています。
    そこで、お聞きしたいことが一点ありまして、今回ご連絡させていただきました。

    本ツールの構造自動探索機能は、一つのネットワークグラフを繰り返し最適化してくれるものだと認識しております。
    しかし、同じネットワークグラフを使い、データだけを繰り返し変更し、自動で連続して分析を行う方法はありますでしょうか。(その際のデータは、数値だけが異なり、行数や項目等は同じものを使用するものとします)

    分析したい内容は同じでも、中身のデータだけが異なる場合は、通常であれば毎回データをセットし直し、実行を行う必要があると考えてます。しかし、その数が数百、数千とある場合においては、その都度手動で変更するのは大変ではないかと考えています。

    自分でも調べていますが、未だ有力な情報に出会うことができておりません。
    もし、自動でデータを変えて分析する機能について
    ご存知であれば、ご教示いただけると幸いです。

    ご検討の程よろしくお願い致します。

  • 自分の持っている色々な写真から物体検出できて、新しい技術を身近に感じることができ、とても楽しかったです。
    得にサンプルにあるような食卓の写真は、ワイングラス、ボトル、フォークなど細かいところもで拾ってくれ、美しいです。
    Wgetのインストールを少し調べましたが、その他、教えていただいた手順で、すぐに動かすことができました。
    ありがとうございます。

    • Mafaldine さんへ

       コメントありがとうございます!
      学習済みモデルが簡単に手に入るので、本当に手軽に物体認識が試せますよね。
      AIの普及には目を見張るものがあります。
      また、こういったネタを投稿して行きます。
      今後とも、よろしくお願いします。

  • 初めまして、「YOLOって何?」の下にある、YOLOの構成図の作者の吉元です。
    この図を使用して頂いて大変うれしく思います。
    ぜひ、引用元を明示して頂けないでしょうか。
    よろしくお願いします。

    • 吉元様

        いつも大変お世話になります。
      申し訳ございません。ご指摘の通りです。
      ご指示の通り、引用元を追加させて頂きました。
      この図は、WebにあるYOLOに関する説明の中で、たぶん最も分かり易くまとめた図だと思います。
      今後とも、よろしくお願い致します。

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

    ABOUTこの記事をかいた人

    アバター

    ディープラーニング・エンジニアを趣味でやってます。E資格ホルダー。 好きなものは、膨大な凡ショットから生まれる奇跡の1枚、右肩上がりのワクワク感、暑い国の新たな価値観、何もしない南の島、コード通りに動くチップ、完璧なハーモニー、仲間とのバンド演奏、数えきれない流れ星。