Segment Anything使用手册(交互式数据标柱|自动数据标柱)

news2025/3/10 2:54:09

主要内容包含segment-anything项目的安装、基于SamPredictor对单点输入生成mask、基于SamPredictor对多点输入生成mask、基于SamAutomaticMaskGenerator自动生成mask。

Segment Anything项目是一个可以对任何图像进行分割的项目,其论文介绍可以查看https://blog.csdn.net/a486259/article/details/131137939,其测试网站为 https://segment-anything.com

这里对Segment Anything项目的使用进行初步总结,绝大部分内容源自https://github.com/facebookresearch/segment-anything 。

注:segment-anything训练VIT模型时的输入size为1024x1024,其输出的feature size为256x64x64,进行了16倍的下采样

1、安装segment-anything

下载segment-anything项目,进入目录后执行pip install -e .安装项目。

git clone git@github.com:facebookresearch/segment-anything.git
cd segment-anything
pip install -e .

该项目依赖opencv-python pycocotools matplotlib onnxruntime onnx torch等包,安装命令如下

pip install opencv-python pycocotools matplotlib onnxruntime onnx torch

segment-anything模型是基于torch框架实现的

2. 根据提示输入生成mask

Segment Anything Model (SAM) 预测对象mask,给出所需识别出对象的提示输入(对象的粗略位置信息)。该模型首先将图像转换为图像嵌入,然后解码器根据用户输入的提示(粗略位置信息)可以生成高质量的掩模。
SamPredictor类为模型调用提供了一个简单的接口,用于提示模型的输入。它先让用户使用“set_image”方法设置图像,该方法会将图像输入转换到特征空间嵌入。然后,可以通过“predict”方法输入提示信息,以根据这些提示有效地预测掩码。predict函数支持将点和框提示以及上一次预测迭代中的mask作为输入。

2.1 前置函数库

前置库导入和函数实现

import numpy as np
import torch
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]
    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 = box[0], box[1]
    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))    

2.2 显示样图

读取图片并展示

image = cv2.imread('images/truck.jpg')
image = cv2.resize(image,None,fx=0.5,fy=0.5)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

plt.figure(figsize=(10,10))
plt.imshow(image)
plt.axis('on')
plt.show()

2.3 加载SAM模型

sam_vit_b_01ec64模型的下载地址为: https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth
这里需要注意要使用cuda

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

sam_checkpoint = "sam_vit_b_01ec64.pth"
model_type = "vit_b"

device = "cuda"

sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
sam.to(device=device)

predictor = SamPredictor(sam)
#predictor.set_image(image)

其它版本的模型下载地址为

  • default or vit_h: ViT-H SAM model.
  • vit_l: ViT-L SAM model.
  • vit_b: ViT-B SAM model.

通过调用“SamPredictor.set_image”处理图像以生成图像嵌入(特征向量)。“SamPrejector”会记住此特征向量,并将其用于后续掩码预测。

predictor.set_image(image)

2.4 单点输入生成mask

要选择卡车,可以卡车上选择一个点。点以(x,y)格式输入到模型中,并带有标签1(前景点)或0(背景点)。可以输入多个点;这里我们只使用一个。所选的点将在图像上显示为星形。
此时代码及执行效果如下:

input_point = np.array([[250, 187]])
input_label = np.array([1])

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

使用“SamPredictor.prdict”进行预测。该模型返回掩码(masks)、掩码的分数(scores)以及可传递到下一次预测迭代的低分辨率掩码(logits)。

在“multimask_output=True”(默认设置)的情况下,SAM输出3个掩码,其中“scores”给出了模型对这些掩码质量的估计。此设置用于存在不明确输入提示的时候(光凭一个点无法有效识别出用户意图是组件局部、组件还是整体),并帮助模型消除与提示一致的不同对象的歧义。当为“multimask_output=False”时,它将返回一个掩码。对于单点等不明确的提示,建议使用“multimask_output=True”,即使只需要一个掩码;可以通过选择在“分数”中返回的分数最高的一个来选择最佳的单个掩码。这通常会得到更好的mask。

masks, scores, logits = predictor.predict(
    point_coords=input_point,
    point_labels=input_label,
    multimask_output=True,
)

print(masks.shape)  # (number_of_masks) x H x W  | output (3, 600, 900)

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()  



3、多输入生成mask

3.1 多点输入生成mask

单个输入点不明确,需要让模型返回了与其一致的多个对象。要获得单个对象,可以提供多个点。如果可用,还可以将先前迭代的掩码(logits值)提供给模型以帮助预测。当使用多个提示指定单个对象时,可以通过设置“multimask_output=False”来请求获取单个掩码。

input_point = np.array([[250, 184], [562, 322]])
input_label = np.array([1, 1])

mask_input = logits[np.argmax(scores), :, :]  # Choose the model's best mask

masks, _, _ = predictor.predict(
    point_coords=input_point,
    point_labels=input_label,
    mask_input=mask_input[None, :, :],
    multimask_output=False,
)
print(masks.shape) #output: (1, 600, 900)

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() 

输入负点明确区域

input_label与input_point相对应,为0时表示是负点

input_point = np.array([[250, 187], [561, 322]])
input_label = np.array([1, 0])#为0时表示是负点,即第二个点[561, 322]是负点

mask_input = logits[np.argmax(scores), :, :]  # Choose the model's best mask

masks, _, _ = predictor.predict(
    point_coords=input_point,
    point_labels=input_label,
    mask_input=mask_input[None, :, :],
    multimask_output=False,
)

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.2 boxes输入生成mask

支持将xyxy格式的box作为输入,将框内的主体目标识别出来(类似于实例分割)

input_box = np.array([212, 300, 350, 437])
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()

3.3 同时输入点与boxes生成mask

point和boxes可以同时输入,只需将这两种类型的提示都包括在预测器中即可。在这里,这可以用来只选择卡车的轮胎(将车轴部分设置为负点),而不是整个车轮。

input_box = np.array([215, 310, 350, 430]) #只能默认框住正类
input_point = np.array([[287, 375]]) 
input_label = np.array([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()

3.4 同时输入多个boxes生成mask

SamPredictor可以使用predict_tarch方法对同一图像输入多个提示(points、boxes)。该方法假设输入点已经是tensor张量,且boxes信息与image size相符合。例如,假设我们有几个来自对象检测器的输出结果。
SamPredictor对象(此外也可以使用segment_anything.utils.transforms)可以将boxes信息编码为特征向量(以实现对任意数量boxes的支持,transformed_boxes),然后预测mask。

input_boxes = torch.tensor([
    [75, 275, 1725, 850],
    [425, 600, 700, 875],
    [1375, 550, 1650, 800],
    [1240, 675, 1400, 750],
], device=predictor.device) #假设这是目标检测的预测结果
input_boxes=input_boxes/2

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,
)

print(masks.shape)  # (batch_size) x (num_predicted_masks_per_input) x H x W | output: torch.Size([4, 1, 600, 900])

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()

3.5 端到端的批量推理

如果所有提示输入都已经明确的,则可以以端到端的方式直接运行SAM。这允许SAM对图像进行批处理,以下代码构建了2个image和boxes。

image1 = cv2.imread('images/truck.jpg')
image1_boxes = torch.tensor([
    [75, 275, 1725, 850],
    [425, 600, 700, 875],
    [1375, 550, 1650, 800],
    [1240, 675, 1400, 750],
], device=sam.device)

image2 = cv2.imread('images/groceries.jpg')
image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2RGB)
image2_boxes = torch.tensor([
    [450, 170, 520, 350],
    [350, 190, 450, 350],
    [500, 170, 580, 350],
    [580, 170, 640, 350],
], device=sam.device)

图像和提示都作为PyTorch张量输入,这些张量(图像和提示输入)已经被编码为特征向量。所有的输入数据都被封装为list,每个元素都是一个dict,它的key如下:

  • image: CHW格式的PyTorch tensor .
  • original_size: 图像原始大小, (H, W) format.
  • point_coords: 一批输入点格式.
  • point_labels: 每个输入点所对应的类型(正例或负例).
  • boxes: 一批输入的boxe(只能是正例).
  • mask_inputs: 一批输入的mask.

如果没有相应的信息,可以不进行输入,但image必须输入

from segment_anything.utils.transforms import ResizeLongestSide
resize_transform = ResizeLongestSide(sam.image_encoder.img_size)

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()

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)
print(batched_output[0].keys()) # output:dict_keys(['masks', 'iou_predictions', 'low_res_logits'])

输出是每个输入图像的结果列表,其中元素是字典对象,其key为:

  • masks: 一批mask,tensor张量
  • iou_predictions: 与mask相对应的iou预测值.
  • low_res_logits: 每个掩码的低分辨率logits,可以在以后的迭代中作为掩码输入再次调用模型。
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()

4、自动生成mask

4.1 基础前置库

这里加载了一些基础库,并读取images/dog.jpg作为样例数据

import numpy as np
import torch
import matplotlib.pyplot as plt
import cv2
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)

    img = np.ones((sorted_anns[0]['segmentation'].shape[0], sorted_anns[0]['segmentation'].shape[1], 4))
    img[:,:,3] = 0
    for ann in sorted_anns:
        m = ann['segmentation']
        color_mask = np.concatenate([np.random.random(3), [0.35]])
        img[m] = color_mask
    ax.imshow(img)

image = cv2.imread('images/dog.jpg')
image = cv2.resize(image,None,fx=0.5,fy=0.5)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

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

4.2 自动生成mask

要自动生成mask,请向“SamAutomaticMaskGenerator”类注入SAM模型(需要先初始化SAM模型)

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

sam_checkpoint = "sam_vit_b_01ec64.pth"
model_type = "vit_b"

device = "cuda"

sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
sam.to(device=device)
#自动生成采样点对图像进行分割
mask_generator = SamAutomaticMaskGenerator(sam)

masks = mask_generator.generate(image)

print(len(masks))
print(masks[0].keys())
print(masks[0])

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

代码输出的文字信息如下:

42
dict_keys(['segmentation', 'area', 'bbox', 'predicted_iou', 'point_coords', 'stability_score', 'crop_box'])
{'segmentation': array([[False, False, False, ..., False, False, False],
       [False, False, False, ..., False, False, False],
       [False, False, False, ..., False, False, False],
       ...,
       [ True,  True,  True, ..., False, False, False],
       [ True,  True,  True, ..., False, False, False],
       [False, False, False, ..., False, False, False]]), 'area': 18821, 'bbox': [0, 113, 207, 152], 'predicted_iou': 0.9937220215797424, 'point_coords': [[93.75, 146.015625]], 'stability_score': 0.9622295498847961, 'crop_box': [0, 0, 400, 267]}

所生成的图像如下

masks = mask_generator.generate(image)

Mask generation返回该图像所有的masks信息,每一个mask都是一个字典对象,mask的keys如下:

  • segmentation : np的二维数组,为二值的mask图片
  • area : mask的像素面积
  • bbox : mask的外接矩形框,为XYWH格式
  • predicted_iou : 该mask的质量(模型预测出的与真实框的iou)
  • point_coords : 用于生成该mask的point输入
  • stability_score : mask质量的附加指标
  • crop_box : 用于以XYWH格式生成此遮罩的图像裁剪

4.3 自动mask的参数

在自动掩模生成中有几个可调参数,用于控制采样点的密度以及去除低质量或重复掩模的阈值。此外,SamAutomaticMaskGenerator可以自动在图像上切片运行,以提高较小对象的性能,可以通过后处理去除杂散像素和孔洞。以下是对更多遮罩进行采样的示例配置:

mask_generator_2 = SamAutomaticMaskGenerator(
    model=sam,
    points_per_side=32,#控制采样点的间隔,值越小,采样点越密集
    pred_iou_thresh=0.86,#mask的iou阈值
    stability_score_thresh=0.92,#mask的稳定性阈值
    crop_n_layers=1,
    crop_n_points_downscale_factor=2,
    min_mask_region_area=50,  #最小mask面积,会使用opencv滤除掉小面积的区域
)
masks2 = mask_generator_2.generate(image)

print(len(masks2)) # 69

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/642705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaWeb】Cookie和Session的使用场景分析与应用

哈喽,大家好~我是你们的老朋友:保护小周ღ Cookie 和 Session 都是网页中常用的状态保持的技术,它们可以帮助网站识别用户身份,保存用户状态等,什么是 Cookie ?什么是 Session ?他们具体是什么…

Docker部署SonarQube代码质量检查平台+PostgreSQL数据库

一、安装PostgreSQL11(PostgreSQL7.9之后不支持MySQL) 检查代码的时候,仓库或者本地的代码会全部存储到postgresql数据里中,所以容量尽量大点,我这给个300G 指定拉取postgres11版本,不要postgres:latest,因为你部署so…

命令行创建uniapp项目

命令行创建uniapp项目 除了使用HBuilderX工具可视化搭建项目外,DCloud官方还提供了一个脚手架用于命令行搭建项目。 环境安装 全局安装vue-cli npm i vue/cli4 -g建议使用vue-cli 4.x版本,vue-cli 5.x与webpack存在冲突,会导致运行报错 …

聘准备-数据科学家

https://www.zhihu.com/question/21592677/answer/786529944

爆肝整理,性能测试-负载测试总结,你不知道的都在这了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能测试中最容易…

软件测试进阶知识 —— 性能测试

性能测试 性能测试是指在一定条件下系统行为表现是否符合需求规格的性能指标。 例如,通过测试传输的最长时限、传输的错误率、计算的精度、响应的时限和恢复时限等性能指标,验证了软件系统是否能够达到需求规格说明中所提出的性能指标,发现了…

vue的使用及运行

Vue使用 <!-- 从三方网站 引入网上的vue 需要网络 --> <!-- <script src"https://cdn.jsdelivr.net/npm/vue2.7.14/dist/vue.js"></script> --> <!-- 本地引入 --> <script src"./js/vue.js"></script><div…

vcruntime140.dll下载,快速解决vcruntime140.dll缺失的问题

在使用Windows操作系统时&#xff0c;有时会遇到“vcruntime140.dll缺失”等错误提示。这意味着系统中出现了一些严重的问题&#xff0c;可能是由于vcruntime140.dll文件损坏或缺失导致的。本文将详细介绍vcruntime140.dll的作用以及如何进行vcruntime140.dll下载来修复缺失的问…

STM32开发环境搭建工程创建(嵌入式学习)

STM32开发环境搭建&工程创建 1. 开发环境搭建1.1 STM32CubeMX简介安装 1.2 Keil5简介安装 1.3 ST_LINK简介安装 2. 创建STM32工程 1. 开发环境搭建 1.1 STM32CubeMX 简介 STM32CubeMX是STMicroelectronics公司提供的一款集成开发环境&#xff08;IDE&#xff09;工具&…

基于Github开源项目Next Chat4 —— 之原生Js前端特效给你的眼睛来一场视觉盛宴吧

前期回顾 打造极简风格动效 —— 5 分钟轻松实现惊艳、震撼人心的视觉效果_彩色之外的博客-CSDN博客css Loading 实战教学https://blog.csdn.net/m0_57904695/article/details/131156011?spm1001.2014.3001.5501 &#x1f44d; 本文专栏&#xff1a;开发技巧 一键使用 GP…

精通postman教程(四)-创建请求及添加参数 详解

作为一名测试工程师&#xff0c;那么Postman绝对是大伙必备的工具之一。 在这个系列教程中&#xff0c;我将为大伙详细讲解如何使用Postman进行API测试。 今天我为大伙讲解postman如何创建请求及添加参数&#xff0c;让你们快速上手这款工具。 一、处理GET请求 Get请求用于…

敏捷实践 | 8个实用方法助你开好有效的敏捷反思会

又是年底&#xff0c;各大app都推出各种年度总结&#xff0c;年度回顾。这些总结有的很有趣&#xff0c;有的很扎心&#xff0c;在推动年底KPI完成的同时&#xff0c;也给我们带来不同角度的思考。而在敏捷工作方法中&#xff0c;反思回顾也是敏捷实践很关键的一环。那么我们如…

链动2+1系统开发模式,如何助力企业平台月赚上百万?

现在市面上的商业模式数不胜数&#xff0c;各种各样的都有&#xff0c;而链动21就是其中非常优质的一款商业模式。它不仅能够让消费者消费全返&#xff0c;还能够助力企业平台月赚上百万&#xff0c;而且完全的合法合规&#xff0c;那么链动21模式是怎么做到的呢&#xff1f;下…

2023年惠州/广州/深圳NPDP产品经理认证,这里够专业

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

C 语言实现一个简单的 web 服务器

说到 web 服务器想必大多数人首先想到的协议是 http&#xff0c;那么 http 之下则是 tcp&#xff0c;本篇文章将通过 tcp 来实现一个简单的 web 服务器。 本篇文章将着重讲解如何实现&#xff0c;对于 http 与 tcp 的概念本篇将不过多讲解。 一、了解 Socket 及 web 服务工作…

高并发下数据一致性问题:数据库+缓存双写模式分析

前言 随着互联网业务的发展&#xff0c;其中越来越多场景使用了缓存来提升服务质量。从系统角度而言&#xff0c;缓存的主要目标是减轻数据库压力&#xff08;特别是读取压力&#xff09;并提高服务响应速度。引入缓存就不可避免会涉及到缓存与业务数据库数据一致性的问题&…

充电桩计量检测TK4860E交流充电桩检定装置

固定检定点&#xff1a;系统预设24A220V和12A220V的检定点&#xff0c;可完成单相32A或单相16A充电桩的工作误差的检定&#xff0c;24A和12A检定点的设计既可满足实际输出达不到额定电流的单相充电桩的检定&#xff0c;又可保证检定效率。 固定电量&#xff1a;系统可预设充电…

源代码安全管理

现在&#xff0c;随着软件开发公司对源代码保护的日益重视&#xff0c;源代码已成为企业核心竞争力的关键因素之一。为了确保企业在同行中展露头角并具备核心竞争力&#xff0c;源码的保护变得至关重要。 目前&#xff0c;源代码加密有两种常用方式&#xff1a;物理性和软件性…

leetcode 139.单词拆分

题目描述 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链…

ASEMI代理NXP快恢复功率二极管BYC30W-600P参数

编辑-Z BYC30W-600P参数描述&#xff1a; 型号&#xff1a;BYC30W-600P 重复峰值反向电压VRRM&#xff1a;600V 峰值工状向电压VRWM&#xff1a;600V 反向电压VR&#xff1a;600V 平均正向电流IF&#xff1a;30A 正向电压VF&#xff1a;1.38V 反向恢复时间trr&#xff…