Zenn
📹

MacBookAir(M2)とDockerでLanguage Segment-Anythingを動かす

2025/04/13に公開

課題

CPUベースのMacBookAirでセグメンテーションをしないといけなくなった。

スペック

system_profiler SPHardwareDataType
      Model Name: MacBook Air
      Chip: Apple M2
      Total Number of Cores: 8 (4 performance and 4 efficiency)
      Memory: 8 GB

概要

  • Language Segment-Anythingを導入
  • Docker上で立ち上げる
  • ブラウザで動かす

Language Segment-Anything

META社が開発したセグメンテーション「Segment-Anything」と、物体検出の「GroundingDINO」を融合したツールです。

テスト①

元画像

セグメンテーション

検出したいものを「perfume. lipstick(香水, 口紅)」にしました。コスメがそれぞれ似ている画像のため、かなりいじわるかもしれません。

モデルサイズはsmallで弱くして、テキストスレッショルド(自信度・テキスト一致度)を0.15にして、プロンプトに対して広く一致しているかもと思われるものがレイヤーになるようにしました。じぶんのMBAのスペックだと3〜5分程度かかります。

ボックススレッショルドというのは、境界線の信頼度です。

サーバーは「Gradio」という、AUTOMATIC1111(Stable Diffusion web UI)とおなじものが使われているので見慣れているかと思います。

テスト②

元画像

セグメンテーション

モデルサイズはさらにちいさいtinyにして、スレッショルドは0.25で広範囲。「notebook」を指示し、靴とのエッジが検出できました。うれしくなります。

テスト③

元画像

「clothes」を頼みましたが、失敗しました。むずかしそうですね。

テスト④

セグメンテーション

テスト⑤

元画像

# Stable Diffusionで適当なプロンプトで生成しました
a cozy cluttered indoor scene filled with many small items, books, plants, food, electronics, a girl sitting on a sofa, retro appliances, colorful decorations, a balcony full of potted plants, cute cats, warm lighting, anime style, highly detailed, isometric perspective, Studio Ghibli style

セグメンテーション

「person. photo frame」で確度ひくめでいれています。ごちゃごちゃしていてもとれるものはとれるようです。

Language Segment-Anythingを導入

リポジトリを持ってきます。

git pull git@github.com:luca-medeiros/lang-segment-anything.git

Docker上で立ち上げる

Docker Desktopでラクします。

いちおう公式リポジトリにDockerによるインストールの案内があったのですが、今回はdocker-compose.yamlで設定します。

クローンしたリポジトリのルートディレクトリにdocker-compose.yamlをつくってください。

docker-compose.yaml
services:
  lang-sam:
    build: .
    ports:
      - "8000:8000"
    platform: linux/amd64 
    volumes:
      - ./assets:/app/assets

リポジトリ内にDockerfileがすでにあるため、ビルドについて書く必要はありません。

動かします。ここからかなり長いです。

docker-compose build --progress plain
docker-compose up

ビルドが長すぎて不安だったのでプログレスを表示させています。ビルドは初回のみ、あるいはDockerfileを変更したときのみで大丈夫です。放置していたので覚えていないですが、アニメ2-3話分ぐらいかかりました。ちょっとでもメモリあけるためにスマートフォンでアニメみればよかったです。

ブラウザで動かす

http://localhost:8000/gradio/をブラウザのロケーションバーに入力してもいいですが、コマンドでやっていたので以下で開きました。どっちでも大丈夫です。

open http://localhost:8000/gradio/

あとは好きな画像で試してみてください。おおきすぎる画像は処理しきれないことがあるっぽいです。Webカメラから直接画像をとると、BytesIOの都合なのか私はエラーになりました。

まとめ

M2チップのMBAでも動きますが、できればGPUのある環境やGoogle ColabでGPUを拝借してやるのがよいかと思います。

Discussion

ログインするとコメントできます