MXNetディープラーニングによる画像分類モデルをほぼ自動的に作成できるツールを作ったので、簡単に使い方を紹介します。docker環境および、ある程度の枚数の識別したい画像を準備すれば、本記事の手順に添って、簡単なyamlの設定ファイルを記述するだけで、モデルの学習から画像識別APIサーバを起動するところまで、一通り実施できます。本ツールはコンテナ内部でGPU利用を含んだほとんどの処理を自動実行するため、機械学習フレームワークを利用する際にハマりやすい、GPUドライバやCUDAやcuDNN等のインストールのトラブルやドライバの組み合わせによる相性問題に悩まされることがありません。GPU無しでもCPUで学習できますが、画像枚数が多くなると学習時間が長いためGPU環境をオススメします。ソースコードは以下で公開しています。https://github.com/knjcode/mxnet-finetuner2017年8月に公開したラーメン二郎全店舗識別bot(@jirou_deep)の開発にもこのツールを活用しています。必要ですセットアップGitHubからソースコードをクローンしてセットアップします。ホスト側GPUをコンテナ内部から利用できる設定を追加します。再度作成してください。詳細はこの後の各セクションで説明しますが、学習対象の画像を用意するだけで、以下のコマンド例にあるように、モデルの学習から画像識別APIサーバを起動するまで、このツールで一通り実施できます。mms以降の手順は、mxnet-finetunerをcloneしたディレクトリで作業することを想定しています。配下に以下のような構造で用意します。2種類の画像を用意した例です。ディレクトリ配下に、Caltech101データセットから切り出した10クラスの学習用画像を準備できます。ディレクトリに置き換えることで学習を始めるための画像の準備が整います。以下のように行います。finetunerコマンドを実行すると、自動的に学習用画像の加工・整形を行い、ImageNetで学習済みのモデルをダウンロードした後、ファインチューニング(転移学習)を行います。ディレクトリに保存されます。以下のような感じで記載します。コメントアウトした状態で各種設定項目を記載しているので、ディープラーニングの経験がある方は、だいたい雰囲気でわかるかと思います。利用できる学習済みモデルの一覧についてはこちらに、データ拡張の詳細についてはこちらに詳細を記載しています。配下に保存した画像を使って、モデルの識別精度をテストします。利用したい学習済みのモデルを指定します。以下のように記載します。201705292200-imagenet1k-nin-sgd-0001モデル名を指定せず、最後に学習したモデル(この場合にはvalidationの精度が最も高いものが使われます)を利用することもできます。1テストは以下のコマンドで実行します。ディレクトリに保存されます。学習したモデルのエクスポート学習済みのモデルをエクスポートできます。利用できる形式で保存されます。1次のコマンドでモデルをエクスポートできます。ディレクトリに保存されます。mmsデフォルトでは、最後にエクスポートしたモデルを自動的に読み込んで起動します。ローカルホストの8080番ポートに以下のようにアクセスすることでAPIを利用可能です。protected]"以下のような結果が返却されます。起動するモデルを変更したい場合には、適宜この設定ファイルを修正してください。以下の設定を追加することで、学習結果および学習済みモデルの評価(混同行列による評価)をslackへ自動アップロードできます。設定しておく必要があります。チャンネル名を指定します。複数指定すると複数チャンネルに同時に投稿します。general上記の設定で、以下のような画像がslackのgeneralチャンネルにアップロードされます。チャンネル名を指定します。複数指定すると複数チャンネルに同時に投稿します。いう名前にもあるとおり、学習済みモデルのファインチューニングを前提にしていましたが、開発途中から各種モデルのスクラッチからの学習にも対応しました。プレフィックス付きのものを指定することで学習済みモデルを利用せず、スクラッチからの学習になります。scratch-inception-v3スクラッチからの学習に利用できるモデルについてはこちらに記載しています。その他にも、モデルのレイヤーを一部フリーズしての学習や、複数の学習済みモデルのアンサンブル、各モデルの識別結果のdiversityの確認、等が可能ですが、長くなったので、また別の記事で紹介したいと思います。knjcode関連記事Node.jsでmecab-ipadic-NEologdを使うkuromoji.jsを使ってみたに引き続き、Node.jsでmecab-ipadic-NEologdを使ってみた際のメモです。Containers」を使うまでのメモです。利用し...記事を読むhubotで日本語の読みがなを解析する(gooラボのひらがな化API編)gooラボのひらがな化APIを利用して、hubotで日本語の読みがなを取得してみました。gooラボのAPI...記事を読むhubotからRedisにアクセスするhubot経由でRedisへの簡易なアクセスを可能にするhubot-scriptを書きましたので、誰か使う人がいるかもと思いご紹介します。生成でエラーが発生してしまいます。2カテゴリ分、それぞれ1600枚と1800枚の画像が入っています。問題なく完走しました。config.ymlのパラメータは変更していません。2カテゴリ分のフォルダを全て同じようにコピーしましたが厳密に画像が被らないよう仕分けする必要があるのでしょうか。1200枚(trainに入れた画像はvalidに入れないようにする)など。同じ画像・枚数)という内容でした。お手数をお掛けしますが、ご対応頂けましたら幸いです。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。コメントデータの処理方法の詳細はこちらをご覧ください。