lisz-works

技術系だけど関係ないこと多い系ブログ

Windowsでのdarknetの学習済みファイルの導入と画像認識を試す!

【スポンサーリンク】

darknet ロゴ

darknetによる人工知能の続きです。

darknetは、既に学習済みのYOLOというファイルも提供されています。

下準備がされたものまで込みで、提供されているってことですね。

今回はそのファイルの導入と、画像認識機能を試していきます!

darknet自体の下準備はコチラ。

www.lisz-works.com

ニューラルネットのダウンロード

まずここにアクセス。「yolo.weights」というファイルをダウンロードしましょう。 http://pjreddie.com/media/files/yolo.weights

他サイト様の例を見ていると

$ wget http://pjreddie.com/media/files/yolo.weights

という方法を取っていますが、wgetはLinuxのコマンドのようなので、Windowsでは使えません。

ですが、直接アクセスするとファイルがダウンロードできるので、それで対応すればOKです。

ファイルをセット

ダウンロードしてきた「yolo.weights」を移動します。

darknetのフォルダに移動しましょう。

200MB近くあるので地味にサイズでかいですね。

yolo.weightを格納

yoloの実行

試しに実行です!

コマンドプロンプトで、darknetのフォルダまで移動しましょう。
そしてコレを入力してEnter!

darknet yolo test cfg/yolo.cfg yolo.weights data/dog.jpg

するとこんな感じで出力されます。

>darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg
layer filters size input output
0 conv 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32
1 max 2 x 2 / 2 416 x 416 x 32 -> 208 x 208 x 32
2 conv 64 3 x 3 / 1 208 x 208 x 32 -> 208 x 208 x 64
3 max 2 x 2 / 2 208 x 208 x 64 -> 104 x 104 x 64
4 conv 128 3 x 3 / 1 104 x 104 x 64 -> 104 x 104 x 128
5 conv 64 1 x 1 / 1 104 x 104 x 128 -> 104 x 104 x 64
6 conv 128 3 x 3 / 1 104 x 104 x 64 -> 104 x 104 x 128
7 max 2 x 2 / 2 104 x 104 x 128 -> 52 x 52 x 128
8 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256
9 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128
10 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256
11 max 2 x 2 / 2 52 x 52 x 256 -> 26 x 26 x 256
12 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512
13 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256
14 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512
15 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256
16 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512
17 max 2 x 2 / 2 26 x 26 x 512 -> 13 x 13 x 512
18 conv 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024
19 conv 512 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 512
20 conv 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024
21 conv 512 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 512
22 conv 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024
23 conv 1024 3 x 3 / 1 13 x 13 x1024 -> 13 x 13 x1024
24 conv 1024 3 x 3 / 1 13 x 13 x1024 -> 13 x 13 x1024
25 route 16
26 conv 64 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 64
27 reorg / 2 26 x 26 x 64 -> 13 x 13 x 256
28 route 27 24
29 conv 1024 3 x 3 / 1 13 x 13 x1280 -> 13 x 13 x1024
30 conv 425 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 425
31 detection
Loading weights from yolo.weights…Done!
data/dog.jpg: Predicted in 10.156000 seconds.
pottedplant: 27%
truck: 74%
dog: 81%
bicycle: 83%
Not compiled with OpenCV, saving to predictions.png instead

これで完了です!

Loading weights from yolo.weights…Done!

が表示されてから多少待ちますが、数秒で完了します。

saving to predictions.png

とあるように、「predictions.png」という画像が作成されています。

darknetフォルダを見てみましょう!

darknetフォルダに生成された画像ファイル

これが出力されたファイルになります。

結果

それでは、早速開いてみましょう!

画像解析 結果

どうですか?

画像内の「モノ」に、枠と名前がついていますね。

これ、darknetが自動でやったんですよ?すごくないですか?

ほかのサンプル

せっかくなので、他のサンプルもやってみます!

キリンとシマウマ 解析前

キリンとシマウマ 解析後

人と動物 解析前

人と動物 解析後

ちなみにコレは自前の画像です。
沼津港で適当にとった写真なのですが……

沼津港 解析前

こんな結果になりました。

沼津港 解析後

驚いたのは、

ほぼ見切れている車を認識していること

です。

人が見れば「車」とわかるけど、画像認識で判断できるとは……

これがニューラルネットワークの力か……

……でも富士山は認識しないんかい!!!

あとがき

説明を読みながらやってましたが、実際やりながら結果を見るとやはりスゴイですね。

とりあえずベースの機能を一通り見ていこうと思います。

自分で学習させて何かするとかやってみたいですね。