精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Windows10下使用SAM(Segment Anything Model)大模型實現萬物皆可分割!

人工智能
在前文中從實現原理到源碼解析對SAM大模型進行了詳細解讀,本文將演示Windows10下SAM大模型的實際使用過程!

SAM(Segment Anything Model),顧名思義,即為分割一切!該模型由Facebook的Meta AI實驗室,能夠根據文本指令或圖像識別,實現對任意物體的識別與分割。它的誕生,無疑是CV領域的一次重要里程碑。

論文地址:https://arxiv.org/abs/2304.02643

在前文《從零解讀SAM(Segment Anything Model)大模型!萬物皆可分割!(含源碼解析)》中從實現原理到源碼解析對SAM大模型進行了詳細解讀,本文將演示Windows10下SAM大模型的實際使用過程!

SAM模型運行環境安裝

1.環境要求

  • Python 3.8+
  • Pytorch 1.7+
  • Torchvision>=0.8

2.查看CUDA版本號

nvidia-smi

3.安裝GPU版本的Pytorch

根據自己的cuda版本選擇對應的版本,生成安裝命令。

SAM模型代碼使用

首先下載Github源碼以及所提供的權重文件。

1.predictor_example

predictor_example.ipynb源碼在notebooks文件目錄下,可以本地運行測試。

步驟一:查看測試圖片

import cv2
import matplotlib.pyplot as plt
image = cv2.imread('img.png')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.figure(figsize=(10, 10))
plt.imshow(image)
plt.axis('on')
plt.show()

步驟二:顯示前景和背景的標記點

import numpy as np
import matplotlib.pyplot as plt
import cv2

def show_points(coords, labels, ax, marker_size=375):
    # 從coords中篩選出前景點(pos_points)和背景點(neg_points)
    # 如果labels中的元素為1,則對應的坐標點被視為前景;如果為0,則視為背景
    pos_points = coords[labels == 1]
    neg_points = coords[labels == 0]
    # 繪制前景點和背景點
    ax.scatter(pos_points[:, 0], pos_points[:, 1], color='green', marker='*', s=marker_size, edgecolor='white',
               linewidth=1.25)  # 前景的標記點顯示
    ax.scatter(neg_points[:, 0], neg_points[:, 1], color='red', marker='*', s=marker_size, edgecolor='white',
               linewidth=1.25)  # 背景的標記點顯示

# 讀取圖像文件
image = cv2.imread('img.png')
# 將圖像從BGR色彩空間轉換為RGB色彩空間
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 二維數組,存儲了三個預設的坐標點
input_point = np.array([[230, 194], [182, 63], [339, 279]])
# 一維數組,與坐標點一一對應,指定了每個點是前景(1)還是背景(0)
input_label = np.array([1, 1, 0])

plt.figure(figsize=(10, 10))
plt.imshow(image)
show_points(input_point, input_label, plt.gca())
plt.axis('on')
plt.show()

這里圖片可以用畫圖軟件打開查看像素坐標輔助標定。

步驟三:標記點完成前景目標的分割

簡單的調用源碼模型,就能完成前景目標的分割,源碼提供了三種不同大小的模型,我們也可以自己去嘗試不同的模型效果。

import numpy as np
import matplotlib.pyplot as plt
import cv2

# 在matplotlib的坐標軸ax上展示一個掩膜圖像mask
def show_mask(mask, ax, random_color=False):
    # 如果random_color為真,則通過np.random.random(3)生成一個隨機的RGB顏色向量,
    # 并與透明度值(0.6)拼接,形成一個RGBA顏色數組
    # 否則,使用預設的藍色透明色值
    if random_color:    # 掩膜顏色是否隨機決定
        color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)
    else:
        color = np.array([30 / 255, 144 / 255, 255 / 255, 0.6])
    # 獲取掩膜的高h和寬w
    h, w = mask.shape[-2:]
    # 將掩膜重塑為(h, w, 1)形狀,以便于與顏色數組相乘,準備作為圖像顯示
    mask_image = mask.reshape(h, w, 1) * color.reshape(1, 1, -1)
    ax.imshow(mask_image)

def show_points(coords, labels, ax, marker_size=375):
    # 從coords中篩選出前景點(pos_points)和背景點(neg_points)
    # 如果labels中的元素為1,則對應的坐標點被視為前景;如果為0,則視為背景
    pos_points = coords[labels == 1]
    neg_points = coords[labels == 0]
    # 繪制前景點和背景點
    ax.scatter(pos_points[:, 0], pos_points[:, 1], color='green', marker='*', s=marker_size, edgecolor='white',
               linewidth=1.25)  # 前景的標記點顯示
    ax.scatter(neg_points[:, 0], neg_points[:, 1], color='red', marker='*', s=marker_size, edgecolor='white',
               linewidth=1.25)  # 背景的標記點顯示
import sys
sys.path.append("..")
from segment_anything import sam_model_registry, SamPredictor

image = cv2.imread('img.png')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

#------加載模型
# 權重文件保存地址
sam_checkpoint = "model_save/sam_vit_b_01ec64.pth"
# sam_checkpoint = "model_save/sam_vit_h_4b8939.pth"
# sam_checkpoint = "model_save/sam_vit_l_0b3195.pth"
# 模型類型
model_type = "vit_b"
# model_type = "vit_h"
# model_type = "vit_l"
device = "cuda"
sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
sam.to(device=device)
predictor = SamPredictor(sam)
predictor.set_image(image)

#------加載模型---------------------

# 鼠標標定(x,y)位置
# 因為可以有多個標定,所以有多個坐標點
input_point = np.array([[230, 194], [182, 63], [339, 279]])
# 1表示前景目標,0表示背景
# input_point和input_label一一對應
input_label = np.array([1, 1, 0])


masks, scores, logits = predictor.predict(
    point_coords=input_point,
    point_labels=input_label,
    multimask_output=True,
)
for i, (mask, score) in enumerate(zip(masks, scores)):
    plt.figure(figsize=(10, 10))
    plt.imshow(image)
    show_mask(mask, plt.gca())
    show_points(input_point, input_label, plt.gca())
    plt.title(f"Mask {i + 1}, Score: {score:.3f}", fontsize=18)
    plt.axis('off')
    plt.show()

這里會輸出三個結果。

步驟四:標定框完成前景目標的分割

綠色的框是用戶自己標定的,根據框選的區域完成前景目標的分割。

import numpy as np
import matplotlib.pyplot as plt
import cv2

def show_mask(mask, ax, random_color=False):
    if random_color:    # 掩膜顏色是否隨機決定
        color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)
    else:
        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)

def show_points(coords, labels, ax, marker_size=375):
    # 篩選出前景目標標記點
    pos_points = coords[labels == 1]
    # 篩選出背景目標標記點
    neg_points = coords[labels == 0]
    # x-->pos_points[:, 0] y-->pos_points[:, 1]
    ax.scatter(pos_points[:, 0], pos_points[:, 1], color='green', marker='*', s=marker_size, edgecolor='white',
               linewidth=1.25)  # 前景的標記點顯示
    ax.scatter(neg_points[:, 0], neg_points[:, 1], color='red', marker='*', s=marker_size, edgecolor='white',
               linewidth=1.25)  # 背景的標記點顯示
def show_box(box, ax):
    # 畫出標定框 x0 y0是起始坐標
    x0, y0 = box[0], box[1]
    # w h 是框的尺寸
    w, h = box[2] - box[0], box[3] - box[1]
    ax.add_patch(plt.Rectangle((x0, y0), w, h, edgecolor='green', facecolor=(0, 0, 0, 0), lw=2))

import sys
sys.path.append("..")
from segment_anything import sam_model_registry, SamPredictor
image = cv2.imread('img.png')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

#------加載模型
# 權重文件保存地址
sam_checkpoint = "model_save/sam_vit_b_01ec64.pth"
# sam_checkpoint = "model_save/sam_vit_h_4b8939.pth"
# sam_checkpoint = "model_save/sam_vit_l_0b3195.pth"
# 模型類型
model_type = "vit_b"
# model_type = "vit_h"
# model_type = "vit_l"
device = "cuda"
sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
sam.to(device=device)
predictor = SamPredictor(sam)
predictor.set_image(image)

#------加載模型----------------

# 標定框的起始坐標和終點坐標
input_box = np.array([112, 41, 373, 320])

masks, _, _ = predictor.predict(
    point_coords=None,
    point_labels=None,
    box=input_box[None, :],
    multimask_output=False,
)

plt.figure(figsize=(10, 10))
plt.imshow(image)
show_mask(masks[0], plt.gca())
show_box(input_box, plt.gca())
plt.axis('off')
plt.show()

步驟五:標定框和標記點聯合完成前景目標的分割

對于一些復雜的目標,可能需要聯合使用提高前景目標的分割精度。box和points可以聯合標定完成圖像分割的,但是此時的box只能有一個,不能有多個。

import numpy as np
import matplotlib.pyplot as plt
import cv2

def show_mask(mask, ax, random_color=False):
    if random_color:    # 掩膜顏色是否隨機決定
        color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)
    else:
        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)

def show_points(coords, labels, ax, marker_size=375):
    # 篩選出前景目標標記點
    pos_points = coords[labels == 1]
    # 篩選出背景目標標記點
    neg_points = coords[labels == 0]
    # x-->pos_points[:, 0] y-->pos_points[:, 1]
    ax.scatter(pos_points[:, 0], pos_points[:, 1], color='green', marker='*', s=marker_size, edgecolor='white',
               linewidth=1.25)  # 前景的標記點顯示
    ax.scatter(neg_points[:, 0], neg_points[:, 1], color='red', marker='*', s=marker_size, edgecolor='white',
               linewidth=1.25)  # 背景的標記點顯示

def show_box(box, ax):
    # 畫出標定框 x0 y0是起始坐標
    x0, y0 = box[0], box[1]
    # w h 是框的尺寸
    w, h = box[2] - box[0], box[3] - box[1]
    ax.add_patch(plt.Rectangle((x0, y0), w, h, edgecolor='green', facecolor=(0, 0, 0, 0), lw=2))

import sys
sys.path.append("..")
from segment_anything import sam_model_registry, SamPredictor

image = cv2.imread('img.png')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

#------加載模型
# 權重文件保存地址
sam_checkpoint = "model_save/sam_vit_b_01ec64.pth"
# sam_checkpoint = "model_save/sam_vit_h_4b8939.pth"
# sam_checkpoint = "model_save/sam_vit_l_0b3195.pth"
# 模型類型
model_type = "vit_b"
# model_type = "vit_h"
# model_type = "vit_l"
device = "cuda"
sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
sam.to(device=device)
predictor = SamPredictor(sam)
predictor.set_image(image)
#------加載模型


# 標定框的起始坐標和終點坐標
input_box = np.array([112, 41, 373, 320])
# 鼠標標定(x,y)位置
# 因為可以有多個標定,所以有多個坐標點
input_point = np.array([[230, 194], [182, 63], [339, 279]])
# 1表示前景目標,0表示背景
# input_point和input_label一一對應
input_label = np.array([1, 1, 0])

# 標定框和標記點聯合使用
masks, _, _ = predictor.predict(
    point_coords=input_point,
    point_labels=input_label,
    box=input_box,
    multimask_output=False,
)

plt.figure(figsize=(10, 10))
plt.imshow(image)
show_mask(masks[0], plt.gca())
show_box(input_box, plt.gca())
show_points(input_point, input_label, plt.gca())
plt.axis('off')
plt.show()

步驟六:多標定框完成前景目標的分割

可以是多標定框對應多個目標,也可以是多標定框對應同一目標的不同部位。

import numpy as np
import matplotlib.pyplot as plt
import torch
import cv2

def show_mask(mask, ax, random_color=False):
    if random_color:    # 掩膜顏色是否隨機決定
        color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)
    else:
        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)

def show_points(coords, labels, ax, marker_size=375):
    # 篩選出前景目標標記點
    pos_points = coords[labels == 1]
    # 篩選出背景目標標記點
    neg_points = coords[labels == 0]
    # x-->pos_points[:, 0] y-->pos_points[:, 1]
    ax.scatter(pos_points[:, 0], pos_points[:, 1], color='green', marker='*', s=marker_size, edgecolor='white',
               linewidth=1.25)  # 前景的標記點顯示
    ax.scatter(neg_points[:, 0], neg_points[:, 1], color='red', marker='*', s=marker_size, edgecolor='white',
               linewidth=1.25)  # 背景的標記點顯示

def show_box(box, ax):
    # 畫出標定框 x0 y0是起始坐標
    x0, y0 = box[0], box[1]
    # w h 是框的尺寸
    w, h = box[2] - box[0], box[3] - box[1]
    ax.add_patch(plt.Rectangle((x0, y0), w, h, edgecolor='green', facecolor=(0, 0, 0, 0), lw=2))

import sys
sys.path.append("..")
from segment_anything import sam_model_registry, SamPredictor

image = cv2.imread('img.png')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

#------加載模型
# 權重文件保存地址
sam_checkpoint = "model_save/sam_vit_b_01ec64.pth"
# sam_checkpoint = "model_save/sam_vit_h_4b8939.pth"
# sam_checkpoint = "model_save/sam_vit_l_0b3195.pth"
# 模型類型
model_type = "vit_b"
# model_type = "vit_h"
# model_type = "vit_l"
device = "cuda"
sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
sam.to(device=device)
predictor = SamPredictor(sam)
predictor.set_image(image)
#------加載模型


# 存在多個目標標定框
input_boxes = torch.tensor([
    [121, 49, 361, 190],
    [143, 101, 308, 312],
    [366, 116, 451, 233],
], device=predictor.device)

transformed_boxes = predictor.transform.apply_boxes_torch(input_boxes, image.shape[:2])
masks, _, _ = predictor.predict_torch(
    point_coords=None,
    point_labels=None,
    boxes=transformed_boxes,
    multimask_output=False,
)
plt.figure(figsize=(10, 10))
plt.imshow(image)
for mask in masks:
    show_mask(mask.cpu().numpy(), plt.gca(), random_color=True)
for box in input_boxes:
    show_box(box.cpu().numpy(), plt.gca())
plt.axis('off')
plt.show()

步驟七:圖片批量完成前景目標的分割

源碼支持圖片的批量輸入,大大提升了分割效率。

import numpy as np
import matplotlib.pyplot as plt
import torch
import cv2

def show_mask(mask, ax, random_color=False):
    if random_color:    # 掩膜顏色是否隨機決定
        color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)
    else:
        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)

def show_points(coords, labels, ax, marker_size=375):
    # 篩選出前景目標標記點
    pos_points = coords[labels == 1]
    # 篩選出背景目標標記點
    neg_points = coords[labels == 0]
    # x-->pos_points[:, 0] y-->pos_points[:, 1]
    ax.scatter(pos_points[:, 0], pos_points[:, 1], color='green', marker='*', s=marker_size, edgecolor='white',
               linewidth=1.25)  # 前景的標記點顯示
    ax.scatter(neg_points[:, 0], neg_points[:, 1], color='red', marker='*', s=marker_size, edgecolor='white',
               linewidth=1.25)  # 背景的標記點顯示

def show_box(box, ax):
    # 畫出標定框 x0 y0是起始坐標
    x0, y0 = box[0], box[1]
    # w h 是框的尺寸
    w, h = box[2] - box[0], box[3] - box[1]
    ax.add_patch(plt.Rectangle((x0, y0), w, h, edgecolor='green', facecolor=(0, 0, 0, 0), lw=2))

def prepare_image(image, transform, device):
    image = transform.apply_image(image)
    image = torch.as_tensor(image, device=device.device)
    return image.permute(2, 0, 1).contiguous()


import sys
sys.path.append("..")
from segment_anything import sam_model_registry, SamPredictor

image1 = cv2.imread('img.png')
image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2RGB)
image2 = cv2.imread('img_1.png')
image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2RGB)

#------加載模型
# 權重文件保存地址
sam_checkpoint = "model_save/sam_vit_b_01ec64.pth"
# sam_checkpoint = "model_save/sam_vit_h_4b8939.pth"
# sam_checkpoint = "model_save/sam_vit_l_0b3195.pth"
# 模型類型
model_type = "vit_b"
# model_type = "vit_h"
# model_type = "vit_l"
device = "cuda"
sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
sam.to(device=device)
from segment_anything.utils.transforms import ResizeLongestSide
resize_transform = ResizeLongestSide(sam.image_encoder.img_size)
#------加載模型

# 存在多個目標標定框
image1_boxes = torch.tensor([
    [121, 49, 361, 190],
    [143, 101, 308, 312],
    [366, 116, 451, 233],
], device=sam.device)

image2_boxes = torch.tensor([
    [24, 4, 333, 265],
], device=sam.device)

# 批量輸入
batched_input = [
     {
         'image': prepare_image(image1, resize_transform, sam),
         'boxes': resize_transform.apply_boxes_torch(image1_boxes, image1.shape[:2]),
         'original_size': image1.shape[:2]
     },
     {
         'image': prepare_image(image2, resize_transform, sam),
         'boxes': resize_transform.apply_boxes_torch(image2_boxes, image2.shape[:2]),
         'original_size': image2.shape[:2]
     }
]
batched_output = sam(batched_input, multimask_output=False)

fig, ax = plt.subplots(1, 2, figsize=(20, 20))

# 批量輸出
ax[0].imshow(image1)
for mask in batched_output[0]['masks']:
    show_mask(mask.cpu().numpy(), ax[0], random_color=True)
for box in image1_boxes:
    show_box(box.cpu().numpy(), ax[0])
ax[0].axis('off')

ax[1].imshow(image2)
for mask in batched_output[1]['masks']:
    show_mask(mask.cpu().numpy(), ax[1], random_color=True)
for box in image2_boxes:
    show_box(box.cpu().numpy(), ax[1])
ax[1].axis('off')
plt.tight_layout()
plt.show()

2.automatic_mask_generator_example

源碼在notebooks文件內提供了一個Jupyter Notebook的自動分割教程,無需標定點和標定框。

步驟一:自動掩碼生成

import numpy as np
import torch
import matplotlib.pyplot as plt
import cv2

image = cv2.imread('img.png')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 權重文件保存地址
sam_checkpoint = "model_save/sam_vit_b_01ec64.pth"
# sam_checkpoint = "model_save/sam_vit_h_4b8939.pth"
# sam_checkpoint = "model_save/sam_vit_l_0b3195.pth"
# 模型類型
model_type = "vit_b"
# model_type = "vit_h"
# model_type = "vit_l"
device = "cuda"

def show_anns(anns):
    if len(anns) == 0:
        return
    sorted_anns = sorted(anns, key=(lambda x: x['area']), reverse=True)
    ax = plt.gca()
    ax.set_autoscale_on(False)
    polygons = []
    color = []
    for ann in sorted_anns:
        m = ann['segmentation']
        img = np.ones((m.shape[0], m.shape[1], 3))
        color_mask = np.random.random((1, 3)).tolist()[0]   # 產生隨機顏色的mask
        for i in range(3):
            img[:, :, i] = color_mask[i]
        ax.imshow(np.dstack((img, m*0.35)))

from segment_anything import sam_model_registry, SamAutomaticMaskGenerator, SamPredictor
sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
sam.to(device=device)

mask_generator = SamAutomaticMaskGenerator(sam)
masks = mask_generator.generate(image)

plt.figure(figsize=(20, 20))
plt.imshow(image)
show_anns(masks)
plt.axis('off')
plt.show()

在自動掩模生成中有幾個可調參數,用于控制采樣點的密度以及去除低質量或重復掩模的閾值。此外,生成可以在圖像的裁剪上自動運行,以提高較小對象的性能,后處理可以去除雜散像素和孔洞。

import numpy as np
import torch
import matplotlib.pyplot as plt
import cv2

# 讀取圖片文件
image = cv2.imread('img.png')
# 將圖像從OpenCV默認的BGR格式轉換為RGB格式
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 權重文件保存地址
sam_checkpoint = "model_save/sam_vit_b_01ec64.pth"
# sam_checkpoint = "model_save/sam_vit_h_4b8939.pth"
# sam_checkpoint = "model_save/sam_vit_l_0b3195.pth"

# 模型類型
model_type = "vit_b"
# model_type = "vit_h"
# model_type = "vit_l"

device = "cuda"

# 掩膜顯示函數
def show_anns(anns):
    # 檢查傳入的注釋列表anns的長度
    # 如果列表為空(即沒有注釋),函數直接返回,不執行后續操作
    if len(anns) == 0:
        return
    # 使用sorted()函數按照每個注釋的面積(x['area'])對anns進行降序排序
    # 這樣可以確保繪制時較大的對象先被繪制,較小的對象后繪制,避免被遮擋
    sorted_anns = sorted(anns, key=(lambda x: x['area']), reverse=True)
    # 獲取當前的matplotlib坐標軸對象ax
    ax = plt.gca()
    # 關閉坐標軸的自動縮放功能
    ax.set_autoscale_on(False)
    polygons = []
    color = []
    # 循環處理每個注釋
    for ann in sorted_anns:
        # 獲取注釋的掩模信息
        m = ann['segmentation']
        # 創建一個與掩模形狀相同的全白色圖像img,尺寸為(m的高度, m的寬度, 3通道),用于混合顏色
        img = np.ones((m.shape[0], m.shape[1], 3))
        # 生成一個隨機顏色color_mask,并將其應用于img的每個通道,使得每個掩模都擁有獨一無二的顏色
        color_mask = np.random.random((1, 3)).tolist()[0]   # 產生隨機顏色的mask
        # 將隨機顏色圖像img與透明度調整過的掩模m*0.35垂直堆疊,實現顏色遮罩效果
        for i in range(3):
            img[:, :, i] = color_mask[i]
        # 將堆疊后的圖像通過ax.imshow()方法顯示在當前坐標軸上,逐步疊加各個掩模
        ax.imshow(np.dstack((img, m*0.35)))

from segment_anything import sam_model_registry, SamAutomaticMaskGenerator, SamPredictor
# 根據選定的model_type實例化SAM模型,并從指定的檢查點加載
sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
sam.to(device=device)

# 默認版本
# mask_generator = SamAutomaticMaskGenerator(sam)
# 自定義參數版本

# 掩模生成
mask_generator_2 = SamAutomaticMaskGenerator(
    model=sam,
    points_per_side=32,
    pred_iou_thresh=0.86,
    stability_score_thresh=0.92,
    crop_n_layers=1,
    crop_n_points_downscale_factor=2,
    min_mask_region_area=100,  # Requires open-cv to run post-processing
)

masks = mask_generator_2.generate(image)
# 掩模可視化
plt.figure(figsize=(20, 20))
plt.imshow(image)
show_anns(masks)
plt.axis('off')
plt.show()


責任編輯:趙寧寧 來源: 小喵學AI
相關推薦

2024-06-18 11:20:59

2025-02-28 09:25:03

2016-05-27 08:23:33

數據分析數據科學數據思維

2019-01-18 12:59:46

智能養老IOT智能

2024-01-16 10:54:14

2022-04-20 10:33:59

人工智能數字經濟互聯網 文章鏈接:智

2023-02-11 12:47:07

2014-08-11 14:36:42

2021-12-27 10:16:06

AI 數據人工智能

2020-05-09 13:00:08

AI 工具自動化

2025-05-27 15:59:03

AI生成模型

2020-12-18 09:32:03

Wi-Fi計算機隱私

2023-06-08 10:28:13

2021-03-22 14:01:30

物聯網上海站

2018-04-27 23:06:59

物聯網萬物互聯技術

2020-10-12 17:21:21

IPv6互聯網技術

2013-07-13 07:57:31

思科萬物互聯潛在價值

2012-12-12 16:18:32

互聯網思科IPv6

2018-08-20 11:49:46

華為
點贊
收藏

51CTO技術棧公眾號

caopon在线免费视频| 九九精品免费视频| 日本一区二区三区电影免费观看| 一区二区三区日韩欧美精品| 国产欧美一区二区三区另类精品| 在线精品免费视| 国产精品国产三级国产在线观看 | 日本一道本久久| 精品亚洲综合| 粉嫩aⅴ一区二区三区四区五区 | 欧美h在线观看| 欧美成人直播| 亚洲开心激情网| 国产探花在线观看视频| 中文在线资源| 亚洲一区在线视频| 亚洲国产欧洲综合997久久 | 亚洲视频免费一区| 91视频福利网| 日韩欧美一区二区三区免费观看| 亚洲午夜一区二区| 一级日韩一区在线观看| 日本福利片高清在线观看| 国产一二精品视频| 国产精品福利片| 日本一区二区不卡在线| 天天综合久久| 亚洲一区二区精品| 中文成人无字幕乱码精品区| 国产日韩欧美中文在线| 欧美三级一区二区| 日日摸日日碰夜夜爽av | 欧美自拍视频在线| 黄色一级视频免费| 无码一区二区三区视频| 亚洲天堂免费观看| 中国黄色a级片| 4438全国亚洲精品观看视频| 538prom精品视频线放| 九一精品在线观看| 亚洲精品永久免费视频| 亚洲电影中文字幕在线观看| 国产免费xxx| 男人天堂久久久| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 四虎国产精品永远| 成人午夜视频在线| 成人黄动漫网站免费| 国产男女猛烈无遮挡| 美腿丝袜亚洲三区| 91精品国产综合久久香蕉922| 亚洲精品久久久久久久蜜桃| 久久精品人人| 国产91久久婷婷一区二区| 欧美一级片免费在线观看| 伊人久久亚洲热| 久久男人av资源网站| 久久久久久久久久久97| 激情久久久久| 97精品一区二区视频在线观看| 精品一区二区三区四| 欧美精品一卡| 午夜精品一区二区三区在线| 国产精品黄色网| 中文高清一区| 欧美一级淫片丝袜脚交| 欧美精品一二三四区| 日韩不卡一二三区| 国产精品亚发布| 97人妻人人澡人人爽人人精品| 国内久久精品视频| 97人人干人人| 午夜国产在线观看| 久久久久成人黄色影片| 亚洲成人自拍视频| 哥也色在线视频| 亚洲主播在线观看| 欧美日韩亚洲一| 亚洲综合av一区二区三区| 欧美日韩免费观看一区三区| 成人三级做爰av| 青青草久久爱| 在线播放国产一区中文字幕剧情欧美 | 免费毛片网站在线观看| 欧美电影免费观看网站| 欧美老女人在线| 色哟哟视频在线| 国产一区网站| 色综合久久精品亚洲国产| 免费在线观看黄网站| 三级成人在线视频| 97人人香蕉| 国产高清一级毛片在线不卡| 自拍偷拍国产精品| 午夜肉伦伦影院| 99精品美女视频在线观看热舞| 亚洲国产精品久久久久| 精品熟妇无码av免费久久| 欧美伊人影院| 国产精品1234| 午夜精品久久久久久久99老熟妇 | 97超碰在线免费| 在线观看精品一区| 美女扒开腿免费视频| 日韩av密桃| 97在线观看视频| 国产精品人人妻人人爽| 久久众筹精品私拍模特| 日本丰满大乳奶| 欧美日韩在线精品一区二区三区激情综合 | 男人操女人逼免费视频| 亚洲人成777| 亚洲精品自拍偷拍| 青青草国产在线观看| 日韩国产精品大片| 国产一区二区三区奇米久涩 | 中文字幕的久久| 99久久国产综合精品五月天喷水| 欧美综合影院| 亚洲三级免费看| www.99re7.com| 国产一区二区不卡| 一级特黄录像免费播放全99| 欧美日韩123区| 日韩成人性视频| 久久国产精品二区| 国产精品一区免费在线观看| 先锋影音一区二区三区| 中文字幕21页在线看| 精品国产乱码久久久久久夜甘婷婷 | 不卡影院一区二区| 大型av综合网站| 欧美精品制服第一页| 在线观看国产黄| 国产清纯白嫩初高生在线观看91 | 亚洲免费高清视频| 九九热国产视频| 成人综合在线视频| 女同性恋一区二区| 精品国产一区二区三区2021| 日韩午夜在线视频| 一级α片免费看刺激高潮视频| 久久久不卡网国产精品一区| 国内外成人激情视频| 精品中国亚洲| 51精品在线观看| 天堂资源中文在线| 欧美午夜片在线免费观看| 波多野结衣影院| 一区二区三区成人精品| 九色91视频| 亚洲黄色免费av| 亚洲色无码播放| 天天干天天插天天射| 国产精品婷婷午夜在线观看| 色综合天天色综合| 日韩精品欧美| 91九色国产视频| 少女频道在线观看免费播放电视剧| 欧美一区二区大片| 久久久久黄色片| 不卡视频一二三四| 欧美变态另类刺激| 精品国精品国产自在久国产应用 | 欧美成人午夜免费视在线看片| 国产露脸91国语对白| 亚洲欧美另类小说视频| 天天爽夜夜爽视频| 韩日视频一区| 精品一区二区三区免费毛片| 亚洲一二三四| 色婷婷av一区二区三区久久| 99久久免费国产精精品| 午夜av电影一区| 一级片手机在线观看| 美女在线视频一区| 日韩久久久久久久久久久久| 欧美男男freegayvideosroom| 欧美壮男野外gaytube| 尤物网址在线观看| 日韩欧美一级特黄在线播放| 日韩特黄一级片| 欧美激情资源网| 4438x全国最大成人| 国产一区二区三区的电影| 日韩偷拍一区二区| 精品国产不卡一区二区| 69视频在线播放| 老司机在线永久免费观看| 欧美本精品男人aⅴ天堂| 9i看片成人免费看片| 17c精品麻豆一区二区免费| 黄色国产在线视频| 久久精品免费看| 日韩伦理在线免费观看| 欧美色图国产精品| 国产精品久久久久久久久久久久午夜片| 成人性生交大片免费网站| 久久天天躁狠狠躁夜夜躁| 婷婷丁香花五月天| 欧美精品v国产精品v日韩精品| 国产精品xxxx喷水欧美| 亚洲免费观看高清完整版在线观看 | 天天干天天插天天射| 亚洲一级片在线观看| 微拍福利一区二区| 成人免费毛片app| 欧美成人福利在线观看| 一本色道久久综合亚洲精品高清 | 国产不卡在线| 亚洲视频在线免费观看| 免费观看国产视频| 欧美高清hd18日本| 一二三区免费视频| 亚洲国产日韩综合久久精品| 国产激情无码一区二区三区| 久久久不卡网国产精品二区| 高清中文字幕mv的电影| 激情成人午夜视频| 97公开免费视频| 国产精品毛片在线| 国产情侣第一页| 亚洲mv大片欧洲mv大片| 婷婷四月色综合| 国产免费播放一区二区| 国产一区二区免费电影| eeuss国产一区二区三区四区| 国产日韩欧美中文| 91大神在线观看线路一区| 日本久久久久久久| 日韩av影片| 国产91精品久久久| av剧情在线观看| 欧美精品videos| 午夜成年人在线免费视频| 久久深夜福利免费观看| 婷婷五月在线视频| 中文字幕一区二区三区电影| av中文字幕一区二区三区| 亚洲新声在线观看| 激情福利在线| 国产小视频国产精品| 国产人成在线观看| 一区二区三区动漫| 国产毛片av在线| 在线播放日韩欧美| 一区二区三区视频在线观看视频| 深夜福利国产精品| 欧美三级电影一区二区三区| 日韩视频在线一区| 黄色免费网站在线| 欧美剧在线观看| 污污的网站在线看| 欧美精品xxx| 9999精品成人免费毛片在线看| 97精品国产91久久久久久| 美女av在线免费看| 国产91在线播放精品91| 电影天堂国产精品| 国产乱肥老妇国产一区二| 色综合久久久| 999国内精品视频在线| 成人18夜夜网深夜福利网| 久久99国产精品99久久| 免费视频一区三区| 亚洲综合欧美日韩| 欧美在线影院| 精品久久一二三| 日本欧美韩国一区三区| 91性高潮久久久久久久| 成人av高清在线| 三上悠亚ssⅰn939无码播放| 国产欧美精品一区二区三区四区| 麻豆精品国产免费| 五月婷婷另类国产| 九九热最新视频| 欧美一区二区福利在线| 天堂在线资源库| 中文字幕亚洲欧美日韩高清| av中文字幕在线观看| 26uuu日韩精品一区二区| 成人性片免费| 大波视频国产精品久久| 自拍亚洲一区| 91视频成人免费| 国产亚洲在线观看| 日韩一区二区三区久久| 国产成人精品aa毛片| 女~淫辱の触手3d动漫| 亚洲视频在线一区观看| 中文字幕超碰在线| 在线播放中文一区| 污污网站在线免费观看| 日日骚久久av| 黄视频免费在线看| 国产日韩中文在线| 久久人人爽人人爽人人片av不| 色综合电影网| 亚洲国产高清一区| 日韩欧美国产片| 99精品偷自拍| 九九热这里有精品视频| 91高清视频免费看| 懂色av成人一区二区三区| 自拍偷拍亚洲在线| 英国三级经典在线观看| 亚洲精品日产aⅴ| 欧美少妇xxxx| 凹凸国产熟女精品视频| 国产精品资源在线看| 日韩一级av毛片| 欧美色道久久88综合亚洲精品| www.天堂av.com| 日韩在线观看免费av| 性欧美videohd高精| 国产伦精品一区二区三区视频孕妇 | 国产成人综合网站| www久久久久久久| 欧美日韩免费看| 亚洲AV无码一区二区三区性| 日韩在线小视频| 综合在线影院| 韩国一区二区三区美女美女秀| 亚洲九九视频| 国产成人黄色网址| 久久久无码精品亚洲日韩按摩| 欧美成人aaaaⅴ片在线看| 日韩欧美资源站| h片在线免费| 国产综合久久久久| 色乱码一区二区三区网站| 久久久久国产精品熟女影院| 99久久777色| 欧美一级视频免费观看| 亚洲国产97在线精品一区| 欧美另类tv| 国产精品免费一区二区三区| 欧美精品啪啪| 波多野结衣办公室双飞| 亚洲最快最全在线视频| 国产黄色大片网站| 久久国产精品久久久久| 成人久久精品| 四虎4hu永久免费入口| 国产中文一区二区三区| 神马久久精品综合| 欧美美女一区二区在线观看| 日韩精品黄色| 成人免费视频在线观看超级碰| 999国产精品视频| 91欧美视频在线| 18成人在线观看| www.污视频| 亚州欧美日韩中文视频| 六月丁香久久丫| 国产精品97在线| 久久久久久99久久久精品网站| 一级片在线观看免费| 亚洲天堂av在线免费观看| 成人国产网站| 中文字幕一区二区三区四区五区人| 韩国毛片一区二区三区| 青青草精品在线视频| 欧美精品一区二区高清在线观看| ****av在线网毛片| 欧美高清性xxxxhd| 欧美a级一区二区| 国产激情无码一区二区三区| 欧美成人激情免费网| 自拍偷拍亚洲视频| 日韩在线国产| 国产黄色精品网站| 国产精品99精品| 亚洲无限av看| 国产精品一区二区三区av| 亚洲熟妇无码av在线播放| 91在线视频观看| 中文字幕在线观看第二页| 精品中文字幕乱| 亚州av一区| 日韩视频在线观看一区二区三区| 午夜欧美一区二区三区在线播放| 免费一级毛片在线观看| 91精品视频在线| 99国内精品| 久久久久久久麻豆| 日韩电视剧免费观看网站| 国产激情久久| 亚洲国产精品无码观看久久| 欧美激情一区二区在线| 亚洲av无码一区二区乱子伦| 日韩av电影国产| 欧美88av| 青青草自拍偷拍| 日韩av一区二区在线观看| 亚洲精品无播放器在线播放| 69堂免费视频| 亚洲最快最全在线视频| 97电影在线观看| 精品国产乱码久久久久久蜜柚|