【セグメンテーション】Segment Anything をおさらいした【AI】

# Segment Anythingとは

Meta社が提供するセグメンテーションに特化したAIモデルで、クリックだけであらゆる画像内のあらゆるオブジェクトを「切り取る」ことができます。

今年の7月には「Segment Anything 2」が発表され、画像だけでなく動画データにも対応するようになりました。

![スクリーンショット 2024-12-19 8.40.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944203/5d7b8f28-ea85-46b1-ccf2-72168fb2658a.png)
> https://segment-anything.com/demo

# Segment Anythingに出会ったきっかけ
過去にセグメンテーション機能をアプリに埋め込む機会がありました。最初はOpenCVでセグメンテーションを試みましたが、精度の面で懸念がありました。

そのような中、AIに頼りたところだがAIの学習モデルから作るとコストが...と思っていた矢先にSegment Anythingを発見ました。
実際に試したところ、1度のクリックで非常に高精度な結果が得られ、とても良い体験を得られました。

「Segment Anything 2」が発表されたことは知っていましたが、触る機会が無かったため、アドベントカレンダーの記事を書くきっかけで調べてみたので記事にしました。

# Segment Anything の特徴
1. 画像と動画の両方でセグメンテーション
    Segment Anythingは、静止画だけでなく、**動画データにも対応**しており、複雑なシーンでも高精度なセグメンテーションを実現します

2. リアルタイム性
    プロンプトベースでセグメンテーションをリアルタイムで実行でき、**迅速にオブジェクトを抽出**することが可能です

3. ゼロショット汎化
    従来の機械学習モデルは特定の対象を対象に学習を行うため、十分なデータが必要でしたが、Segment Anythingは事前に学習した知識をもとに、未学習のカテゴリーにも対応できる能力を持っています
    >[ゼロショット学習についてもう少し詳しく]
ゼロショット学習とは、AIモデルが事前に学習していない対象にも適応できる技術です。これにより、モデルは新しい環境やオブジェクトにも素早く適応でき、データセットの準備にかかる手間を大幅に削減できます。

4. 高精度なマスク生成
    Segment Anythingは、単にオブジェクトを選択するだけでなく、**高精度なマスク**を生成し、その後の画像処理や編集がスムーズに行えます
5. 簡単なプロンプト
クリック一つで必要なオブジェクトを選択でき、非常に**簡単な操作**で複雑なセグメンテーションが可能です
6. オープンソースとして利用可能
Segment Anythingはオープンソースとして公開されており、誰でも自由に利用することができます

### 仕組み
![model_diagram (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944203/a9bc0184-c1f5-aa8b-6f04-0d9e45afb7bf.png)
> 引用：https://github.com/facebookresearch/segment-anything

Segment Anythingは、対象の画像と選択するポイントや範囲などのプロンプトからセグメンテーションを実現します。

これは1,100万枚の画像と 11 億個のマスクのデータセットのトレーニングにより、ゼロショット学習を実現しています。

### 動画対応
![model_diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944203/8ec43285-fa3a-1952-8d90-78d7bb1db87f.png)
> 引用：https://github.com/facebookresearch/sam2

Segment Anythingは、画像を単一フレームの動画として扱い、動画におけるオブジェクトのセグメンテーションも可能にしました。

これにより、動画内の動いているオブジェクトに対しても高精度なセグメンテーションを実現しています。

# Segment AnythingのDemo
Segment Anythingのデモを実際に体験することができます。以下のリンクからアクセスできます。


画像版
https://segment-anything.com/demo

動画版

https://sam2.metademolab.com/demo

### デモ例

- シャツ部分を「＋」で選択し、ボールやパンツなど他のオブジェクトを「-」で除外します
![スクリーンショット 2024-12-15 17.31.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944203/4ec63f2f-ae90-4e5a-c42a-626a78be6c75.png)

- 動画内でシャツの色を変更することができ、動きながらも正確に色が反映されます
![スクリーンショット 2024-12-15 17.31.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944203/e736a008-9180-6cd2-f936-6af6527889aa.png)

- シャツにボールが重なっていても、シャツだけを正確に抽出することができます
![スクリーンショット 2024-12-15 17.32.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944203/2a3653c4-0661-3fd5-d552-a9106e65e902.png)

# Segment Anything × 〇〇

### Segment Anything × OpenCV

Segment Anythingを使って対象オブジェクトを分離し、その後[OpenCV](https://opencv.org/)でエッジ検出、輪郭解析、形状認識。
- 使用例
    - 人物を切り出して背景をぼかす
    - セグメントした車両からナンバープレートを検出
    - 動画内の特定の車両や人物をトラッキング
    - 対象のセグメントの加工

### Segment Anything × Stable Diffusion
SAMでオブジェクトをセグメント化し、[Stable Diffusion](https://ja.stability.ai/stable-diffusion)を使って背景などを修正・置換。
- 使用例
    - プロダクトデザインの試作案を生成
    - 家具の形状をセグメント化 → 新しいデザインに変更

### Segment Anything × 3D
Segment Anythingでオブジェクトをセグメント化した画像を基に、Blenderや3Dモデリングツールで点群やメッシュデータを生成。
- 使用例
    - 写真の人物や物体を分離して3D化
    - ドローン映像から建物や地形の3Dモデルを生成


### Segment Anything × Annotation
SAMで生成されたマスクをベースにアノテーションデータ (画像に写る物体の検出とタグ付け) を半自動的に作成。
- 使用例
    - 画像内の物体（人、車、動物など）を自動検出 → タグ付けして保存
    - セグメントごとにラベル（例: "cat", "dog"）を簡単に付与

# 終わりに
Segment Anythingは、簡単な操作で高精度な画像と動画のセグメンテーションを実現する魅力的なツールです。

ゼロショット学習やリアルタイム性が高いことなど、気軽に精度の高いセグメンテーション機能が利用できるため、様々な分野で活用できる可能性を秘めていると思います。