Merge pull request #177 from facebookresearch/minidemo

Update copyright headers
This commit is contained in:
Hanzi Mao 2023-04-12 09:11:15 -07:00 committed by GitHub
commit 40df6e4046
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 88 additions and 14 deletions

View File

@ -33,11 +33,11 @@ cd segment-anything; pip install -e .
``` ```
The following optional dependencies are necessary for mask post-processing, saving masks in COCO format, the example notebooks, and exporting the model in ONNX format. `jupyter` is also required to run the example notebooks. The following optional dependencies are necessary for mask post-processing, saving masks in COCO format, the example notebooks, and exporting the model in ONNX format. `jupyter` is also required to run the example notebooks.
``` ```
pip install opencv-python pycocotools matplotlib onnxruntime onnx pip install opencv-python pycocotools matplotlib onnxruntime onnx
``` ```
## <a name="GettingStarted"></a>Getting Started ## <a name="GettingStarted"></a>Getting Started
First download a [model checkpoint](#model-checkpoints). Then the model can be used in just a few lines to get masks from a given prompt: First download a [model checkpoint](#model-checkpoints). Then the model can be used in just a few lines to get masks from a given prompt:
@ -82,25 +82,31 @@ python scripts/export_onnx_model.py --checkpoint <path/to/checkpoint> --model-ty
See the [example notebook](https://github.com/facebookresearch/segment-anything/blob/main/notebooks/onnx_model_example.ipynb) for details on how to combine image preprocessing via SAM's backbone with mask prediction using the ONNX model. It is recommended to use the latest stable version of PyTorch for ONNX export. See the [example notebook](https://github.com/facebookresearch/segment-anything/blob/main/notebooks/onnx_model_example.ipynb) for details on how to combine image preprocessing via SAM's backbone with mask prediction using the ONNX model. It is recommended to use the latest stable version of PyTorch for ONNX export.
### Web demo
The `demo/` folder has a simple one page React app which shows how to run mask prediction with the exported ONNX model in a web browser with multithreading. Please see [`demo/README.md`](https://github.com/facebookresearch/segment-anything/blob/main/demo/README.md) for more details.
## <a name="Models"></a>Model Checkpoints ## <a name="Models"></a>Model Checkpoints
Three model versions of the model are available with different backbone sizes. These models can be instantiated by running Three model versions of the model are available with different backbone sizes. These models can be instantiated by running
``` ```
from segment_anything import sam_model_registry from segment_anything import sam_model_registry
sam = sam_model_registry["<model_type>"](checkpoint="<path/to/checkpoint>") sam = sam_model_registry["<model_type>"](checkpoint="<path/to/checkpoint>")
``` ```
Click the links below to download the checkpoint for the corresponding model type. Click the links below to download the checkpoint for the corresponding model type.
* **`default` or `vit_h`: [ViT-H SAM model.](https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth)** - **`default` or `vit_h`: [ViT-H SAM model.](https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth)**
* `vit_l`: [ViT-L SAM model.](https://dl.fbaipublicfiles.com/segment_anything/sam_vit_l_0b3195.pth) - `vit_l`: [ViT-L SAM model.](https://dl.fbaipublicfiles.com/segment_anything/sam_vit_l_0b3195.pth)
* `vit_b`: [ViT-B SAM model.](https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth) - `vit_b`: [ViT-B SAM model.](https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth)
## Dataset ## Dataset
See [here](https://ai.facebook.com/datasets/segment-anything/) for an overview of the datastet. The dataset can be downloaded [here](https://ai.facebook.com/datasets/segment-anything-downloads/). By downloading the datasets you agree that you have read and accepted the terms of the SA-1B Dataset Research License. See [here](https://ai.facebook.com/datasets/segment-anything/) for an overview of the datastet. The dataset can be downloaded [here](https://ai.facebook.com/datasets/segment-anything-downloads/). By downloading the datasets you agree that you have read and accepted the terms of the SA-1B Dataset Research License.
We save masks per image as a json file. It can be loaded as a dictionary in python in the below format. We save masks per image as a json file. It can be loaded as a dictionary in python in the below format.
```python ```python
{ {
"image" : image_info, "image" : image_info,
@ -129,14 +135,16 @@ annotation {
Image ids can be found in sa_images_ids.txt which can be downloaded using the above [link](https://ai.facebook.com/datasets/segment-anything-downloads/) as well. Image ids can be found in sa_images_ids.txt which can be downloaded using the above [link](https://ai.facebook.com/datasets/segment-anything-downloads/) as well.
To decode a mask in COCO RLE format into binary: To decode a mask in COCO RLE format into binary:
``` ```
from pycocotools import mask as mask_utils from pycocotools import mask as mask_utils
mask = mask_utils.decode(annotation["segmentation"]) mask = mask_utils.decode(annotation["segmentation"])
``` ```
See [here](https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocotools/mask.py) for more instructions to manipulate masks stored in RLE format. See [here](https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocotools/mask.py) for more instructions to manipulate masks stored in RLE format.
## License ## License
The model is licensed under the [Apache 2.0 license](LICENSE). The model is licensed under the [Apache 2.0 license](LICENSE).
## Contributing ## Contributing

View File

@ -1,11 +1,19 @@
## Segment Anything Simple Web demo ## Segment Anything Simple Web demo
This **front-end only** demo shows how to load a fixed image and `.npy` file of the SAM image embedding, and run the SAM ONNX model in the browser using Web Assembly with mulithreading enabled by `SharedArrayBuffer`, Web Worker, and SIMD128. This **front-end only** React based web demo shows how to load a fixed image and corresponding `.npy` file of the SAM image embedding, and run the SAM ONNX model in the browser using Web Assembly with mulithreading enabled by `SharedArrayBuffer`, Web Worker, and SIMD128.
<img src="https://github.com/facebookresearch/segment-anything/raw/main/assets/minidemo.gif" width="500"/> <img src="https://github.com/facebookresearch/segment-anything/raw/main/assets/minidemo.gif" width="500"/>
## Run the app ## Run the app
Install Yarn
```
npm install --g yarn
```
Build and run:
``` ```
yarn && yarn start yarn && yarn start
``` ```
@ -18,7 +26,7 @@ Move your cursor around to see the mask prediction update in real time.
In the [ONNX Model Example notebook](https://github.com/facebookresearch/segment-anything/blob/main/notebooks/onnx_model_example.ipynb) upload the image of your choice and generate and save corresponding embedding. In the [ONNX Model Example notebook](https://github.com/facebookresearch/segment-anything/blob/main/notebooks/onnx_model_example.ipynb) upload the image of your choice and generate and save corresponding embedding.
Initialize the predictor Initialize the predictor:
```python ```python
checkpoint = "sam_vit_h_4b8939.pth" checkpoint = "sam_vit_h_4b8939.pth"
@ -28,7 +36,7 @@ sam.to(device='cuda')
predictor = SamPredictor(sam) predictor = SamPredictor(sam)
``` ```
Set the new image and export the embedding Set the new image and export the embedding:
``` ```
image = cv2.imread('src/assets/dogs.jpg') image = cv2.imread('src/assets/dogs.jpg')
@ -37,7 +45,7 @@ image_embedding = predictor.get_image_embedding().cpu().numpy()
np.save("dogs_embedding.npy", image_embedding) np.save("dogs_embedding.npy", image_embedding)
``` ```
Save the new image and embedding in `/assets/data`. Save the new image and embedding in `src/assets/data`.
## Export the ONNX model ## Export the ONNX model

View File

@ -1,3 +1,9 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
// All rights reserved.
// This source code is licensed under the license found in the
// LICENSE file in the root directory of this source tree.
import { InferenceSession, Tensor } from "onnxruntime-web"; import { InferenceSession, Tensor } from "onnxruntime-web";
import React, { useContext, useEffect, useState } from "react"; import React, { useContext, useEffect, useState } from "react";
import "./assets/scss/App.scss"; import "./assets/scss/App.scss";

View File

@ -1,3 +1,9 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
// All rights reserved.
// This source code is licensed under the license found in the
// LICENSE file in the root directory of this source tree.
import React, { useContext } from "react"; import React, { useContext } from "react";
import * as _ from "underscore"; import * as _ from "underscore";
import Tool from "./Tool"; import Tool from "./Tool";

View File

@ -1,3 +1,9 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
// All rights reserved.
// This source code is licensed under the license found in the
// LICENSE file in the root directory of this source tree.
import React, { useContext, useEffect, useState } from "react"; import React, { useContext, useEffect, useState } from "react";
import AppContext from "./hooks/createContext"; import AppContext from "./hooks/createContext";
import { ToolProps } from "./helpers/Interfaces"; import { ToolProps } from "./helpers/Interfaces";

View File

@ -1,3 +1,9 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
// All rights reserved.
// This source code is licensed under the license found in the
// LICENSE file in the root directory of this source tree.
import { Tensor } from "onnxruntime-web"; import { Tensor } from "onnxruntime-web";
export interface modelScaleProps { export interface modelScaleProps {

View File

@ -1,4 +1,8 @@
// Functions for handling mask output from the ONNX model // Copyright (c) Meta Platforms, Inc. and affiliates.
// All rights reserved.
// This source code is licensed under the license found in the
// LICENSE file in the root directory of this source tree.
// Convert the onnx model mask prediction to ImageData // Convert the onnx model mask prediction to ImageData
function arrayToImageData(input: any, width: number, height: number) { function arrayToImageData(input: any, width: number, height: number) {

View File

@ -1,3 +1,9 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
// All rights reserved.
// This source code is licensed under the license found in the
// LICENSE file in the root directory of this source tree.
import { Tensor } from "onnxruntime-web"; import { Tensor } from "onnxruntime-web";
import { modeDataProps } from "./Interfaces"; import { modeDataProps } from "./Interfaces";

View File

@ -1,3 +1,9 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
// All rights reserved.
// This source code is licensed under the license found in the
// LICENSE file in the root directory of this source tree.
// Helper function for handling image scaling needed for SAM // Helper function for handling image scaling needed for SAM
const handleImageScale = (image: HTMLImageElement) => { const handleImageScale = (image: HTMLImageElement) => {

View File

@ -1,3 +1,9 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
// All rights reserved.
// This source code is licensed under the license found in the
// LICENSE file in the root directory of this source tree.
import React, { useState } from "react"; import React, { useState } from "react";
import { modelInputProps } from "../helpers/Interfaces"; import { modelInputProps } from "../helpers/Interfaces";
import AppContext from "./createContext"; import AppContext from "./createContext";

View File

@ -1,3 +1,9 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
// All rights reserved.
// This source code is licensed under the license found in the
// LICENSE file in the root directory of this source tree.
import { createContext } from "react"; import { createContext } from "react";
import { modelInputProps } from "../helpers/Interfaces"; import { modelInputProps } from "../helpers/Interfaces";

View File

@ -1,3 +1,9 @@
// Copyright (c) Meta Platforms, Inc. and affiliates.
// All rights reserved.
// This source code is licensed under the license found in the
// LICENSE file in the root directory of this source tree.
import * as React from "react"; import * as React from "react";
import { createRoot } from "react-dom/client"; import { createRoot } from "react-dom/client";
import AppContextProvider from "./components/hooks/context"; import AppContextProvider from "./components/hooks/context";