こんにちは。ぎょりです。
これは、ABEJA Platform AdventCalendar 2018 、9日目の記事です。
今回はABEJA Platformを使って、ぎょりが思う料理に合う飲み物をオススメするAIをつくってみた (TBD) の回です。
※内容は出来上がり次第順次更新されます。
流れ
- 今回使うための料理の画像データを集める
- 教師データをつくる
- データセットを作成する
- 学習学習
- 推論APIを生成する
- 画像を投げるとぎょりがおすすめする飲み物情報が得られる!!
1. 今回使うための料理の画像データを集める
今回はicrawlerを使って料理画像を集めました。
参考にした記事 : pythonライブラリicrawlerを使い簡単に画像データを集める
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
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の設定は以下の通り
[
{
"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なのでサンプルのコードをほぼそのまま使いました。
変更点 : 23行目のclass数を変更
batch_size = 32
num_classes = 7
epochs = int(os.environ.get('NUM_EPOCHS', 100))
たたかいの軌跡。
エラーになってもABEJA PlatformではGUI上で簡単にログを確認することができます。ログを確認してエラーを修正して、を繰り返して4回目に成功しました!!
2/4のエラーではzip化がうまくできていないことが理由でした。zip化する対象のファイルのあるディレクトリにいる状況化で以下でzip化をすると解決。
$ zip -r archive.zip *
5. 推論APIを生成する
ABEJA Platform上で推論用のAPIを生成します。ここは、こちらのドキュメントの通りに進めます。
ちなみに、deploymentを生成するためのcheckを忘れずに!!(チェックをしておくとこの後のdeploymentが楽ちんです。)
6. 画像を投げるとぎょりがオススメする飲み物(=酒)情報が得られるAPIができました!!
まとめ
いろいろはまったけれど、エンジニアでなくても個人的なレコメンドAI的な何かを作ってみることができました。ABEJA Platformたのしーい。おもしろーい。
もっとつかってみたーい!!という、方はぜひ ハンズオン勉強会 にご参加ください。
これからの抱負
もう少しデータ量、ラベル種類を増やしてもっとぎょりオススメを正確に出せるようにしていきたいと思います。