轻量且高性能的视频超分算法——BasicVSR

2023-11-03 22:59

本文主要是介绍轻量且高性能的视频超分算法——BasicVSR,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

a082333640d3558bd0845df6b32d4e83.gif

向AI转型的程序员都关注了这个号👇👇👇

这篇文章是2021年的CVPR,文章作者是和EDVR同一批的人。该篇文章提出了一个轻量且高表现性能的视频超分framework——BasicVSR。BasicVSR改进了传统VSR结构中的propagation和alignment部分,分别提出了一个双向视频流的循环结构以及基于flow-based的feature-wise对齐方法。此外,在BasicVSR的基础上,作者进一步对propagation和aggregation进行优化,产生了一个更高表现性能的VSR结构——IconVSR。

https://arxiv.org/abs/2104.13371

https://github.com/open-mmlab/mmagic

作者将VSR分为4个功能块,即通用的VSR的pipeline为:Propagation、Alignment、Aggregation(Fusion)、Upsampling。作者通过设计一种双向循环结构的propagation、基于光流的feature-wise的alignment以及使用现存的一些融合和上采样方法,形成一种简单轻量的在速度和重建表现力上都优于现存VSR结构的视频超分方法——BasicVSR。

BasicVSR可以作为一种后续研究VSR的baseline,我们可以以它为backbone,继续往上增加一些功能。

作者向我们展示了如何延申BasicVSR:通过对BasicVSR的propagation部分增加coupled-propagation结构,以及在Aggregation部分增加Information-refill来形成一个更高表现力且模型量略微增加的VSR模型——IconVSR,它和BasicVSR都可以作为后续研究的基石。

一般来说,视频超分比SISR更加复杂,因为他要处理多帧的融合问题以及不同时间帧之间的对齐问题。在EDVR中,其作者引入多尺度的可变形卷积网络来做对齐,用时间和空间注意力来做融合;类似的视频超分还有TDAN、Robust-LTD、VESPCN、DUF、FRVSR、RSDN等。这些方法基本上各有各的设计,且诸如RBPN和EDVR还会有较大的模型参数,具体如下图所示:

fa41bfd2f1fef7010997fcfcb34351dd.png

因此作者试图去设计一种更通用、更有效率、轻量的VSR模型作为我们日后研究的baseline。

于是,BasicVSR就开始了!

1 Introduction

首先将VSR分为4个部分:

①Propagation:它决定了VSR如何去利用视频序列的信息,它可以将所有的VSR分为Sliding-Window和Recurrent两类。

②Alignment:时间和空间上的关于内容对齐。

③Aggregation:特征信息的聚合,或者可以说就是Fusion,它旨在将对齐后的连续帧进行时间和空间上的特征融合。

④Upsampling:上采样层,将融合后的特征信息转变成H R HRHR层级的信息。

作者列举了近年来的几种VSR方法,并按照上述的pipeline进行整理归纳,具体如下图所示:

5c06e5375d586a24ebb65d8605016711.png

从图中可以看出,BasicVSR对Propagation和Alignment做了新的设计,而对于Aggregation和Upsampling则利用之前的VSR的方法。具体而言,BasicVSR的Propagation使用了Bidirectional(双向)循环机制,分为前向分支和后向分支,将整个输入序列的所有信息都加入到后续的对齐中;而对齐子网络使用flow-based方法,但对齐是feature-wise的,即使用光流估计,但是对齐是做在feature map上的;融合使用最基本的concat(或者说就是Early fusion);上采样使用ESPCN提出的PixelShuffle,即亚像素卷积层。BasicVSR这种结构在性能和速度上都取得了很大的突破,证明了BasicVSR的可行性和轻量性。

BasicVSR最有价值的地方在于其可以作为一个起点,一个日后VSR研究的baseline,通过不断地扩展四个部分来设计新的VSR模型。作者给了如何去扩展的例子——IconVSR。IconVSR则是在BasicVSR的基础上,对Propagation和Aggregation做了升级。具体而言,Propagation部分进一步引入Coupled机制,旨在前向分支中加入后向分支的信息,这样的好处在于对于遮挡区域在刚露出来的时候,它可以基于后向的信息来较好的重建出这一块刚出现的区域;对齐部分还是和BasicVSR是一样的;Aggregation部分引入了Information-refill,它可以弥补BasicVSR丢失的一些信息,比如说在遮挡区域、边界区域,Information-refill就可以通过一个额外的特征提取模块对关键帧及其相邻支持帧进行对齐和融合,然后将结果和原来对齐之后的进行融合,然后送进特征校正模块去refine;此外Propagation这种方式容易长序列输入方式容易不断堆积误差,特别是对齐误差,因此会对一些细节区域造成很大影响,而Information-refill会去校正这一问题。IconVSR基于这两个提升点,超越了BasicVSR的性能,但是由于额外的特征提取模块使得IconVSR的模型参数会增加一些,但从Figure 1来看,模型量的增加还可以接受。

Note:

在BasicVSR中,光流估计是利用SpyNet做的。

在IconVSR中,额外的特征提取模块是利用一个轻量级的EDVR去做的。

2 Related Work

3 Methodology

3.1 BasicVSR

接下来我们具体分析BasicVSR的4个子网络的结构及其功能,首先总的模型如下所示:

①Propagation

BasicVSR的Propagation采用双向循环机制(bidirectional),即前向分支后后向分支;而我们之前接触的例如VESPCN、TDAN、Robust-LTD、EDVR等都是每次输入一个时间窗口(比如连续5帧),这种Propagation称之为local,也就是说网络每次考虑的是一个长视频序列的局部信息。此外,FRVSR、RSDN属于另一个分支,即单向循环分支(unidirectional)。接下来我们具体分析下这3种Propagation的优点和缺点,并推出BasicVSR的做法:

568d8a1fbfaa19cfcb289f7bea765cd6.png

①Propagation

BasicVSR的Propagation采用双向循环机制(bidirectional),即前向分支后后向分支;而我们之前接触的例如VESPCN、TDAN、Robust-LTD、EDVR等都是每次输入一个时间窗口(比如连续5帧),这种Propagation称之为local,也就是说网络每次考虑的是一个长视频序列的局部信息。此外,FRVSR、RSDN属于另一个分支,即单向循环分支(unidirectional)。接下来我们具体分析下这3种Propagation的优点和缺点,并推出BasicVSR的做法:

Local:Local属于sliding-window方法,每个样本含有D 帧,其中D是时间窗口(尺度)的大小。这种方式虽然简单,但是每次只考虑整个序列的局部信息,对于较远的输入信息是无法获取的。在我们的认知中,虽然离参考帧越近的信息越有用,所以Local类方法都只考虑邻近的支持帧,但是其实较远的帧也能提供有用的信息,甚至窗口的帧信息也不是都有用的,有的还会影响重建。因此显然Local这种Propagation考虑不全面的缺陷会限制其在VSR表现力的提升。为了证明这一点,作者做了一个实验,将一个长输入序列分为K KK段,其中K = 1 的时候就是一整个输入序列,即Global Propagation,实验结果如下:

f1d26645c52294f7303eca9148c8d079.png

从实验中可知:①分段K KK越小对表现力的提升越大,说明了越大的时间感受野越有利于视频超分,即较远的帧信息也很重要,不能像Local那样去忽略他们。②分段之后序列的首端和尾端出的表现力会下降比较厉害且时间窗口越小,下降的次数越多,这说明了采用一个较长序列作为输入还是有必要的。

Unidirectional:解决Local的一个方式就是使用从视频序列头到尾作为输入的方式,但这样也有个问题就是对于不同帧来说是不公平的。具体而言,对于首端的帧来说,其可以利用的特征信息只有它自己,而末端的帧可利用的是整个序列的所有信息。这种信息的不平衡带来的最大问题就是,早期的视频帧会陷入局部最优。为了验证这一点,作者做了相关的实验,实验结果如下:

473571c1e3cd61f0d6fb29525d999c0d.png

从实验结果中可知:①序列前端的重建效果比较差,后期的倒是和双向的差不多,这就体现了单向的缺陷。②中间段一直处于比双向(虚线)低了近0.5dB,这说明无法利用较后的信息会限制VSR的表现性能。

Bidirectional:Local的考虑不全面问题和单向的不平衡问题都可以使用一个双向机制来解决,BasicVSR设计了一个前向分支,让输入从头帧到尾帧不断进行VSR;后向分支,让输入从尾帧到头帧不断进行VSR。具体的,对于每一个参考帧x i ,其前邻帧x i − 1  、后邻帧x i + 1  ,以及2个邻帧各自相关的隐藏状态(双向机制利用RNN的存储结构,将之前或之后的信息记忆在隐藏状态h hh中)。双向循环结构如下所示:

c192cd1f3226ff13c8339847811115bd.png

c540f30f64a83fabc50e0adf493c969c.png

②Alignment

对齐主要分为3种:无对齐、图像对齐(image-wise)、特征对齐(feature-wise)。常见的图像级对齐有VESPCN、Robust-LTD等;特征级对齐是一种隐式对齐的方式,其对齐发生在feature map上,它通过隐式捕捉运动来完成隐式的运动补偿,常见的比如TDAN、EDVR等。接下来我们具体分析这三种方式的优缺点,并提出BasicVSR的做法:

Without alignment:RSDN采用的就是一种非对齐的方式,非对齐的方式由于节省了对齐模块,故在效率和资源消耗上会少很多。但是相比对齐,非对齐是一定会弱化最终VSR的表现力的。为了验证非对其的次优性,作者将BasicVSR的对齐模块删去,直接将非对其特征进行concat然后重建,由于BasicVSR的卷积核一般比较小,故非对齐下的PSNR下降了1.19dB,因此非对齐下想要通过更好的融合信息,需要加大感受野,增加卷积的采样范围。

Image alignment:对齐方式中分为图像级对齐和特征对齐,判断的关键就是warp发生在图像上还是feature map上,或者说最后输出的是对齐的图像还是对齐的feature map。大多flow-based对齐方式都是image-wise的,例如VESPCN、Robust-LTD等,但是Understanding Deformable Alignment in Video Super-Resolution这篇文章证明了feature-wise对齐比image-wise对齐能产生更大的性能提升。这其实起源于Image-wise对齐高度依赖于运动(光流)估计的准确性,较低的精度会导致输出对齐图像上出现很多artifacts,比如模糊重影等,为后续融合SR带来性能的下降。作者做了相关实验,基于image对齐在PSNR上下降了0.17dB,这也这个证明了将对齐坐在feature-wise的重要性。

Feature alignment:特征对齐的VSR有诸如TDAN、EDVR等,他们都是flow-free方法,而BasicVSR的对齐模块基于flow-based,但是对齐做在feature map上,即对feature做warp,而不是warp在Image上。其实做在feature map上的另一个好处在于对齐的feature map虽然也会因为隐式的运动补偿出现特征上的artifacts,但它可以继续通过卷积进行校正,减缓后续图像层级上artifacts的出现。在BasicVSR中,两个双向分支中都要做对齐,其包括光流估计和特征级上的warp两个过程,此外还设置让对齐之后特征图进入特征校正模块进行refine,BasicVSR中采用了残差块堆积的形式,而TDAN中的refine采用了简单的卷积层,具体对齐框架结构如下:

209307c2b7de70b700caa3a8b228075c.png

f313cde964ea60cbb3105f64301e6378.png

0d48bc3716c3c1721e590c2aec1977e6.png

它这里的卷积层是用来将对齐特征重建成对齐帧,当然也起到了特征校正的效果。

Warp在变换网络,入STN、DCN中一般指代重采样过程,VSR利用warp产生对齐版本的支持帧,也可以看成是运动补偿的结果,是支持帧的估计值。

隐式的含义就是warp是直接发生在feature map上的(或者说隐式的捕捉运动信息),他一般还需要通过卷积等操作才能将变换显示在图像级上,是一种间接的方法,而不是直接在Image上进行变形。

关于深度学习中feature map的定义:

1935eeffe34e79023b07fcfcb1adeedd.png

b2ffd7d23dda84c6858d4e95943768ca.png

c938d85b21c42f75553e917d58bd3400.png

747830d9d1383ac152a2c431ed1973bd.png

小结一下:

BasicVSR使用双向循环机制来传播所有帧的信息。

使用flow-based对齐但是基于feature-wise,并使用特征校正来减缓特征上的artifacts。

融合使用简单的concat。

上采样使用PixelShuffle。

通过创新的Propagation和Alignments,以及现存的一些Aggregation和Upsampling方法,BasicVSR最终形成了一个简单轻量的模型,在速度和表现力上都很出色,最重要的是,我们可以以它为基础,网上增加一些功能来进化BasicVSR,为了演示这种进化,作者又提出了BasicVSR的升级版本——IconVSR,接下来我们就介绍这一新结构。

3.2 From BasicVSR to IconVSR

97326736bb442d510b1d153526fe6455.png

①:BasicVSR的Propagation带来了全局信息的输入,但是这种长距离循环传播的机制会让对齐部分的误差进行累积,从而会导致一些图片上的细节部分无法很好的恢复出来,为了解决误差累积的问题,IconVSR推出了Information-refill来填充弥补因为对齐误差导致的一些细节的损失。

②:此外,在很多情景中都会有遮挡现象,就比如说一辆车经过一棵树,假设现在有3帧,第一帧汽车遮挡住了树,第二帧汽车刚好离开树,第三帧汽车远离树,具体场景如下:

17d009ee5499eeddcbbddf7e55c05ca8.png

那么当你想要重建第二帧的时候,由于之前的帧没有树的信息,因此第二帧的重建就会很困难,而如果此时后向传播的信息能够加入进来,就可以恢复出这棵树的细节信息,这就是IconVSR针对BasicVSR做出的第二点改进,引入耦合传播(Coupled propagation)机制,在前向分支上加入后向分支对齐的信息。

接下来我们分别介绍IconVSR基于BasicVSR的两个创新点。

①Information-refill

在长距离的propagation上是很容易产生对齐误差的积累,首先对齐本身就是有误差的,是做不到完全精确的,其次特别是当遮挡、边界、多细节位置在对齐的时候更容易产生错误的对齐。遮挡是因为对于走出遮挡之后的帧是无法将其一帧的信息和当前帧对齐;边界是因为,前一帧或后一帧没有和图像边界相关的信息;多细节区域会由于不断累积的误差导致其能恢复出来的细节遭到了限制。

为了解决这三种场景的问题,作者对于Aggregation处引入Information-refill来进行解决。具体地,通过在对齐之后,特征校正之前引入一个额外的特征提取模块,如果当前参考帧在关键帧集合内,那么由关键帧及其相邻2个支持帧组成该模块的输入。该特征提取模块是用较轻量的EDVR来做的,因此其特征提取的结果其实就是EDVR将这3帧当成输入,最后输出这三帧经过PCD和TSA之后的融合结果e i 。然后将e i 和2个分支各自本身对齐的结果相融合,并通过卷积之后输出到特征校正中去。具体结构如下:

091b2f61c0cd413539886f41991150cb.png

effecf3807278b1920d5ad203933f884.png

5920882c6dd733913c17604b6d0a50d6.png

9fda5450a409b2a8883eee8a2c488ffc.png

19ae377786dc13aaa9547ac4bd272559.png

可能这时候你会有疑问,BasicVSR不是本身也有后向传播么,之后2个分支融合不是也能将前后传播信息相互结合,难道不能给给上面车挡树视频中间这一帧进行很好的重建嘛?

注意这种方式将后向的信息加入到前向的对齐操作中,所以在重建的时候,对于遮挡的物体可以根据后向信息预测出来相关细节。而BasicVSR前向和后向都是独立预测的,虽然两者都利用了前面和后面的信息,但是每一个分支在对齐的时候,是各做各的,前向分支在对齐的时候,因为没有树的信息,所以很难对齐,这时候如果有后向对齐的信息,就可以借用来做对齐。在BasicVSR中,最后第二帧中树干部分的重建其实只有后向分支的对齐是有意义的,前向由于遮挡,所以其对齐是很难的,经过之后的融合会产生不太好的效果。而IconVSR的改进使得前向也能完成很好的对齐,这样的话第二帧的重建就会有2个不错的对齐一起合力帮助后续融合超分重建出好的表现。

4 Experiments

训练集:REDS、Vimeo-90K

验证集:REDS本身的30个视频,再额外从训练集中抠出4个,记为REDSval4

测试集:Vid4、UDM100、Vimeo-90K-T

实验设置:

bf238a34df9b438f0e5d108df7f4464b.png

264dd7314023a99dc03e6ec5a70268bb.png

可视化结果如下:

405629ee15e319d181d5b2e29317ae0b.png

实验结论:

总的来说,BasicVSR和IconVSR在表现力上超越了之前的SOTA视频超分类方法。

5 Ablation Studies

本节开始探究IconVSR的2个创新点的功能以及对IconVSR中间隔intervals的讨论。

5.1 From BasicVSR to IconVSR

①首先研究Information-refill对VSR最终性能的影响:

71bb9c52ef8d0ecf9570b051f8f96723.png

a677327ce698995f3a8cae5b47b9f899.png

64927c9bd5b5305fa6485c8e2cfba40b.png

②其次研究Coupled-Propagation对VSR最终性能的影响:
耦合传播机制对于遮挡情景是最适用了,实验结果如下所示:

9394a01f0962acf5d89de32bb29ada1f.png

bdaa3493a8744329eba50bba24f4dbad.png

额外的实验结果如下:

5a66168b0c3397739f3de943ba1962bd.png

小结一下:

在遮挡问题上,Information-refill和Coupled-Propagation对遮挡区域的对齐使用类似的处理方法,即借助未来帧的特征信息。

在边界问题上,Information-refill和遮挡情形相反,它借助之前帧的特征信息。

5.2 Tradeoff in IconVSR

接下来作者探究的是关键帧个数对IconVSR重建性能和速度的影响,实验结果如下:

f501e1de2a1089b85cf29c7e9be2956b.png

实验结论如下:

显然,参考帧越多,Information-refill的使用次数越频繁,那么所造成的训练时间就会越多,但是也带来了表现力的提升。

当参考帧的个数为0时,IconVSR的性能仍然要比BasicVSR要高出0.21dB,从这里也反映出了Coupled-Propagation对VSR表现力的提升作用。

6 Conclusion

在本文中,作者将VSR分为Propagation、Alignment、Aggregation、Upsampling四部分。通过结合一个双向循环传播机制的结构、基于光流的feature-wise的对齐方法,以及结合一般的融合和上采样方式,最终设计出一个轻量级的、同时具备高表现性能的VSR方法——BasicVSR。

BasicVSR最大的价值在于它可以作为今后研究VSR的baseline,作者演示了如何去基于BasicVSR来设计出一个改进版本的VSR方法,这就是IconVSR。

为了解决BasicVSR中因为遮挡、边界等问题造成的对齐误差问题,以及长范围的propagation产生的误差累积问题,IconVSR引入Information-refill机制;为了让每一帧的特征对齐都能利用过去和未来的特征信息,IconVSR引入Coupled-Propagation机制,通过引入这两项创新,IconVSR在略微增加模型复杂度的基础上,在表现力上超越了BasicVSR。

机器学习算法AI大数据技术

 搜索公众号添加: datanlp

7d5c9e5403590cb90e2f2a47e5cf3b59.jpeg

长按图片,识别二维码


阅读过本文的人还看了以下文章:

TensorFlow 2.0深度学习案例实战

基于40万表格数据集TableBank,用MaskRCNN做表格检测

《基于深度学习的自然语言处理》中/英PDF

Deep Learning 中文版初版-周志华团队

【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

《美团机器学习实践》_美团算法团队.pdf

《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

《深度学习:基于Keras的Python实践》PDF和代码

特征提取与图像处理(第二版).pdf

python就业班学习视频,从入门到实战项目

2019最新《PyTorch自然语言处理》英、中文版PDF+源码

《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

《深度学习之pytorch》pdf+附书源码

PyTorch深度学习快速实战入门《pytorch-handbook》

【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

《Python数据分析与挖掘实战》PDF+完整源码

汽车行业完整知识图谱项目实战视频(全23课)

李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

《神经网络与深度学习》最新2018版中英PDF+源码

将机器学习模型部署为REST API

FashionAI服装属性标签图像识别Top1-5方案分享

重要开源!CNN-RNN-CTC 实现手写汉字识别

yolo3 检测出图像中的不规则汉字

同样是机器学习算法工程师,你的面试为什么过不了?

前海征信大数据算法:风险概率预测

【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

VGG16迁移学习,实现医学图像识别分类工程项目

特征工程(一)

特征工程(二) :文本数据的展开、过滤和分块

特征工程(三):特征缩放,从词袋到 TF-IDF

特征工程(四): 类别特征

特征工程(五): PCA 降维

特征工程(六): 非线性特征提取和模型堆叠

特征工程(七):图像特征提取和深度学习

如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

Machine Learning Yearning 中文翻译稿

蚂蚁金服2018秋招-算法工程师(共四面)通过

全球AI挑战-场景分类的比赛源码(多模型融合)

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

python+flask搭建CNN在线识别手写中文网站

中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

5914c9e0b8e9aa53904facfae24819e5.jpeg

这篇关于轻量且高性能的视频超分算法——BasicVSR的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/341466

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int