Upgrade to Pro — share decks privately, control downloads, hide ads and more …

全身画像からコーデアイテムを抽出し毎日にIRODORIを!デバイス完結型アプリを作る

 全身画像からコーデアイテムを抽出し毎日にIRODORIを!デバイス完結型アプリを作る

2025/09/20 17:40 ~ 17:45にiOSDC Japan 2025の公募セッションで発表した登壇資料です。
https://fortee.jp/iosdc-japan-2025/proposal/7146de1b-8656-4167-ae80-64bce8cb773e

株式会社ZOZO
ZOZOTOWN開発本部
ZOZOTOWN開発1部 iOSブロック
だーはま / 濵田 悠樹 (@ios_hamada)

#iosdc

Avatar for ZOZO Developers

ZOZO Developers PRO

September 20, 2025
Tweet

More Decks by ZOZO Developers

Other Decks in Technology

Transcript

  1. © ZOZO, Inc. 株式会社ZOZO ZOZOTOWN開発本部 ZOZOTOWN開発1部 iOSブロック 濵田 悠樹 @ios_hamada

    2 • 25年新卒でZOZOに入社 • 学生時代はAIの研究, iOSやPdMの長期インターン • 服でユーザーの人生を変えるためZOZOへ入社 • 新卒4人で IRODORI を開発中(業務外)
  2. © ZOZO, Inc. 7 会話から得た 気づき と 課題 AIは 便利な反面

    金かかる AIを動かすGPUサーバーを立てるためのコスト : 6万/月 by だーはま
  3. © ZOZO, Inc. 11 Step1. HuggingFaceを使ったAIモデルの選定 ◦ 世界中の研究者や企業がモデルを共有するWEBサービス ◦ 数10万のモデル公開

    ◦ ダウンロード数, パラメータ数, 公開日 を参考に選定 https://huggingface.co/mattmdjaga/segformer_b2_clothes ダウンロード数 パラメータサイズ 公開日
  4. © 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/
  5. © ZOZO, Inc. 13 Step3. モデルの呼び出し・実行 // モデルの設定 let config

    = MLModelConfiguration() config.computeUnits = .all // 実行するチップを指定 ◦ .mlpackage をXcodeへドラッグ&ドロップ
  6. © 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へドラッグ&ドロップ
  7. © 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 }
  8. © 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
  9. © 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
  10. © ZOZO, Inc. 21 まとめ AIモデルをオンデバイスで動かし、コストを6万→0万へ削減 IRODORI と 新卒4人 はこれからどうなるのか

    to be continued ... IRODORI って実は... IRODORI って実は... GPUサーバー使わなくても 3万円/月 飛んでます