1 Facebook摳圖神器
在圖像處理與計(jì)算機(jī)視覺領(lǐng)域,圖像分割(image segmentation)是在像素級(jí)別將一個(gè)完整圖像劃分為若干具有特定語義區(qū)域(region)或對(duì)象(object)的過程。每個(gè)分割區(qū)域是一系列擁有相似特征——例如顏色、強(qiáng)度、紋理等的像素集合,因此圖像分割也可視為以圖像屬性為特征空間,為全體像素賦予標(biāo)簽的分類問題。
圖像分割是高級(jí)圖像處理的基礎(chǔ)技術(shù),它將原始冗余而繁雜的圖像,轉(zhuǎn)化為一種更具意義且簡單緊湊的組織形式。在智能安防、衛(wèi)星遙感、醫(yī)學(xué)影像處理、生物特征識(shí)別等領(lǐng)域,圖像分割通過提供精簡且可靠的圖像特征信息,有效地提高后續(xù)從而利于后續(xù)圖像分析、理解等技術(shù)的計(jì)算效率,具有重要意義。
但是,針對(duì)特定任務(wù)創(chuàng)建準(zhǔn)確的分割模型通常需要技術(shù)專家進(jìn)行高度專業(yè)化的標(biāo)注工作,而近期FaceBook
推出的Segment Anything Model(SAM)項(xiàng)目旨在實(shí)現(xiàn)圖像分割的大眾化。
如果說ChatGPT
是自然語言處理領(lǐng)域的大模型,那SAM
就算是計(jì)算機(jī)視覺領(lǐng)域的大模型。這次,FaceBook
發(fā)布了通用Segment Anything
模型和我們的Segment Anything
10億掩模數(shù)據(jù)集SA-1B
——這是有史以來最大的分割數(shù)據(jù)集,以便實(shí)現(xiàn)廣泛的應(yīng)用和促進(jìn)計(jì)算機(jī)視覺基礎(chǔ)模型的進(jìn)一步研究。
降低圖像分割所需的任務(wù)特定建模專業(yè)知識(shí)、訓(xùn)練計(jì)算和自定義數(shù)據(jù)注釋是Segment Anything項(xiàng)目的核心。SAM
已經(jīng)學(xué)習(xí)到了物體的通用概念,并且可以為任何圖像或任何視頻中的任何物體生成掩模,甚至包括它在訓(xùn)練中沒有遇到過的物體和圖像類型。SAM
足夠通用,可以覆蓋廣泛的用例,并且可以在新的圖像“領(lǐng)域”上直接使用——無論是水下照片還是細(xì)胞顯微鏡——而不需要額外的訓(xùn)練——通常被稱為零樣本遷移能力
將來,SAM可以用于幫助驅(qū)動(dòng)許多領(lǐng)域需要在任何圖像中查找和分割任何物體的應(yīng)用程序
2 本地版SAM配置
本項(xiàng)目的環(huán)境并不復(fù)雜,按以下步驟配置即可
-
克隆庫到本地
git clone git@github.com:facebookresearch/segment-anything.git cd segment-anything; pip install -e .
-
安裝依賴(可選)
這些依賴項(xiàng)用于對(duì)掩模進(jìn)行后處理、將掩模保存為COCO格式以及將模型導(dǎo)出為ONNX格式
pip install opencv-python pycocotools matplotlib onnxruntime onnx
-
下載模型文件ViT-H SAM model.
-
測(cè)試代碼
import torch
import numpy as np
import cv2
import matplotlib.pyplot as plt
from segment_anything import sam_model_registry, SamPredictor
from segment_anything.utils.onnx import SamOnnxModel
import onnxruntime
from onnxruntime.quantization import QuantType
from onnxruntime.quantization.quantize import quantize_dynamic
def show_mask(mask, ax):
color = np.array([30/255, 144/255, 255/255, 0.6])
h, w = mask.shape[-2:]
mask_image = mask.reshape(h, w, 1) * color.reshape(1, 1, -1)
ax.imshow(mask_image)
checkpoint = "D:\AIProject\segment-anything\sam_vit_h_4b8939.pth"
model_type = "vit_h"
sam = sam_model_registry[model_type](checkpoint=checkpoint)
image = cv2.imread('images/truck.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
predictor = SamPredictor(sam)
predictor.set_image(image)
image_embedding = predictor.get_image_embedding().cpu().numpy()
ort_inputs = {
"image_embeddings": image_embedding,
"point_coords": onnx_coord,
"point_labels": onnx_label,
"mask_input": onnx_mask_input,
"has_mask_input": onnx_has_mask_input,
"orig_im_size": np.array(image.shape[:2], dtype=np.float32)
}
masks, _, low_res_logits = ort_session.run(None, ort_inputs)
plt.figure(figsize=(10,10))
plt.imshow(image)
show_mask(masks, plt.gca())
show_points(input_point, input_label, plt.gca())
plt.axis('off')
plt.show()
原圖:
分割圖
3 Web版SAM體驗(yàn)
可以到SAM官網(wǎng)體驗(yàn)分割效果,這里以清明上河圖為例
我們通過Upload
選項(xiàng)上傳清明上河圖原圖
我們先試試自動(dòng)分割Everything
,其實(shí)效果一般,很多精細(xì)的地方?jīng)]分出來
但這不代表不能進(jìn)行精細(xì)的分割,我們可以點(diǎn)擊Hover & Click
選項(xiàng),接著把鼠標(biāo)移到圖中,就能看到分割的效果。
這個(gè)圖中主要有三個(gè)元素:車夫、推車人和車,現(xiàn)在這三個(gè)元素使混合在一起的。可以通過左側(cè)的Remove Area
選項(xiàng)進(jìn)行更細(xì)粒度地分割,比如分割出車夫
4 總結(jié)
SAM的更多應(yīng)用大家可以進(jìn)一步發(fā)掘。展望未來,像素級(jí)別的圖像理解與視覺內(nèi)容的更高級(jí)別的語義理解之間更緊密的耦合,將實(shí)現(xiàn)更強(qiáng)大的人工智能系統(tǒng)。文章來源:http://www.zghlxwxcb.cn/news/detail-419454.html
?? 更多精彩專欄:文章來源地址http://www.zghlxwxcb.cn/news/detail-419454.html
- 《ROS從入門到精通》
- 《Pytorch深度學(xué)習(xí)實(shí)戰(zhàn)》
- 《機(jī)器學(xué)習(xí)強(qiáng)基計(jì)劃》
- 《運(yùn)動(dòng)規(guī)劃實(shí)戰(zhàn)精講》
- …
到了這里,關(guān)于CV不存在了?體驗(yàn)用Segment Anything Meta分割清明上河圖的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!