【論文紹介】食品のカテゴリ・材料・調理法の知見を活用した料理画像による食品カロリー推定・マルチタスクCNN

## はじめに
　本記事はマルチタスクCNN を料理データに適用した論文の論文紹介となります。
　簡単にではありますが、論文の内容を引用ベースで紹介させていただく形となっております。

## 論文紹介
　本記事で参考にした論文は以下になります。

>[Ege, T., & Yanai, K. (2017, October). Image-based food calorie estimation using knowledge on food categories, ingredients and cooking directions. In Proceedings of the on Thematic Workshops of ACM Multimedia 2017 (pp. 367-375).](https://dl.acm.org/doi/pdf/10.1145/3126686.3126742)

## 著者
Ege, T., & Yanai, K.

## 概要（ABSTRACT）

　本研究では、食品のカロリーカテゴリー、食材、調理方法を同時に学習することで、食品画像からカロリー計算をするモデルを提案します。一般に、食品のカロリーはカテゴリ、食材、調理方法に強い相関が存在するため、これらを食品画像とともに学習することで、精度向上を図ることができるでしょう。
このことから、本研究では [マルチタスクCNN](https://arxiv.org/pdf/1601.00400.pdf) という手法を用いて，日本とアメリカの料理データセットについて性能を比較します。

## 導入（INTRODUCTION）

　食事に対する健康志向の高まりから、日常の食事を記録するためのモバイルアプリケーションが多くリリースされています。その中には、食品画像認識を用いて、食品名だけでなく、食品のカロリーを推定できるものもあります。しかし、これらのアプリケーションでは、食品の分類や大きさ・量などの情報を入力する必要があるため、手間がかかることや評価が主観的になりやすいという問題があります。
　多くの場合，推定されたカロリーは、推定された食品カテゴリと関連付けられているか、あるいはユーザが手動で指示した食品カテゴリの標準サイズと比較した相対的なサイズであるに過ぎません。　食品のカロリーは、食品のカテゴリ、量、材料、調理法などに強く依存し、これらは図1に示すように、完成した料理の外観に現れます。食品カテゴリーが同じでも、使用する食材や調理方向によってカロリーは異なります。このように、食品カテゴリーを推定するだけでは解決できない食品カロリーの推定作業において、外観からカロリーを推定することは重要であると考えられます。食品写真から直接カロリーを推定することで、図1に示すようなカテゴリー内の違いを考慮できる可能性があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648555/1aa722ea-03e4-8a44-5def-4fabab82f0d6.png)
図1: 同一カテゴリ内でもカロリーは大きく異なる

　食品のカロリーと食品のカテゴリ、食材、調理方法の情報には強い相関があるため、それらを同時に学習することで、独立した単一の学習よりも性能が向上することが期待されます。この目的のために、我々は[マルチタスクCNN](https://arxiv.org/pdf/1601.00400.pdf) を用いる。先行研究により、マルチタスクCNNを用いて食品カテゴリと食材を同時に推定することを提案し、同時に推定することで両タスクの推定性能が向上することを証明されています。この研究に触発され、我々は食品カロリー推定のためのマルチタスクCNNを導入します。食品カロリー推定は、食品写真を入力し、食品カロリーを出力する回帰問題として扱われます。

#### 要点をまとめると
- ユーザーが手動でカテゴリや料理の分量を入力するのは手間であり、課題である
- シングルタスクCNNよりもマルチタスクCNNを用いることで調理法や、分量などの食品周辺の情報を用いてカロリー推定することができる

## マルチタスクCNN の概要
　CNNのアーキテクチャは[VGG16（16層の畳み込みNN）](https://jp.mathworks.com/help/deeplearning/ref/vgg16.html)をベースとしています。図2に示すように、全結合層（fc6）は全てのタスクで共有され、fc7層は各タスクに分岐され、各タスクはfc7層と出力層（fc8）を独立に持つように構成されます。
本研究ではカロリー・カテゴリ・食材・調理法をベースで分析するため、以下のような構成になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648555/5fc1ef4f-71ab-436d-373d-6e7997f7d056.png)
図2：本研究で用いたマルチタスクCNNの構成

また、損失関数は以下のように定義されます。

```math
L = \frac{1}{N}\sum_{n=0}^{N}(L_{calories} + \lambda_{categories}L_{categories} + \lambda_{ingredients}L_{ingredients} + \lambda_{directions}L_{directions})
```

各変数についての損失関数の定義についてはここでは省略します。本文内 p369-370を参照してください。

## 使用したデータセット
　食品画像と食品カロリーの両方を含むデータセットは、私の知る限り、現在、公開されていないようです。そのため、我々はWebからのデータ収集に着目しました。実際、市販の料理レシピサイトでは、カロリー付きのレシピが提供されています。また，レシピごとに食材リストや調理方法の説明も提供されている。本論文では、このような情報をいくつかの商用Webサイトから収集し、カロリーが付与されたレシピデータセットを作成します。また、マルチタスク学習の効果を十分に確認するために、日本人向けのサイトとアメリカ人向けのサイトの2種類のデータセットを作成し、それぞれを実験に用いました。

## 実験(EXPERIMENT)
 本論文では、VGG-16[17]を拡張し、図 2 に示すようなマルチタスク CNN を実装しました。fc6 層と fc7 層では、Dropoutの代わりに Batch Normalizationを使用しています。また、Batch Normalization層とfc8層以外の層では、ImageNet1000の分類タスクの事前学習モデルを初期値として使用しています。CNNの最適化には、運動量0.9、ミニバッチサイズ8で[SGD（確率的勾配降下法）](https://qiita.com/omiita/items/1735c1d048fe5f611f80#3-sgd)を用います。 損失項の重みは初期値を1に設定し、まず1回学習さます。学習では、各反復の損失の値を保存していきます。最後に、各タスクの損失項の重みとして、全反復の損失の平均値の逆数を使用しています。テストでは、学習時の最後の1k回の反復から100回間隔で得られた10個のモデルを用い、各モデルから得られた推定値の平均値を最終的な推定値としました。

## 日本人向けのレシピサイトのデータセット分析結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648555/3b921d72-7593-d06f-af91-dbb0df709f8f.png)
図3: シングルタスクCNN に比べていずれの変数を考慮した場合においてもマルチタスクCNN の相関が高いことがわかる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648555/56b17d1b-54b9-9bf1-8eba-ad01a6ac1658.png)

図4：相関プロット。(a)がシングルタスクCNN (b)がマルチタスクCNN

　図4(a)と図4(b)を比較すると、95%信頼楕円からマルチタスクCNNにより精度が向上していることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648555/c48bc4ea-be81-ea2a-a1c4-bb9edffe0ab0.png)


図5：分析の成功例

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648555/3a5ae163-4abd-c999-673e-f655afe4ed51.png)
図6：分析の失敗例

## アメリカ人向けのレシピサイトのデータセット分析結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648555/7ce857cd-6081-8fe9-f37c-86fdc76187b4.png)

日本語レシピデータセットと同様に、マルチタスクCNNの優位性が確認することができます。

## 議論(DISCUSSIONS)
　本研究では、オンライン料理レシピサイトからカロリーの付与された料理写真を収集し、料理カロリーの値をグランドトゥルースとして学習・テストを行いました。しかし、この食品カロリーの値は正確性を保証するものではなく、誤りも多く含まれていると考えられます。つまり、高品質なデータセットを作成することが急務であると考えており、大規模なカロリー注釈付き食品写真データセットをどのように構築するかは最大の課題となっています。

## 結論(CONCLUSIONS)
　マルチタスクCNN を用いて、料理のカロリー、カテゴリ、食材、調理方向を同時学習することで、料理写真から料理のカロリーを推定することを提案しています。また、Web上の日本のレシピサイトから収集したカロリー付きレシピのデータセットと、アメリカのレシピサイトから収集したデータセットの2種類を作成し、実験を行いました。本実験では、いずれのデータセットにおいても、マルチタスクCNNの性能が、独立したシングルタスクCNNの結果を上回りました。
　今後の課題として、食品カロリー推定における体積推定と、大規模かつ高品質なデータセットの構築を予定しています。高精度な食品カロリー推定には、食品の検出とセグメンテーションが重要であり、の予め登録された参照物体を用いることが必要となるでしょう。また、複数の視点からの画像から食品の体積を推定することも考えています。このように、体積・サイズに基づくカロリー推定に、マルチタスクCNNによるカロリー推定を導入することで、より精度の高いカロリー推定が可能になると期待されます。

***
いかがだったでしょうか、以上が論文の内容となります。
ここまで読んでいただきありがとうございました。
以下に本論文の要約を記載します。

## まとめ

**タイトル**
食品のカテゴリ・成分・調理法の知見を利用した画像による食品カロリー推定

**著者**
Ege, T., & Yanai, K.

**研究の動機**
- 先行研究による料理画像データからカロリーに対するマルチタスクCNN の適用の拡張（カテゴリ・材料・調理法）

**研究の手法**
- アメリカ人向けと日本人向けのレシピサイトからデータを集め、マルチタスクCNN を用いてカロリー予測を行った

**貢献**
- シングルタスクCNN と比較して、マルチタスクCNN の方がどのデータに対しても精度が向上し、有用性が確認された

**課題**
- 大規模で正確にアノテーション付きデータセットを整備し、正確な有用性を把握する
- 食品のサイズ・体積を把握できるような指標を追加し、表現の幅を広げる

## 参考文献
- [Ege, T., & Yanai, K. (2017, October). Image-based food calorie estimation using knowledge on food categories, ingredients and cooking directions. In Proceedings of the on Thematic Workshops of ACM Multimedia 2017 (pp. 367-375).](https://dl.acm.org/doi/pdf/10.1145/3126686.3126742)

- [Abdulnabi, A. H., Wang, G., Lu, J., & Jia, K. (2015). Multi-task CNN model for attribute prediction. IEEE Transactions on Multimedia, 17(11), 1949-1959.](https://arxiv.org/pdf/1601.00400.pdf)

- [【決定版】スーパーわかりやすい最適化アルゴリズム -損失関数からAdamとニュートン法-](https://qiita.com/omiita/items/1735c1d048fe5f611f80)