【ハッカソン(F)】お祭りをより楽しめるアプリを開発🚀🎆

こんにちは、2021 サマーハッカソン の F チームです。ハッカソンには新入生も多く参加し、初めてモノ作りにチャレンジしたメンバーがほとんどでした。4 日間という短い間でしたが、様々なことを学ぶことができたこの濃い 4 日間をこれから振り返っていきます。

F チームの紹介

F チームの概要を知っていた方が開会式から最終発表会までの振り返りが読みやすいと思うので先に簡単に紹介します。

メンバー

所属 人数
モバイルコース 3 名
データサイエンスコース 3 名

アイデア

今回のハッカソンのテーマが「夏」ということで、お祭りをより楽しくする便利なモバイルアプリを作ろうということになりました。ポイ捨てを減らす工夫を盛り込むなど、お祭り全体をより良くすることを意識してアイデア出しをしました。

アプリ

画面と機能は以下の表のとおりです。(完成形の画像はプログ後半にあります。)

画面 機能
ホーム 最新の祭り情報をお届け
マップ 会場周辺のゴミ箱マップ
レビュー 屋台の口コミで気になる屋台をチェック
My ポイント ポイントの確認、カメラ機能

物体検知アルゴリズム

データサイエンスチームでは、アプリにあるカメラ機能のアルゴリズムを実装しました。この機能の理想形は、自分がゴミをちゃんとゴミ箱に捨てている姿を撮影するとポイントが得られるというものです。[1]そのための第一歩として、ゴミを検知できるアルゴリズムを開発することにしました。

使用技術

全体

アプリの実装は Flutter を使い、その一部の機能で Python のライブラリの TensorFlow Lite を用いて学習させた tflite モデルを動かすということにチャレンジしました。

モバイル

モバイルチームは 3 人とも初心者なのもあり、かなり基本的な技術を中心に使いました。

UI の構成には、Widget と呼ばれるパーツを

  • 縦に並べる Column
  • 横に並べる Row
  • 重ねられる Stack

の 3 種類を使って配置し、

  • ホーム画面のお祭り一覧
  • 口コミ画面の口コミ
  • ポイント画面の広告

などはスワイプで操作できるように SingleChildScrollView 等を使用しました。

データ

TensorFlow Hub で公開されている ssd_mobilenet_v2 という物体検知(object detection)モデルを、kaggle にある Drinking Waste Classification という画像データセットでファインチューニングすることでゴミを検知するモデルを作成しました。

開会式から最終発表会までの軌跡

1 日目(アイデア出しと中間発表)

まずは今回のハッカソンのテーマである「夏」から連想される事を KJ 法 の要領でとにかく挙げていき、そこから現代の課題について考えるという作業を行いました。このとき、チームの色を引き出せるようにアイデアを練っていくのが難しかったです。

F チームのメンバー構成は、モバイルとデータサイエンスという組み合わせであり、どのようにデータという分野をモバイルに繋げるかという部分が肝でした。データコースのメンバーは Python が書けるので Flask を書いてアプリをつなげるサーバを書く手もありましたがそれはもったいないですし…。そんな経緯で TensorFlow Lite を使ってみるという案に落ち着きました。

2 日目 & 3 日目(実装)

モバイル

モバイルの開発の様子を一言でいえばチームプレイです。

今回 F チームのモバイルコース組は全員初心者でした。毎週の定例会でやっていたことをまずは思い出し、参考にしながら進めました。GitHub の使い方から、朧げになってた Git のコマンド、Flutter の小テクまで、色々なことを互いに教えあいました。また、モバイルコースの講師である Kaoru さんには何度も何度も助けてもらいました。

そんな中、事件は最終日の午前中、データサイエンス組が作成したモデルをモバイルの UI に取り入れる段階で起こりました。バグが起こったのです。しかも目の前の機器で調べても一件しか検索結果に出ない、全くの未知のものです。Kaoru さんも見たことがない、そんなバグにより開発は難航し最終的にはモバイルに TensorFlow Lite の学習済みモデルを組み込むのを諦めるという苦渋の決断をしました。そんなほろ苦い思い出もありました。

他にも 3 人とも短期間でモバイル技術を吸収しまくったため、ハッカソンの時間がものすごく短いということに途中で気づきました。苦戦することもありましたが 3 人とも形を仕上げることができ、良質なインプット・アウトプットができた色々と濃い 4 日間でした。

データ

まず、今回の状況と一致している Training SSD MobileNet v2 with TACO dataset を参考にして、学習データを差し替えて個々の目的に合ったモデルへと再学習させるという愚直な方法を試しました。ここでデータチームでも事件が起きました。このノートブックでは TensorFlow が提供しているモデルの 1 万分の 1 しか学習していないにも関わらず 10 分かかったのです。単純計算すると学習完了に要する時間は 2 ヶ月以上ということになります [2]

不可能という文字がちらつきましたが、Few Shot Object Detection for TensorFlow Lite [3] という転移学習(ファインチューニング)のサンプルコードが解決のヒントになりました。転移学習とはある領域の知識を別の領域の学習に適用させる技術で、事前学習モデルと少量 [4] のデータから短時間で高精度なモデルをを作ることができます。

現実的なコストで実装する方針が定まったので、最終発表会までに急ピッチで実装しました。公式のサンプルコードの一部に実装ミスがあったり Google Colaboratory が学習完了直後にクラッシュするなどトラブルもありましたがなんとか形にはなりました。

4 日目(最終発表会)

データチームの僕からすると、初心者が 4 日間で作ったとは思えない完成度でびっくりしました。

ホーム画面 マップ画面
レビュー画面 My ポイント画面

画像検知のアルゴリズムの発表では、飲み終わったペットボトルを持って撮ったメンバーの集合写真をモデルに渡したらどうなるかということをやってみました。実装中は頻発していたエラーは発生せずに予測はできたのですが、検知できてたりできなかったりという感じでした。

MONSTER の空き缶で予測したモデルではコーラの缶を検知できないとかもあるのでしょうか。時短のためにデータ数を減らしたり不確かさ予測をする機能をオフにしたりしたので、これから取れる手段はたくさんあります。何せ生後 4 日のモデルなので伸びしろは広大です。

メンバーの感想

A.N. さん


開く

長いようでものすごく短い4日間でした。ここで新しく取り入れた技術はしっかりと定着させて自分の力にしていきたいです。冬のハッカソンも楽しみです!


Y.K. さん


開く

私は今回のハッカソンに参加して良かったと痛感しています。参加前、自分は Flutter を学び始めて 1 か月しか経っておらず、プログラミングにおいてチームで 1 つの作品を作り上げるという経験をしたこともなかったため、とても不安な気持ちでいっぱいでした。チームのみんなに迷惑をかけたらどうしようという思いで正直逃げ出してしまいたい気分でした。そんな自分をチームのみんなは温かく迎え入れてくれました。また、困難に直面したときは何度も助けられました。

その結果、4 日間で自分の実力以上のものを発揮することができました。最初に不安な気持ちでいっぱいだった分、最終日には何事にも代えがたい達成感を味わうことができました。そして、みんなで協力しながら 1 つの作品を作り上げるということの素晴らしさを実感しました。今ではハッカソンに参加して良かったと心の底から思っています。この素晴らしい経験を今後の学習にしっかり活かしていきたいです。


E.M. さん


開く

今回のハッカソンで一番衝撃的だった学びが、同じ事を調べていても得られる情報量には人それぞれ違いがあるということでした。正確には、調べるという行為にもスキル的な要素が伴ってくるということです。どのように調べればいいのか、どのようにアプローチをかければ解決につながるのか、そういった工程にも慣れやコツがあり、また、それが非常に重要になってくるということが分かりました。

初日から色々と技術を試してはみても、中々思った通りに行かないこともあり、一度採用したアルゴリズム自体が没になっていしまうということもありました。ハッカソンでは、完成度も大きく評価されるため、初日のプロダクト案の時点でなるべく多くの情報を収集し、ある程度失敗の見積もりも立てたうえでうまくアプローチをかける必要があると感じました。

ハッカソンは普段の長期開発とは異なり、短期間かつ初対面のメンバーでの開発だったため、普段では得られないような経験が出来ました。短期間での開発の仕方。自分に足りていない技術・知識。技術レベルの低さが、悔しいかったり悲しかったりすることもありましたがそれ以上に学びも多くありました。普段は専門的な知識の重要性にばかり目を向けていましたが、今後とも必要になってくるであろう技能の重要性に気づかされる良い機会になりました。

はじめましてのメンバーも多い分、交友を広げる機会にもなりました。短期間で普段の生活にはない色濃い学び。それが今回のハッカソンの魅力だったと感じています。モノづくりが好きな方。交友を広げたい方。あるいは、学びに飢えている方。一つでも当てはまる方はぜひハッカソンに挑戦してみてください!普段にはない刺激と新しい経験が得られるはずです。


Y.S. さん


開く

9 月の予定が真っ白で、誰でも参加可と書いてあったので、技術は未熟ですが挑戦しようと思いました。はじめはなんか楽しいゲームを作ればいいんだなと思って、いろいろ案を立ててから初日に臨んだのですが、最初の説明でニーズがどうの、対象とする年齢層などの話が出て、これが企業のハッカソンか!とびっくりしました。

4 日間のハッカソンを通じて、学んだことは「参加すれば何かしら役に立てる」ということです。データサイエンス 3 人のなかでは、僕だけ案件どころか最終課題もやっていない状態だったので、どう考えても居る必要ないんじゃないかと思っていましたが、参加していると他の 2 人の方から、ファイルのダウンロードや移動だったり、コードのコピー、発表スライドの作成など様々な役割をもらえて、4 日間暇なく過ごすことができました。技術レベルが足りていなくても、自分にできることがあるということを学びました。この教訓を今後の生活で役立てていきたいと思います。


M.S. さん


開く

今回のハッカソンに参加して多くのことを学ぶことができました。技術がまだまだ未熟な私が参加しても何もできないと、参加を迷っていましたが、ハッカソンの 4 日間を振り返って参加を決めて本当に良かったと感じています。

作品を作るのは初めての経験だったので不安もありましたが、とても有意義な 4 日間を過ごすことができました。チームの仲間に教えてもらいながらページを作成していき、初めての技術にも多く出会いました。何の技術が使えるのか、どの技術を使えば思い描く作品に近づくのか、これまでにないほど試行錯誤を重ねました。それでも最後は自分でも一つのページが作れたという達成感でいっぱいになりました。協力して一つの作品を作り上げるというのは、私にとって素晴らしい経験となりました。充実した 4 日間をありがとうございました。


Y.Y. (著者)


開く

TensorFlow Lite は Flutter によるの公式デモを提供していないので、今回の設定はチャレンジングなものでした。未知のエラーに阻まれるということは、それだけ新しいことに挑戦できたのだと前向きに捉えられることだと思います。また、今まで深層学習は莫大なコストがかかるものという偏ったイメージを持ってましたが、転移学習が普及すれば実は手が届く身近なものになっていくのかもしれません。

コース横断型のイベントということもあって最終発表では様々な技術を知ることができました。F チームは今まで勉強してきたことを活せる技術を選びましたが、ハッカソンを機に他の分野に初めて触れてみるということにも次回は挑戦してみたくなりました。それにしても、大勢の人が集まる夏祭りや花火大会に行ける日が待ち遠しいですね。



  1. QR コードなどのモノによって My ポイントを獲得する案もありましたが、このアプリが原因でモノの用意などの手間が増えるのは UX 悪化につながるので、より普段と近い行動で獲得できないかを軸に考えました。本音はデータサイエンス要素をねじ込みたかったからですけど(笑)。 ↩︎

  2. 学習スピードが尻上がりだったりするかもしれないですし、そもそも TensorFlow は GPU を使った効率の良い学習をしているでしょう。 ↩︎

  3. 実はかなり初期の段階で見つけていたが、コードが複雑すぎて試さず放置していた。 ↩︎

  4. デモでは、たった 5 枚のデータでチューニングをしていた。 ↩︎