標注神器 | Label-Studio X SAM 半自動化標注
共 7091字,需瀏覽 15分鐘
·
2024-07-12 09:30
點擊上方“小白學視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
本文將介紹結合 Label-Studio 和 SAM (Segment Anything) 半自動化標注方案,Point2Lablel:用戶只需要在物體的區(qū)域內(nèi)點一個點就能得到物體的掩碼和邊界框標注,Bbox2Label:用戶只需要標注物體的邊界框就能生成物體的掩碼,社區(qū)的用戶可以借鑒此方法,提高數(shù)據(jù)標注的效率。
-
SAM (Segment Anything) 是 Meta AI 推出的分割一切的模型。 -
Label Studio 是一款優(yōu)秀的標注軟件,覆蓋圖像分類、目標檢測、分割等領域數(shù)據(jù)集標注的功能。
本文將使用喵喵數(shù)據(jù)集的圖片,進行半自動化標注。
環(huán)境配置
首先需要創(chuàng)建一個虛擬環(huán)境,然后安裝 PyTorch 和 SAM。創(chuàng)建虛擬環(huán)境:
conda create -n rtmdet-sam python=3.9 -y
conda activate rtmdet-sam
克隆 OpenMMLab PlayGround
git clone https://github.com/open-mmlab/playground
安裝 PyTorch
# Linux and Windows CUDA 11.3
pip install torch==1.10.1+cu113 torchvision==0.11.2+cu113 torchaudio==0.10.1 -f https://download.pytorch.org/whl/cu113/torch_stable.html
# Linux and Windows CPU only
pip install torch==1.10.1+cpu torchvision==0.11.2+cpu torchaudio==0.10.1 -f https://download.pytorch.org/whl/cpu/torch_stable.html
# OSX
pip install torch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1
安裝 SAM 并下載預訓練模型
cd path/to/playground/label_anything
pip install opencv-python pycocotools matplotlib onnxruntime onnx
pip install git+https://github.com/facebookresearch/segment-anything.git
wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth
# 如果想要分割的效果好請使用 sam_vit_h_4b8939.pth 權重
# wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_l_0b3195.pth
# wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth
安裝 Label-Studio 和 label-studio-ml-backend
# sudo apt install libpq-dev python3-dev # Note:如果使用 Label Studio 1.7.2 版本需要安裝 `libpq-dev` 和 `python3-dev` 依賴。
# 安裝 label-studio 需要一段時間,如果找不到版本請使用官方源
pip install label-studio==1.7.3
pip install label-studio-ml==1.0.9
啟動服務
?label_anything 需要啟用SAM后端推理后再啟動網(wǎng)頁服務才可配置模型(一共需要兩步啟動)
1.啟動 SAM 后端推理服務:
cd path/to/playground/label_anything
label-studio-ml start sam --port 8003 --with \
sam_config=vit_b \
sam_checkpoint_file=./sam_vit_b_01ec64.pth \
out_mask=True \
out_bbox=True \
device=cuda:0 \
# device=cuda:0 為使用 GPU 推理,如果使用 cpu 推理,將 cuda:0 替換為 cpu
# out_poly=True 返回外接多邊形的標注
此時,SAM 后端推理服務已經(jīng)啟動,后續(xù)在 Label-Studio Web 系統(tǒng)中配置 http://localhost:8003 后端推理服務即可。以上的終端窗口需要保持打開狀態(tài)。
2.現(xiàn)在啟動 Label-Studio 網(wǎng)頁服務:
?(如不使用vit-h的SAM后端請?zhí)^此步)使用的推理后端是SAM的 vit-h, 由于模型加載時間長,導致連接后端超時,需要設置以下環(huán)境變量。
具體可根據(jù)下載的SAM的權值名稱判斷,比如sam_vit_h_4b8939.pth 為 vit-h,sam_vit_b_01ec64.pth為 vit-b。
# Linux需要使用以下指令
export ML_TIMEOUT_SETUP=40
# Windows要使用以下指令
set ML_TIMEOUT_SETUP=40
啟動 Label-Studio 網(wǎng)頁服務:
label-studio start
打開瀏覽器訪問 http://localhost:8080/ 即可看到 Label-Studio 的界面。
我們注冊一個用戶,然后創(chuàng)建一個 OpenMMLabPlayGround 項目。
我們通過下面的方式下載好示例的喵喵圖片,點擊 Data Import 導入需要標注的貓圖片,點擊 Save 創(chuàng)建 Project。
cd path/to/playground/label_anything
mkdir data && cd data
wget https://download.openmmlab.com/mmyolo/data/cat_dataset.zip && unzip cat_dataset.zip
在 Settings/Labeling Interface 中配置 Label-Studio 關鍵點和 Mask 標注。
<View>
<Image name="image" value="$image" zoom="true"/>
<KeyPointLabels name="KeyPointLabels" toName="image">
<Label value="cat" smart="true" background="#e51515" showInline="true"/>
<Label value="person" smart="true" background="#412cdd" showInline="true"/>
</KeyPointLabels>
<RectangleLabels name="RectangleLabels" toName="image">
<Label value="cat" background="#FF0000"/>
<Label value="person" background="#0d14d3"/>
</RectangleLabels>
<PolygonLabels name="PolygonLabels" toName="image">
<Label value="cat" background="#FF0000"/>
<Label value="person" background="#0d14d3"/>
</PolygonLabels>
<BrushLabels name="BrushLabels" toName="image">
<Label value="cat" background="#FF0000"/>
<Label value="person" background="#0d14d3"/>
</BrushLabels>
</View>
在上述 XML 中我們對標注進行了配置,其中 KeyPointLabels 為關鍵點標注,BrushLabels 為 Mask 標注,PolygonLabels 為外接多邊形標注,RectangleLabels 為矩形標注。
本實例使用 cat 和 person 兩個類別,如果社區(qū)用戶想增加更多的類別需要分別在 KeyPointLabels、BrushLabels、PolygonLabels、RectangleLabels 中添加對應的類別。
然后將上述 XML 復制添加到 Label-Studio,然后點擊 Save。
然后在設置中點擊 Add Model 添加 OpenMMLabPlayGround 后端推理服務,設置好 SAM 后端推理服務的 URL,并打開 Use for interactive preannotations 并點擊 Validate and Save。
?如果你在這一步無法順利執(zhí)行,可能由于模型加載時間長,導致連接后端超時,請重新執(zhí)行第二步中已經(jīng)跳過的部分,重啟SAM后端推理服務。
看到如下 Connected 就說明后端推理服務添加成功。
開始半自動化標注
點擊 Label 開始標注
需要打開 Auto-Annotation 的開關,并建議勾選 Auto accept annotation suggestions,并點擊右側 Smart 工具,切換到 Point 后,選擇下方需要標注的物體標簽,這里選擇 cat。如果是 BBox 作為提示詞請將 Smart 工具切換到 Rectangle。
Point2Label:由下面的 gif 的動圖可以看出,只需要在物體上點一個點,SAM 算法就能將整個物體分割和檢測出來。
Bbox2Label: 由下面的 gif 的動圖可以看出,只需要標注一個邊界框,SAM 算法就能將整個物體分割和檢測出來。
我們 submit 完畢所有圖片后,點擊 exprot 導出 COCO 格式的數(shù)據(jù)集,就能把標注好的數(shù)據(jù)集的壓縮包導出來了。注意:此處導出的只有邊界框的標注,如果想要導出實例分割的標注,需要在啟動 SAM 后端服務時設置 out_poly=True。
用 vscode 打開解壓后的文件夾,可以看到標注好的數(shù)據(jù)集,包含了圖片和 json 格式的標注文件。
到此半自動化標注就完成了, 通過 Label-Studio 的半自動化標注功能,可以讓用戶在標注過程中,通過點擊一下鼠標,就可以完成目標的分割和檢測,大大提高了標注效率。
來源:
[1] https://github.com/open-mmlab/playground/blob/main/label_anything/readme_zh.md
[2] 部分代碼借鑒自 label-studio-ml-backend ID 為 253 的 Pull Request,感謝作者的貢獻。
本文僅做學術分享,如有侵權,請聯(lián)系刪文。
下載1:OpenCV-Contrib擴展模塊中文版教程
在「小白學視覺」公眾號后臺回復:擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。
下載2:Python視覺實戰(zhàn)項目52講 在「小白學視覺」公眾號后臺回復:Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學校計算機視覺。
下載3:OpenCV實戰(zhàn)項目20講 在「小白學視覺」公眾號后臺回復:OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學習進階。
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~
