当前位置: 首页 > news >正文

Pytorch语义分割(1)-----加载数据

在语义分割中用到的数据无非就是原始图片(image)和标注后得到的mask图片,所以在读取数据的时候只要返回图片和标签信息就OK 了。

import torch
import os
import numpy as np
from torch.utils.data import Dataset
from utils_func import seg_utils as ut
import cv2
from torchvision.transforms.functional import rotate as tensor_rotate
from torchvision.transforms.functional import vflip, hflip
from torchvision.transforms.functional import adjust_brightness
import random
import base64
import json
import os
import os.path as ospdevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")class train_data(Dataset):def __init__(self, image_folder, img_size, category_types):self.image_folder = image_folderself.img_size = img_sizeself.category_types = category_typesself.num_classes = len(category_types)self.data_list = self.generate_mask()# print(self.data_list)self.img_and_mask = []for idx, data in enumerate(self.data_list):img_tensor, mask_tensor = self.get_image_and_label(data[0], data[1], self.img_size)self.img_and_mask.append([img_tensor, mask_tensor])def __len__(self):return len(self.img_and_mask)def __getitem__(self, index):img_tensor = self.img_and_mask[index][0].to(device)mask_tensor = self.img_and_mask[index][1].to(device)# 如果有数据增强就在这里处理return img_tensor, mask_tensordef data_augment(self, img_tensor, mask_tensor, aug_flag):if aug_flag[0] == 0:angel = random.choice(aug_flag[1])img_tensor = tensor_rotate(img_tensor, int(angel))mask_tensor = tensor_rotate(mask_tensor, int(angel))elif aug_flag[0] == 1:factor = aug_flag[1]img_tensor = adjust_brightness(img_tensor, factor)elif aug_flag[0] == 2:flip_type = random.choice(aug_flag[1])if flip_type == 1:img_tensor = vflip(img_tensor)mask_tensor = vflip(mask_tensor)else:img_tensor = hflip(img_tensor)mask_tensor = hflip(mask_tensor)return img_tensor, mask_tensordef generate_mask(self):data_lists = []for file_name in os.listdir(self.image_folder):if file_name.endswith("json"):json_path = os.path.join(self.image_folder, file_name)img_path = osp.join(self.image_folder, "%s.jpg" % file_name.split(".")[0])data_lists.append([img_path, json_path])return data_listsdef get_image_and_label(self, img_path, labelme_json_path, img_size):# print("==================================================")# print(img_path)# print("==================================================")img = ut.p2i(img_path)h, w = img.shape[:2]img = cv2.resize(img, (img_size[0], img_size[1]))# cv2.imwrite(r"C:\Users\HJ\Desktop\test\%s.jpg"%img_path.split(".")[0][-7:], img)img_tensor = ut.i2t(img)mask_array = np.zeros([self.num_classes, h, w, 1], dtype=np.uint8)with open(labelme_json_path, "r") as f:json_data = json.load(f)shapes = json_data["shapes"]for shape in shapes:category = shape["label"]category_idx = self.category_types.index(category)points = shape["points"]points_array = np.array(points, dtype=np.int32)temp = mask_array[category_idx, ...]mask_array[category_idx, ...] = cv2.fillPoly(temp, [points_array], 255)mask_array = np.transpose(mask_array, (1, 2, 0, 3)).squeeze(axis=-1)mask_array = cv2.resize(mask_array, (self.img_size[0], self.img_size[1])).astype(np.uint8)mask_tensor = ut.i2t(mask_array, False)return img_tensor, mask_tensorif __name__ == '__main__':img_folder = r"D:\finish_code\SegmentationProject\datasets\data2"img_size1 = [256, 512]category_types = ["background", "person", "car", "road"]t = train_data(img_folder, img_size1, category_types)t.__getitem__(1)

相关文章:

Pytorch语义分割(1)-----加载数据

在语义分割中用到的数据无非就是原始图片(image)和标注后得到的mask图片,所以在读取数据的时候只要返回图片和标签信息就OK 了。 import torch import os import numpy as np from torch.utils.data import Dataset from utils_func import …...

Java中加号的多种用途

在Java中, 符号有多种用途,主要根据上下文而定。以下是在Java中的一些主要用途: 加法运算符: 这是最常见的用途,用于数字相加。 int a 5;int b 3;int sum a b; // sum is 8 字符串连接符: 当用…...

React useCallback用法

useCallback 是 React 中的一个 Hook,它用于优化性能,通过缓存函数的引用来避免在组件的每次渲染时都创建新的函数实例。这对于避免不必要的子组件重新渲染特别有用,因为如果传递给子组件的回调函数在每次渲染时都不同,即使子组件…...

Flutter 中的 ErrorWidget 小部件:全面指南

Flutter 中的 ErrorWidget 小部件:全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架,它允许开发者使用 Dart 语言构建高性能、美观的应用。在 Flutter 的丰富组件库中,ErrorWidget 是一个特殊的组件,用于在渲染过程中捕获…...

【数据结构】穿梭在二叉树的时间隧道:顺序存储的实现

专栏引入 哈喽大家好,我是野生的编程萌新,首先感谢大家的观看。数据结构的学习者大多有这样的想法:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学的很累。我想让大家…...

【数据结构与算法 经典例题】链表的回文结构(图文详解)

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法 经典例题》C语言 期待您的关注 ​ 目录 一、问题描述 二、解题思路 三、C语言代码实现 一、问题描述 二、解…...

通过DirectML和ONNXRuntime运行Phi-3模型

更多精彩内容,欢迎关注我的公众号“ONE生产力”! 上篇我们讲到通过Intel Core Ultra系列处理器内置的NPU加速运行Phi-3模型,有朋友评论说他没有Intel处理器是否有什么办法加速Phi-3模型。通常,使用GPU特别是NVIDA的GPU加速AI模型…...

C语言经典例题-18

1.判断是不是字母 题目描述: KK想判断输入的字符是不是字母,请帮他编程实现。 输入描述: 多组输入,每一行输入一个字符。 输出描述: 针对每组输入,输出单独占一行,判断输入字符是否为字母,输出内容详见输出样例。 输…...

计算机网络之crc循环冗余校验、子网划分、rip协议路由转发表、时延计算、香浓定理 奈氏准则、TCP超时重传 RTO

crc循环冗余校验 异或运算 : 相同得0,相异得1 从多项式获取除数 在原数据的末端补0 , 0的个数等于最高次项的阶数 如果最后结果的有效位数较少时,前面应该补0,补到个数与阶位相同 子网划分 子网掩码:用于识别IP地址中的网络号和主机号的…...

揭秘高效人事财务对接新方案!

一、客户介绍 某生物医药科技有限公司是一家专注于生物创新药物研发与生产的科技型企业。公司的主要业务范围包括技术开发、技术服务、医学研究与试验发展、经济信息咨询、企业管理等。公司凭借其强大的技术实力、丰富的研发经验和优秀的团队阵容,在生物创新药领域…...

Unity中的MVC框架

基本概念 MVC全名是Model View Controller 是模型(model)-视图(view)-控制器(controller)的缩写 是一种软件设计规范,用一种业务逻辑、数据、界面显示 分离的方法组织代码 将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时&#x…...

网工内推 | 上市公司网工,Base广东,思科DE/IE认证优先

01 广州赛意信息科技股份有限公司 🔷招聘岗位:技术架构师 🔷职责描述: 1、设计、开发和维护工业数据库及其架构,包括数据采集、存储、处理和分析的工具和系统。 2、开发和维护数据管道和工作流程,确保数据…...

ZYNQ AXI4 FDMA内存读写

1 概述 如果用过ZYNQ的都知道,要直接操作PS的DDR 通常是DMA 或者VDMA,然而用过XILINX 的DMA IP 和 VDMA IP,总有一种遗憾,那就是不够灵活,还需要对寄存器配置,真是麻烦。对于我们搞 FPGA 的人来说,最喜欢直接了当,直接用FPGA代码搞定。现在XILINX 的总线接口是AXI4总线…...

签名安全规范:解决【请求对象json序列化时,时间字段被强制转换成时间戳的问题】

文章目录 引言I 签名安全规范1.1 签名生成的通用步骤1.2 签名运算(加密规则)1.3 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)1.4 允许的请求头字段1.5 签名校验工具II 注解校验签名2.1 获取请求数据,并校验签名数据2.2 解决时间格式被强制转换成时间戳的问题…...

Web3.0区块链技术开发方案丨ICO与IDO代币开发

在Web3.0时代的到来下,区块链技术不仅改变着金融领域的格局,也在资金筹集和代币发行方面掀起了一场变革。初始代币发行(ICO)和去中心化代币发行(IDO)成为了项目融资的主要方式,其基于区块链技术…...

spring boot 3.x版本 引入 swagger2启动时报错

一,问题 Spring Boot 3.x版本的项目里,准备引入Swagger2作为接口文档,但是项目启动报错: java.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not present at java.base/sun.reflect.generics.…...

华为机械工程师面试问题

在机械工程师的面试中,面试官可能会提出一系列问题,以评估应聘者的专业知识、技能、经验以及解决问题的能力。以下是一些可能的面试题: 基础知识与技能: 请解释机械工程中常用的几种传动方式,并比较它们的优缺点。描述一下你在机械设计过程中常用的软件,并举例说明你是如…...

一个简单并完整的springboot项目

一个简单并完整的springboot项目 项目地址1:https://download.csdn.net/download/qq_38234785/89398614 项目地址2:https://mbd.pub/o/buranxin/work 一、接口 curl --location --request POST http://localhost:8080/api/test \ --header Cookie: USER…...

SASS基础知识

什么是SASS 1. SASS与CSS的关系 SASS(Syntactically Awesome Stylesheets)是一种强大的CSS扩展语言,它允许开发者使用变量、嵌套规则、混合宏和更多功能,这些在纯CSS中是不可能做到的。SASS旨在简化CSS代码的维护,并…...

基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善

前言 紧接上篇->基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善-CSDN博客 本篇将完善主界面的管理员入库和出库功能,同样的,管理员入库和出库的设计套路适用于动态表的录入和编辑 首先还是介绍一下本项目将要实现的功能 &#xf…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

uniapp中使用aixos 报错

问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Map相关知识

数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

Selenium常用函数介绍

目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”:输入模块(GPIO、温度、V_REFINT)1.4.2 信号 “调度站”:多路开关1.4.3 信号 “加工厂”:ADC 转换器(规则组 注入…...