やばすぎる、何でもセグメント高速化バージョン

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/d6e2fe9e-5a77-ed50-ef1b-cf9ca40ea047.jpeg width=400> <img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/260af777-edb0-33b0-f420-18d888360a6b.jpeg width=400>


# 従来のSAMはすごいが少し遅い
SAM（Segment Anything）は**どんな画像のどんなオブジェクトもインスタンスにセグメントできる**モデルです。
ポイントを指定することによりあらゆるものをセグメントできます。

https://qiita.com/john-rocky/items/5fc05d96c4c9f70f6e1b

しかし従来のモデルは画像一枚に1秒ほどかかりました。

# やばい速いモデルきた

FastSAMは、その**約１０倍高速**なバージョンです。
これにより、リアルタイムセグメントなど様々なタスクに使える可能性が広がりました。

https://github.com/CASIA-IVA-Lab/FastSAM#model-checkpoints

しかも、テキストやボックスやポイントで指定したオブジェクトを自在に切り抜けます。

# 使い方かんたん
しかも使い方かんたんです。以下手順。


##### インストール

```shell
git clone https://github.com/CASIA-IVA-Lab/FastSAM.git # clone Fast-SAM
cd FastSAM
pip install -r requirements.txt
pip install git+https://github.com/openai/CLIP.git # install CLIP
```

##### 全部のインスタンスをセグメント

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/d6e2fe9e-5a77-ed50-ef1b-cf9ca40ea047.jpeg width=400> <img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/260af777-edb0-33b0-f420-18d888360a6b.jpeg width=400>

```shell
python Inference.py --model_path FastSAM-x.pt --img_path ./images/students.jpg
```

##### テキストで指定したオブジェクトをセグメント

>指定テキスト：黒い髪の女の子

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/d6e2fe9e-5a77-ed50-ef1b-cf9ca40ea047.jpeg width=400><img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/e3f95df9-3210-67b9-71f5-47e75ccae789.jpeg width=400>

```shell
python Inference.py --model_path FastSAM-x.pt --img_path ./images/students.jpg  --text_prompt "the black hair girl"
```

##### ボックス座標で指定したオブジェクトをセグメント

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/d6e2fe9e-5a77-ed50-ef1b-cf9ca40ea047.jpeg width=400>![da163fda-c769-4ad2-af48-101ae4a5f387.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/bdaee2f0-ef83-7c98-6581-060180fb2167.jpeg)

```shell
python Inference.py --model_path FastSAM-x.pt --img_path ./images/students.jpg --box_prompt "[[290,200,300,500]]"
```

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/d6e2fe9e-5a77-ed50-ef1b-cf9ca40ea047.jpeg width=400>![a261ea3f-cf94-43b6-8842-2f56f5558ef3.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/4ae345ab-ff25-b97a-701f-efed90f84baa.jpeg)

```shell
python Inference.py --model_path FastSAM-x.pt --img_path ./images/students.jpg --point_prompt "[[600,360],[900,360]]" --point_label "[1,1]"
```

##### Pythonコードから使う

```python
from fastsam import FastSAM, FastSAMPrompt

model = FastSAM('FastSAM-x.pt')
IMAGE_PATH = './images/girls.jpg'
DEVICE = "cuda:0"

everything_results = model(IMAGE_PATH, device=DEVICE, retina_masks=True, imgsz=1024, conf=0.4, iou=0.9,)
prompt_process = FastSAMPrompt(IMAGE_PATH, everything_results, device=DEVICE)

# everything prompt
# ann = prompt_process.everything_prompt()

# bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
# ann = prompt_process.box_prompt(bbox=[100, 200, 300, 700])

# text prompt
ann = prompt_process.text_prompt(text='skirt')

# point prompt
# points default [[0,0]] [[x1,y1],[x2,y2]]
# point_label default [0] [1,0] 0:background, 1:foreground
# ann = prompt_process.point_prompt(points=[[200, 360]], pointlabel=[1])

prompt_process.plot(annotations=ann,output_path='./output/students.jpg',)
```

![05712565-6858-4b90-a0e2-7ad0b9665890.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/ff56cda3-3a07-82f7-5d8e-790b40cc943a.jpeg)

すごいよね。

🐣
****
フリーランスエンジニアです。
AIについて色々記事を書いていますのでよかったらプロフィールを見てみてください。

もし以下のようなご要望をお持ちでしたらお気軽にご相談ください。
AIサービスを開発したい、ビジネスにAIを組み込んで効率化したい、AIを使ったスマホアプリを開発したい、
ARを使ったアプリケーションを作りたい、スマホアプリを作りたいけどどこに相談したらいいかわからない…

いずれも中間コストを省いたリーズナブルな価格でお請けできます。

お仕事のご相談はこちらまで
rockyshikoku@gmail.com

機械学習やAR技術を使ったアプリケーションを作っています。
機械学習／AR関連の情報を発信しています。

[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@rockyshikoku)
[GitHub](https://github.com/john-rocky)