Summary
この記事で紹介する作業の目的は、モバイルデバイスで撮影した画像から食品や飲料の商品を自動的に認識する技術を開発することです。この技術は2つの異なるアプローチで構成されています - 最初のものは食品画像認識を行い、2つ目は食品画像セグメンテーションを行います。
Abstract
手動による食事評価アプローチに関連する問題とコストのために、自動化されたソリューションは、作業を容易かつ迅速化し、その品質を向上させるために必要とされます。今日、自動化されたソリューションは、スマートフォンのカメラで画像を撮るなど、はるかに簡単な方法で人の食事摂取量を記録することができます。今回は、このような画像ベースの食事評価手法に焦点を当てます。食品画像認識問題では、近年、ディープニューラルネットワークが最先端を実現しており、この分野での研究を紹介しています。特に、まず、NutriNetと呼ばれるディープニューラルネットワークアーキテクチャを用いて、食品や飲料の画像認識方法について説明します。この方法は、ディープラーニングベースの食品画像認識の初期に行われたほとんどの研究と同様に、画像ごとに1つの出力に制限されているため、複数の食品または飲料アイテムを持つ画像には適していません。そのため、食品画像のセグメンテーションを実行するアプローチは、画像内の任意の数の食品や飲料アイテムを識別することができるため、かなり堅牢です。したがって、食品画像のセグメンテーションには、完全に畳み込みネットワーク(FCN)に基づく方法と、深い残留ネットワーク(ResNet)に基づく方法の2つも提示します。
Introduction
食事評価は、個人の食事の実行可能な領域を決定する上で重要なステップです。しかし、伝統的に手動アプローチを使用して食事評価を行うことは、かなりのコストに関連しています。これらのアプローチは、多くの場合、個人による自己申告に依存しているため、エラーが発生しやすくなります。自動食事評価は、食品摂取量を定量化し、資格を得るためのより簡単な方法を提供することで、これらの問題に対処します。このようなアプローチは、食事の欠席、食品量の正確な評価ができないことなど、手動アプローチに存在するエラーの一部を軽減することもできます。したがって、異なる食品や飲料を識別し、食物摂取量を定量化するソリューションを開発することによって食事評価を自動化することには明らかな利点があります。これらのソリューションは、食品および飲料品目(今後「食品」)の栄養価の推定を可能にするためにも使用できます。その結果、栄養士がより簡単かつ正確に患者の食事を追跡し、分析することを可能にするなど、厳密に医療用途から、一般集団を対象としたウェルウェルアプリ内の使用まで、自動食事評価は複数の用途に役立ちます。
画像から食品を自動的に認識することは、コンピュータビジョンの問題です。これは、食品が一般的に変形可能な物体であり、食品の視覚情報が大量に調製中に失われる可能性があるためです。さらに、異なる食品は互いに非常に類似しているように見え、同じ食品は複数の画像2で実質的に異なっているように見える。また、認識精度は、画質、食品が別の項目によって妨害されているかどうか、画像が撮影された距離など、より多くの要因に依存します。飲料アイテムを認識することは、独自の課題のセットを提示し、主なものは、画像で利用可能な視覚情報の限られた量です。この情報は、飲料の色、飲料容器の色および構造、および、最適な画像条件下で、飲料密度2とすることができる。
画像から食品を認識するためには、各食品・飲料クラスの特徴を学ぶ必要があります。これは従来、手動で定義された機能抽出器3、4、5、6を使用して行われ、色、テクスチャ、サイズなどの特定の項目の機能や、これらの機能の組み合わせに基づいて認識を実行します。これらの機能抽出器の例としては、複数のカーネル学習4、ペアローカル機能5、バッグ オブ フィーチャー モデル6などがあります。食品画像の複雑さのために、これらのアプローチは、主に低分類精度を達成しました - 10%と40%3、4、5の間で。この理由は、手動のアプローチが十分に正確であるほど堅牢ではないためです。食品は外観が大きく異なるため、これらの差異をすべて手動で包含することは不可能です。食品クラスの数が5、または異なる画像特徴を組み合わせて6にした場合、手動で定義された特徴抽出器を使用して、より高い分類精度を達成できるため、この問題に対してより複雑な解決策が必要であることを示しています。
ディープラーニングが食品画像認識の問題に非常に効果的であることが判明したのはこのためです。ディープラーニング、またはディープニューラルネットワークは、生物学的脳に触発され、入力画像7、8のセットのトレーニングを通じて、複数の処理層で構成される計算モデルが自動的に機能を学習することを可能にします。このため、ディープラーニングは、コンピュータビジョンを用いて、その後食品画像認識を用いて、様々な研究分野7における最先端の技術を実質的に改善し、そのうちの1つである2。
特に、深畳み込みニューラルネットワーク(DCNN)は、食品画像認識に最も人気がある - これらのネットワークは、個々のニューロンが視野9の重なり合う領域に反応することによって視覚入力の理解を得ようとする動物の視覚システムに触発される。畳み込みニューラル ネットワークは、入力イメージを取得し、各ネットワーク 層で一連の操作を実行します。畳み込みレイヤーには、入力データの特定のフィーチャに応答する学習可能なフィルターが含まれていますが、完全に接続されたレイヤーは他のレイヤーからの出力データを構成して、より高いレベルの知識を得ることができます。レイヤをプールする目的は、入力データをダウンサンプリングすることです2.ディープ ラーニング モデルを使用する方法として、この記事ではディープ ラーニング アーキテクチャと呼ばれる既存のディープ ニューラル ネットワーク定義10、11、または新しいディープ ラーニング アーキテクチャ12、13を定義し、これらのいずれかのトレーニングを食品画像データセットに対して行う方法の 2 つがあります。両方のアプローチには長所と短所があります - 既存のディープラーニングアーキテクチャを使用する場合、他の問題に対してうまく機能したアーキテクチャを選択して、所望の問題に合わせて微調整できるため、時間を節約し、検証済みのアーキテクチャが確実に選択されるようにすることができます。一方、新しいディープラーニングアーキテクチャを定義することは、より時間のかかるものですが、特に問題の詳細を考慮して、理論的には、その問題に対してより良いパフォーマンスを発揮するように作られたアーキテクチャの開発を可能にします。
この記事では、両方のアプローチを紹介します。食品画像認識の問題のために、我々はNutriNet2と呼ばれる新しいDCNNアーキテクチャを開発しました。AlexNetと比較して2つの主な違いがあります:NutriNetは512x512ピクセルの画像を入力として受け入れ(AlexNetの場合は256x256ピクセルの画像とは対照的)、NutriNetはニューラルネットワークの最初に追加の畳み込みレイヤーを持っています。この 2 つの変更は、できるだけ多くの情報を認識データセット 画像から抽出するために導入されました。高解像度の画像を持つことは、画像に関するより多くの情報が存在し、より多くの畳み込み層を持つことを意味し、画像から追加の知識を抽出できることを意味しました。AlexNetの約6,000万のパラメータと比較すると、NutriNetには約3,300万個のパラメータが含まれています。これは、追加の畳み込み層2によって生じる最初の完全に接続された層における次元性の違いによる。 図 1 に NutriNet アーキテクチャの図を示します。NutriNetモデルのトレーニングに使用された食品画像は、インターネットから収集されました - 手順はプロトコルテキストに記載されています。
食品画像セグメンテーションの問題では、完全畳み込みネットワーク(FCN)15と深い残留ネットワーク(ResNet)16の2つの異なる既存のアーキテクチャを使用しました。ロングらによって導入された複数のFCNバリアントがあります:FCN-32s、FCN-16sおよびFCN-8s15.FCN-32s は FCN の最終レイヤーの予測に基づいてピクセル マップを出力しますが、FCN-16s バリアントはこれらの予測を以前のレイヤーの予測と組み合わせます。FCN-8sはさらに別の層の予測を考慮し、したがって、それが食品画像認識に適している理由である、最高級の穀物で予測を行うことができます。私たちが使用したFCN-8は、PASCALビジュアルオブジェクトクラス(PASCAL VOC)データセット17で事前に訓練され、実際の食品に視覚的に似ていることと、ピクセルレベルでの実際の食品のコメント画像の欠如のために、食品レプリカ(今後「偽の食べ物」)18の画像で訓練され、テストされました。偽の食べ物は、異なる行動研究で使用され、画像は、すべての研究参加者からのすべての料理のために撮影されています.これらの画像の食品コンテンツが既知であるため、ディープラーニングモデルのトレーニングに役立つ画像データセットを作成します。データセットの処理手順は、プロトコル テキストで説明されています。
レスネットベースのソリューションは、食品認識チャレンジ(FRC)19の範囲で開発されました。これは、ResNet-10116バックボーンを持つハイブリッド タスク カスケード (HTC)20メソッドを使用します。これは、異なる特徴抽出器、またはバックボーンを使用できる画像セグメンテーションの問題に対する最先端のアプローチです。他のバックボーンネットワーク、特にResNet-5016などの他のResNetバリアントも検討しましたが、その深さと複雑な方法で入力画像を表現する能力のために、ResNet-101が最も適していました。HTC ResNet-101 モデルのトレーニングに使用されるデータセットは、拡張画像を追加した FRC データセットでした。これらの拡張は、プロトコルテキストで示されます。
この記事は、食品画像認識とセグメンテーションの問題に対してどのディープラーニングアーキテクチャとデータ拡張ステップがうまく機能するかについての情報を探している機械学習の専門家のためのリソースとして、また、食事評価で使用するための食品画像認識を自動化するために私たちのアプローチを使用しようとしている栄養研究者のためのリソースとして意図されています。以下の段落では、食品画像認識分野のディープラーニングソリューションとデータセットを紹介しています。プロトコルテキストでは、3つのアプローチのそれぞれが、自動食事評価に使用できるディープニューラルネットワークモデルを訓練するためにどのように使用されたかを詳しく説明します。さらに、各プロトコル セクションには、トレーニングとテストに使用される食品画像データセットがどのように取得および処理されたかについて説明します。
DCNは一般的に、食品画像認識とセグメンテーションのための他の方法よりも大幅に良い結果を達成しました, この分野での最近の研究の大半は、これらのネットワークに基づいている理由です.河野らは、DCNNを使用して手動アプローチ21を補完し、UEC-FOOD100データセット22で72.26%の分類精度を達成した。クリストドゥリディスらは、自己取得データセット23で84.90%の高い精度を達成するためにそれらを独占的に使用しました。タンノらは、ディープFoodCamを開発しました - DCNN24を使用する食品画像認識のためのスマートフォンアプリ.劉らは、DCN25を使用してモノのインターネットベースの食事評価を行うシステムを提示した。Martinelら. 食品画像26の詳細を利用するDCNNベースのアプローチを導入し、Food-101データセット27で90.27%の精度を報告した。周らは、食品領域28におけるディープラーニングソリューションのレビューを作成しました。
最近、Zhaoらは、モバイルアプリケーション29における食品画像認識専用のネットワークを提案した。このアプローチでは、より大きな「教師」ネットワークから学習する、より小さな「学生」ネットワークを使用します。それにより、UEC-FOOD25630で84%の精度とFood-101データセット27で91.2%の精度を達成することができました。Hafizらは、飲料のみの画像認識溶液を開発するためにDCNNを使用し、98.51%31の非常に高い精度を報告した。下田らは、画素性注釈32を用いずに食品画像中のプレート領域を検出する新しい方法を説明した。Ciocca et al. は、11の異なる状態(固体、スライス、クリーミーペーストなど)の20種類の食品クラスの食品を含む新しいデータセットを導入し、食品クラス33に加えて、食品状態を認識できるトレーニング認識モデルのアプローチを提示した。Knezら. モバイルデバイス用の食品画像認識ソリューションを評価する。最後に、Furtadoらは、人間の視覚システムがDCNの性能と比較する方法に関する研究を行い、人間の認識は依然として80%対74.5%35の精度でDCNを上回ることを発見した。著者らは、少数の食品クラスでは、DCNは良好に機能するが、数百のクラスを持つデータセットでは、人間の認識精度が35高く、問題の複雑さを強調していると指摘した。
最先端の結果にもかかわらず、ディープラーニングには大きな欠点があり、モデルをトレーニングするには大きな入力データセットが必要です。食品画像認識の場合、大きな食品画像データセットが必要であり、このデータセットは、できるだけ多くの異なる現実世界のシナリオを包含する必要があります。実際には、個々の食品または飲料アイテムごとに、大量の画像が必要であり、データセットにできるだけ多くの異なるアイテムを存在する必要があることを意味します。データセット内の特定のアイテムに対して十分な画像がない場合、そのアイテムが正常に認識される可能性は低くなります。一方、データセットでカバーされる項目が少数の場合、ソリューションの範囲は限定され、一握りの異なる食品や飲料しか認識できません。
過去に複数のデータセットが利用可能になりました。ピッツバーグファーストフード画像データセット(PFID)3は、食品画像認識の分野でより多くの研究を奨励するために導入されました。電気通信食品100(UEC-FOOD100)22と電気通信食品256(UEC-FOOD256)30データセットには日本料理が含まれ、UEC-FOOD256データセットの場合には一部の国際料理で拡大されています。Food-101 データセットには、ウェブサイト27から入手した人気の料理が含まれています。Food-5036およびビデオ検索グループ食品172(VireoFood-172)37データセットは、中国ベースの食品画像のコレクションです。ミラノ・ビコッカ大学2016(UNIMIB2016)データセットは、イタリアの食堂38からの食品トレイの画像で構成されています。Recipe1M は、調理レシピと食品画像39の大規模なデータセットです。Food-475 データセット40は、以前に公開された 4 つの食品画像データセット27、30、36、37を 1 つに収集します。 北京技術とビジネス大学食品60(BTBUFood-60)は、食品検出のための画像のデータセットです41.最近、ISIA Food-500データセット42の雑食画像が利用可能になりました。他の一般に公開されている食品画像データセットと比較して、500の食品クラスに分けられた多数の画像を含み、マルチメディア食品認識ソリューション42の開発を進めることを意図している。
Protocol
1. ニュートリネットによる食品画像認識
- 食品画像データセットの取得
- 食品画像認識モデルの出力となるさまざまな食品や飲料のリストを収集します。一般的な食品や飲料の様々なリストが好ましく、堅牢な食品画像認識モデルのトレーニングが可能になります。
- 食品と飲料のリストをテキスト ファイル (たとえば、'txt' や 'csv' ) に保存します。
注: この記事の作成者が使用するテキスト ファイルは、補足ファイル ('food_items.txt') に含まれており、520 のスロベニアの食品のリストが含まれています。 - Google カスタム検索 API44 を使用して各食品の画像をリストからダウンロードし、各食品アイテムの個別のフォルダに保存する Python43 スクリプトを作成またはダウンロードします。
注: この記事の作者が使用する Python スクリプトは、補足ファイル ('download_images.py' にあります。このスクリプトを使用する場合、開発者キー (変数 'developerKey'、Python スクリプト コードの 8 行目) とカスタム検索エンジン ID (変数 'cx'、Python スクリプトコードの 28 行目) を使用している Google アカウントに固有の値に置き換える必要があります。 - ステップ 1.1.3 から Python スクリプトを実行します (例: 'python download_images.py')。
- (オプション)食品画像のデータセットのクリーニング
- セクション 1.4 と同じ方法で食品画像検出モデルをトレーニングしますが、ステップ 1.1.1 からの出力のリストとは対照的に、2 つの出力 (食品、非食品) のみを使用します。
注:この記事の著者は、レシピのウェブサイトとImageNetデータセット45 から組み合わせた画像を使用して、食品画像検出モデルを訓練しました。ここでは食品画像認識に焦点を当てており、これは認識データセットを洗浄するためのオプションのステップであるため、詳細は省略されます。代わりに、このアプローチの詳細については、Mezgecら 2を参照してください。 - ステップ 1.1.4 の結果である食品画像データセットで、ステップ 1.2.1 から検出モデルを実行します。
- ステップ 1.2.1 から検出モデルによって非食品としてタグ付けされたすべての画像を削除します。
- 食品画像データセットで、他の誤った画像や低品質の画像、および画像の重複を手動で確認します。
- ステップ 1.2.4 で見つかった画像を削除します。
- セクション 1.4 と同じ方法で食品画像検出モデルをトレーニングしますが、ステップ 1.1.1 からの出力のリストとは対照的に、2 つの出力 (食品、非食品) のみを使用します。
- 食品画像のデータセットの拡張
- CLoDSA ライブラリ46 (含まれている Python スクリプトの 19 行目から 21 行目) を使用して 90° 回転して、食品画像データセットから各画像の新しいバージョンを作成します。
注: この記事の作者が使用する CLoDSA コマンドをすべて含む Python スクリプトは、補足ファイル ('nutrinet_augmentation.py' に含まれるファイルにあります。このスクリプトを使用する場合、入力パス (変数 'INPUT_PATH'、Python スクリプト コードの 8 行目) と出力パス (Python スクリプト コードの変数 'OUTPUT_PATH' 行 11) は、目的のフォルダーへのパスに置き換える必要があります。 - CLoDSA ライブラリを使用して 180° 回転して、食品画像データセットから各画像の新しいバージョンを作成します (含まれている Python スクリプトの 19 行目から 21 行目)。
- CLoDSA ライブラリを使用して 270° 回転して、食品画像データセットから各画像の新しいバージョンを作成します (含まれている Python スクリプトの 19 行目から 21 行目)。
- CLoDSA ライブラリを使用して水平方向に反転して、食品画像データセットから各画像の新しいバージョンを作成します (含まれている Python スクリプトの 23 行目と 24 行目)。
- CLoDSA ライブラリ (含まれている Python スクリプトの 26 行目と 27 行目) を使用して、ランダムカラー ノイズを追加して、食品画像データセットから各画像の新しいバージョンを作成します。
- CLoDSA ライブラリを使用して 25% 拡大して、食品画像データセットから各画像の新しいバージョンを作成します (含まれている Python スクリプトの 29 行目と 30 行目)。
- 手順 1.3.1~ 1.3.6 の画像を元の画像 (含まれている Python スクリプトの 16 行目と 17 行目) と共に、新しい食品画像データセットに保存します (合計で、食品画像あたり 7 つのバリエーション)。これは、含まれている Python スクリプトの 32 行目でコマンドを実行することによって行われます。
- CLoDSA ライブラリ46 (含まれている Python スクリプトの 19 行目から 21 行目) を使用して 90° 回転して、食品画像データセットから各画像の新しいバージョンを作成します。
- 食品画像認識の実行
- NVIDIA DIGITS ユーザーインターフェイスで、データセットをトレーニング、検証、テストのサブセットに分割して、ステップ 1.3.7 から食品画像データセットを NVIDIA DIGITS環境 47にインポートします。
- NutriNet アーキテクチャ2 の定義テキストをコピーして、カスタム ネットワークとして NVIDIA DIGITS に貼り付けます。
注: NutriNet アーキテクチャ定義テキストは、補足ファイル ('nutrinet.prototxt') にあります。 - (オプション)NVIDIA DIGITS ユーザー インターフェイスでトレーニング ハイパーパラメーターを定義します。
注: ハイパーパラメーターは、トレーニングプロセスの開始前に定義するために使用されるパラメーターです。この記事の作成者が使用するハイパーパラメーターは、補足ファイル ('nutrinet_hyperparameters.prototxt') に含まれるファイルにあります。最適なハイパーパラメーターを見つけるために各データセットに実験が必要ですが、ファイルには NVIDIA DIGITS ユーザー インターフェイスにコピーできるハイパーパラメーター構成が含まれています。さらに、NVIDIA DIGITS は、ベースラインとして使用できるデフォルト値をハイパーパラメーターに設定します。したがって、この手順はオプションです。 - ニュートリネットモデルのトレーニングを実行します。
- トレーニングが完了したら、最もパフォーマンスの高い NutriNet モデルのイテレーションを取ります。このモデルは、このアプローチのパフォーマンスをテストするために使用されます。
注: 最適なモデルイテレーションを決定するには、複数の方法があります。これを行う簡単な方法は次のとおりです。NVIDIA DIGITSは、各トレーニングエポックの精度測定のグラフを出力します。食品画像データセットの検証サブセットの最低損失値を達成したエポックを確認します。最適なモデル反復を決定する場合のオプションの手順は、トレーニングサブセットの損失値がエポックからエポックに変化し、検証サブセットの損失値が同じまままたは継続的に上昇している間に継続的に低下し始める場合、トレーニング損失値の低下の前にエポックを取る方法です。
2. FCN による食品画像セグメンテーション
-
偽食品画像データセットの取得
- 偽食品画像のデータセットを取得します。偽食品画像は、食品レプリカを使用して行動研究を行う研究者によって収集されます。
注: この記事の著者は、ラボ環境18で収集された偽の食品の画像を受け取りました。 - ピクセルレベルのすべての食品画像に手動でコメントを付ける - 画像内の各ピクセルは、それが属する食品クラスに関する情報を含む必要があります。このステップの結果は、食品画像データセットの各画像に対して 1 つの注釈画像となり、各ピクセルは食品クラスの 1 つを表します。
注: これを達成するための多くのツールがあります - この記事の著者は、JavaScriptセグメントアノレーター48を使用しました。
- 偽食品画像のデータセットを取得します。偽食品画像は、食品レプリカを使用して行動研究を行う研究者によって収集されます。
-
偽食品画像データセットの拡張
- セクション 1.3 と同じ手順を実行しますが、食品画像データセットのトレーニングサブセットからの画像に対してのみ実行します。
注: ステップ 1.3.5 を除き、対応する注釈イメージに対するすべてのデータ拡張手順も実行する必要があります。セクション 1.3 のスクリプトを使用する場合、入力パス (変数 'INPUT_PATH'、Python43 スクリプト コードの 8 行目) と出力パス (変数 'OUTPUT_PATH'、Python スクリプト コードの 11 行目) を目的のフォルダーへのパスに置き換える必要があります。さらに、問題 (変数 'PROBLEM'、Python スクリプト コードの 6 行目) を 'instance_segmentation' に、アノテーション モード (変数 'ANNOTATION_MODE'、Python スクリプト コードの 7 行目) と出力モード (Python スクリプト コードの変数 'OUTPUT_MODE' 行 10) を 'coco' に設定します。
- セクション 1.3 と同じ手順を実行しますが、食品画像データセットのトレーニングサブセットからの画像に対してのみ実行します。
-
偽食品画像セグメンテーションの実行
- ステップ 1.4.2 を除き、セクション 1.4 と同じステップを実行します。その手順の代わりに、手順 2.3.2 および 2.3.3 を実行します。
注: ハイパーパラメーターは、トレーニングプロセスの開始前に定義するために使用されるパラメーターです。この記事の作成者がオプションのステップ 1.4.3 で使用するトレーニングハイパーパラメータは、補足ファイル ('fcn-8s_hyperparameters.prototxt') に含まれるファイルにあります。各データセットで最適なハイパーパラメーターセットを見つけるためには実験が必要ですが、このファイルには NVIDIA DIGITS47 ユーザー インターフェイスにコピーできるハイパーパラメータ構成が含まれています。さらに、NVIDIA DIGITS は、ベースラインとして使用できるデフォルト値をハイパーパラメーターに設定します。 - FCN-8s アーキテクチャ15 の定義テキストをコピーして、カスタム ネットワークとして NVIDIA DIGITS 環境に貼り付けます。
注: FCN-8s アーキテクチャ定義テキストは GitHub49で一般公開されています。 - 事前に訓練された FCN-8s モデルの重み付けへのパスを NVIDIA DIGITS ユーザー・インターフェースに入力します。
注: これらのモデルウェイトは PASCAL VOC データセット17 で事前トレーニング済みで、インターネット49で見つけることができます。
- ステップ 1.4.2 を除き、セクション 1.4 と同じステップを実行します。その手順の代わりに、手順 2.3.2 および 2.3.3 を実行します。
3. HTCレスネットによる食品画像セグメンテーション
- 食品画像データセットの取得
- FRCウェブサイト19から食品画像データセットをダウンロードします。
- 食品画像のデータセットの拡張
- ステップ 1.3.1 から 1.3.4 を実行します。
注: この記事の作者が使用する CLoDSA46コマンドをすべて含む Python43スクリプトは、補足ファイル ('frc_augmentation.py') に含まれるファイルにあります。このスクリプトを使用する場合、入力パス (変数 'INPUT_PATH'、Python スクリプト コードの 8 行目) と出力パス (Python スクリプト コードの変数 'OUTPUT_PATH' 行 11) は、目的のフォルダーへのパスに置き換える必要があります。 - CLoDSA ライブラリを使用してガウスブラーを追加して、食品画像データセットから各画像の新しいバージョンを作成します (含まれている Python スクリプトの 26 行目と 27 行目)。
- CLoDSA ライブラリを使用してシャープにして、食品画像データセットから各画像の新しいバージョンを作成します (含まれている Python スクリプトの行 29 と 30)。
- CLoDSA ライブラリを使用してガンマ補正を適用して、食品画像データセットから各画像の新しいバージョンを作成します (含まれている Python スクリプトの行 32 と 33)。
- 手順 3.2.1 ~ 3.2.4 の画像を元の画像 (含まれている Python スクリプトの 16 行目と 17 行目) と共に、新しい食品画像データセット (合計で、食品画像あたり 8 種類) に保存します。これは、含まれている Python スクリプトの 35 行目でコマンドを実行することによって行われます。
- 手順 3.2.2 ~ 3.2.4 の画像を元の画像 (含まれている Python スクリプトの 16 行目と 17 行目) と共に、新しい食品画像データセット (合計で、食品画像あたり 4 つのバリエーション) に保存します。これは、含まれている Python スクリプトの 19 行目から 24 行目を削除し、35 行目でコマンドを実行することで行われます。
- ステップ 1.3.1 から 1.3.4 を実行します。
- 食品画像のセグメンテーションの実行
- 既存の HTC20 ResNet-101 アーキテクチャ16 定義を、セクションのセクション 'モデル設定' および 'データセット設定' のセクションのアーキテクチャ定義ファイル50 から変更して、手順 3.1.1、3.2.5、および 3.2.6 の食品画像データセットを受け入れるようにします。
- (オプション)ステップ 3.3.1 の HTC ResNet-101 アーキテクチャ定義を変更して、セクション 'データセット設定' のバッチ サイズ、セクション 'オプティマイザ' のソルバータイプと学習率、セクション '学習ポリシー' の学習ポリシー、およびアーキテクチャ定義ファイルのセクション 「ランタイム設定」のトレーニングエポック数を定義します。
注: 変更された HTC ResNet-101 アーキテクチャ定義ファイルは、補足ファイル ('htc_resnet-101.py') にあります。ハイパーパラメーターは、トレーニングプロセスの開始前に定義するために使用されるパラメーターです。各データセットで最適なハイパーパラメーターセットを見つけるためには実験が必要ですが、このファイルには、変更なしで使用できるハイパーパラメーター構成が既に含まれています。したがって、この手順はオプションです。 - MMDetectionライブラリを使用して、ステップ3.1.1から食品画像データセットに対するHTC ResNet-101モデルのトレーニングを実行します(例えば、「python mmdetection/ツール/train.py htc_resnet-101.py」コマンドを使用)。
- ステップ 3.3.3 からのトレーニングが完了したら、最もパフォーマンスの高い HTC ResNet-101 モデルの反復処理を行い、ステップ 3.2.5 から食品画像データセットで次の段階のトレーニングを実行して微調整します。
注: 最適なモデルイテレーションを決定するには、複数の方法があります。これを行う簡単な方法は次のとおりです。MMDetection ライブラリは、コマンド ライン インターフェイスの各トレーニング エポックの精度の測定値を出力します。食品画像データセットの検証サブセットの最低損失値を達成したエポックを確認します。最適なモデル反復を決定する場合のオプションの手順は、トレーニングサブセットの損失値がエポックからエポックに変化し、検証サブセットの損失値が同じまままたは継続的に上昇している間に継続的に低下し始める場合、トレーニング損失値の低下の前にエポックを取る方法です。 - ステップ 3.3.4 からのトレーニングが完了したら、最もパフォーマンスの高い HTC ResNet-101 モデルの反復処理を行い、ステップ 3.2.6 から食品画像データセットで次の段階のトレーニングを実行して微調整します。
注: ステップ 3.3.4 の注を参照してください。 - ステップ 3.3.5 からのトレーニングが完了したら、最もパフォーマンスの高い HTC ResNet-101 モデルの反復処理を行い、ステップ 3.2.5 から食品画像データセットの次の段階のトレーニングを再度実行して微調整します。
注: ステップ 3.3.4 の注を参照してください。 - ステップ 3.3.6 からのトレーニングが完了したら、最もパフォーマンスの高い HTC ResNet-101 モデルのイテレーションを取ります。このモデルは、このアプローチのパフォーマンスをテストするために使用されます。
注: ステップ 3.3.4 の注を参照してください。手順 3.3.3-3.3.7 は、この記事の著者によって定義された目的に最適な結果を得ました。各データセットで、トレーニングとデータ拡張の最適な順序を見つけるためには、実験が必要です。
Representative Results
NutriNet は、当時の 3 つの一般的なディープ ラーニング アーキテクチャに対してテストされました: AlexNet14、 GoogLeNet51とレスネット16.また、すべてのアーキテクチャについて複数のトレーニング パラメータをテストし、最適な値を 2に定義します。これらの中には、損失関数を最小化する方法を決定するソルバータイプの選択があります。この関数は、分類精度よりもトレーニング中の最適化に適しているので、ニューラルネットワークのトレーニングに対する主要な品質尺度です。確率的勾配降下(SGD)52、ネステロフの加速勾配(NAG)53、適応型グラデーションアルゴリズム(AdaGrad)54の3つのソルバをテストしました。2 番目のパラメーターはバッチ サイズで、同時に処理されるイメージの数を定義します。ディープラーニングアーキテクチャの深さは、より深いアーキテクチャがGPUメモリのより多くのスペースを必要とするため、このパラメータの価値を決定しました - このアプローチの結果、メモリは深さに関係なく、すべてのアーキテクチャの画像で完全に満たされていました。3 番目のパラメーターは学習速度で、トレーニング中にニューラル ネットワーク パラメータが変更される速度を定義します。このパラメータは、同時に処理されるイメージの数が収束率を決定するので、バッチサイズと一緒に設定されました。AlexNetモデルは、256の画像のバッチサイズと0.02の基本学習率を使用して訓練されました。NutriNet は、128 枚の画像と 0.01 のレートのバッチ サイズを使用しました。グーグルネット64画像と0.005のレート。ResNet 16の画像と0.00125のレート。他の3つのパラメータは、すべてのアーキテクチャに対して修正されました:学習率ポリシー(ステップダウン)、ステップサイズ(30%)ガンマ (0.1)これらのパラメータは、各エポックにおける学習速度の変化を共同で記述します。このアプローチの背後にある考え方は、最適な損失値に近づくほどモデルを微調整するために学習率が徐々に低下しているということです。最後に、すべてのディープラーニングアーキテクチャ2に対して、トレーニングエポックの数も150に固定されました。
NutriNetが達成したすべてのパラメータの中で最も良い結果は、認識データセットの分類精度が86.72%であり、これはAlexNetの最良の結果よりも約2%高く、GoogLeNetの最良の結果よりもわずかに高かった。全体的に最もパフォーマンスの高いアーキテクチャはResNet(約1%)でしたが、ResNetのトレーニング時間はNutriNet(約5倍)と比較して大幅に高く、精度と認識可能な食品の数を改善するためにモデルが継続的に再訓練される場合に重要です。NutriNet、アレックスネット、グーグルネットはAdaGradソルバーを使用して最高の結果を達成しましたが、レスネットの最高のモデルはNAGソルバーを使用しました。NutriNetは、一般に公開されているUNIMIB2016食品画像データセット38でもテストされました。このデータセットには、73種類の食品の3,616画像が含まれています。NutriNet は、このデータセットで 86.39% の認識精度を達成し、データセットの作成者のベースライン認識結果をわずかに上回りましたが、85.80% でした。さらに、NutriNetは115種類の食品および飲料アイテムの200の実世界の画像の小さなデータセットでテストされ、NutriNetは55%のトップ5精度を達成しました。
FCN-8sの偽食品画像セグメンテーションモデルをトレーニングするために、このタスクに最適なパフォーマンスを発揮したAdam55 をソルバータイプとして使用しました。基本学習率は非常に低く設定されました - 0.0001に。この数が少ない理由は、一度に 1 つの画像しか処理できないという事実であり、これはピクセルレベルの分類プロセスの結果です。このアプローチの GPU メモリ要件は、画像レベルの分類よりも大幅に大きくなります。したがって、パラメータがあまり速く変更されず、最適でない値に収束しないように、学習率を低く設定する必要がありました。トレーニングエポックの数は100に設定され、学習率ポリシー、ステップサイズ、ガンマはそれぞれステップダウン、34%、0.1に設定され、これらのパラメータは最も正確なモデルを生成しました。
FCN-8sモデルの精度測定は、従来のディープラーニングネットワークの分類精度に類似したピクセル精度測定15を使用して行いましたが、主な違いは、精度が画像レベルではなくピクセルレベルで計算されることです。
ここでPAはピクセル精度の尺度であり、nijはクラスjに属すると予測されたクラスiからのピクセル数であり、ti =Σj nijはグラウンドトゥルースラベル1のクラスからの総ピクセル数である。つまり、ピクセル精度の測定は、正しく予測されたピクセルをピクセルの合計数で割ることによって計算されます。訓練されたFCN-8sモデルの最終精度は92.18%でした。図 2は、偽食品画像データセットの 3 つのサンプル 画像 (各トレーニング、検証、テストサブセットから 1 つずつ) と、対応するグラウンドトゥルースとモデル予測ラベルを示しています。
食品画像のセグメンテーション用に HTC20 ResNet-101 モデルをトレーニングするためのパラメータは次のように設定されました: 他のソルバー タイプを上回るため、使用されるソルバーの種類は SGD でした。基本学習率は 0.00125 に設定され、バッチ サイズは 2 つの画像に設定されました。トレーニングエポックの数はトレーニングフェーズごとに40に設定され、複数のトレーニングフェーズが実行されました - 最初に拡張画像のない元のFRCデータセットで、次に8x拡張FRCデータセットと4x拡張FRCデータセットを交互に複数回実行し、毎回最高のパフォーマンスを発揮するモデルを取り、次のトレーニングフェーズで微調整します。トレーニングフェーズの詳細については、プロトコルテキストのセクション3.3を参照してください。最後に、ステップダウン学習ポリシーが使用され、学習率が低下したときの固定エポック(最初のトレーニングフェーズではエポック28と35)が使用されました。注意すべき重要なことは、この一連のトレーニングフェーズがFRCの範囲でのテストで最良の結果を生み出しましたが、別のデータセットを使用するには、最適な結果を生成するために異なるシーケンスが必要になる可能性があることです。
食品画像セグメンテーション用のこのResNetベースのソリューションは、次の精度測定19を用いて評価した。
Pは精度、TPは食品画像セグメンテーション モデルによる真正予測の数、FPは誤検出予測の数、IoUは Union 上の交差値で、次の式で計算されます。
ここで、重なりの面積は、地面の真理と重複するモデルによる予測の数を表し、ユニオンの面積は、ピクセルレベルと個々の食品クラスの両方で、地面の真理と一緒にモデルによる予測の合計数を表します。リコールは二次的なメジャーとして使用され、同様の方法で計算されます。
ここで 、R はリコール 、FN は食品画像セグメンテーションモデルによる偽陰性予測の数です。精度とリコールの測定は、地上の真実のすべてのクラスで平均化されます。これらの対策を用いて、当社のモデルは平均精度59.2%、平均リコール82.1%を達成し、食品認識チャレンジ19の第2ラウンドで2位にランクされました。この結果は、平均精度測定で1位から4.2%、3位を5.3%上回りました。 表 1 に、コンペティションの上位 4 名の参加者の結果を示します。
図1: NutriNet ディープニューラルネットワークアーキテクチャの図 この図は、Mezgecら2に掲載されています。 この図の大きなバージョンを表示するには、ここをクリックしてください。
図2: 偽食品画像データセットからの画像 オリジナルの画像(左)、手動でラベル付けされたグラウンドトゥルースラベル(中央)、FCN-8sモデルからの予測(右)。この図は、Mezgecら1に掲載されています。 この図の大きなバージョンを表示するには、ここをクリックしてください。
チーム名 | 配置 | 平均精度 | 平均リコール |
ルスフェテ | 1 | 63.4% | 88.6% |
simon_mezgec | 2 | 59.2% | 82.1% |
アリンボウ | 3 | 53.9% | 73.5% |
潜在性 | 4 | 48.7% | 71.1% |
表1:食品認識チャレンジの第2ラウンドのトップ4結果。 平均精度は、プライマリ パフォーマンス メジャーと平均リコールとしてセカンダリ メジャーとして取られます。結果は公式の競争リーダーボード19から取られる。
Discussion
近年、ディープニューラルネットワークは、食品画像10、11、12、21、23、25、26、29、31、33を認識するための適切なソリューションとして複数回検証されています。この記事で紹介した私たちの仕事は、この1、2をさらに証明するのに役立ちます。単一出力の食品画像認識アプローチは簡単で、食品または飲料アイテムが1つだけの画像が2を期待される簡単なアプリケーションに使用できます。
食品画像セグメンテーションアプローチは、食品の数に制限を設けずに、一般的に食品画像を認識するのに特に適しているようです1.画像の個々のピクセルを分類することで機能するため、画像内の任意の数の食品を認識するだけでなく、食品の場所や大きさを指定することもできます。後者は、特に参照オブジェクトまたは固定距離カメラのいずれかで使用される場合、食品重量の推定を実行するために使用することができます。
食品画像データセット3、22、27、30、36、37、38、39、40、41、42の可用性に関するいくつかの作業が行われ、特に世界中の異なる地域から食品画像データセットを集約することになると、将来的にはさらに多くのことを行い、より堅牢なソリューションを開発できることを願っています。現在、自動食品画像認識ソリューションの精度は人間レベルの精度35に達しておらず、これはサイズと品質が不十分な食品画像データセットの使用によるものと考えられます。
今後は、実際の画像に関する開発手順を評価することが目標です。一般に、このフィールドのデータセットには、制御された環境で撮影された画像や、手動で認識用に最適化された画像が含まれていることがよくあります。そのため、個人が認識したいさまざまな食品や飲料を含む、大規模で多様な実世界の食品画像データセットを収集することが重要です。これに向けた最初のステップは、現実世界の食品画像19のデータセットを含む食品認識チャレンジによって提供されましたが、世界中の食品画像でこのアプローチを検証し、栄養士と協力して、さらなる作業を行う必要があります。
Disclosures
著者らは開示するものは何もない。
Acknowledgments
著者らは、偽食品画像データセットを提供してくれたオーストラリアのニューカッスル大学のタマラ・ブッハーに感謝したいと考えています。この研究は、欧州連合のHorizon 2020研究およびイノベーションプログラム(助成金番号863059 - FNS-Cloud、769661 - SAAM)によって支えられ、;スロベニア研究庁(助成金番号P2-0098)を含む。欧州連合(EU)とスロベニア研究機関は、この記事の設計、分析、執筆に何の役割も持っていませんでした。
Materials
Name | Company | Catalog Number | Comments |
HARDWARE | |||
NVIDIA GPU | NVIDIA | N/A | An NVIDIA GPU is needed as some of the software frameworks below will not work otherwise. https://www.nvidia.com |
SOFTWARE | |||
Caffe | Berkeley AI Research | N/A | Caffe is a deep learning framework. https://caffe.berkeleyvision.org |
CLoDSA | Jónathan Heras | N/A | CLoDSA is a Python image augmentation library. https://github.com/joheras/CLoDSA |
Google API Client | N/A | Google API Client is a Python client library for Google's discovery-based APIs. https://github.com/googleapis/google-api-python-client | |
JavaScript Segment Annotator | Kota Yamaguchi | N/A | JavaScript Segment Annotator is a JavaScript image annotation tool. https://github.com/kyamagu/js-segment-annotator |
MMDetection | Multimedia Laboratory, CUHK | N/A | MMDetection is an object detection toolbox based on PyTorch. https://github.com/open-mmlab/mmdetection |
NVIDIA DIGITS | NVIDIA | N/A | NVIDIA DIGITS is a wrapper for Caffe that provides a graphical web interface. https://developer.nvidia.com/digits |
OpenCV | Intel | N/A | OpenCV is a library for computer vision. https://opencv.org |
Python | Python Software Foundation | N/A | Python is a programming language. https://www.python.org |
PyTorch | Facebook AI Research | N/A | PyTorch is a machine learning framework. https://pytorch.org |
Ubuntu OS | Canonical | N/A | Ubuntu 14.04 is the OS used by the authors and offers compatibility with all of the software frameworks and tools above. https://ubuntu.com |
References
- Mezgec, S., Eftimov, T., Bucher, T., Koroušić Seljak, B. Mixed Deep Learning and Natural Language Processing Method for Fake-Food Image Recognition and Standardization to Help Automated Dietary Assessment. Public Health Nutrition. 22 (7), 1193-1202 (2019).
- Mezgec, S., Koroušić Seljak, B. NutriNet: A Deep Learning Food and Drink Image Recognition System for Dietary Assessment. Nutrients. 9 (7), 657 (2017).
- Chen, M., et al. PFID: Pittsburgh Fast-Food Image Dataset. Proceedings of the ICIP 2009. , 289-292 (2009).
- Joutou, T., Yanai, K. A Food Image Recognition System with Multiple Kernel Learning. Proceedings of the ICIP 2009. , 285-288 (2009).
- Yang, S., Chen, M., Pomerlau, D., Sukthankar, R. Food Recognition using Statistics of Pairwise Local Features. Proceedings of the CVPR 2010. , 2249-2256 (2010).
- Anthimopoulos, M. M., Gianola, L., Scarnato, L., Diem, P., Mougiakakou, S. G. A Food Recognition System for Diabetic Patients Based on an Optimized Bag-of-Features Model. IEEE Journal of Biomedical and Health Informatics. 18 (4), 1261-1271 (2014).
- LeCun, Y., Bengio, Y., Hinton, G. Deep Learning. Nature. 521, 436-444 (2015).
- Deng, L., Yu, D. Deep Learning: Methods and Applications. Foundations and Trends in Signal Processing. 7 (3-4), 197 (2014).
- Hubel, D. H., Wiesel, T. N. Receptive Fields, Binocular Interaction and Functional Architecture in the Cat's Visual Cortex. The Journal of Physiology. 160 (1), 106-154 (1962).
- Singla, A., Yuan, L., Ebrahimi, T. Food/Non-Food Image Classification and Food Categorization using Pre-Trained GoogLeNet Model. Proceedings of the MADiMa'16. , 3-11 (2016).
- Yanai, K., Kawano, Y. Food Image Recognition using Deep Convolutional Network with Pre-Training and Fine-Tuning. Proceedings of the ICMEW 2015. , 1-6 (2015).
- Liu, C., et al. DeepFood: Deep Learning-Based Food Image Recognition for Computer-Aided Dietary Assessment. Proceedings of the ICOST 2016. , 37-48 (2016).
- De Sousa Ribeiro, F., et al. An End-to-End Deep Neural Architecture for Optical Character Verification and Recognition in Retail Food Packaging. Proceedings of the ICIP 2018. , 2376-2380 (2018).
- Krizhevsky, A., Sutskever, I., Hinton, G. ImageNet Classification with Deep Convolutional Neural Networks. Proceedings of the NIPS'12. , 1097-1105 (2012).
- Long, J., Shelhamer, E., Darrell, T. Fully Convolutional Networks for Semantic Segmentation. Proceedings of the CVPR 2015. , 3431-3440 (2015).
- He, K., Zhang, X., Ren, S., Sun, J. Deep Residual Learning for Image Recognition. Proceedings of the CVPR 2016. , 770-778 (2016).
- PASCAL VOC Project. PASCAL Visual Object Classes. , Available from: http://host.robots.ox.ac.uk/pascal/VOC (2020).
- Bucher, T., vander Horst, K., Siegrist, M. Fruit for Dessert. How People Compose Healthier Meals. Appetite. 60 (1), 74-80 (2013).
- Food Recognition Challenge. AICrowd. , Available from: https://www.aicrowd.com/challenges/food-recognition-challenge (2020).
- Chen, K., et al. Hybrid Task Cascade for Instance Segmentation. Proceedings of the CVPR 2019. , 4974-4983 (2019).
- Kawano, Y., Yanai, K. Food Image Recognition with Deep Convolutional Features. Proceedings of the UbiComp 2014. , 589-593 (2014).
- Matsuda, Y., Hoashi, H., Yanai, K. Recognition of Multiple-Food Images by Detecting Candidate Regions. Proceedings of the ICME 2012. , 25-30 (2012).
- Christodoulidis, S., Anthimopoulos, M. M., Mougiakakou, S. G. Food Recognition for Dietary Assessment using Deep Convolutional Neural Networks. Proceedings of the ICIAP 2015. , 458-465 (2015).
- Tanno, R., Okamoto, K., Yanai, K. DeepFoodCam: A DCNN-Based Real-Time Mobile Food Recognition System. Proceedings of the MADiMa'16. , 89-89 (2016).
- Liu, C., et al. A New Deep Learning-Based Food Recognition System for Dietary Assessment on An Edge Computing Service Infrastructure. IEEE Transactions on Services Computing. 11 (2), 249-261 (2017).
- Martinel, N., Foresti, G. L., Micheloni, C. Wide-Slice Residual Networks for Food Recognition. Proceedings of the IEEE WACV 2018. , 567-576 (2018).
- Bossard, L., Guillaumin, M., Van Gool, L. Food-101-Mining Discriminative Components with Random Forests. Proceedings of the ECCV'14. , 446-461 (2014).
- Zhou, L., Zhang, C., Liu, F., Qiu, Z., He, Y. Application of Deep Learning in Food: A Review. Comprehensive Reviews in Food Science and Food Safety. 18, 1793-1811 (2019).
- Zhao, H., Yap, K. -H., Kot, A. C., Duan, L. JDNet: A Joint-Learning Distilled Network for Mobile Visual Food Recognition. IEEE Journal of Selected Topics in Signal Processing. 14 (4), 665-675 (2020).
- Kawano, Y., Yanai, K. Automatic Expansion of a Food Image Dataset Leveraging Existing Categories with Domain Adaptation. Proceedings of the ECCV'14. , 3-17 (2014).
- Hafiz, R., Haque, M. R., Rakshit, A., Uddin, M. S. Image-Based Soft Drink Type Classification and Dietary Assessment System using Deep Convolutional Neural Network with Transfer Learning. Journal of King Saud University - Computer and Information Sciences. , (2020).
- Shimoda, W., Yanai, K. Weakly-Supervised Plate and Food Region Segmentation. Proceedings of the ICME 2020. , 1-6 (2020).
- Ciocca, G., Micali, G., Napoletano, P. State Recognition of Food Images using Deep Features. IEEE Access. 8, 32003-32017 (2020).
- Knez, S., Šajn, L. Food Object Recognition using a Mobile Device: Evaluation of Currently Implemented Systems. Trends in Food Science & Technology. 99, 460-471 (2020).
- Furtado, P., Caldeira, M., Martins, P. Human Visual System vs Convolution Neural Networks in Food Recognition Task: An Empirical Comparison. Computer Vision and Image Understanding. 191, 102878 (2020).
- Chen, M. -Y., et al. Automatic Chinese Food Identification and Quantity Estimation. SA'12 Technical Briefs. , 1-4 (2012).
- Chen, J., Ngo, C. -W. Deep-Based Ingredient Recognition for Cooking Recipe Retrieval. Proceedings of the MM'16. , 32-41 (2016).
- Ciocca, G., Napoletano, P., Schettini, R. Food Recognition: A New Dataset, Experiments, and Results. IEEE Journal of Biomedical and Health Informatics. 21 (3), 588-598 (2017).
- Salvador, A., et al. Learning Cross-Modal Embeddings for Cooking Recipes and Food Images. Proceedings of the IEEE CVPR 2017. , 3020-3028 (2017).
- Ciocca, G., Napoletano, P., Schettini, R. CNN-Based Features for Retrieval and Classification of Food Images. Computer Vision and Image Understanding. 176-177, 70-77 (2018).
- Cai, Q., Li, J., Li, H., Weng, Y. BTBUFood-60: Dataset for Object Detection in Food Field. Proceedings of the IEEE BigComp 2019. , 1-4 (2019).
- Min, W., et al. ISIA Food-500: A Dataset for Large-Scale Food Recognition via Stacked Global-Local Attention Network. Proceedings of the MM'20. , 393-401 (2020).
- Python Software Foundation. Python. , Available from: https://www.python.org (2020).
- Google Custom Search API. Google. , Available from: https://developers.google.com/resources/api-libraries/documentation/customsearch/v1/python/latest/customsearch_v1.cse.html (2020).
- Stanford Vision Lab. ImageNet. , Available from: http://www.image-net.org (2020).
- Heras, J. CLoDSA. , Available from: https://github.com/joheras/CLoDSA (2020).
- NVIDIA DIGITS. NVIDIA. , Available from: https://developer.nvidia.com/digits (2020).
- Yamaguchi, K. JavaScript Segment Annotator. , Available from: https://github.com/kyamagu/js-segment-annotator (2020).
- Shelhamer, E. Fully Convolutional Networks for Semantic Segmentation. , Available from: https://github.com/shelhamer/fcn.berkeleyvision.org (2020).
- Multimedia Laboratory, CUHK. MMDetection. , Available from: https://github.com/open-mmlab/mmdetection (2020).
- Szegedy, C., et al. Going Deeper with Convolutions. Proceedings of the CVPR 2015. , 1-9 (2015).
- Bottou, L. Large-Scale Machine Learning with Stochastic Gradient Descent. Proceedings of the COMPSTAT'2010. , 177-186 (2010).
- Nesterov, Y. A Method of Solving a Convex Programming Problem with Convergence Rate O(1/k2). Doklady Akademii Nauk SSSR. 27, 372-376 (1983).
- Duchi, J., Hazan, E., Singer, Y. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. Journal of Machine Learning Research. 12, 2121-2159 (2011).
- Kingma, D. P., Ba, J. Adam: A Method for Stochastic Optimization. arXiv Preprint. , (2017).