Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AIを活用した柔軟かつ効率的な社内リソース検索への取り組み
Search
Cygames
September 09, 2024
Technology
0
980
AIを活用した柔軟かつ効率的な社内リソース検索への取り組み
Cygames
September 09, 2024
Tweet
Share
More Decks by Cygames
See All by Cygames
『GRANBLUE FANTASY Relink』キャラクターの魅力を支えるリグ・シミュレーション制作事例
cygames
0
410
『GRANBLUE FANTASY: Relink』最高の「没入感」を実現するカットシーン制作手法とそれを支える技術
cygames
1
320
『GRANBLUE FANTASY Relink』ソフトウェアラスタライザによる実践的なオクルージョンカリング
cygames
0
320
高品質なフォトグラメトリデータを取得するためのハードウェア&ソフトウェア開発
cygames
0
1.1k
『GRANBLUE FANTASY: Relink』開発からリリースまでを支えたCI/CDの取り組み
cygames
0
240
『GRANBLUE FANTASY: Relink』専任エンジニアチームで回す大規模開発QAサイクル
cygames
0
260
『GRANBLUE FANTASY: Relink』クオリティと物量の両立に挑戦したフェイシャルアニメーション事例 ~カットシーンからランタイムまで~
cygames
0
280
『GRANBLUE FANTASY: Relink』キャラクターの個性にlinkした効果音表現
cygames
0
130
『GRANBLUE FANTASY: Relink』 乱戦を制するミックス ―Ambisonicsと動的音量制御と掛け合いボイス―
cygames
0
140
Other Decks in Technology
See All in Technology
【令和最新版】AWS Direct Connectと愉快なGWたちのおさらい
minorun365
PRO
5
750
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.1k
Python(PYNQ)がテーマのAMD主催のFPGAコンテストに参加してきた
iotengineer22
0
470
TypeScript、上達の瞬間
sadnessojisan
46
13k
Terraform CI/CD パイプラインにおける AWS CodeCommit の代替手段
hiyanger
1
240
Taming you application's environments
salaboy
0
180
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
190
BLADE: An Attempt to Automate Penetration Testing Using Autonomous AI Agents
bbrbbq
0
290
OCI Vault 概要
oracle4engineer
PRO
0
9.7k
開発生産性を上げながらビジネスも30倍成長させてきたチームの姿
kamina_zzz
2
1.7k
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.3k
【若手エンジニア応援LT会】ソフトウェアを学んできた私がインフラエンジニアを目指した理由
kazushi_ohata
0
150
Featured
See All Featured
Code Review Best Practice
trishagee
64
17k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Agile that works and the tools we love
rasmusluckow
327
21k
It's Worth the Effort
3n
183
27k
Into the Great Unknown - MozCon
thekraken
32
1.5k
RailsConf 2023
tenderlove
29
900
The Pragmatic Product Professional
lauravandoore
31
6.3k
Bash Introduction
62gerente
608
210k
Building Applications with DynamoDB
mza
90
6.1k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Transcript
1/63 株式会社Cygames 開発運営支援 ゲームエンジニア / 立福 寛 エンジニアリング・プロダクション AIを活用した 柔軟かつ効率的な社内リソース検索への取り組み
2/63 はじめに
3/63 立福 寛 開発運営支援 / ゲームエンジニア 複数のゲーム会社でコンテンツパイプラインの構築、モバイルゲームの開発・運営などを担当。 2018年10月に株式会社Cygamesへ入社。2019年後半からAIの社内導入に取り組んでいる。 CEDEC2021:ゲーム制作効率化のためのAIによる画像認識・自然言語処理への取り組み CEDEC2022:AIによる自然言語処理を活用したゲームシナリオの誤字検出への取り組み
CEDEC2023:AIによる自然言語処理・音声解析を用いたゲーム内会話パートの感情分析への取り組み 自己紹介
4/63 この講演で得られること AIを使った画像検索の原理 サーバレスで実装する場合の問題点と 解決方法 楽曲・効果音への適用
5/63 今回解決したい課題 ◼ 人力で行うには大変すぎる ◼ 担当者によってばらつきがでてしまう 大量の画像へのタグ付けをAIで行えないか? ◼ 所属部署が社内に提供しているWebアプリ 対象は社内のリソース管理ツール
6/63 リソース管理ツール : CyResource ◼ 画像、動画、音声、スライドなどをアップロード可能 ◼ タグ付け、バージョン管理、ユーザー管理 ◼ 用途ごとに「スペース」が分かれている
社内向けの汎用アップローダー ◼ アップロードされたリソースはS3に格納される AWS上に実装
7/63 リソース管理ツールにAI検索を実装 ◼ テキストで画像を検索 ◼ 画像で画像を検索 ◼ 色で画像を検索 AIを使えば テキストで直接画像検索できる
◼ 画像のアップロード時に検索用情報を登録 ◼ 検索時には登録された情報を使って検索 登録と検索
8/63 原理と機能
9/63 AI画像検索の原理と機能
10/63 AI画像検索の原理(その1) ◼ 画像を扱うAIでよく利用されているモデル ◼ テキストと画像を関連付けすることができる ◼ 日本語モデルも公開されている CLIPモデルを利用 ◼
CLIP : OpenAI(英語) ◼ Japanese CLIP : rinna、日本語対応したCLIP(今回採用) 利用可能なCLIPモデル
11/63 AI画像検索の原理(その2) ◼ CLIPはテキストと画像をベクトルに変換する 基本的な原理 意味が近いものは ベクトル間の距離が近くなる 近い 遠い 「赤いりんご」
テキスト ベクトル (スイカ) ベクトル (テキスト) ベクトル (りんご) 相談 画像 画像
12/63 AI画像検索の原理(その3) ◼ Web上の画像とそのテキストのペアを4億セット学習している ◼ ゼロショット(ファインチューニングなし)で高い性能を達成 CLIPの学習 赤いリンゴ テキスト 大きなスイカ
テキスト 相談 画像 画像
13/63 AI画像検索の原理(その4) 1. あらかじめ「検索対象の全画像」をベクトルに変換 2. 検索テキストをベクトルに変換 3. 2のベクトルに近い順に画像のベクトルをソート テキストで画像を検索 1.
あらかじめ「検索対象の全画像」をベクトルに変換 2. 検索画像をベクトルに変換 3. 2のベクトルに近い順に画像のベクトルをソート 画像で画像を検索
14/63 例:画像検索の結果
15/63 リソース管理ツールの検索結果(1) 「パン」で検索 ◼ 左から右に近いものが並ぶ ◼ 原理上、多少違うものが上位に来ることがある
16/63 リソース管理ツールの検索結果(2) 「テレビ」で検索 ◼ デフォルメのイラストでも大丈夫 ◼ 完全一致するテキストでなくても検索できる
17/63 リソース管理ツールの検索結果(3) 「マグロの寿司」の画像で検索 ◼ 同じものがトップに来る
18/63 CLIPによる検索の特徴と限界 画像の「意味・要素」で検索できる 類似した構図でも検索したいが…… 同じポーズ・似た構図を検索したい 意味を優先してしまう(別のアプローチが必要)
19/63 実装
20/63 機能の概要
21/63 機能の概要: 画像のアップロード 画像をベクトル変換して登録 アップロード API:登録処理 相談 画像 AI検索 画像
相談 リソース管理ツール 検索インデックス ベクトル
22/63 機能の概要: テキストで検索 テキストをベクトル変換 検索インデックス ベクトル 検索 AI検索 近いベクトルを検索 赤いリンゴ
テキスト 赤いリンゴ テキスト 検索結果 画像 相談 リソース管理ツール API:検索処理
23/63 実装 : デプロイ環境、ベクトル検索エンジン ◼ サーバレスで扱いやすい ◼ コストが低い ◼ リソース管理ツールとは別に実装(後で役に立った)
◼ Lambdaの詳しい話は次のデプロイのところで AWSのLambda上にデプロイ ◼ ベクトル間の距離を高速に求める ◼ Meta社のfaissを利用 https://github.com/facebookresearch/faiss ◼ 今回は検索件数が数万の単位なので必須ではない ベクトル検索エンジンを利用
24/63 実装 : ベクトル検索エンジン faiss ◼ C++実装なので高速 ◼ 多様な検索方法、GPUサポート(今回はCPU版を利用) 特徴
◼ コサイン類似度:2つのベクトルのなす角のコサイン値(同じベクトルの場合1) ◼ faiss.IndexFlatIPがコサイン類似度で検索 ◼ 削除時:検索インデックスを再作成(削除機能がないため) 今回はコサイン類似度が近いものを検索 ◼ 検索前:ベクトルを追加して「検索インデックス」を構築 ◼ 検索時:「検索したいベクトル」と「検索インデックス」から検索 ◼ 検索結果は距離が近い順のインデックス値 [2,3,1,…] 検索インデックスを構築 > 検索
25/63 実装 : faissはベクトルしか格納できない ◼ 同じ順番でfaissのインデックスを作成 ◼ faissの検索結果を使って、リソースIDを取得 ◼ 「ベクトル間の距離が近い順」の「リソースIDのリスト」を返す
◼ Pythonのpickle形式で保存 (リソースID:ベクトル)の配列を別に持つ 検索結果 リソースリスト リソースID1, 画像のベクトル1 リソースID2, 画像のベクトル2 リソースID3, 画像のベクトル3 faissの検索インデックス 画像のベクトル1 画像のベクトル2 画像のベクトル3 検索
26/63 実装 : APIごとの処理 ◼ 画像の登録時 > 検索インデックスの登録処理 ◼ 画像の検索時
> 検索してソートされたリソースIDのリストを返す リソース管理ツールからAPIを呼び出す
27/63 実装 : 登録時の処理 1. 登録する画像をCLIPでベクトルに変換 2. リソースリストを読み込む 3. リソース名とベクトルのペアをリソースリストに追加
4. リソースリストを使ってfaissのインデックスを再作成 インデックスの追加 faissの検索 インデックス インデックス 再作成 • ベクトル • リソースID リストに 追加 リソースリスト 画像 CLIPで ベクトル変換
28/63 実装 : 検索時の処理 1. テキストor画像をCLIPでベクトルに変換 2. faissのsearch関数で検索 3. コサイン距離が近い順に配列のインデックスのリストが返る
4. リソースリストからリソースIDのリストを取得して返す faissの検索+リソースIDのリストを返す faissの検索 インデックス リンゴ テキスト ベクトル Search関数で 近いベクトルを検索 リソースIDの リストを取得 CLIPで ベクトル変換 リソースリスト
29/63 デプロイ
30/63 デプロイ上の問題点と解決策 ◼ 合計15万枚を登録 ◼ 1回のAPI呼び出しで20枚登録 ◼ 1分間に1回実行 ◼ 5日以上
アップロード済みの画像を登録 ◼ 同時アクセスで検索インデックスが壊れる ◼ AIのモデルがインフラの帯域制限に引っかかってしまう ◼ 制限時間内に処理が終わらない 実行すると問題が多数発生
31/63 システム構成
32/63 システム構成 リソース管理ツール AI画像検索 EFS 帯域制限 ファイル転送 API Gateway Lambda
/tmp エフェメラルストレージ 30秒の制限 S3
33/63 AI画像検索 API Gateway EFS リソース管理ツール 帯域制限 ファイル転送 API Gateway
Lambda /tmp エフェメラルストレージ 30秒の制限 S3
34/63 Lambda リソース管理ツール AI画像検索 EFS 帯域制限 ファイル転送 Lambda API Gateway
30秒の制限 /tmp エフェメラルストレージ S3
35/63 EFS リソース管理ツール AI画像検索 EFS 帯域制限 ファイル転送 API Gateway Lambda
/tmp エフェメラルストレージ 30秒の制限 S3
36/63 S3 リソース管理ツール AI画像検索 S3 EFS 帯域制限 ファイル転送 API Gateway
Lambda /tmp エフェメラルストレージ 30秒の制限
37/63 発生した問題
38/63 検索インデックスが同時アクセスで壊れる ◼ Faissの検索インデックスのファイルをEFSに保存 ◼ 登録時、検索時にロード&セーブ ◼ 同時アクセスするとファイルが破損! 当初の実装 ◼
ネットワークファイルシステムなのでアクセス制御してくると思っていた EFSは同時アクセスの制御はしてくれない ◼ fcntl.LOCK_EXで排他ロック ◼ ロックファイルはサービスごとに作成(EFSに作成) ◼ サービス単位での同時アクセス数が少ないので問題なかった シンプルにファイルロックで回避
39/63 AIのモデルがインフラの帯域制限に引っかかる ◼ モデルをS3に配置 ◼ 最初の一回だけS3からEFSにコピー ◼ 実行時にEFSからモデルをロード 当初の実装 ①コピー
②ロード モデルファイル モデルファイル S3 EFS Lambda
40/63 AIのモデルがインフラの帯域制限に引っかかる ◼ Lambdaの関数を呼び出していくと途中で重くなる ◼ EFSは一定枠までは高速に使えるがそれ以上は制限がかかる(知らなかった!) 最初は問題なく動くが……! ①コピー ②ロード モデルファイル
モデルファイル S3 EFS Lambda 帯域制限
41/63 AIのモデルがインフラの帯域制限に引っかかる ◼ 関数呼び出しごとにS3から/tmpへモデルをコピー ◼ 2022年4月から/tmpの容量を追加できる Lambdaのエフェメラルストレージで解決 モデルファイル S3 Lambda
/tmp
42/63 faissのファイルも帯域制限に引っかかる ◼ faissの検索インデックスをEFSに保存 ◼ 画像登録・検索ごとにEFSからロード 当初の実装 ◼ faissの検索インデックスは数十MB ◼
数千回EFSから読み込むと制限がかかって遅くなる こちらも最初は問題なく動くが……! ◼ 関数呼び出しごとにS3から/tmpへ検索インデックスをコピー ◼ 更新後はS3へ戻す ◼ 最終的にEFSはロックファイル置き場としてのみ利用 同じ方法で解決
43/63 画像の登録処理が制限時間内に終わらない ◼ 画像の登録処理は20件まとめて行う ◼ Lambda内部では1件の登録処理を20回呼ぶ実装 ◼ モデルを20回S3から転送するので遅い! ◼ API
Gatewayの制限のため30秒以内に終わらせたい 当初の実装 1. S3からモデルをコピー 2. 20件まとめて画像をベクトルに変換 3. faissにベクトルを登録 4. faissの検索インデックスをS3へコピー まとめて処理する実装に変更
44/63 開発期間 ◼ Japanese CLIPとfaissを使った実装 1週間 ◼ Lambdaでの初期実装 2週間 ◼
リソース管理ツールへの組み込み 1ヶ月(別の担当者) ◼ デプロイ時のトラブル対応 1ヶ月 初期実装からリソース管理ツールへの組込みまで ◼ 基本構成は過去のAI機能と同じ ◼ AWSのインフラ構成も同じ ◼ AWS CDKのコードを流用 過去のAI機能の実装を使い回す
45/63 導入後の感想と今後の改善
46/63 リリース後の社内の感想
47/63 リリース後の社内での感想 ◼ 新しく入ったAI検索機能ものすごくいいです。...今まで発掘できなかったイラストが、 グーグル検索のように適当に思い浮かんだ言葉で検索出来てしまう。 これはまさに、かゆかったところに手が届く機能です!ありがとうございます! ◼ 本日の更新にてAI機能がつきました!とてもすごいのでぜひ使ってみてください~! (「青」って入れたら、青系イラストがいっぱい出てきました。すごい) 社内の感想
◼ 予想以上に好印象 ◼ 開発中の問題は多かったが、導入してよかった ◼ これもAIでできるんじゃない?という相談が増えた 想定以上に評判がよかった
48/63 別のアプリケーションでも使いたい ◼ シナリオライターがゲーム中の背景画像を指定 ◼ 数百枚以上ある背景画像を検索したい ◼ タグやファイル名を知らないと探せない ◼ 埋もれている背景がある
社内のシナリオ執筆ツールに導入してほしい ◼ リソース管理ツールとは独立している ◼ 別のサービスからでもAPIを呼び出せる 独立した実装になっているので導入が簡単
49/63 AI画像検索の改善
50/63 検索システムの改善 ◼ 「赤いリボンを付けたキャラクターA」で検索できるとさらに便利 ◼ Japanese CLIPのファインチューニングが必要 ◼ ファインチューニングの実装コードがない キャラクター名でも検索したい
◼ とあるカンファレンスで開発者の講演があった ◼ 講演後に話をして教えてもらった ◼ OpenAIのCLIPと同じ方法でファインチューニング可能 開発者に直接質問できた
51/63 ファインチューニングを行ってみた(その1) ◼ リソース管理ツールにはキャラクター名がタグで付いている ◼ 画像とキャラクター名の対応は取れるのでこれを学習 ◼ キャラクター名は学習できるが、学習済みの情報が失われてしまう キャラクター名を学習 ◼
ファインチューニングで学習した知識は増えるが、他の知識を忘れる現象 ◼ 両者のバランスを維持するファインチューニング手法 ◼ PAINT ◼ Patching open-vocabulary models by interpolating weights ◼ 参考文献:深層学習による画像認識の基礎 オーム社 菅沼 雅徳 破滅的忘却
52/63 ファインチューニングを行ってみた(その2) ◼ LLaVA1.5は画像に対してテキストで問い合わせを行えるモデル ◼ キャラクターの名前+画像の説明テキストを学習 ◼ 「(キャラクター名)の画像です。ギターを持った女性がいます」 ◼ 出力は英語なので日本語に翻訳して適用
◼ 学習してみたが精度が上がっていかなかった ◼ 生成テキストが学習に向いていなかった可能性 LLaVA1.5モデルで画像からテキストを生成 画像 テキスト 「画像を説明して」 プロンプト LLaVAモデル 「ギターを持った 女性がいます」
53/63 楽曲と効果音への適用
54/63 社内の楽曲管理について ◼ 社内リソース管理ツールのUIを変更したもの ◼ 楽曲管理に便利な機能を足してある ◼ 2023年から導入中 社内の楽曲管理システム:MusicDB ◼
担当者ごとにぶれてしまう ◼ こちらをAIで自動化できないか? 手動でタグを付けているが大変
55/63 音声版のCLIP : CLAP ◼ 画像以外を扱うCLIPモデルが多数公開済み ◼ 今回はLAION-AI/CLAPモデルを利用 音声版のCLIPを使えば可能! ◼
CLAP : Contrastive Language-Audio Pretraining ◼ 楽曲、効果音を扱えるCLIP(英語のみ) ◼ 商用利用可能なライセンス ◼ 精度が高い ◼ 先頭の10秒のみ利用(10秒以下の場合はリピート) ◼ 楽曲用の事前学習モデルを利用 LAION-AI/CLAP
56/63 楽曲の自動タグ付け ◼ CLAPをクラス分類に適用 ◼ ジャンル : クラシック、カントリー、ジャズ、…… ◼ テンポ:速い、普通、ゆっくり
◼ ムード:クール、楽しい、ロマンティック、悲しい、…… ジャンル、テンポ、ムードを自動タグ付け ◼ ジャンル分類の場合 ◼ 例:this audio is {ジャンル名} sound ◼ ジャンル名 : 'classical', 'country', 'jazz’ , … ◼ 「テキスト」と「楽曲」の距離が近いものへ分類 テキストのテンプレートを利用してクラス分類 ◼ 途中でテンポやムードが変わる曲は扱えない 実際の運用に使える精度
57/63 類似楽曲の検索 ◼ 楽曲から楽曲を探せる機能 ◼ 便利な機能なのでこちらから提案 ◼ 同じ曲のアレンジ版が上位に出てきたので正しく動作している ◼ たまに間違える(まったく別の曲が出てくる)
画像検索と同様に類似楽曲を検索できる
58/63 Lambdaでの実装 ◼ モデルファイルがrinna社のCLIPより大きい ◼ 初期化に時間がかかる 同様にAWS Lambdaで実装 ◼ LAION-AI/CLAPはモデルのファイルサイズが2.2GB
◼ これをS3から毎回転送するのは時間がかかる ◼ モデルを16bitに変換すると383MB(精度変わらず) モデルファイルが大きい ◼ 特定のクラスのインスタンス化に数秒かかる ◼ インスタンスをPythonのpickle形式で保存 ◼ 毎回S3から転送して読み込むことで高速化 初期化に時間がかかる
59/63 現在実装中 ◼ リソース管理ツールへの組み込み待ち Lambda側は完成
60/63 効果音の検索 ◼ 大量の効果音にタグを付けるのは大変 ◼ 担当者が異動すると引き継ぎのコストが大きい ◼ LAION/CLAPは効果音(環境音)の扱いが得意なモデル 効果音の検索もやりたい! ◼
テキストで効果音を検索 ◼ 効果音で効果音を検索 楽曲と同様のシステムとして提供(予定)
61/63 まとめ
62/63 まとめ : AIを使ったリソース検索を開発 ◼ 「いままで発掘できなかった画像が見つかった」など ◼ タグは使わずに、テキストで直接検索 ◼ 担当者ごとの感覚の違いに影響されない
AI画像検索は評判がよかった ◼ 同様の仕組みで楽曲・効果音も検索できる ◼ 工夫すればクラス分類も実装可能 楽曲・効果音の検索にも利用可能 ◼ 原理は極めてシンプル ◼ サーバレスでの実装には工夫が必要 ◼ 独立したシステムにすると他でも使える サーバレスでの実装は少し大変
63/63
参考文献 ◼ https://github.com/openai/CLIP CLIP ◼ https://github.com/rinnakk/japanese-clip Japanese CLIP ◼ https://github.com/facebookresearch/faiss
faiss
参考文献 ◼ https://github.com/LAION-AI/CLAP LAION-AI/CLAP ◼ https://github.com/haotian-liu/LLaVA LLaVA 1.5
参考文献 ◼ MERT: Acoustic Music Understanding Model with Large- Scale
Self-supervised Training ◼ https://github.com/yizhilll/MERT MERT ◼ Patching open-vocabulary models by interpolating weights ◼ https://arxiv.org/abs/2208.05592 PAINT
参考文献 ◼ オーム社 菅沼 雅徳 ◼ 8章 3.6 CLIP 深層学習による画像認識の基礎
参考文献 ◼ https://magazine.cygames.co.jp/archives/19967 社内のシナリオ執筆ツール
クラス分類の精度を向上できないか? ◼ テキストor楽曲による検索がメイン ◼ 開発者がクラス分類は得意でないとコメント LAION-AI/CLAPはクラス分類は得意ではない ◼ タスクごとのモデルの精度を見れるサイト ◼ Music
Auto-Tagging ◼ Music Genre Recognition ◼ Music Question Answering ◼ Music Classification Papers with Codeで探す ◼ 楽曲生成はかなり盛り上がっているのに…… 楽曲分類は人気がない
LAION-AI/CLAPより高精度のモデル ◼ 楽曲をベクトルに変換するモデル ◼ ジャンル分けなどのクラス分類の精度が高い ◼ ソースコードは商用利用可能 ◼ 事前学習モデルが商用利用不可! MERT