Using SAM2 with Label Studio for Image Annotation
Segment Anything 2, or SAM 2, is a model released by Meta in July 2024. An update to the original Segment Anything Model, SAM 2 provides even better object segmentation for both images and video. In this guide, we’ll show you how to use SAM 2 for better image labeling with label studio.
Click on the image below to watch our ML Evangelist Micaela Kaplan explain how to link SAM 2 to your Label Studio Project. You’ll need to follow the instructions below to stand up an instance of SAM2 before you can link your model!
Before you begin
Before you begin, you must install the Label Studio ML backend.
This tutorial uses the segment_anything_2_image example.
Note that as of 8/1/2024, SAM2 only runs on GPU.
Labeling configuration
The current implementation of the Label Studio SAM2 ML backend works using Interactive mode. The user-guided inputs are:
KeypointLabelsRectangleLabels
And then SAM2 outputs BrushLabels as a result.
This means all three control tags should be represented in your labeling configuration:
<View>
<Style>
.main {
font-family: Arial, sans-serif;
background-color: #f5f5f5;
margin: 0;
padding: 20px;
}
.container {
display: flex;
justify-content: space-between;
margin-bottom: 20px;
}
.column {
flex: 1;
padding: 10px;
background-color: #fff;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
text-align: center;
}
.column .title {
margin: 0;
color: #333;
}
.column .label {
margin-top: 10px;
padding: 10px;
background-color: #f9f9f9;
border-radius: 3px;
}
.image-container {
width: 100%;
height: 300px;
background-color: #ddd;
border-radius: 5px;
}
</Style>
<View className="main">
<View className="container">
<View className="column">
<View className="title">Choose Label</View>
<View className="label">
<BrushLabels name="tag" toName="image">
<Label value="defect" background="#FFA39E"/></BrushLabels>
</View>
</View>
<View className="column">
<View className="title">Use Keypoint</View>
<View className="label">
<KeyPointLabels name="tag2" toName="image" smart="true">
<Label value="defect" background="#250dd3"/></KeyPointLabels>
</View>
</View>
<View className="column">
<View className="title">Use Rectangle</View>
<View className="label">
<RectangleLabels name="tag3" toName="image" smart="true">
<Label value="defect" background="#FFC069"/></RectangleLabels>
</View>
</View>
</View>
<View className="image-container">
<Image name="image" value="$image" zoom="true" zoomControl="true"/>
</View>
</View>
</View>
Running from source
- To run the ML backend without Docker, you have to clone the repository and install all dependencies using pip:
git clone https://github.com/HumanSignal/label-studio-ml-backend.git
cd label-studio-ml-backend
pip install -e .
cd label_studio_ml/examples/segment_anything_2_image
pip install -r requirements.txt
Download
segment-anything-2repo into the root directory. Install SegmentAnything model and download checkpoints using the official Meta documentationThen you can start the ML backend on the default port
9090:
cd ../
label-studio-ml start ./segment_anything_2_image
- Connect running ML backend server to Label Studio: go to your project
Settings -> Machine Learning -> Add Modeland specifyhttp://localhost:9090as a URL. Read more in the official Label Studio documentation.
Running with Docker (coming soon)
- Start Machine Learning backend on
http://localhost:9090with prebuilt image:
docker-compose up
- Validate that backend is running
$ curl http://localhost:9090/
{"status":"UP"}
- Connect to the backend from Label Studio running on the same host: go to your project
Settings -> Machine Learning -> Add Modeland specifyhttp://localhost:9090as a URL.
Configuration
Parameters can be set in docker-compose.yml before running the container.
The following common parameters are available:
DEVICE- specify the device for the model server (currently onlycudais supported,cpuis coming soon)MODEL_CONFIG- SAM2 model configuration file (sam2_hiera_l.yamlby default)MODEL_CHECKPOINT- SAM2 model checkpoint file (sam2_hiera_large.ptby default)BASIC_AUTH_USER- specify the basic auth user for the model serverBASIC_AUTH_PASS- specify the basic auth password for the model serverLOG_LEVEL- set the log level for the model serverWORKERS- specify the number of workers for the model serverTHREADS- specify the number of threads for the model server
Customization
The ML backend can be customized by adding your own models and logic inside the ./segment_anything_2 directory.
