用魔法打败魔法!用AI制作AI分割数据集!

news2024/11/14 14:01:22

6fa2f8012ca1b1c2c45889aab2d4c561.jpeg

本节内容我们使用SAM将边界框转换为分割数据集,这对于实例分割数据集的制作非常有用,下面我会一步步给出我的代码,希望对你有用。

有兴趣的朋友可以研究一下这本书,详细的介绍了数据集制作到分割的实际项目应用!

步骤 1. 安装与设置

import torch          
import torchvision          
print("PyTorch version:", torch.__version__)          
print("Torchvision version:", torchvision.__version__)          
print("CUDA is available:", torch.cuda.is_available())          
import sys          
!{sys.executable} -m pip install opencv-python matplotlib          
!{sys.executable} -m pip install 'git+https://github.com/facebookresearch/segment-anything.git'          
         
!mkdir images          
!wget -P images https://raw.githubusercontent.com/facebookresearch/segment-anything/main/notebooks/images/truck.jpg          
!wget -P images https://raw.githubusercontent.com/facebookresearch/segment-anything/main/notebooks/images/groceries.jpg          
         
!wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth


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))           
         
         
import sys          
sys.path.append("..")          
from segment_anything import sam_model_registry, SamPredictor          
         
sam_checkpoint = "sam_vit_h_4b8939.pth"          
model_type = "vit_h"          
         
device = "cuda"          
         
sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)          
sam.to(device=device)          
         
predictor = SamPredictor(sam)


image = cv2.imread('/notebooks/images/000027.jpg')          
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

         8cea3a4ecc7cb813c68b3e1cc5b2e963.png

图像分割

步骤二、 获取mask

通过将 yolo 格式转换为 SAM 期望的边界框格式,我们得到了这些掩码的边界框。这是这张图片的边界框。对yolo熟悉的朋友对这个应该非常熟悉!

bounding_boxes = [[209, 532, 262, 626], [256, 444, 300, 531], [213, 258, 362, 401], [200, 96, 376, 623], [247, 172, 371, 265], [397, 409, 496, 484], [184, 261, 253, 327]]


用于将这些框输入到 SAM 预测器中。我们将它们转换为张量。


input_boxes = torch.tensor(bounding_boxes, device=predictor.device)


这样做之后提取新的mask


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

7b1a337daca0e756f4a163b748e62c1b.png

这是没有人遮罩,它把所有东西都染成绿色

740f5f2979ea22b8067fb8884b324f15.png

本公众号只做干货,分享实际项目中的点点滴滴

希望您阅读后有所收获

同时,也希望您能在下方给个赞赏

您的赞赏

是我持续创作的最大动力!

非常感谢!

ee67111ea3b2615ccd154a877ed30f04.gif

1、ArcGIS Pro 3.0 软件破解版安装及教程

2、中国市级行政区shp(WGS84)【2022 · 最新数据共享】

3、中国县级行政区【2022 · 最新数据共享】‍

4、IntelliJ IDEA 2022.3.1 专业版破解

5、GIS开发者应考虑使用 Edge浏览器的 8 个理由

6、ArcGIS Pro中常用的空间分析功能

7、开源 Web GIS 制作3D建筑

8、ArcGIS Pro 和 ChatGPT集成思路

9、Segment Anything 模型的 3 个地理空间和遥感用例

10、office 软件安装包下载

11、Segment Anything模型用于地理空间数据

12、QGIS软件安装包下载

a388a4f52046819bca5d2cc2a8701807.gif

e1d02ac9bc8b7192366ea7099594ad67.gif

点分享

6eca654be27bcd4bfa30df7abdd68644.gif

点点赞

a33e920345c54a8c7a63718191565d57.gif

点在看

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

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

相关文章

【 计算机组成原理 】期末重点

文章目录 前言第一章 【计算机系统概论】1.1 知识点1.1核心例题 第二章 【运算方法和运算器】2.1 知识点2.2 核心例题 第三章 【存储系统】3.1 知识点3.2 核心例题 第四章 【指令系统】4.1 知识点4.2 核心例题 第五章 【中央处理器】5.1 知识点5.2 核心例题 第六章6.1 知识点6.…

【MSP432电机驱动学习—上篇】TB6612带稳压电机驱动模块、MG310电机、霍尔编码器

所用控制板型号:MSP432P401r 今日终于得以继续我的电赛小车速通之路: 苏轼云 “ 素面常嫌粉涴 , 洗妆不褪朱红。 ” 这告诫我们不能只注重在表面粉饰虚伪的自己,要像梅花一样,不断磨砺自己的内在~ 后半句是 “…

JavaSE基础语法--类和对象

在Java中,一切皆为对象,类和对象是一个抽象的概念。我们可以从面向过程来过渡到面向对象。 那么什么是面向过程呢? 举一个简单的例子,现实生活中,你需要买一台手机的时候会经历如下步骤: 这里的每一步都可…

【python程序设计】——期末大作业

【python程序设计】——期末大作业😎 前言🙌一、所用技术:二、 系统设计三、 系统实现3.1 核心功能代码实现:3.2 演示结果展示 总结撒花💞 😎博客昵称:博客小梦 😊最喜欢的座右铭&am…

yaffs格式的根文件系统制作

linux内核启动后,它接下来要做的事就是启动应用程序,而应用程序在哪里呢,类比windows,启动时要读取c盘,所以linux的文件系统就类似于c盘,并且我们使用的ls、cp等一些类命令(本质是应用程序&…

JavaScript 手写代码 第二期

文章目录 1.为什么要手写代码?2. 手写代码2.1 手写实现判断类型函数2.1.1 前置知识2.1.1 手写实现 2.2 手写实现aplly,call,bind方法2.2.1 基本使用2.2.2 实现思路2.2.3 手写实现 1.为什么要手写代码? 我们在日常开发过程中,往往都是取出来直…

Linux(centos7)缺失.bashrc文件登录出现bash-4.2

一、问题描述 最近遇到几次登陆linux(centos7.5)系统后,虽然在/root用户下,但出现了如下界面: 二、解决思路 使用不同的linux发行版本,(比如:IP为*...90,以下简称90)会…

课程19:个人中心功能与提示优化

🚀前言 本文是《.Net Core从零学习搭建权限管理系统》教程专栏的课程(点击链接,跳转到专栏主页,欢迎订阅,持续更新…) 专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。 专栏适用于人群:We…

Android中加载一张大图,如何正常显示且不发生OOM ?

问题 在Android中,获取一个1000*20000(宽1000px,高20000px)的大图,如何正常加载显示且不发生OOM呢? 分析 Android系统会为应用分配一定大小的堆内存 而如果遇到高分辨率图片时,如果它的配置为ARGB(每个像素占4Byte) 那么它要消…

深度学习(23)——YOLO系列(2)

深度学习(23)——YOLO系列(2) 文章目录 深度学习(23)——YOLO系列(2)1. model2. dataset3. utils4. test/detect5. detect全过程 今天先写YOLO v3的代码,后面再出v5&…

【PCB专题】案例:PCB板厂说焊盘宽度太小容易沉金不良,但加宽又可能导致阻焊桥在阻焊为黑色油墨下无法做出?

此案例是最近在Layout一块PCB板卡,使用了一个以前我没有接触过的器件,此器件的封装是QFN128。 总的问题是:PCB板厂说如果按原稿制作的话,焊盘宽度太小沉金容易不良,但电话里和我说如果加宽又可能导致阻焊桥在黑色油墨情况下无法做出? 板厂给的EQ如下所示,表示TOP面设计…

【Unity之IMGUI】—编译模式下控件可视化及其封装

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

【从零开始开发一个线上网课系统-01】账号登录及退出登录功能开发

文章目录 1 视图层开发2 form表单验证3 配置urls.py4 模板层开发 实际上在系统开发的博客中应该先描述数据库设计,但由于设计的表比较多,其理解简单,但撰写和描述较为麻烦,所以我以可视化方式来呈现这些数据表以及其中的关系&…

RISCV Reader笔记_1 RISCV的意义

RISCV Reader RISCV的诞生 出众之处 RISCV架构被设计的目的就是成为一个通用的指令集架构 ISA。不仅支持从微控制器到高性能计算机的各种处理器,兼容各种编程语言,还适应FPGA ASIC等所有实现技术,稳定…… 计算机体系结构为了在指令集更新…

Iceberg从入门到精通系列之一:Iceberg核心概念理解

Iceberg从入门到精通系列之一:Iceberg核心概念理解 一、Iceberg核心概念二、Iceberg表结构三、数据文件四、表快照Snapshot五、清单列表Manifest list六、表快照、数据文件和清单列表之间的关系七、Catalog八、Hive Catalog九、Hadoop Catalog十、Hive Catalog和Had…

Alamouti,MRC以及beam三种方式的误码率对比MATLAB仿真程序

Alamouti,MRC以及beam三种方式的误码率对比MATLAB仿真程序 完整程序: clc; clear; close all; warning off; addpath(genpath(pwd)); %%%%%%%%%%%%%%%%%%%%%%%%% Initialization %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% N = 10^6; r_n = rand(1,N)>0.5; BPSK = 2*r_n-1; E_n_d…

chatgpt赋能python:Python生成GUI的步骤和工具

Python生成GUI的步骤和工具 Python是一种广泛使用的编程语言,其语法简洁、易学、可读性强等特点深受程序员喜爱。 Python的GUI编程让我们可以为用户提供友好的界面,帮助用户更好地理解和使用程序。Python生成GUI的过程并不复杂,本文将为您介…

代码随想录算法训练营第42天 | 01背包问题理论基础 + 416.分割等和子集

今日任务 目录 01背包问题 二维数组 01背包问题 一维/滚动数组 416.分割等和子集 - Medium 01背包问题 二维数组 理论基础:代码随想录 01 背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品…

课程18:角色权限功能实现

🚀前言 本文是《.Net Core从零学习搭建权限管理系统》教程专栏的课程(点击链接,跳转到专栏主页,欢迎订阅,持续更新…) 专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。 专栏适用于人群:We…

chatgpt赋能python:Python生成C++代码-提高生产力的利器

Python 生成 C 代码 - 提高生产力的利器 Python 作为一种高级编程语言,在数据分析、机器学习等领域都有着广泛的应用。但是,Python 被认为速度慢,无法处理一些高性能的任务。此时,C这种低级语言就被用来替代 Python,以…