最先端の機械学習を使うためには、常に自分のスキルアップが必要です。そのために、毎日論文を読んだり、新しいオープンソースのコードを試してみたり、クックパッドのデータで実験しています。これはちょっと料理の練習と似ています。新しいモデルを学習させるのは料理をオーブンに入れるのと同じ気持ちです。オーブンの温度は学習率と同じで、低すぎだとよく焼けず、高すぎだと焦げてしまいます。他のリサーチャーの論文やブログの中のレシピを見ながら自分のデータでモデルを学習させると、失敗せずに済むかもしれません。このエントリでは、そういった機械学習のレシピの一例を紹介します。Commonsのライセンスの写真です。概要クックパッドは料理/非料理のモデルを開発しています。ここでは、このモデルのミニチュア版のレシピを紹介します。カテゴリは「料理」と「非料理」の代わりに、「ホットドッグ」と「非ホットドッグ」にします。パッチ化した画像に対する認識モデルを使って、画像の中でホットドッグがどこにあるかを検出します。notebook(お好みでお使い下さい。)KerasはTensorflow、CNTKやTheano上で動く高水準のライブラリーです。画像データに対して、単なる学習以外にも前処理などでも様々な機能があります。Dogのデーターセットをダウンロードしてください。ダウンロードした後、seefood.zipをunzipしてください。アーカイブの中に、2つのディレクトリtrainとtestがあります。seefood/train/not_hot_dogseefood/train/hot_dogseefood/test/not_hot_dogseefood/test/hot_doghot_dogディレクトリの中にホットドッグの画像が入っており、not_hot_dogの中にそれ以外の画像が入っています。新しい機械学習のレシピを開発する時はテストデータを分けるべきです。今回は画像が少ないので、テストデータも学習に使いましょう。seefood/all以降では、seefood/allのディレクトリを使います。モバイルネットは(224px・224px)のフィックスサイズの画像しか認識できないので、これから学習や認識用にサイズを変換します。224]テストデータを学習に使っても、このデータセットはまだ小さいので、データ拡張を使いましょう。KerasのImageDataGeneratorは学習時に画像を一つずつ変換します。horizontal_flip=True)上のimage_generatorを"seefood/all"のディレクトリで動かします。層のスポンジケーキのように積み重ねています。base_modelはMobileNetです。転移学習のために使います。その上のpatch_modelは画像のパッチごとに分類できます。その上のclassifierは「ホットドッグ」と「非ホットドッグ」の二値分類器です。kerasベースとして、Googleで開発されたMobileNetというモデルを使います。weights="imagenet"は、ILSVRCのコンペティションのデータセットで学習されたパラメタを使って、転移学習することを意味しています。include_top=False)ベースモデルの一番上のフィーチャサイズは1024です。パッチレイヤが学習できるようにちょっと下げましょう。kernel_regularizer=keras.regularizers.l2(0.001))(drop1)パッチレイヤもConv2Dのタイプのレイヤです。この場合、softmaxを使えば、パッチごとに分類できるようになります。kernel_regularizer=keras.regularizers.l2(0.001))(drop2)これでパッチモデルができました。outputs=patch)パッチモデルをベースにして、最後の出力レイヤを追加して分類モデルを作ります。outputs=logits)学習ベースモデルは学習させません。Falseそして全体のモデルをcompileします。metrics=["accuracy"])では、学習を始めましょう!いくつか実験をした結果、以下のようにnot_hot_dogのクラスのclass_weightを高くするほうが良いことが分かりました。8sこのデータセットの場合、10エポックぐらいが良さそうです。パッチベースを使っているので、精度は100%にならないほうがいいです。70%ぐらいがちょうどいいです。10エポックで20分ぐらいかかりました。画像とデータの変換のために、PILとnumpyを使います。Image画像をインファレンスする前に、numpyのデータに変換します。patchesそして、元の画像とインファレンス結果をビジュアライズします。transposeはパッチをクラスごとに分けます。canvasでは、結果を見てみましょう!きれいですね!ホットドッグの色はちょっと隣のコーヒーに移りましたが、ほとんど大丈夫です。フォーカスが足りないところは認識にならなかったみたいです。?学習データにフォーカスが当たらないホットドッグがなかったからです。こちらも、左側のホットドッグはフォーカスが当たっておらず、モデルはホットドッグを認識できませんでした。ホットドッグではない画像は?ホットドッグではない画像には、パッチはゼロやゼロに近い値になります。まとめ転移学習を使えば、データが少なくても、それなりの識別器が作れますね!パッチごとの分類を使えば、画像の中の認識したいフィーチャーを可視化できます。モデルを学習できます。いかがでしたでしょうか。クックパッドでは、機械学習を用いて新たなサービスを創り出していける方を募集しています。興味のある方はぜひ話を聞きに遊びに来て下さい。12:44ディープラーニングによるホットドッグ検出器のレシピTweet関連記事2019-03-29入力時間11%減!書きやすいエディタのUIデザインこんにちは、投稿開発部の佐野大河(@sn_taiga)です。〜クックパッドにおける研究開発のサービ...こんにちは!人事部の冨永です。使ったセキュリティログ検索基盤の構築サービス特性にあった検索システムの設計戦略クックパッド採用説明会「クックパッドはサービスの作り手を採用したいんです。/*}*/スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。