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

【LUT技术专题】ECLUT代码解读

目录

原文概要

1. 训练

2. 转表

3. 测试


本文是对ECLUT技术的代码解读,原文解读请看ECLUT。 

原文概要

ECLUT通过EC模块增大网络感受野,提升超分效果,实现SRLUT的改进,主要是2个创新点:

  • 提出了一个扩展卷积(expand Conv),跟RCLUT一样,是一个用于低成本提升RF大小的模块。
  • 一个简单有效的scaling方法来减小旋转累计的量化误差,该方法的计算成本基本可以忽略不计。

其网络结构图如下:

Expanded Conv:

首先根据前面的讲解,我们可以发现ECLUT是在SRLUT的基础上进行的优化,ECLUT因为只使用了2个查询点,因此LUT的size在全尺寸下也不会很大。作者是采用了1的间隔来实现ECLUT,所以精度是能够得到保证的,流程就可以分为,训练、转表以及推理,忽略确保精度的微调步骤。


1. 训练

代码实现如下:

### A lightweight deep network ###
class SRNet(torch.nn.Module):def __init__(self, upscale=4):super(SRNet, self).__init__()self.upscale = upscaleself.conv1 = nn.Conv2d(1, 64, [2,1], stride=1, padding=0, dilation=1)self.conv2 = nn.Conv2d(64, 64, 1, stride=1, padding=0, dilation=1)self.conv3 = nn.Conv2d(64, 64, 1, stride=1, padding=0, dilation=1)self.conv4 = nn.Conv2d(64, 64, 1, stride=1, padding=0, dilation=1)self.conv5 = nn.Conv2d(64, 64, 1, stride=1, padding=0, dilation=1)self.conv6 = nn.Conv2d(64, 9*upscale*upscale, 1, stride=1, padding=0, dilation=1)self.pixel_shuffle = nn.PixelShuffle(upscale)self.expand_conv = ExpandConv()# Init weightsfor m in self.modules():classname = m.__class__.__name__if classname.lower().find('conv') != -1:nn.init.kaiming_normal(m.weight)nn.init.constant(m.bias, 0)elif classname.find('bn') != -1:m.weight.data.normal_(1.0, 0.02)m.bias.data.fill_(0)def forward(self, x_in, alpha):B, C, H, W = x_in.size()x_in = x_in.reshape(B*C, 1, H, W)x = self.conv1(x_in)x = self.conv2(F.relu(x))x = self.conv3(F.relu(x))x = self.conv4(F.relu(x))x = self.conv5(F.relu(x))x = self.conv6(F.relu(x))x = self.pixel_shuffle(x)x = self.expand_conv(x)x = x.reshape(B, C, self.upscale*(H-1), self.upscale*W)return x * alpha

根据前面的讲解,ECLUT是在SRLUT的基础上进行的优化,因此整体结构的实现博主采取了与SRLUT的代码差不多的方式。不同之处在于:

1)ECLUT因为只使用了2个查询点,因此首层的卷积kernel_size是2x1。

2)pixel_shuffle之前的通道多了9倍,因为需要进行我们讲到的EC模块,即expand_conv。

3)最后的alpha加权,减小量化误差。

这里关于最重要的模块expand_conv的实现如下:

class ExpandConv(torch.nn.Module):def __init__(self):super(ExpandConv, self).__init__()passdef forward(self, inputs):# b, 9, h*scale, w*scale# (0,0) -> (2, 2)# pad left right top bottomshift_x1 = F.pad(inputs[:, 0:1, 1:, 1:], (0,1,0,1), mode='reflect')shift_x2 = F.pad(inputs[:, 1:2, 1:, :], (0,0,0,1), mode='reflect')shift_x3 = F.pad(inputs[:, 2:3, 1:, :-1], (1,0,0,1), mode='reflect')shift_x4 = F.pad(inputs[:, 3:4, :, 1:], (0,1,0,0), mode='reflect')shift_x5 = inputs[:, 4:5, :, :]shift_x6 = F.pad(inputs[:, 5:6, :, :-1], (1,0,0,0), mode='reflect')shift_x7 = F.pad(inputs[:, 6:7, :-1, 1:], (0,1,1,0), mode='reflect')shift_x8 = F.pad(inputs[:, 7:8, :-1, :], (0,0,1,0), mode='reflect')shift_x9 = F.pad(inputs[:, 8:9, :-1, :-1], (1,0,1,0), mode='reflect')result = shift_x1 + shift_x2 + shift_x3 +\shift_x4 + shift_x5 + shift_x6 + shift_x7 + shift_x8 + shift_x9result /= 9return result

对inputs进行9个方向的偏移,然后pad对应的长度使得其输出大小不变,最后将他们相加进行一个融合,完成了这个EC模块的计算过程。


2. 转表

首先我们需要初始化一个2D的输入。

def get_ec_lut(interval):# 1D inputbase = torch.arange(0, 257, interval)  # 0-256base[-1] -= 1L = base.size(0)# 2D input# 256*256   0 0 0...    |1 1 1...     |...|255 255 255...first = base.cuda().unsqueeze(1).repeat(1, L).reshape(-1)# 256*256   0 1 2 .. 255|0 1 2 ... 255|...|0 1 2 ... 255second = base.cuda().repeat(L)onebytwo = torch.stack([first, second], 1)  # [256*256, 2]# Rearange input: [N, 4] -> [N, C=1, H=2, W=2]input_tensor = onebytwo.unsqueeze(1).unsqueeze(1).reshape(-1, 1, 2, 1).float() / 255.0return input_tensor

然后送入推理即可,因为ECLUT是通过对多输出进行偏移得到更大的RF,因此这里就已经得到了最终所需要的LUT。


3. 测试

测试的部分,针对第一个卷积及其后面的1x1卷积部分,可以转换为一个完全精度的2D LUT,这个查询是不需要插值的,因此十分简单,第二个是expand_conv,只需要我们将1.训练中实现的torch版本改写为numpy的版本即可,对于最后的alpha加权,使用加2再右移2位来实现。这个代码的实现在ECLUT的讲解中有提到。


以上针对于ECLUT代码实现的部分讲解完毕,如果有不清楚的问题欢迎大家提出。

相关文章:

【LUT技术专题】ECLUT代码解读

目录 原文概要 1. 训练 2. 转表 3. 测试 本文是对ECLUT技术的代码解读,原文解读请看ECLUT。 原文概要 ECLUT通过EC模块增大网络感受野,提升超分效果,实现SRLUT的改进,主要是2个创新点: 提出了一个扩展卷积&…...

Wsl2 网络模式介绍

每个模式说明参考下面连接 使用 WSL 访问网络应用程序 | Microsoft Learn...

项目高压生存指南:科学重构身体与认知系统的抗压算法

引言:压力重构的工程学思维 在项目管理的高压熔炉中,优秀从业者与普通执行者的核心差异不在于抗压能力的高低,而在于是否掌握压力管理的系统化算法。本文摒弃传统的鸡汤式减压建议,从人体工程学、神经科学和认知心理学角度&#…...

Java设计模式之工厂方法模式:从入门到精通

1. 工厂方法模式概述 1.1 定义与核心思想 工厂方法模式(Factory Method Pattern) **定义:**是一种创建型设计模式,它定义了一个用于创建对象的接口,但让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 **核心思想:**工厂模式的核心思想是将对象的创建…...

生成自定义的androidjar文件具体操作

在Androidsdk目录下的platform找到对应的api的android源码包路径,如android-32拷贝里面的android.jar文件到目录,如 C:\Users\xxxxxxx\Desktop\android\new_android_jar,然后解压android.jar到目录new_android_jar下。在编译后的aosp源码中找…...

在一台CentOS服务器上开启多个MySQL服务

1. 创建目录 mkdir -p /data/mysql3307/{data,tmp,logs} # 赋权 chown -R mysql:mysql /data/mysql3307 chmod -R 750 /data/mysql3307 2.修改 /etc/my.cnf ,添加[mysqld3307]实例配置组 [mysqld3307] # MySQL服务的端口 port 3307 # 套接字文件存放路径 socket /…...

相机的方向和位置

如何更好的控制相机按照我们需要来更好的观察我们需要的地貌呢? 使用 // setview瞬间到达指定位置,视角//生成position是天安门的位置var position Cesium.Cartesian3.fromDegrees(116.397428,39.90923,100)viewer.camera.setView({//指定相机位置destination: position, 在…...

云原生架构下的微服务通信机制演进与实践

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:通信机制是微服务架构的基础 随着软件系统复杂度的提升,“单体架构 → 微服务架构 → 云原生架构”逐步成为企业数字化转型的演进主线。而在微服务架构中,“服务间通信机制”决定了系统的稳定性…...

Git标签删除脚本解析与实践:轻松管理本地与远程标签

Git 标签删除脚本解析与实践:轻松管理本地与远程标签 在 Git 版本控制系统中,标签常用于标记重要的版本节点,方便追溯和管理项目的不同阶段。随着项目的推进,一些旧标签可能不再需要,此时就需要对它们进行清理。本文将通过一个完整的脚本,详细介绍如何删除本地和远程的 …...

5G让媒体传播更快更智能——技术赋能内容新时代

5G让媒体传播更快更智能——技术赋能内容新时代 在5G时代,媒体传播已经不再是传统的“电视纸媒网站”模式,而是演变成超低延迟、高速传输、智能交互的全新生态。无论是直播、短视频、VR/AR内容还是AI驱动的个性化推荐,5G的高速连接能力都在让…...

数字IC前端学习笔记:锁存器的综合

相关阅读 数字IC前端专栏https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 锁存器是一种时序逻辑,与寄存器相比面积更小,但它的存在会使静态时序分析(STA)变得更加复杂,因此懂得什么样的设计会综合出…...

Spring Boot快速开发:从零开始搭建一个企业级应用

Spring Boot快速开发:从零开始搭建一个企业级应用 在当今的软件开发领域,Spring Boot已经成为构建企业级应用的首选框架之一。它不仅简化了Spring应用的初始搭建以及开发过程,还提供了许多开箱即用的功能,使得开发者能够快速地构…...

ATH12K驱动框架架构图

ATH12K驱动框架架构图 ATH12K驱动框架架构图(分层描述)I. 顶层架构II. 核心数据结构层次关系III. 主要模块详解1. 核心模块 (Core)2. 硬件抽象层 (HAL)3. 无线管理接口 (WMI)4. 主机目标通信 (HTC)5. 复制引擎 (CE)6. MAC层7. 数据路径 (DP)IV. 关键数据流路径1. 发送数据流 …...

数字信号处理|| 离散序列的基本运算

一、实验目的 (1)进一步了解离散时间序列时域的基本运算。 (2)了解MATLAB语言进行离散序列运算的常用函数,掌握离散序列运算程序的编写方法。 二、实验涉及的MATLAB子函数 (1)find 功能:寻找非零元素的索…...

集成管理工具Gitlab

GitLab 是一个功能强大的开源代码托管和协作平台,集成 GitLab 可以显著提升团队的开发效率。下面我将为你介绍如何集成 GitLab,包括安装配置和基本使用流程。 一、GitLab 安装与配置 GitLab 有多种安装方式,推荐使用官方 Omnibus 包安装&am…...

2025 年数维杯数学建模 C 题完整论文代码模型:清明时节雨纷纷,何处踏青不误春

《2025 年数维杯数学建模 C 题完整论文代码模型》 C题完整论文 一、问题重述 1.1 问题背景 2025 年第十届数维杯大学生数学建模挑战赛 C 题,将我们带入“清明时节雨纷纷,何处踏青不误春”的诗意情境。清明节,这个处于每年 4 月 4 日至 6 …...

2025数维杯数学建模C题完整限量论文:清明时节雨纷纷,何处踏青不误春?

2025数维杯数学建模C题完整限量论文:清明时节雨纷纷,何处踏青不误春? 清明节,在每年 4 月 4 日至 6 日之间,既是自然节气,也是我国重要 的传统节日,承载着中华民族千年的文化记忆与情感寄托。此…...

POSE识别 神经网络

Pose 识别模型介绍 Pose 识别是计算机视觉领域的一个重要研究方向,其目标是从图像或视频中检测出人体的关键点位置,从而估计出人体的姿态。这项技术在许多领域都有广泛的应用,如动作捕捉、人机交互、体育分析、安防监控等。 Pose 识别模型的…...

Missashe高数强化学习笔记(随时更新)

Missashe高数强化学习笔记 说明:这篇笔记用于博主对高数强化课所学进行记录和总结。由于部分内容写在博主的日记博客里,所以博主会不定期将其重新copy到本篇笔记里。 第一章 函数极限连续 第二章 一元函数微分学 第三章 一元函数积分学 第一节 不定…...

如何从极狐GitLab 容器镜像库中删除容器镜像?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 从容器镜像库中删除容器镜像 (BASIC ALL) 您可以从您的容器镜像库中删除容器镜像。 要基于特定标准自动删除容器镜像&#x…...

出现在‘{‘的段错误

今天在运行程序时,程序因段错误退出了,于是使用gdb调试。 部分输出如下: [New Thread 0x7fffc88be6c0 (LWP 47902)] [New Thread 0x7fffc80bd6c0 (LWP 47903)] [New Thread 0x7…...

【C++设计模式之Observer观察者模式】

Observer观察者模式 模式定义动机(Motivation)结构(Structure)应用场景一(气象站)实现步骤1.定义观察者接口2.定义被观察者(主题)接口3.实现具体被观察者对象(气象站)4.实现具体观察者(例如:显示屏)5.main.cpp中使用示例6.输出结果7. 关键点 …...

【软件测试】测试用例的概念与常见测试的模型

目录 一、测试用例的概念 1.1 什么是测试用例 1.2 编写测试用例的目的 1.3 用例设计的编写格式 二、模型 2.1 质量模型 2.2 测试模型 2.2.1 瀑布模型 2.2.2 螺旋模型 2.2.3 V 模型 2.2.4 W模型 2.2.5 增量、迭代模型 2.2.6 敏捷模型 2.2.6.1 敏捷宣言 2.2.6.2 Sc…...

OpenCV的 ccalib 模块用于自定义标定板的检测和处理类cv::ccalib::CustomPattern()----函数calibrate

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ccalib::CustomPattern 是OpenCV的 ccalib 模块中的一个类,主要用于自定义标定板的检测和处理。这个模块提供了比传统的 calib3d…...

高效管理钉钉收款单数据集成到MySQL的技术方案

钉钉数据集成到MySQL的技术案例分享:dd-收款单-->mysql(鸿巢)收款单(其他收款) 在企业日常运营中,数据的高效管理和实时处理至关重要。本文将聚焦于一个具体的系统对接集成案例:如何将钉钉平…...

介质访问控制(MAC)

介质访问控制(MAC)详解 介质访问控制(Medium Access Control, MAC)是数据链路层的核心子层,负责解决多个设备共享同一通信介质时的冲突问题。它的核心目标是:在广播或多路访问网络中,确保数据有…...

在Mac M1/M2上使用Hugging Face Transformers进行中文文本分类(完整指南)

在Mac M1/M2上使用Hugging Face Transformers进行中文文本分类(完整指南) 前言 随着Apple Silicon芯片(M1/M2)的普及,越来越多的开发者希望在Mac上运行深度学习任务。本文将详细介绍如何在Mac M1/M2设备上使用Huggin…...

企业如何将钉钉付款单高效集成到金蝶云星空?

钉钉数据集成到金蝶云星空:修改下推的付款单③ 在企业信息化系统中,数据的高效流转和准确对接是实现业务流程自动化的关键。本文将分享一个实际案例,展示如何通过轻易云数据集成平台,将钉钉中的付款单数据无缝集成到金蝶云星空系…...

软件确认报告:审查功能、评估标准及推动软件稳定高效运行

软件确认报告的主要任务是严格审查软件的各项功能,以此为基础,为精确评估其是否满足标准提供依据,并推动软件实现稳定与高效的运行。具体来说,报告将从目的、背景、所依据的资料、采用的测试手段以及最终的测试成效等几个方面进行…...

Github 热点项目 Cursor开源代替,AI代理+可视化编程!支持本地部署的隐私友好型开发神器。

Void编辑器今天必须拥有姓名!作为总星数近1.5万的顶流开源工具,它用三大绝活圈粉无数:① 隐私党狂喜!所有AI对话直连模型商,你的代码数据绝不留在别人服务器;② 自带时光机功能,AI修改代码时自动…...

影像超分——从低清到高清的跨越密码

在数字时代,影像超分技术宛如魔法般存在,它能让老旧模糊的照片焕发新生但目前面临着高计算量、稳定性不足,压缩与量化误差影响大,退化模型的估计难度高等痛点与挑战,本文将围绕影像超分的工作技术原理、应用场景等展开…...

Vue项目---懒加载的应用

懒加载 介绍原理展示详细解析模版部分脚本部分数据和变量IntersectionObserver加载更多数据生命周期钩子 代码Mock数据前端代码 介绍 懒加载(Lazy Loading)是一种常见的前端优化技术,用于延迟加载页面上的资源(如图片、视频、组件…...

前端自学入门:HTML 基础详解与学习路线指引

在互联网的浪潮中,前端开发如同构建数字世界的基石,而 HTML 则是前端开发的 “入场券”。对于许多渴望踏入前端领域的初学者而言,HTML 入门是首要挑战。本指南将以清晰易懂的方式,带大家深入了解 HTML 基础,并梳理前端…...

机器学习 期末考试题

自测试卷1 一、选择题 1.下面关于数据分析说法正确的是( )。 A.数据分析是数学、统计学理论结合科学的统计分析方法 B.数据分析是一种数学分析方法 C.数据分析是统计学分析方法 D.数据分析是大数据分析方法 2.下面不是数据分析方法的是( )。 A.同比分析 B.环比分析…...

BP神经网络

一、BP 神经网络概述 BP(Back Propagation)神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络,它是目前应用最广泛的神经网络模型之一。BP 神经网络由输入层、隐藏层和输出层组成,隐藏层可以有一层或多层。其学习过程由正…...

使用 NSSM 安装 Tomcat 11.0.6 为 Windows 服务

步骤 1&#xff1a;下载 NSSM 访问 NSSM 的官方网站&#xff1a;NSSM Download 下载适合您系统的版本&#xff08;通常是 nssm-<version>-win64.zip 或 nssm-<version>-win32.zip&#xff09;。 解压下载的文件。 步骤 2&#xff1a;将 NSSM 移动到 Tomcat 目录…...

拉西坦类促智药物的异同

吡拉西坦及其主要同类药物的深度研究报告 以下表格总结了本报告所讨论的主要拉西坦类药物的关键特性&#xff0c;以便进行直接比较。 表1&#xff1a;主要拉西坦类药物特性比较 特性 吡拉西坦 (Piracetam) 阿尼西坦 (Aniracetam) 奥拉西坦 (Oxiracetam) 普拉西坦 (Pramir…...

高级可视化图表分析实践——以《大侠立志传》武器系统为例

高级可视化图表分析实践——以《大侠立志传》武器系统为例 引言武器类型分布矩形树图结论 不同品质/类别武器的攻击力分布情况蜂群图分析结论 武器来源桑基图分析结论 武器附加属性词云图分析结论 不同品级武器装备熟练度要求/特质要求离散热力图结论品质与熟练度的正相关性品质…...

HT71663同步升压2.7V-13V输入10A聚能芯半导体禾润一级代理

在便携式设备飞速发展的今天&#xff0c;电源转换效率与产品尺寸始终是行业难以平衡的难题。但现在&#xff0c;HT71663 高功率全集成升压转换器强势登场&#xff0c;一举打破僵局&#xff0c;为便携式系统带来颠覆性的高效小尺寸解决方案&#xff01;​ HT71663 的卓越性能&am…...

3D桌面可视化开发平台HOOPS Native Platform,如何实现3D系统快速开发与部署?

无论是制造、工程还是软件行业&#xff0c;高效的3D应用开发能力都直接影响着产品创新、客户体验和市场响应速度。HOOPS技术&#xff0c;凭借领先的技术实力和广泛的行业应用&#xff0c;正成为推动企业数字化转型、驱动业务增长的核心引擎。本文将深入解析HOOPS技术的优势&…...

DeepResearch深度搜索实现方法调研

DeepResearch深度搜索实现方法调研 Deep Research 有三个核心能力 能力一&#xff1a;自主规划解决问题的搜索路径&#xff08;生成子问题&#xff0c;queries&#xff0c;检索&#xff09;能力二&#xff1a;在探索路径时动态调整搜索方向&#xff08;刘亦菲最好的一部电影是…...

使用Python删除PDF中多余或空白的页面

目录 为什么需要删除 PDF 中的多余或空白页面&#xff1f; 所需工具 环境准备 如何使用Python删除PDF中的多余页面 实现思路 详细实现步骤 实现代码 如何使用Python检测并删除PDF中的空白页 实现思路 详细实现步骤 实现代码 在处理 PDF 文件时&#xff0c;常常会遇到…...

什么是分布式光伏系统?屋顶分布式光伏如何并网?

政策窗口倒计时&#xff01;分布式光伏如何破局而立&#xff1f; 2025年&#xff0c;中国分布式光伏行业迎来关键转折&#xff1a; ▸ "430"落幕——抢装潮收官&#xff0c;但考验才刚开始&#xff1b; ▸ "531"生死线——新增项目全面市场化交易启动&…...

MySQL——七、索引

优势&#xff1a;极高查询效率&#xff1b;极高排序效率 劣势&#xff1a;占用磁盘空间&#xff1b;降低更新表的速度&#xff08;可忽略&#xff0c;磁盘相对便宜&#xff1b;增删改比例较小&#xff09; 索引结构 MYSQL的索引是在存储引擎层实现的&#xff0c;不同的存储引…...

LVGL的核心:lv_timer_handler

文章目录 &#x1f9e0; 一句话总结 LVGL 的运行核心&#xff1a;&#x1f501; 1. while(1) 主循环中的 lv_task_handler()⏱️ 2. lv_timer_handler() 定时器调度核心✅ 并发控制✅ 关键行为流程&#xff1a;&#x1f300; 任务执行逻辑&#xff1a;&#x1f9ee; 计算下一次…...

LLM量化方法:ZeroQuant、LLM.int8()、SmoothQuant、GPTQ、AWQ

文章目录 TLDR;量化分类量化时机量化粒度ZeroQuant: Efficient and Affordable Post-Training Quantization for Large-Scale Transformers细粒度硬件感知量化低成本逐层知识蒸馏&#xff08;Layer-by-layer Knowledge Distillation, LKD&#xff09; LLM.int8(): 8-bit Matrix…...

数据结构 集合类与复杂度

文章目录 &#x1f4d5;1. 集合类&#x1f4d5;2. 时间复杂度✏️2.1 时间复杂度✏️2.2 大O渐进表示法✏️2.3 常见的时间复杂度量级✏️2.4 常见时间复杂度计算举例 &#x1f4d5;3. 空间复杂度 &#x1f4d5;1. 集合类 Java 集合框架&#xff08;Java Collection Framework…...

AI服务器通常会运用在哪些场景当中?

人工智能行业作为现代科技的杰出代表&#xff0c;在多个领域当中发展其强大的应用能力和价值&#xff0c;随之&#xff0c;AI服务器也在各个行业中日益显现出来&#xff0c;为各个行业提供了强大的计算能力和处理能力&#xff0c;帮助企业处理复杂的大规模数据&#xff0c;本文…...

keepalived详细笔记

keepalived 是一种基于VRRP&#xff08;虚拟路由器冗余协议&#xff09;的高可用解决方案&#xff0c;主要是用于服务器的负载均衡和高可用性的保障&#xff0c;自动将服务切换到备份服务器上&#xff0c;确保业务的连续性。 工作原理&#xff1a; VRRP协议&#xff1a;一组路…...

基于大模型的母婴ABO血型不合溶血病全方位预测与诊疗方案研究

目录 一、引言 1.1 研究背景与目的 1.2 国内外研究现状 1.3 研究方法与创新点 二、母婴 ABO 血型不合溶血病概述 2.1 发病机制 2.2 临床表现 2.3 流行病学特征 三、大模型在母婴 ABO 血型不合溶血病预测中的应用 3.1 模型选择与构建 3.2 预测指标与数据输入 3.3 模…...