Slide 1

Slide 1 text

全身画像からコーデアイテムを抽出し 毎日にIRODORIを!デバイス完結型アプリを作る Copyright © ZOZO, Inc. 1 株式会社ZOZO
 ZOZOTOWN開発本部 ZOZOTOWN開発1部 iOSブロック
 
 だーはま / 濵田 悠樹 Copyright © ZOZO, Inc.

Slide 2

Slide 2 text

© ZOZO, Inc. 株式会社ZOZO ZOZOTOWN開発本部 ZOZOTOWN開発1部 iOSブロック 濵田 悠樹 @ios_hamada 2 ● 25年新卒でZOZOに入社 ● 学生時代はAIの研究, iOSやPdMの長期インターン ● 服でユーザーの人生を変えるためZOZOへ入社 ● 新卒4人で IRODORI を開発中(業務外)

Slide 3

Slide 3 text

© ZOZO, Inc. 3 IRODORI : コーディネートの”相棒”ができる ○ 写真1枚からコーデの分析や提案をしてくれる → コーデに悩まなくなる, 自信を持てる AIを使ったアイテム抽出

Slide 4

Slide 4 text

© ZOZO, Inc. 4 開発始めたてのある日 AIモデル使って、全身画像からトップスとボトムスを抽出したい いいね!使えそうなAIモデル調べてみる AIエンジニア

Slide 5

Slide 5 text

© ZOZO, Inc. 5 開発始めたてのある日 AIモデル使って、全身画像からトップスとボトムスを抽出したい いいね!使えそうなAIモデル調べてみる AI動かすために GPUサーバー6万円/月かかる。いいね! AIエンジニア インフラエンジニア

Slide 6

Slide 6 text

© ZOZO, Inc. 6 AIモデル使って、全身画像からトップスとボトムスを抽出したい いいね!使えそうなAIモデル調べてみる いいね!AI動かすためにGPUサーバー6万円/月かかる。いいね! ん....??

Slide 7

Slide 7 text

© ZOZO, Inc. 7 会話から得た 気づき と 課題 AIは 便利な反面 金かかる AIを動かすGPUサーバーを立てるためのコスト : 6万/月 by だーはま

Slide 8

Slide 8 text

© ZOZO, Inc. 8 課題の解決策 オンデバイス でAIを動かす

Slide 9

Slide 9 text

© ZOZO, Inc. 9 課題の解決策 オンデバイス でAIを動かす

Slide 10

Slide 10 text

© ZOZO, Inc. 10 iPhone オンデバイスなら 0円さ GPUサーバー6万/月 → オンデバイス0万/月 by だーはま 結果

Slide 11

Slide 11 text

© ZOZO, Inc. 11 Step1. HuggingFaceを使ったAIモデルの選定 ○ 世界中の研究者や企業がモデルを共有するWEBサービス ○ 数10万のモデル公開 ○ ダウンロード数, パラメータ数, 公開日 を参考に選定 https://huggingface.co/mattmdjaga/segformer_b2_clothes ダウンロード数 パラメータサイズ 公開日

Slide 12

Slide 12 text

© ZOZO, Inc. 12 Step2. Swiftで扱えるファイル形式(.mlpackage)へ変換 ○ pythonのモデル変換ライブラリ Exporters を使い1行で変換可能 ■ HugginFace Hub で公開されているモデル が対象 # 1. exports をインストール $ git clone https://github.com/huggingface/exporters $ cd exporters $ pip install -e . # 2. 変換:タスク=セマンティックセグメンテーション $ python -m exporters.coreml \ --model=mattmdjaga/segformer_b2_clothes \ --feature=semantic-segmentation \ exported/

Slide 13

Slide 13 text

© ZOZO, Inc. 13 Step3. モデルの呼び出し・実行 // モデルの設定 let config = MLModelConfiguration() config.computeUnits = .all // 実行するチップを指定 ○ .mlpackage をXcodeへドラッグ&ドロップ

Slide 14

Slide 14 text

© ZOZO, Inc. 14 Step3. モデルの呼び出し・実行 // モデルの設定 let config = MLModelConfiguration() config.computeUnits = .all // 実行するチップを指定 // AIモデルの呼び出し var model: SegformerB2Clothes? do { model = try SegformerB2Clothes(configuration: config) } catch { print("モデルのロードまたは設定に失敗しました: \(error)") } } ○ .mlpackage をXcodeへドラッグ&ドロップ

Slide 15

Slide 15 text

© ZOZO, Inc. 15 Step3. モデルの呼び出しおよび実行 ○ モデルに CVPixelBuffer (or MLMultiArray) を渡す ■ モデルの入力形式に依存している func segmentation() async { // 1. 入力 guard let pixelBuffer = coordinateImage.toCVPixelBuffer() else { return } let input = SegformerB2ClothesInput(image: pixelBuffer) guard let model else { return }

Slide 16

Slide 16 text

© ZOZO, Inc. 16 Step3. モデルの呼び出しおよび実行 ○ モデルに CVPixelBuffer (or MLMultiArray) を渡す ■ モデルの入力形式に依存している func segmentation() async { // 1. 入力 guard let pixelBuffer = coordinateImage.toCVPixelBuffer() else { return } let input = SegformerB2ClothesInput(image: pixelBuffer) guard let model else { return } do { // 2. 実行 let output = try await model.prediction(input: input) AI

Slide 17

Slide 17 text

© ZOZO, Inc. 17 Step3. モデルの呼び出しおよび実行 ○ モデルに CVPixelBuffer (or MLMultiArray) を渡す ■ モデルの入力形式に依存している func segmentation() async { // 1. 入力 guard let pixelBuffer = coordinateImage.toCVPixelBuffer() else { return } let input = SegformerB2ClothesInput(image: pixelBuffer) guard let model else { return } do { // 2. 実行 let output = try await model.prediction(input: input) // 3. 出力を整形 let fashionItemMap = output.classLabelsShapedArray.scalars .map { SegmentationConverter.fashionItems[Int($0)] } // 省略 AI

Slide 18

Slide 18 text

© ZOZO, Inc. 18 検証 解像度の低い全身画像(190×260) からのアイテム抽出に成功 ○ 処理時間は 0.9〜1.1s → 実用的

Slide 19

Slide 19 text

© ZOZO, Inc. 19 まとめ AIモデルをオンデバイスで動かし、コストを6万→0万へ削減

Slide 20

Slide 20 text

© ZOZO, Inc. 20 まとめ AIモデルをオンデバイスで動かし、コストを6万→0万へ削減 GPUサーバー使わなくても 3万円/月 飛んでます IRODORI って実は...

Slide 21

Slide 21 text

© ZOZO, Inc. 21 まとめ AIモデルをオンデバイスで動かし、コストを6万→0万へ削減 IRODORI と 新卒4人 はこれからどうなるのか to be continued ... IRODORI って実は... IRODORI って実は... GPUサーバー使わなくても 3万円/月 飛んでます

Slide 22

Slide 22 text

No content