OpenVinoと生成AIを使ってアプリを作る!

投稿日:2024-06-01

OpenVinoと生成AIを使ってアプリを作る!

概要

IntelCoreUltra(NPUを搭載したCPU)とOpenVinoツールキットを使ってローカルで動作するAIを用いたアプリケーションを作成します。これは私がIntel社開催の学生向けコンテストに提出した作品です。

OpenVinoツールキットとは

OpenVinoを利用することでIntel製のCPUのパフォーマンスを最大化し、GPUが搭載されていないPCでも機械学習の推論を行う事が出来るようになります。
ノートパソコンとかでもサクサク推論できる時代なんですかね~。(公式サイト)

IntelCoreUltraとは

AIを動作するのに特化したNPUというプロセッサを搭載しているCPUの箏です。ネットで調べた所、NPUを使うことでStableDiffusionでの画像生成速度がCPU単体に比べて2倍になりつつも電力消費が1/4になったらしいです。凄い~(公式サイト)

コンテストの概要(要件定義)

今回のコンテストで重要なのはOpenVinoツールキットを使うことと、NPUを搭載しているノートパソコンでAIの推論能力を証明出来るアプリケーションの作成ですね。
後、ノートパソコンで使うアプリなのでどこに持っていっても使用機会がある方が良いらしいです。

ん~...難しい(笑)

アイデア出し

OpenVinoで何が出来るのか見ていた所、StableDiffusionや物体検知(セグメンテーション)が動かせる事を知りました。その時、ふと「AIで生成された画像にセグメンテーションを行うとどうなるのだろう?」と興味が湧きました。画像の中から物を探すのって面白いですよね...

「これどこかでやった事あるぞ...ミッケ!だ~懐かし~笑!」

ミッケ!とは

ごちゃごちゃしたジオラマ画像の中から特定の物を見つけるという内容のウォーリーを探せに似た子供向けの絵本です。絶対にどこかにあるのに全然見つからないのがもどかしくて面白かったんですよね~。

こういう画像をAIに生成させてみよ~...失敗!

512x512のStableDiffusionでは細かいオブジェクトの生成が難しく、セグメンテーションでは検知出来ないという結果になりました。
リンゴ一つとかだったら全然生成できるんですけど、それだとモノ探し感がなくて微妙...💦
ただ、物体検知でマスクされた画像↓を見て「これゲームにできるかも...?」と感じた要素がありました。

画像では"赤い車"を物体検出して色を塗ったサンプルなのですが、これで検知された範囲を求めてポイント化したらゲームに出来るのでは...!
それってスプラトゥーンとっても革新的な使い方だ~!と思ってこの方向性で制作する事に決めました。

アプリの内容を考える

ただ色塗りするゲームだったら単調なので何か良いアイデアはないかな...?と思っていたところ、物体検知のプロンプトは英語という要素を活かして、英単語学習アプリに派生出来ると考えました。元々色塗りゲームが子供向けな内容なので、子供が遊びながら学べるってとっても良いな...と思い今回の制作目標は...

に決めました!(左の画像群は今回作成した機能一覧です)

今回作成した機能一覧

  1. StableDiffusionを用いた画像生成 with OpenVino
  2. GroundingDINOとEfficientSAMを用いた物体検知(色塗りゲーム) with OpenVino
  3. FuguMTを用いた翻訳システム
  4. 英単語登録システム(辞書)
  5. 英単語テスト

となっています。これがあるならこれもいるよね...って思いつきで制作した結果、結構多くなりました💦
どれも必要な要素だったので仕方ないですね...

使用した技術と全体図

工夫した所

  • 起動することで全て動くアプリケーションとして完成させた
  • 色塗りゲームを面白く遊べるようにルールを作った
  • 発表の時にOpenVinoを積極的に使っている事をアピールした
  • 機能同士の相乗効果について説明した
  • 誰でも分かるような全体図を作った

個人的に最後の全体図を作った所が高評価ポイントだったと思います。発表終了後のフィードバックやQ&Aの時間にこのスライドを表示しておく事で、短い発表時間で伝えられなかった要素やアプリの全体の流れを審査員に見てもらえたのかなと思います。見やすい図って大事!この図に関してはAdobeillustratorを使って作成する事で自由度の高いデザインに仕上げています。

改善するべき所

  • 制作時間に余裕が無かった
  • Python,OpenVINO,その他ライブラリについての知識が足りていなかった
  • 発表で上手く説明出来なかった
  • 発表時間にギリギリ収まらなかった

本当に発表が難しかったです。他のチームは機能が1~2つ程度なのですが、今回私は5個作っちゃったので一つ一つゆったりと説明する時間が無かったです。急がなきゃって思うと話したい事が飛んじゃうんですよね。そうなる事を見越して全体図を作っておきました...笑
後、制作時間に余裕がなかったのも結構辛かったですね。他の制作も同時に進めているので、最終日近くは死んだ目で作業する日が続きました。
そしてPythonが難しい...💦最近はNuxt.jsでポートフォリオサイトの開発をしているので突然Pythonを触っても「?」でした。今はDjangoを使ってフロントとバックエンドを両方習得したいな~って思っています。

結果:最優秀賞🎉

他のチームも色々開発していて凄いな~と思いながら見ていましたが、私が最優秀賞でした...!やった~
ということで、6/6に東京で開催されるIntel AI Summit(リンク)にて登壇し、今回作成したアプリの発表を行う事が決まりました。めっちゃ緊張しています。
以前にもIntelのコンテストで最優秀賞を取った事があるのですが、その時は学内の進級制作展での発表だけだったので(それでも結構緊張しました)、
今回のような大々的なイベントで発表するのは初めてですし、どんな雰囲気なのかとても気になりますね。
長くても30分なので頑張って発表してきます。それでは...👋