pytorch tensor计算三通道均值方式
作者:IFT_jason 发布时间:2022-06-26 00:02:41
tensor计算三通道均值
今天用pytorch处理图像时,涉及到了计算均值的问题,整理一下解决思路。
第一种思路
tensor转换为numpy再进行处理
import torch
import cv2
img = cv2.imread("image path")
tensor_img = torch.from_numpy((img[:, :, ::-1] / 255.0)[None, ...].transpose(0, 3, 1, 2)).cuda()
...
numpy_img = (tensor_img.detach().cpu().numpy().transpose(2, 3, 1, 0).squeeze() * 255)[:, :, ::-1]
ave_color = np.mean(numpy_img , axis=(0, 1))
如果图像里有0值,不想计入运算:
numpy_img[numpy_img == 0] = np.nan
ave_color = np.nanmean(numpy_img, axis=(0, 1))
由于tensor和numpy来回转换会消耗资源、性能。
又查了一番,直接在tensor中计算(非零均值计算)
reshape_tensor_img = tensor_img.view(tensor_img.size(0), tensor_img.size(1), -1)
ave_color = reshape_tensor_img.mean(2)
# mean value without 0
non_zero_img = reshape_tensor_img[reshape_tensor_img.nonzero(as_tuple=True)]
ave_color = non_zero_img.view(reshape_tensor_img.size(0), reshape_tensor_img.size(1), -1).mean(2)
计算完均值,想要加法运算的时候也会碰上一点维度上的麻烦,需要维度转换一下。
reshape_ave_color = ave_color.view(ave_color.size(0), ave_color.size(1), 1, 1)
add_img = tensor_img + reshape_ave_color
Pytorch tensor的运算
tensor操作
1. 新建
A、torch.Tensor(shape)/torch.FloatTensor(shape):随机初始化一个维度为shape的张量。
B、torch.randn(shape):用均值为0,方差为1的高斯分布初始化一个shape的张量。
C、torch.rand(shape):在区间[0,1]上均匀分布,初始化一个shape的张量。
2、Tensor的变换
A、view / reshape
两个用法差不多,都是用来改变一个张量的数据分布。
注:(2,-1)中的-1会自动计算剩下的维度。
B、squeeze / unsqueeze
第一个是用来压缩维度为1的张量,如(6,1,32,32).squeeze()之后就变为(6,32,32);第二个是用来增加一个维度。具体看实例如下:
注:squeeze中不带参数,是将所有维度为1的地方去掉,带参数是去指定维度为1的地方,若指定的维度不为1,则不变。
注:在指定的维度上插入一个大小为1的新维度。
C、expand / repeat
这两个都是进行数据的扩充操作,第一个是扩充到指定的维度大小,第二个函数的参数维度上扩充的倍数。一般结合上面2.B中的函数使用。
D、 t / transpose / permute
这三个函数用来数据维度之间的调整,第一个只能用于2D。
E、broadcasting机制
相当于自动完成了unsqueeze+expand的操作,但是相比节省内存空间。
通过broadcasting机制,张量可以直接和标量进行相加。
来源:https://blog.csdn.net/infinite_jason/article/details/115242839
猜你喜欢
- 项目介绍背景:DC竞赛比赛项目,运用回归模型进 * 价预测。数据介绍:数据主要包括2014年5月至2015年5月美国King County的房
- key_buffer_size - 这对MyISAM表来说非常重要。如果只是使用MyISAM表,可以把它设置为可用内存的 30-40%。合理
- 在学习asp过程中相信很多初学者对Sub与Function的用法有些疑惑,好像它们没什么区别都可以使用。呵呵,看了本文的介绍您就可以了解了S
- 有时候在使用 Python 的时候,想要对一个数字或者字符串进行补零操作,即把「1」变为一个八位数的「00000001」,这个时候可以使用一
- 先上个效果图: Sample6_1.php 中创建Form: //显示上传状态和图片 <div id="showi
- 上次学会了爬取图片,这次就想着试试爬取商家的联系电话,当然,这里纯属个人技术学习,爬取过后及时删除,不得用于其它违法用途,一切后果自负。首先
- 与大多数可以面向对象的编程语言不一样, PHP 是同时支持面向过程和面向对象的编程方式, PHP 开发者可以在面向过程和面向对象二者中自由选
- 一、matplotlib.pyplot.boxplot()语法boxplot(x, notch=None, sym=None, vert=N
- 导读:由于banner一般用于专题类网站,在门户网站的二级页面,用户进来之前,在首页已经对主题有一定的了解和认识,所以banner的作用是在
- 一、概述现有一个用户表,需要将表数据写入到excel中。环境说明mysql版本:5.7端口:3306数据库:test表名:users表结构如
- 最近在查看asp之家的访客统计时,发现访客使用firefox浏览器的占了10%-15%,而大部分的访客使用的是IE6,呵呵我也是用IE6。而
- 1.软件环境Windows10 教育版64位Python 3.6.32.问题描述我们在定义一个函数或者是调用一个函数的时候,总是希望能够知道
- 出图是项目里常见的任务,有的项目甚至会要上百张图片,所以批量出土工具很有必要。arcpy.mapping就是ArcGIS里的出图模块,能快速
- 当你在浏览网页时,看到一个很漂亮的特效,你查看源代码时看到的是一队乱码,那多扫兴呀!根据本人的研究,总结出了三种解密方法,与大家分享!!方法
- 使用字符串第二次世界大战促使了现代电子计算机的诞生,当初的想法很简单,就是用计算机来计算导弹的弹道,因此在计算机刚刚诞生的那个年代,计算机处
- 如下所示:# -*- coding: utf-8 -*-#简述:一个整数,它加上100和加上268后都是一个完全平方数#提问:请问该数是多少
- 说到Web Framework,Ruby的世界Rails一统江湖,而Python则是一个百花齐放的世界,各种micro-framework、
- 定义计算N的阶乘的函数1)使用循环计算阶乘def frac(n): r = 1 if n<=1:
- 跑代码时,在命令行给python程序传入bool参数,但无法传入False,无论传入True还是False,程序里面都是True。下面是代码
- 国产框架thinkPHP,是一款MVC框架,这个框架最初模拟JAVA的struts框架,使用单一入口文件模拟JAVA的过滤器,使用actio