论文解读:High Dynamic Range and Super-Resolution from Raw Image Bursts
论文解读:High Dynamic Range and Super-Resolution from Raw Image Bursts
今天介绍一篇发表于 2022 年 ACM Tranaction on Graphic 上的文章,这篇文章通过多帧曝光将 HDR 与 SR 放在一起解决,与一般的文章不同的地方在于,这篇文章是在 RAW 域处理这个问题。文章中的方法对于成像过程进行了准确的物理建模,同时利用一个迭代的优化方法求解图像恢复的逆问题,为了更好地解决这个图像恢复逆问题,文章中结合了基于特征学习的图像配准以及一个基于学习的图像先验。
Introduction
不管是手机摄影,还是单反摄影,图像的分辨率以及动态范围都是非常重要的两个参数,图像的分辨率反映了对细节的呈现能力,图像的动态范围反映了对环境整体明暗的呈现能力。单反因为有更大的机身,所以可以用更大的 sensor 以及更好的镜头,以笨重不易携带为代价,换取了更好的成像分辨率及动态范围。手机一般受到硬件尺寸的限制,在镜头及 sensor 上比起单反都要次一些,目前市面上主流的旗舰机的 sensor 尺寸大概 1/1.4 - 1/1.8 英寸之间,在这个尺寸上,要排布 3000 万 - 5000 万 个像素,意味着每个像素的面积都很小,所能捕获的动态范围也就很窄了。为了能捕获更宽的动态范围,一般都是利用多曝光融合的技术,就是对同一个场景,用不同的曝光连拍若干张,然后再利用算法进行配准,融合,这样获得的图像的动态范围,比起单曝光来说,都会大很多。然后说到超分,超分通俗来说就是数字变焦,单反的镜头是可以变焦的,所以拍摄远景的时候,可以通过将焦距拉长,从而对远景获得更高的分辨率,但是手机镜头都是固定焦距的,这种情况下怎么办呢,所以工程师们想到了数字变焦的技术,既然无法把镜头的焦距拉长,那就通过超分的技术,将远景的分辨率变大。超分本质上是一种数值插值的技术,在插值倍率不大比如 2 倍或者 3 倍的时候,几乎可以和实际的物理采样相当,不过一旦插值倍率太大,到了 4 倍以上,这个差异还是很明显的。超分有基于单帧的,也有基于多帧的。
HDR 以及 SR 是学术界一直在研究的课题,特别是随着深度学习的盛行,涌现了很多关于这方面的工作,不过绝大部分的工作都是在 sRGB 域,这篇文章的创新在于以下几点:
- 与之前在 sRGB 域处理的方式不同,这篇文章是在 RAW 域进行处理
- 与之前大部分工作将 HDR 及 SR 分开处理不同,这篇文章将 HDR 及 SR 联合处理,从信息融合的角度来说,HDR 及 SR 都可以通过多帧融合来实现
- 之前大部分的工作都是用深度网络学习一个映射,这篇文章是通过一个迭代优化的方式来解决,同时结合了基于特征学习的图像配准以及基于学习的图像先验信息,文章认为这样可以获得更加鲁棒的结果。
Image Formation Model
首先介绍一下成像过程,实际的成像过程一般都是一个退化的过程,也就是从一个高分辨率,高动态范围的场景,通过镜头,sensor 的转换,最后得到一张低分辨率,低动态范围的 RAW 图。
Dynamic Range
首先来看动态范围,我们知道现在的单反或者手机拍摄出来的都是数字图像,这都是 sensor 上通过模数转换及量化后得到的。在 RAW 域上,一个像素可以表示的数值范围是由该像素可以量化的位宽决定的,比如位宽是 10bit,那该像素可以表示的数值范围就是 0 - 1023,所以位宽是 qqq 的像素可以表示的数值范围就是 0∼2q−10 \sim 2^{q} -10∼2q−1,而一个像素可以表示的动态范围是该像素可以表示的最大数值和最小数值之比,最大数值很好理解,一般就是 0∼2q−10 \sim 2^{q} -10∼2q−1,不过最小数值一般不是 0,因为 sensor 即使在完全无光的环境下,sensor 由于自身的噪声及黑电平,也会有一定的数值。
Exposure
接下来看曝光,在 RAW 域,像素的数值和曝光时间是线性关系,在光圈及 ISO 固定的情况下,像素的数值可以近似表示成如下的关系:
y(u)=S(Δtx(u))y(u) = S(\Delta t x(u)) y(u)=S(Δtx(u))
y(u)y(u)y(u) 表示 RAW 图上像素记录的像素值,x(u)x(u)x(u) 可以理解为环境的光照辐射强度,Δt\Delta tΔt 表示曝光时间,SSS 表示一个映射函数,不过需要注意的是,上面的表达式,只有在像素值没有超过可以表示的最大数值的时候是成立的,如果超过了该像素可以表示的最大数值,那就会出现饱和截断,这个时候就不再满足线性关系了。
Noise and SNR
最后,再看一下噪声及信噪比,之前也做过关于 sensor 噪声的详细分析,简单来说,sensor 上的噪声可以分为与环境光照也就是信号相关的噪声,以及与信号无关的噪声,与信号相关的噪声服从泊松分布,与信号无关的噪声服从高斯分布,文章中将这个噪声分布建模成如下的分布:
s(u)=αy(u)+βs(u) = \sqrt{\alpha y(u) + \beta} s(u)=αy(u)+β
α,β\alpha, \betaα,β 分别表示泊松分布以及高斯分布的方差,信噪比表示为:
SNR(u)=m(u)y(u)s(u)=m(u)y(u)αy(u)+βSNR(u) = \frac{m(u)y(u)}{s(u)} = \frac{m(u)y(u)}{\sqrt{\alpha y(u) + \beta}} SNR(u)=s(u)m(u)y(u)=αy(u)+βm(u)y(u)
m(u)m(u)m(u) 表示一个二值蒙版,将饱和截断的像素过滤掉,可以看到信噪比会随着信号的增大而增大。
Overall image formation model
整个成像过程可以看成是一个真实的高分辨率,高动态范围的图像 XXX:sH×sW×3sH \times sW \times 3sH×sW×3,退化成了 KKK 个低分辨率,低动态范围的图像 YYY: H×WH \times WH×W,sss 表示图像分辨率变化的尺度信息,假设 Wk\mathcal{W}_kWk 表示采集第 kkk 个图像时的相机位移信息,BBB 表示成像时的模糊过程,DsD_sDs 表示降采样过程,CCC 表示 sensor 的 CFA,整个退化过程可以表示为:
Yk=CDsBWk(ΔtkX)Y_k = C D_s B \mathcal{W}_k (\Delta t_k X) Yk=CDsBWk(ΔtkX)
令 Ak=ΔtkCDsBWkA_k = \Delta t_k C D_s B \mathcal{W}_kAk=ΔtkCDsBWk,整个过程可以表示为:Yk=AkXY_k = A_kXYk=AkX
再考虑后面的非线性映射,最终的退化过程表示为:
Yk=S(AkX+ϵk)Y_k = S(A_kX + \epsilon_k ) Yk=S(AkX+ϵk)
目前这个过程只考虑了相机的抖动,没有考虑场景中物体的移动,也就是认为场景是相对静态的,如果用这个过程直接求解场景中有物体移动的情况,可能会出现鬼影问题,文章也在后面针对这个问题提出了解决的思路。
Proposed Approach
前面介绍了成像过程相关的几个重要因素,包括动态范围,曝光,噪声等,同时也对成像的退化过程做了建模,但我们最终其实是要求解一个反问题,也就是说,我们观察到的是若干张不同曝光的低分辨率,低动态范围的图像,Y={Y1,Y2,...,Yk}\mathcal{Y} = \{Y_1, Y_2, ..., Y_k \}Y={Y1,Y2,...,Yk},其对应的曝光时间为 {Δt1,...,Δtk}\{\Delta t_1,...,\Delta t_k\}{Δt1,...,Δtk}如何求解得到一张高分辨率,高动态范围的图像 XXX ?
X^=Fθ(Y,θ)\hat{X} = F_\theta(\mathcal{Y}, \theta) X^=Fθ(Y,θ)
这个问题最终可以转化成求解如下的逆问题:
minX,W1,...,Wk12∑k=1K∣∣Wk⊙(Yk−AkX)∣∣F2+λΩ(X)\min_{X, W_1, ..., W_k} \frac{1}{2} \sum_{k=1}^{K} || W_k \odot (Y_k - A_k X) ||_{F}^{2} + \lambda \Omega(X) X,W1,...,Wkmin21k=1∑K∣∣Wk⊙(Yk−AkX)∣∣F2+λΩ(X)
WkW_kWk 可以看成是每一帧的融合权重,文章中介绍了一种较为鲁棒的融合权重的计算策略:
Wk=Δtkm(Yk)∑j=1KΔtjm(Yj)⊙g(Yk,WkY0)W_k = \frac{\Delta t_k m(Y_k) }{ \sum_{j=1}^{K} \Delta t_j m(Y_j) } \odot g(Y_k, \mathcal{W}_k Y_0) Wk=∑j=1KΔtjm(Yj)Δtkm(Yk)⊙g(Yk,WkY0)
这个融合权重的计算,考虑了两部分,一个是曝光时间,一个是配准的可信度,显然,文章认为曝光时间越长,信噪比越好,图像的质量也就越好,不过曝光时间越长,配准的可信度可能也会降低,所以综合考虑了两者,m(Y)m(Y)m(Y) 是一个二值化的蒙版,对于超出数值范围,已经饱和的像素值,对应的蒙版值为 0,如果所有帧在某个像素点上都饱和了,那就赋予一个平均的权重,ggg 是一个衡量配准置信度的函数,ggg 可以是传统的基于特征的或者基于先验的函数,文章中利用学习的方法,学习了一个基于特征匹配的函数来衡量配准置信度。
图像配准,文章使用了仿射变换,将图像分成若干个 200×200200 \times 200200×200 的图像块,然后每个图像块计算一个仿射变换。至于正则项,文章中学习了一个降噪的 CNN 模型作为正则项。
接下来,就是介绍如何利用迭代的优化方法来求解这个逆问题,文章中使用了 half-quadratic splitting (or
HQS) 的优化算法,这是非常经典的一种优化算法,通过引入一个中间变量,将优化问题变得更容易求解:
minX,Z,p12∑k=1K∣∣Wk⊙(Yk−AkZ)∣∣F2+η2∣∣X−Z∣∣F2+λΩ(X)\min_{X, Z, p} \frac{1}{2} \sum_{k=1}^{K} || W_k \odot (Y_k - A_k Z) ||_F^{2} + \frac{\eta}{2} || X - Z||_F^{2} + \lambda \Omega(X) X,Z,pmin21k=1∑K∣∣Wk⊙(Yk−AkZ)∣∣F2+2η∣∣X−Z∣∣F2+λΩ(X)
这个优化是一个交替迭代优化的过程,首先是对 p,Zp, Zp,Z 进行初始化,然后利用下面介绍的步骤交替迭代优化,一般迭代 3 步左右,就能得到一个不错的优化结果。
-
更新 ZZZ
Z←Z−δ(η(Z−X)+∑k=1KAkT(Wk⊙(AkZ−Yk)))Z \gets Z - \delta \left( \eta(Z-X) + \sum_{k=1}^{K}A_k^{T}(W_k \odot (A_kZ - Y_k)) \right) Z←Z−δ(η(Z−X)+k=1∑KAkT(Wk⊙(AkZ−Yk))) -
更新 XXX
X=G(Z,λ/η)=arg minX12∣∣X−Z∣∣F2+ληΩ(X)X = G(Z, \lambda/\eta) = \argmin_{X} \frac{1}{2} ||X - Z||_F^{2} + \frac{\lambda}{\eta}\Omega(X) X=G(Z,λ/η)=Xargmin21∣∣X−Z∣∣F2+ηλΩ(X) -
更新 ppp
ppp 是配准相关的参数,文章中是参考了 Lecouat et al. [2021] 等人的方法,通过对 200×200200 \times 200200×200 的图像块构建 4 种尺度的高斯金字塔,然后在每层高斯金字塔上用 Lucas-Kanade 方法计算配准参数,文章中没有在图像块上进行这个过程,而是在学习到的图像特征上进行这个过程。 -
p,Zp, Zp,Z 的初始化
文章中对 p,Zp, Zp,Z 的初始化也做了介绍,ppp 的初始化是基于傅里叶变换的一种方式,对于 ZZZ 的初始化,是对 YkY_kYk 用双线性插值的方式先做 demosaick,然后进行一个大致的对齐,然后利用曝光时间计算每一帧的融合权重,Wk=Δtk/∑j=1KΔtjW_k = \Delta t_k / \sum_{j=1}^{K} \Delta t_jWk=Δtk/∑j=1KΔtj 进行融合,最后再利用双线性插值进行上采样 sss 倍,得到 ZZZ 的估计值。
Learnable architecture
HQS 通过引入一个中间变量,将优化问题转换成迭代优化的形式,接下来就是要确认 $ G(Z, \lambda/\eta)$ 以及 g(Yk,WkY0)g(Y_k, \mathcal{W}_k Y_0)g(Yk,WkY0) 的具体形式,文章中将这两个函数都转换成了神经网络 CNN,用神经网络 CNN 来构造这样一个函数。通过构建训练数据对,学习这样两个神经网络。
- 第一个优化函数可以改写成
G(Z,λ/η)→Gw(Z,γ)G(Z, \lambda/\eta) \to G_w(Z, \gamma) G(Z,λ/η)→Gw(Z,γ)
GwG_wGw 可以看成是一个可以学习的 CNN,文章中用的是 U_Net 结构。
- 第二个优化函数可以改写成
Wk=Δtkm(Yk)∑j=1KΔtjm(Yj)⊙g(Yk,WkY0)→Δtkm(Yk,c)∑j=1KΔtjm(Yj,c)⊙gp(Yk,WkYk0)W_k = \frac{\Delta t_k m(Y_k) }{ \sum_{j=1}^{K} \Delta t_j m(Y_j) } \odot g(Y_k, \mathcal{W}_k Y_0) \to \frac{\Delta t_k m(Y_k, c) }{ \sum_{j=1}^{K} \Delta t_j m(Y_j, c) } \odot g_p(Y_k, \mathcal{W}_k Y_{k0}) Wk=∑j=1KΔtjm(Yj)Δtkm(Yk)⊙g(Yk,WkY0)→∑j=1KΔtjm(Yj,c)Δtkm(Yk,c)⊙gp(Yk,WkYk0)
gpg_pgp 也用一个小型的 U_Net 来实现。对每个输入的 YYY RAW 图通过 U_Net 提取一个单通道的 feature map,然后对提取的 feature map 使用多尺度的 Lucas Kanade 算法计算配准参数,通过网络,可以同时学习 feature map 以及配准参数。
Learning the model parameters θ\thetaθ
文章将所有的可优化参数统称为 θ\thetaθ,为了训练先验模型中的 CNN 参数,以及配准模型中的 CNN 参数,需要构建训练数据对,(Xi,Yi,Δi)(i=1,2,..n)(X^{i}, Y^{i}, \Delta^{i})(i=1,2,..n)(Xi,Yi,Δi)(i=1,2,..n),实际场景的数据对很难获取,文章也是通过仿真的方式构建训练数据,将 sRGB 图像通过逆 ISP 得到低分辨率,低动态范围的 RAW 图。训练 loss 如下所示:
minθ∑i=1n∣∣Xi−Fθ(Yi,Δi)∣∣1\min_{\theta} \sum_{i=1}^{n} || X^{i} - F_{\theta}(Y^{i}, \Delta^{i}) ||_{1} θmini=1∑n∣∣Xi−Fθ(Yi,Δi)∣∣1
文章做了充分的验证实验,包括将 HDR,SR,去马赛克,去噪联合起来处理,同时也对单一的任务,包括 SR, HDR, 配准等任务进行了对比分析。文章中用 Pixel 3a or 4a camera 拍摄实际的图像,每个场景拍摄大概 11-18 张 RAW 图,每张 RAW 图的曝光时间 EV 为 1/3 - 2/3 之间。
相关文章:
论文解读:High Dynamic Range and Super-Resolution from Raw Image Bursts
论文解读:High Dynamic Range and Super-Resolution from Raw Image Bursts 今天介绍一篇发表于 2022 年 ACM Tranaction on Graphic 上的文章,这篇文章通过多帧曝光将 HDR 与 SR 放在一起解决,与一般的文章不同的地方在于,这篇文…...

国内的PMP考试通过率高达97%?
自认为是虚高,虽然国人在考试方面的确独树一帜的强,应该也没有这样夸张。 如果自学,大概是50%,如果有老师教,那大概是60%到80%,还是比较高的。 为什么自学那么低?除了自身的自制力的问题&…...

IOC(概念和原理)
文章目录1. IOC容器概念2. IOC底层原理3. IOC(接口)4. IOC操作Bean管理(概念)5. IOC操作Bean管理(基于xml方式)5.1 基于xml创建对象5.2 基于xml方式注入属性5.2.1 DI:依赖注入,就是注…...
操作系统 - 第二章
一、进程的定义、组成、组织、特征 一、进程的定义 从不同的角度,进程有不同的定义 1、进程是程序的一次执行过程; 2、进程是一个程序及其数据在处理机上顺序执行时所发生的活动; 3、进程是具有独立功能的程序在数据集合上运行的过程…...

进程控制~
进程控制 (创建、终止,等待,程序替换) 进程创建: pid_t fork();父子进程,数据独有,代码共享,各有各的地址 pit_t vfork();父进程阻塞,直到子进程exit退出或者程序替换之…...

HCIP第一个实验
实验要求与实验拓扑子网划分分析将骨干链路看成一个整体,路由器后的2个环回地址先看成一个,最后再进行拆分。计算得出,一共需要划分为6个子网段,取三位。再将每一条网段,按照题目要求进行划分最后完成子网划分。子网划…...
阿里云轻量服务器--Docker--dubbo-admin安装(连接zookeeper nacos)
前言:当使用dubbo 作为微服务的接口调用,在dubbo 注册到zookeeper 或者nacos 中时 可以安装dubbo-admin 作为服务的监测; 1 Dubbo Admin 介绍: Dubbo 框架提供了丰富的服务治理功能如流量控制、动态配置、服务 Mock、服务测试等…...

树莓派Pico W无线WiFi开发板使用方法及MicroPython编程实践
树莓派Pico W开发板是树莓派基金会于2022年6月底推出的一款无线WiFi开发板,它支持C/C和MicroPython编程。本文介绍树莓派Pico W无线WiFi开发板的使用方法及MicroPython编程示例,包括树莓派Pico W开发板板载LED使用及控制编程示例,Pico W开发板…...

Redis学习【11】之分布式系统
文章目录一 数据分区算法1.1 顺序分区1.1.1 轮询分区算法1.1.2 时间片轮转分区算法1.1.3 数据块分区算法1.1.4 业务主题分区算法1.2 哈希分区1.2.1 节点取模分区算法1.2.2 一致性哈希分区算法1.2.3 虚拟槽分区算法二 分布式系统环境搭建与运行2.1 系统搭建2.1.1 系统架构2.1.2 …...
光速c数列的猜想:光猜
光速c数列的猜想:光猜 2023-03-05 10:26:30 猜测:不同的宇宙光速c并不同 分成等级数列c0,c1,c2,...cn... 地球所处宇宙的真空光速c为c1,其中c0或许假设为光在纯水中速度乎 亦有可能仅有六级对应六道。 宇宙外,容器外也,超过光速c1,为光速c2,可看到容器…...
2023年全国最新交安安全员精选真题及答案12
百分百题库提供交安安全员考试试题、交安安全员考试预测题、交安安全员考试真题、交安安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 21.作业场所监督检查是安全生产监督管理的一种重要形式,作业场所监督…...
2023年全国最新安全员精选真题及答案14
百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 81.(单选题)正常工作状态下,高处作业吊篮悬挂机构抗…...
让Vue响应Map或Set的变化操作,在vue中响应map和set数据结构,计算属性的用法,计算属性特点
明确一点 vue的响应式系统不支持Map和Set,也就是说,当Map与Set里面的元素变化时Vue追踪不到这些变化,因此无法做出响应。 如下demo其实是不会进行数据相应的 <h1 v-for"(item,index) in mySetAsList" :key"index"&…...

Unable to find a valid cuDNN algorithm to run convolution
Unable to find a valid cuDNN algorithm to run convolution 今天在复习HumanNerf的时候发现了这个报错, import torch print(torch.cuda.is_available()) 使用上面的代码发现GPU是可以用的,可自己的torch版本对应。 后面继续看帖子,总结有…...

Linux 进程:进程退出返回值的获取
目录一、对输出参数status的理解二、获取进程退出返回值1.位运算(1)异常退出码(2)进程返回值2.宏函数我们常使用函数 wait 和 waitpid 来执行进程等待的功能:处理退出的子进程并释放资源,防止子进程变成僵尸进程。而这两个函数都有一个输出参数status&am…...
JavaScript核心高级内容复习1
本节概述 数据类型的分类和判断 基本(值)类型 Number ----- 任意数值 -------- typeofString ----- 任意字符串 ------ typeofBoolean ---- true/false ----- typeofundefined — undefined ----- typeof/null -------- null ---------- 对象(引用)类型 Object ----- typeof…...

2D图像处理:Qt + Opencv使用光度立体法检测Halcon中提供的缺陷图像
文章目录 不需知道光源方向一、光度立体法(后续有时间在查资料研究)1.1 问题1:Slants和Tilts的理解(暂时是理解的)1.2 问题1:Gradient通道数为1,为何像素点对应的值会有两个?1.3 问题2:F(r,c)=(u(r,c),v(r,c)) 关于高斯曲率和平均曲率如何计算的?二、非标定光源实现光…...
怎样用sql去查一个订单表中一个店铺一段时间的营业收入的环比
一:思路 要查询一个订单表中一个店铺一段时间的营业收入的环比,可以按照以下步骤进行操作: 使用SELECT语句选择需要的数据列,如订单日期和订单金额,以及店铺名称列。 使用WHERE语句过滤出指定店铺和时间段的订单数据…...

SpringSecurity: 默认添加的15个Filter是怎么添加进去的?
总的流程分为两部分,一是先用Map把configurer收集起来,然后再把maper中所有的configurer应用到HttpSecurity对象。 其中的map位于AbstractConfiguredSecurityBuilder这个类。 private final LinkedHashMap<Class<? extends SecurityConfigurer&l…...

学习记录---latent code 潜在编码
文章目录参考文献1. 什么是潜在编码?2.什么是潜在空间?3.同类潜在编码的相似性4.潜在编码的应用4.1 Antoencoders4.2 Generative models5.结论个人学习总结,持续更新中……参考文献 [1] 快速理解深度学习中的latent code潜在编码 1. 什么是…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...

华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...

C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...
Qt Quick Controls模块功能及架构
Qt Quick Controls是Qt Quick的一个附加模块,提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中,这个模块经历了重大重构和改进。 一、主要功能和特点 1. 架构重构 完全重写了底层架构,与Qt Quick更紧密集成 移除了对Qt Widgets的依赖&…...