Juliaで学ぶ画像処理〜cifar-datasetsでニューラルネットワークpart2〜

今回は前回のcifar-datasetsで作った識別器を使って、画像の分類をする方法についてご紹介します。

目次

こんにちは!今回は前回のcifar-datasetsで作った識別器を使って、画像の分類をしていきます。

前回の記事は以下から参照してください。
「Juliaで学ぶ画像処理〜cifar-datasetsでニューラルネットワーク〜」

また今回の記事ではプログラミング言語、Juliaを用いて進めていきます。Juliaについては以下の記事をご覧いただけたらと思います。
「プログラミング言語Juliaで学ぶ画像処理〜インストール、サンプル実行〜」

1. 前回の復習

前回はcifar10と呼ばれるデータセットを用いてこれらを分類する識別器を学習により作りました。

10個の分類画像

今回はこれの識別がうまくできているかをテストデータを用いてチェックしたいと思います。

2. データの可視化

これが一番てこずりました。テストデータを写真で読み出すためにはtest.hdf5ファイルの中身からRGBの値を読みとり、それを目に見える形で出力する必要があります。

このtest.hdf5のデータの中身を少しみてみましょう。

hdf5のデータの中身を見るには"HDFView"をダウンロードして使います。HDFViewを起動し、test.hdf5を開いてみます。

このようにピクセルごとにRGBで分けられたものがデータの数だけ縦に並んでおり、それに対応してラベルが当てられています。

それではこれを読みだしてみましょう。

これで209番目の画像が見えるはずです。しかしこれを実行しても何がなんだかわかりませんでした。

出力結果。白色が目立つ。

どうやら画素値をそのまま読みだしてもうまくいかないみたいです。なぜでしょう。

答えをいうと、JuliaでImageを出力する際は正規化をしなければいけないようです。つまり、画素値の大きさを0-1に設定する必要があるようです。いま、test.hdf5で読み込んだ値は0-255のスケールであったので、255でわって出力させてみます。

出力結果

お!やっと画像が見えてきました。しかし、これは何の絵なのか・・・、わからないですよね。
この絵、上下左右が反転しているようなのです。これも元どおりにしてあげましょう。
結果的に画像を見るためのコードは以下になります。

出力結果。どうやら車みたいです。

3. 識別器を使って識別

さて、これからは本題である識別をやっていきます。

前回のネットワークの学習により、"snapshots-070000.jld"なるファイルが作られています。これを用いて識別していきます。

以下のコードを実行することにより、識別が行われます。このコードは前回の手書き文字認識のコードを参考にしました。

実行結果。これは誤識別しています。

他の例についてもやってみました。これは正解してますね。

今回の記事では前回作ったネットワークを用いて画像の識別を行ってみました。

画像を機械が分類してくれるのは見てて楽しいですね。

これからも機械学習の記事を書いていきます。