コンサルタントの吉村です。BLOCKSのモデルジェネレーターで画像分類タイプを利用して判別する方法を紹介しました。今日は画像分類で利用できる様々な予測方法を紹介したいと思います。画像分類の予測方法には運用に合わせて色々な予測方法が選ぶことができます。その予測方法の選び方のポイントはこの3つです。いうシチュエーションで使うかどこにある画像を予測するか予測結果をどこに出力するか上記のポイントを踏まえて紹介していきたいと思います。4種類紹介しているので、リンクもつけておきます。1枚の画像を予測してみる(動作確認)複数枚の画像をまとめて予測をするローカルで撮影した画像を送信しながら予測するインターネットのない環境または予測処理に高いレスポンスが必要なシチュエーションとりあえず1枚の画像を予測してみる(動作確認)最初にみなさんが試されるのが「どんな予測結果がでるのかな?」という動かしてみるということでしょう。その場合はまずGCSに保存してある1枚の画像を予測することをお勧めします。予測結果はログに表示するとシンプルに確認できるので良いでしょう。予測方法:オンライン予測この場合のフローは3つのブロックを使ったフローを準備します。その指定方法にはモデルジェネレーターのルールに合わせる必要があります。いう指定方法になります。今回の私が作ったフローの例でいうと下記の設定内容となります。gs://blocks-gn-ysmr-us-central1-data/coffee_beans/yosoku/ng_1-2.jpg続いてモデルジェネレーター予測(オンライン)のモデルには対象となるモデルを選択しておきます。このフローを実行すると対象となる画像の予測結果がログに出力されます。ログに表示されている情報について詳しく説明します。URLが表示されます。これはGCSにあるファイルを予測した場合のみで、予測方法によって表示が変わります。labelslabelsは画像分類タイプのモデルジェネレーターに学習させている分類の種類が表示されます。フォルダを学習させているので2つが列挙されています。※なおフォルダの名前順に表示されます。scoresscoresは上記labelsの順にこの画像の各分類に対する確からしさのスコアが表示されます。この数値は合計すると約1になる数字で、とても少ない数字の場合は1.234e-17など指数表示になる場合があるのでご注意ください。label上記scoresで最も大きい値を示すラベルが表示されます。最終的に何に分類されかと言う意味です。このように1枚とりあえず予測してみる場合にはこのような方法で行います。ブロックを利用するとJSONファイルとして出力することも可能です。複数枚の画像をまとめて予測をするとりあえず予測してみたら次は正しく予測しているかの検証に入られると思います。その際はもちろん1枚ずつやっていてはらちがあかないのでまとめて予測する方法が必要になります。まとめて予測する場合はその結果を表形式で確認する場合が多いと思います。そのため出力はCSVやGoogleスプレッドシートを利用する場合が主となります。予測方法:バッチ予測これを満たすフローを作成するにはフローテンプレートの機能を利用すると非常に便利です。予測モデルを指定するだけで簡単にフローを作成できます。ボタンをクリックします。どのタイプの予測かを選択します。ここから指示に従い入力していくとフローが出来上がります。フロー名の設定はここで入力した内容がフローの開始ブロックの表示名となります。モデルの選択ではトレーニング済みの画像分類タイプのモデルを選択します。バッチ予測はかならず前後のオーバーヘッドにより10分前後はかかります。※もし複数枚の画像をある程度短時間で予測する必要があるときは他の方法を複数回実行するなど検討が必要です。入力データ設定ではGCS上に置いてあるJPEGファイルの場所を設定します。出力データ設定も同様にGCS上に出力するCSVのファイルの場所を設定します。フロー配置設定ではフローデザイナーにて複数のタブを利用している場合にタブを選択できます。気にせず配置ボタンをクリックしてしまいましょう。すると指示に従い設定を行うだけでこの様なフローが出来上がりました。このフローの処理結果として出力されたCSVファイルを開くとこの様になっています。出力内容を確認するとkey,labelについては先ほどと同じ意味合いですがscoreだけ違います。scoresとして出力されていた値の中で一番大きい値が出力されるのでご注意ください。監視カメラで1日撮りためた画像を夜間にまとめて判断する様な運用でも利用可能です。ローカルで撮影した画像を送信しながら予測するインターネットに繋がる環境で数秒のレスポンスタイムで許容されるシチュエーションで利用される方法です。BLOCKSに送って状態を判断するなどです。「スマホアプリを開発して」と書いてある通り、このあたりからはプログラミングも絡んで来ます。APIを呼び出すだけで、フローも非常に簡単です。一気にフローが簡単になりましたね。BLOCKSに準備されたAPIを利用します。下図のイメージで画像が送信されてフローにて予測処理が行われた後に予測結果を取得します。ビジネスサイドの方は「こういう事ができるんだ」と理解し、社内のエンジニアや協力会社に依頼する部分だとご理解ください。私がよく使うサンプルコードを掲載しておきます。コードを見る閉じるこのコードはPythonで記述していますが、HTTPでPOST/GETができればいいのでほとんどの言語で置き換え可能だと思います。print(json_obj)インターネットのない環境または予測処理に高いレスポンスが必要なシチュエーションこれはズバリ工場のラインで検品を行う場合や検査機器と連携して判断を行う場合などです。コンピュータに組み込む必要があるので、多少プログラミングが必要となります。BLOCKSダウンロードサービスにお申し込みいただく必要がございます。表示されます実現するにはPythonとTensorflowが導入された環境があれば可能です。下図の様なイメージでダウンロードされたモデルを利用してローカル環境で予測処理が可能です。予測処理を動かすにためのサンプルソースを掲載しておきます。2016のCPUを利用して予測1枚あたり0.2sec前後でした。工場のラインであっても運用できるレスポンスではないかと思います。コードを見る閉じるこのコードは内容が処理速度計測用になっているので、適宜カスタマイズしてご利用ください。検証のためと実際の運用で最適な方法を選択していただければと思います。お気軽にグルーヴノーツのコンサルタントへご相談いただければ対応させていただきます。Groovenauts,Inc.。