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