pytorch的pixel_shuffle转tflite文件

torch.pixel_shuffle()是pytorch里面上采样比较常用的方法,但是和tensoflow的depth_to_space不是完全一样的,虽然看起来功能很像,但是细微是有差异的

def tf_pixelshuffle(input, upscale_factor):temp = []depth = upscale_factor *upscale_factorchannels = input.shape.as_list()[-1] // depthfor i in range(channels):out_ = tf.nn.depth_to_space(input=input[:,:, :,i*depth:(i+1)*depth], block_size=upscale_factor)temp.append(out_)out = tf.concat(temp, axis=-1)return out

因为,有人发现在单通道的时候是depth_to_space和pixel_shuffle结果是一样的,所以拆分出来计算好在合并就行,这样速度基本上没有增加多少,亲测速度也是很快的,比从头开始实现pixel_shuffle是快非常多的。

如果使用这样的从头开始实现,转出来的tflite是没法运行在手机上面的,因为tf.transpose的维度太多了,tflite在手机上不支持6个维度的transpose的,因为超过5个维度就会产生flex层,flex层是不被支持的。

def pixel_shuffle(x, upscale_factor):batch_size, height, width, channels = x.shapechannel_split = channels // (upscale_factor ** 2)# Reshape the input tensor to split channelsx = tf.reshape(x, (batch_size, height, width, upscale_factor, upscale_factor, channel_split))# Transpose and reshape to get the pixel shuffled outputx = tf.transpose(x, perm=[0, 1, 3, 2, 4, 5])x = tf.reshape(x, (batch_size, height * upscale_factor, width * upscale_factor, channel_split))return x

下面就测试一下:

新建pytorch模型

import torch
import torch.nn as nnclass Net(nn.Module):def __init__(self):super().__init__()self.conv=nn.Conv2d(in_channels=3,out_channels=12,kernel_size=3,stride=2,padding=1)def forward(self, input):x=self.conv(input)out=torch.pixel_shuffle(x,2)return out

可视化出来

利用tf_pixelshuffle转出来的结果:

利用pixel_shuffle转出来的结果:

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ROS2 库包设置和使用 Catch2 进行单元测试

说明 本文的目的是了解如何在 ROS2 中创建库,以供其他 ROS2 包使用。除此之外,本文还介绍了如何使用 catch2 框架编写单元测试。本文的第 1 部分将详细介绍如何创建库包。第 2 部分将介绍 ROS2 软件包如何利用创建的库 上篇 ROS2 库包设置和使用 Catch2…

操作系统知识

操作系统基础 什么是操作系统? 通过以下四点可以概括操作系统到底是什么: 操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机的基石。操作系统本质上是一个运行在计算机上的…

矢量图形编辑软件illustrator 2023 mac特点介绍

illustrator 2023 mac是一款矢量图形编辑软件,用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator mac软件特点 矢量图形:illustrator创建的图形是矢量图形,可以无限放大而不失真,这与像素图形编辑软件&am…

基于虚拟阻抗的下垂控制——孤岛双机并联Simulink仿真

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

LLM评估标准有哪些?

为了有效衡量和优化LLM的性能和泛化能力,并揭示其优势和局限,建立合理的LLM评价基准具有重要意义。现阶段,主流的LLM评估方法可划分为3类: 1)人工评估。 基于人工的评估方法通常需要邀请大量的志愿者或相关领域专家对…

【图像处理GIU】图像分割(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

国庆特别篇:中秋与国庆同日相迎

国庆特别篇:中秋与国庆同日相迎 国庆特别篇:中秋与国庆同日相迎 🎉摘要引言旅途风景分享 🗺️中秋团圆,返乡之路风景宜人的旅游胜地 技术探讨:Java中的可变参数 🚀什么是可变参数?使…

transformer不同的包加载模型的结构不一样

AutoModel AutoModelForTokenClassification 结论: AutoModel加载的模型与AutoModelForTokenClassification最后一层是不一样的,从这个模型来看,AutoModelForTokenClassification加载的结果是对的 问题: 为什么AutoModel和Aut…

数据分析视角中的商业分析学习笔记

数据分析一大堆,结果却是大家早就知道的结论?是工具和方法出问题了吗?真正原因可能是你的思维有误区。 为什么分析的这么辛苦,得出的结论大家早知道,谁谁都不满意?核心原因有3个: 分析之前&am…

代码随想录算法训练营第五十九天 | 647. 回文子串 516.最长回文子序列

1. 回文子串 647. 回文子串 - 力扣(LeetCode) 一个子串左右两个元素相等,并且中间对称,才是回文子串 即 ij 时,[i1: j-1]对称 dp[i][j]: [i:j] 是否是回文字串 当 子串长度大于2 由 dp[i1][j-1] 推出…

海洋测绘外业总结(2023年9月)

本次外业大约历时2个多月,中间遇到了多波束噪声、电火花电源箱冒烟、侧扫声纳绞车承重头内部线路中断,连接拖鱼的硫化头烧坏问题。 1、多波束噪声的问题 在外业采集过程中,EM2040D多波束水体图呈现了明显三段,意思就是&#xff…

23.2 Bootstrap框架3

1.卡片 1.1卡片样式 在Bootstrap 5中, .card, card-header, .card-body, .card-footer类是用于创建卡片样式.下面是这些类的简单介绍: * 1. .card: 用于创建一个基本的卡片容器它作为一个包裹元素,通常与其他卡片类一起使用.* 2. .card-header: 用于创建卡片的头部部分.通常在…