LoginSignup
9
5

More than 5 years have passed since last update.

ABEJA Platformで料理に合う酒類をオススメするAIをつくってみた

Last updated at Posted at 2018-12-09

こんにちは。ぎょりです。
これは、ABEJA Platform AdventCalendar 2018 、9日目の記事です。

今回はABEJA Platformを使って、ぎょりが思う料理に合う飲み物をオススメするAIをつくってみた (TBD) の回です。
※内容は出来上がり次第順次更新されます。

流れ

  1. 今回使うための料理の画像データを集める
  2. 教師データをつくる
  3. データセットを作成する
  4. 学習学習
  5. 推論APIを生成する
  6. 画像を投げるとぎょりがおすすめする飲み物情報が得られる!!
1. 今回使うための料理の画像データを集める

今回はicrawlerを使って料理画像を集めました。
参考にした記事 : pythonライブラリicrawlerを使い簡単に画像データを集める

icrawler.py
from icrawler.builtin import GoogleImageCrawler

keyword = 'ippin ryori'
crawler = GoogleImageCrawler(storage={"root_dir": keyword})
crawler.crawl(keyword=keyword, max_num=5000)
2. 教師データをつくる

ABEJA Platformには教師データを作るためのAnnotationツールとAnnotation委託サービスがあります。今回は私の趣味嗜好を反映するため、ツールだけを使って自分で教師データを作りました。

ただひたすらに、一品料理の画像に対して、私だったらこれを選ぶな...という酒類を選択していきます。ぽちぽち...つらい...マニュアル化して誰かに渡したいけど渡せない...がんばる。

ざっと200枚ぐらい。少ない、だが仕方ない。

3. データセットを作成する

作った教師データのjsonデータをABEJA Platformにデータセットとして登録します。
今回はこちらのgithubのコードを参考にして登録しました。

50行目の ['Kind'] -> ['recommend'] に変更。
※recommend = 私のアノテーションのカテゴリName

classification.py
for d in data:
        channel_id = d['task']['metadata'][0]['channel_id']
        label = d['information']['recommend']
        label_id = label_to_id[d['information']['recommend']]
        filename = d['task']['metadata'][0]['information']['filename']
        file_id = d['task']['metadata'][0]['source'] 

labels.jsonの設定は以下の通り

labels.json
[
  {
    "label_id": 0,
    "label": "ビール"
  },
  {
    "label_id": 1,
    "label": "ハイボール"
  },
  {
    "label_id": 2,
    "label": "日本酒"
  },
  {
    "label_id": 3,
    "label": "赤ワイン"
  },
  {
    "label_id": 4,
    "label": "白ワイン"
  },
  {
    "label_id": 5,
    "label": "モヒート"
  },
  {
    "label_id": 6,
    "label": "芋焼酎"
  }
]

ちなみにちょっと間違えちゃってDatasetを削除したくなっちゃったときは以下のCLIをぶん投げれば削除できます。

$ abeja dataset delete-dataset --dataset_id [dataset_id]
4. 学習学習

ドキュメントを参考に、ABEJA Platform上でジョブを定義、学習を開始します。今回はclassificationなのでサンプルのコードをほぼそのまま使いました。

createtrainingjob.png

変更点 : 23行目のclass数を変更

train.py
batch_size = 32
num_classes = 7
epochs = int(os.environ.get('NUM_EPOCHS', 100)) 

たたかいの軌跡。
エラーになってもABEJA PlatformではGUI上で簡単にログを確認することができます。ログを確認してエラーを修正して、を繰り返して4回目に成功しました!!

たたかい.png

2/4のエラーではzip化がうまくできていないことが理由でした。zip化する対象のファイルのあるディレクトリにいる状況化で以下でzip化をすると解決。

$ zip -r archive.zip *
5. 推論APIを生成する

ABEJA Platform上で推論用のAPIを生成します。ここは、こちらのドキュメントの通りに進めます。

ちなみに、deploymentを生成するためのcheckを忘れずに!!(チェックをしておくとこの後のdeploymentが楽ちんです。)
checkを忘れずに.png

6. 画像を投げるとぎょりがオススメする飲み物(=酒)情報が得られるAPIができました!!

やっぱりビアだよね!!!
Screen Shot 2018-12-09 at 21.53.40.png

やっぱ、白ワインだよね!!!
Screen Shot 2018-12-09 at 21.57.00.png

まとめ

いろいろはまったけれど、エンジニアでなくても個人的なレコメンドAI的な何かを作ってみることができました。ABEJA Platformたのしーい。おもしろーい。
もっとつかってみたーい!!という、方はぜひ ハンズオン勉強会 にご参加ください。

これからの抱負

もう少しデータ量、ラベル種類を増やしてもっとぎょりオススメを正確に出せるようにしていきたいと思います。

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5