当前位置: 首页 > 编程日记 > 正文

Soft-to-Hard Vector Quantization for End-to-End Learning Compressible Representations

郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!

 

Abstract:

  我们提出了一种新的方法,通过端到端的训练策略来学习深度架构中的可压缩表征。我们的方法是基于量化和熵的软(连续)松弛,我们在整个训练过程中对它们的离散对应体进行了退火。我们在两个具有挑战性的应用中展示了这种方法:图像压缩和神经网络压缩。虽然这些任务通常是用不同的方法来处理的,但我们的软量化到硬量化方法给出的结果与这两种方法的最先进水平具有可比性。

 

1  Introduction:

  近年来,深度神经网络(DNNs)在机器学习和计算机视觉方面取得了许多突破性的成果[20,28,9],目前已广泛应用于工业领域。现代DNN模型通常有数百万或数千万个参数,导致无论是在他们生成的中间特征表示,还是在模型本身中,都存在高度冗余的结构。尽管DNN模型的过度参数化对训练有良好的影响,但在实践中,通常需要压缩DNN模型进行推理,例如在内存有限的移动或嵌入式设备上部署它们时。另一方面,学习可压缩表征的能力在为各种数据类型(如图像、音频、视频和文本)开发(数据自适应)压缩算法方面具有很大的潜力,这些数据类型现在都有各种DNN架构可用。

  DNN模型压缩和利用DNN进行有损图像压缩是近年来引起广泛关注的两种方法。为了压缩一组连续的模型参数或特征,我们需要从一组量化级别(或矢量,在多维情况下)中选一个代表来近似每个参数或特征,其中每个量化级别与一个符号相关联,然后存储参数或特征的符号表示,以及量化级别。用相应的量化水平来表示一个DNN模型的每个参数或特征,将以失真D为代价,即性能损失(例如,量化模型参数后分类DNN的分类精度,或量化中间特征表示的自动编码器内容中的重构错误)。码率R,即符号流的熵,决定了编码比特流中模型或特征的成本。

  为了学习可压缩的DNN模型或特征表示,我们需要最小化D+βR,其中β>0控制率失真的权衡。将熵包含到学习成本函数中可以看作是添加了一个正则化器,它促进了网络的可压缩表示或紧凑特征表示。然而,在将DNNs的D+βR最小化时,会遇到两个主要的挑战:i)处理成本函数D+βR的不可微性(由于量化操作),以及ii)获得熵的精确可微估计(即R)。为了解决问题i),学界提出了许多方法,其中最流行的是随机近似[39,19,6,32,4]和四舍五入光滑导数近似[15,30]。要解决ii),一个常见的方法是假设符号流为i.i.d.,并用参数模型(如高斯混合模型[30,34]、分段线性模型[4]或伯努利分布[33](如为二进制符号)对边缘符号分布进行建模。

  在本文中,我们提出了一个统一的端到端学习框架,用于学习可压缩表征,联合优化模型参数、量化水平和由此产生的符号流的熵,以压缩网络或模型本身(见插图)。我们在DNN模型和特征压缩中用新颖的方法来解决上述的挑战i)和ii)。我们的主要贡献是:

  • 我们提供了第一个关于特征表示和DNN模型的端到端学习压缩的统一方案。到目前为止,这两个问题在文献中基本上是独立研究的。
  • 我们的方法简单直观,依赖于给定标量或矢量的软分配来量化到各个量化级别。用参数控制分配的“硬度”,并允许在训练期间逐步从软分配过渡到硬分配。与基于四舍五入或随机量化的方案相比,我们的编码方案是直接可微的,因此是可训练的端到端方案。
  • 我们的方法并不强制网络适应特定的(给定的)量化输出(例如整数),而是与权重一起学习量化级别,从而使其能够应用于更广泛的问题集。特别是,我们首次在所学压缩的背景下探索矢量量化,并证明其优于标量量化。
  • 与之前的所有工作不同,我们不假设特征或模型参数的边缘分布,这些特征或模型参数是通过依赖于分配概率的柱状图而量化的,而不是文献中常用的参数模型。
  • 我们将我们的方法应用于32层ResNet模型[13]的DNN模型压缩,并结合最近在[30]中提出的压缩自动编码器的变体来实现全分辨率图像压缩。在这两种情况下,我们都取得了与最先进技术相当的性能,同时与原始作品相比,我们做了更少的模型假设,并显著简化了训练程序[30,5]。

  论文的其余部分组织如下。第2节回顾了相关工作,在第3节介绍从软到硬的矢量量化方法。然后,我们分别在第4节和第5节中将其应用于压缩自动编码器进行图像压缩和ResNet进行DNN压缩。第6节总结全文。

 

2  Related Work

  人们对全分辨率图像压缩的DNN模型的兴趣激增,最显著的是[32,33,3,4,30],所有这些模型都优于JPEG[35],一些甚至超过了JPEG 2000[29],开创性的工作[32,33]表明,可通过卷积循环神经网络(RNNs)学习渐进式图像压缩,在训练过程中采用随机量化方法。[3,30]都依赖卷积自动编码器架构。这些工作将在第4节中进行更详细的讨论。

   在DNN模型压缩的背景下,一系列工作[12,11,5]采用一个多步骤的过程,先对预训练DNN的权重进行修剪,然后使用类似k-means的算法对剩余的参数进行量化,接着对DNN进行再约束,最后对量化后的DNN模型进行熵编码。[34]提出了一种值得注意的不同方法,使用最小描述长度原则来处理DNN压缩任务,其具有坚实的信息理论基础。

  值得注意的是,许多最近工作的目标都是对DNN模型参数以及特征表示进行量化,用于加速在硬件上低精度算法的DNN评估,参见[15,23,38,43]。然而,这些工作中的大多数并没有专门训练DNN,因此量化参数在信息论意义上是可压缩的。

  在优化过程中,从一个简单(凸或可微)问题逐渐过渡到实际的困难问题,正如我们在软量化到硬量化框架中所做的那样,已经在不同的环境中进行了研究,并且属于连续方法的范畴(参见[2]以获得概述)。形式上相关,但从概率角度出发的是用于最大熵聚类/矢量量化的确定性退火方法,参见,例如[24,42]。可以说,与我们的方法最相关的是[41],它也使用了最近邻分配的拓展,但是在学习监督原型分类器的上下文中。据我们所知,在神经网络图像压缩或DNN压缩的端到端学习框架中,以前没有采用连续方法。

 

3  Proposed Soft-to-Hard Vector Quantization

3.1  Problem Formulation

 

 

  L个中心矢量,维度为d/m,将d维的特征转化为[L]m;原始特征z由m个d/m维的矢量构成,每个矢量选择采用最近邻算法。

  由于带参数σ的softmax操作可以找到最近邻,当σ趋向于正无穷的时候,对应标签即为1,这就是硬分配;σ表示分配的硬度。

4  Image Compressin

  现在我们展示如何使用我们的框架来实现一个简单的图像压缩系统。对于其结构,我们使用了[30]中最近提出的卷积自动编码器的变体(详细信息请参见附录A.1)。我们注意到,当我们使用[30]的结构时,我们使用软到硬的熵最小化方法对其进行训练,这与原方法有很大的不同,见下文。

  我们的目标是学习自动编码器瓶颈中的特性的可压缩表示。因为我们不希望来自不同瓶颈通道的特征同分布,所以我们用不同的直方图和熵损失对每个通道的分布进行建模,并使用相同的参数β将每个熵项添加到总损失中。为了将通道编码成符号,我们将通道矩阵分为pw x ph维的片序列。这些片(矢量化)形成Z属于Rd/m x m的列,其中m=d/(pwph),因此Z包含m(pwph)维的点。当ph或pw大于1时,符号可以捕获瓶颈中的局部相关性,这是可取的,因为我们将符号建模为独立同分布的随机变量来进行熵编码。然后,在测试时,符号编码器E通过在一组L中心矢量C(C包含于Rpwph)上执行最近邻分配来确定信道中的符号,从而产生^ z。在训练过程中,我们使用了软量化的~z,以及w.r.t.中心矢量C。

我们使用Adam[17]训练不同的模型,见附录A.2。我们的训练集与[3]中描述的训练集组成类似。我们使用了ImageNet[8]中90000张图像的子集,我们用系数0.7对其进行了下采样,并对128 x 128像素的片进行了训练,批大小为15。为了估计优化(8)的概率分布p,我们在5000多个图像上保持一个直方图,每10次迭代更新一次当前批次的图像。有关其他超参数的详细信息,请参见附录A.2。

 

Evaluation.  为了评估我们的软-硬自动编码器(SHA)方法的图像压缩性能,我们使用了四个数据集,即Kodak[1],B100[31],Urban100[14],ImageNet100(100个从ImageNet[25]随机选择的图像)和三个标准质量度量,即峰值信噪比(PSNR)、结构相似性指数(SSIM)[37]和多尺度SSIM(MS-SSIM),详见附录A.5。我们将我们的SHA与标准的JPEG、JPEG 2000和BPG[10]进行了比较,重点放在压缩率小于1比特每像素(bpp)(即传统的基于积分变换的压缩算法最受挑战的情况)。如图1所示,对于高压缩率(小于0.4 bpp),我们的SHA在MS-SSIM方面优于JPEG和JPEG 2000,并且与BPG竞争。可以观察到SSIM也存在类似趋势(有关作为bpp函数的SSIM和PSNR图,请参见附录A.6中的图4)。与JPEG 2000相比,SHA在ImageNet100上的表现最好,在Kodak上的挑战最大。从视觉上看,SHA压缩图像的伪影比JPEG 2000压缩图像的伪影少(见图1和附录A.7)。

 

Related methods and discussion.  JPEG 2000[29]使用基于小波变换和自适应EBCOT编码。BPG[10]基于HEVC视频压缩标准的一个子集,是图像压缩的最新技术。它使用上下文自适应二进制算术编码(CABAC)[21]。

  最近的工作[30,4]也显示出了与JPEG 2000的相当性能。虽然我们使用了[30]的结构,但这些工作之间存在着明显的差异,相关总结在插图表格中。[4]的工作使用多个广义除数归一化(GDN)层及其逆矩阵(IGDN)构建了一个深度模型,这是专门设计用来捕获自然图像局部联合统计信息的层。此外,他们使用线性样条对熵估计的边缘进行建模,并使用CABAC[21]编码。在这段时间,[16]的方法建立在[33]中提出的结构的基础上,并表明通过将MS-SSIM度量合并到优化中(而不仅仅是最小化MSE),可以获得令人印象深刻的MS-SSIM度量性能。

  与这些最先进的方法所采用的领域特定技术相比,我们的学习可压缩表示的框架可以实现有竞争力的图像压缩系统,只需使用卷积自动编码器和简单的熵编码。

5  DNN Compression

  对于DNN压缩,我们研究了用于图像分类的ResNet[13]体系结构。我们采用与[5]相同的设置,并考虑为CIFAR-10[18]训练的32层体系结构。如[5]所示,我们的目标是学习模型所有464154可训练参数的可压缩表示。

我们的可压缩模型在使用哈夫曼编码达到压缩因子19.15和使用算术编码达到压缩因子20.15的同时,达到了92.1%的测试精度。表1将我们的结果与[5]报告的最新方法进行了比较。我们注意到,尽管文献中的顶级方法也达到了92%以上的精度和20%以上的压缩因子,但它们采用了大量手工设计的步骤,如修剪、重训练、各种类型的权重聚类、采用特殊编码将稀疏权重矩阵编码为基于索引差分的格式,最后采用熵编码。相反,我们直接最小化训练中权重的熵,得到一种使用标准熵编码的高度可压缩的表示法。

  在附录A.8的图5中,我们展示了随着网络学习在优化(6)时将大部分权重压缩到几个中心,样本熵H(p)是如何在训练过程中衰减的,以及索引柱状图是如何发展的。相比之下,使用[12,11,5]的方法,通过修剪大约80%的网络权重,手动将0作为最频繁的中心。我们注意到[34]最近的工作还通过使用最小描述长度原则,在单个训练过程中解决了这个问题。与我们的框架相比,它们采用贝叶斯视角,并依赖于符号分布的参数假设。

6  Conclusions

  在本文中,我们提出了一个统一的框架,用于端到端学习深层架构的压缩表示。通过软-硬退火方案的训练,逐步从样本熵的软松弛和网络离散化过程转移到实际的不可微量化过程,我们设法优化了原始网络损耗和熵之间的率失真权衡。我们的框架可以便捷地捕获不同的压缩任务,从而获得可以与最先进的图像压缩和DNN压缩相竞争的结果。我们方法的简洁性为将来的工作开辟了不同的方向,因为我们的框架可以很容易地适应其他需要可压缩表示的任务。

Refences

[1] Kodak PhotoCD dataset. http://r0k.us/graphics/kodak/, 1999.
[2] Eugene L Allgower and Kurt Georg. Numerical continuation methods: an introduction, volume 13. Springer Science & Business Media, 2012.
[3] Johannes Ballé, Valero Laparra, and Eero P Simoncelli. End-to-end optimization of nonlinear transform codes for perceptual quality. arXiv preprint arXiv:1607.05006, 2016.
[4] Johannes Ballé, Valero Laparra, and Eero P Simoncelli. End-to-end optimized image compression. arXiv preprint arXiv:1611.01704, 2016.
[5] Yoojin Choi, Mostafa El-Khamy, and Jungwon Lee. Towards the limit of network quantization. arXiv preprint arXiv:1612.01543, 2016.
[6] Matthieu Courbariaux, Yoshua Bengio, and Jean-Pierre David. Binaryconnect: Training deep neural networks with binary weights during propagations. In Advances in Neural Information Processing Systems, pages 3123–3131, 2015.
[7] Thomas M Cover and Joy A Thomas. Elements of information theory. John Wiley & Sons, 2012.
[8] J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. Fei-Fei. ImageNet: A Large-Scale Hierarchical Image Database. In CVPR09, 2009.
[9] Andre Esteva, Brett Kuprel, Roberto A Novoa, Justin Ko, Susan M Swetter, Helen M Blau, and Sebastian Thrun. Dermatologist-level classification of skin cancer with deep neural networks. Nature, 542(7639):115–118, 2017.
[10] Bellard Fabrice. BPG Image format. https://bellard.org/bpg/, 2014.
[11] Song Han, Huizi Mao, and William J Dally. Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding. arXiv preprint arXiv:1510.00149, 2015.
[12] Song Han, Jeff Pool, John Tran, and William Dally. Learning both weights and connections for efficient neural network. In Advances in Neural Information Processing Systems, pages 1135–1143, 2015.
[13] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep residual learning for image recognition. In IEEE Conference on Computer Vision and Pattern Recognition (CVPR), June 2016.
[14] Jia-Bin Huang, Abhishek Singh, and Narendra Ahuja. Single image super-resolution from transformed self-exemplars. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 5197–5206, 2015.
[15] Itay Hubara, Matthieu Courbariaux, Daniel Soudry, Ran El-Yaniv, and Yoshua Bengio. Quantized neural networks: Training neural networks with low precision weights and activations. arXiv preprint arXiv:1609.07061, 2016.
[16] Nick Johnston, Damien Vincent, David Minnen, Michele Covell, Saurabh Singh, Troy Chinen, Sung Jin Hwang, Joel Shor, and George Toderici. Improved lossy image compression with priming and spatially adaptive bit rates for recurrent networks. arXiv preprint arXiv:1703.10114, 2017.
[17] Diederik P. Kingma and Jimmy Ba. Adam: A method for stochastic optimization. CoRR, abs/1412.6980, 2014.
[18] Alex Krizhevsky and Geoffrey Hinton. Learning multiple layers of features from tiny images. 2009.
[19] Alex Krizhevsky and Geoffrey E Hinton. Using very deep autoencoders for content-based image retrieval. In ESANN, 2011.
[20] Alex Krizhevsky, Ilya Sutskever, and Geoffrey E Hinton. Imagenet classification with deep convolutional neural networks. In Advances in neural information processing systems, pages 1097–1105, 2012.
[21] Detlev Marpe, Heiko Schwarz, and Thomas Wiegand. Context-based adaptive binary arithmetic coding in the h. 264/avc video compression standard. IEEE Transactions on circuits and systems for video technology, 13(7):620–636, 2003.
[22] D. Martin, C. Fowlkes, D. Tal, and J. Malik. A database of human segmented natural images and its application to evaluating segmentation algorithms and measuring ecological statistics. In Proc. Int’l Conf. Computer Vision, volume 2, pages 416–423, July 2001.
[23] Mohammad Rastegari, Vicente Ordonez, Joseph Redmon, and Ali Farhadi. Xnor-net: Imagenet classification using binary convolutional neural networks. In European Conference on Computer Vision, pages 525–542. Springer, 2016.
[24] Kenneth Rose, Eitan Gurewitz, and Geoffrey C Fox. Vector quantization by deterministic annealing. IEEE Transactions on Information theory, 38(4):1249–1257, 1992.
[25] Olga Russakovsky, Jia Deng, Hao Su, Jonathan Krause, Sanjeev Satheesh, Sean Ma, Zhiheng Huang, Andrej Karpathy, Aditya Khosla, Michael Bernstein, Alexander C. Berg, and Li Fei-Fei. ImageNet Large Scale Visual Recognition Challenge. International Journal of Computer Vision (IJCV), 115(3):211–252, 2015.
[26] Wenzhe Shi, Jose Caballero, Ferenc Huszár, Johannes Totz, Andrew P Aitken, Rob Bishop, Daniel Rueckert, and Zehan Wang. Real-time single image and video super-resolution using an efficient sub-pixel convolutional neural network. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 1874–1883, 2016.
[27] Wenzhe Shi, Jose Caballero, Lucas Theis, Ferenc Huszar, Andrew Aitken, Christian Ledig, and Zehan Wang. Is the deconvolution layer the same as a convolutional layer? arXiv preprint arXiv:1609.07009, 2016.
[28] David Silver, Aja Huang, Chris J Maddison, Arthur Guez, Laurent Sifre, George Van Den Driessche, Julian Schrittwieser, Ioannis Antonoglou, Veda Panneershelvam, Marc Lanctot, et al. Mastering the game of go with deep neural networks and tree search. Nature, 529(7587):484–489, 2016.
[29] David S. Taubman and Michael W. Marcellin. JPEG 2000: Image Compression Fundamentals, Standards and Practice. Kluwer Academic Publishers, Norwell, MA, USA, 2001.
[30] Lucas Theis, Wenzhe Shi, Andrew Cunningham, and Ferenc Huszar. Lossy image compression with compressive autoencoders. In ICLR 2017, 2017.
[31] Radu Timofte, Vincent De Smet, and Luc Van Gool. A+: Adjusted Anchored Neighborhood Regression for Fast Super-Resolution, pages 111–126. Springer International Publishing, Cham, 2015.
[32] George Toderici, Sean M O’Malley, Sung Jin Hwang, Damien Vincent, David Minnen, Shumeet Baluja, Michele Covell, and Rahul Sukthankar. Variable rate image compression with recurrent neural networks. arXiv preprint arXiv:1511.06085, 2015.
[33] George Toderici, Damien Vincent, Nick Johnston, Sung Jin Hwang, David Minnen, Joel Shor, and Michele Covell. Full resolution image compression with recurrent neural networks. arXiv preprint arXiv:1608.05148, 2016.
[34] Karen Ullrich, Edward Meeds, and Max Welling. Soft weight-sharing for neural network compression. arXiv preprint arXiv:1702.04008, 2017.
[35] Gregory K Wallace. The JPEG still picture compression standard. IEEE transactions on consumer electronics, 38(1):xviii–xxxiv, 1992.
[36] Z. Wang, E. P. Simoncelli, and A. C. Bovik. Multiscale structural similarity for image quality assessment. In Asilomar Conference on Signals, Systems Computers, 2003, volume 2, pages 1398–1402 Vol.2, Nov 2003.
[37] Zhou Wang, A. C. Bovik, H. R. Sheikh, and E. P. Simoncelli. Image quality assessment: from error visibility to structural similarity. IEEE Transactions on Image Processing, 13(4):600–612, April 2004.
[38] WeiWen, ChunpengWu, YandanWang, Yiran Chen, and Hai Li. Learning structured sparsity in deep neural networks. In Advances in Neural Information Processing Systems, pages 2074–2082, 2016.
[39] Ronald J Williams. Simple statistical gradient-following algorithms for connectionist reinforcement learning. Machine learning, 8(3-4):229–256, 1992.
[40] Ian H. Witten, Radford M. Neal, and John G. Cleary. Arithmetic coding for data compression. Commun. ACM, 30(6):520–540, June 1987.
[41] Paul Wohlhart, Martin Kostinger, Michael Donoser, Peter M. Roth, and Horst Bischof. Optimizing 1-nearest prototype classifiers. In IEEE Conf. on Computer Vision and Pattern Recognition (CVPR), June 2013.
[42] Eyal Yair, Kenneth Zeger, and Allen Gersho. Competitive learning and soft competition for vector quantizer design. IEEE transactions on Signal Processing, 40(2):294–309, 1992.
[43] Aojun Zhou, Anbang Yao, Yiwen Guo, Lin Xu, and Yurong Chen. Incremental network quantization: Towards lossless cnns with low-precision weights. arXiv preprint arXiv:1702.03044, 2017.

A  Image Compression Details

A.1  Architecture

  我们依赖于最近在[30]中提出的压缩自动编码器的变体,使用卷积神经网络对图像编码器和图像解码器进行编码。图像编码器中的前两个卷积层,每个卷积层将输入图像缩小一个因子2,并将通道数从3增加到128。接下来是三个残差块,每个块有128个过滤器。另一个卷积层然后再次减小一个因子2,并将通道数减少到c,其中c是一个超参数([30]使用64和96个通道)。对于w x h维的输入图像,图像编码器的输出为w/8 x h/8 x c维的“瓶颈张量”。

转载于:https://www.cnblogs.com/lucifer1997/p/11203729.html

相关文章:

Delta3D———通过游戏管理器组件和消息的扩展创建自定义行为 《转》

游戏管理器组件给我们提供了在不修改游戏管理器的情况下灵活扩展我们的自定义行为的能力。游戏管理器组件是基于消息来工作的,定义自定义行为的基本 流程就是创建自定义类型的消息,在合适的时候发送消息,创建自定义游戏管理组件并重写自己的消…

【spring】在不联网的情况下查看xml的定义规则的方法

1、打开依赖 2、打开该jar包 3、打开该包 4、找到xml的规则

常用的js判断

常用的js判断 关于注册的时候&#xff1b;对注册信息的判断&#xff1a; 表单 <form id"form" name"form" method"post" action"" οnsubmit"return CheckPost();"> 引入&#xff1a;<script language"JavaS…

解决Chrome中UEditor插入图片的选择框加载过慢问题

解决Chrome中UEditor插入图片的选择框加载过慢问题 ../resources/plugins/ueditor/ueditor.all.js 中line24489/24498中的 accept"image/*" 修改为 accept"image/jpeg,image/jpg,image/png,image/gif,image/bmp"../resources/plugins/ueditor/dialogs/im…

转:[大数据竞赛]夺冠感言:走进业务,提升对世界的认知能力

http://bbs.aliyun.com/read/153103.html?spm5176.7189909.0.0.KWGWap 一、同为推荐&#xff0c;大不同&#xff01;不知道同学们是否经常在天猫购物&#xff0c;但是相信大家一定听过音乐&#xff0c;看过电影&#xff0c;读过新闻和小说。大家在享受各种娱乐信息的时候&…

【转】C/C++中的日期和时间

头文件 time.h 函数用途 函数名 得到处理器时间 clock 得到时间差 difftime 设置时间 mktime 得到时间 time 得到以ASCII码表示的时间 asctime 得到字符串表示的时间 ctime 得到指定格式的时间 strftime 摘要&#xff1a; 本文从介绍基础概念入手&#xff0c;探讨了在C/C中对日…

【spring】di(依赖注入)使用实例

1、xml文件里的配置 <!-- 问题 &#xff1a; 两个bean的顺序可不可以调换&#xff1f; 答 &#xff1a; 可以--><bean id"userDao" class"springboottest.ioc.UserDao"> </bean><bean id"UserService" class"springb…

设置php-fpm使用socket文件

1、在配置文件/usr/local/php/etc/php-fpm.conf文件中找到 <value name "listen_address">127.0.0.1:9000</value> 改为<value name"listen_address"> /var/run/phpfpm.sock</value> 重启php-fpm /usr/local/php/sbin/php-fpm r…

BZOJ1251: 序列终结者

【传送门&#xff1a;BZOJ1251】 简要题意&#xff1a; 给出一个长度为n的序列&#xff0c;有m个操作&#xff0c;3种操作&#xff1a; 1 l r k将l到r的数增加k 2 l r将l到r的数列翻转 3 l r求出l到r的最大值 题解&#xff1a; 裸SPLAY&#xff0c;直接下放两种标记&#xff0c…

Linux笔记 软件管理

一、软件包分类1.软件包分类&#xff1a;源码包、二进制包源码包&#xff1a;源代码1&#xff09;优点&#xff1a;开源&#xff0c;有能力可修改源代码可以自由选择所需的功能软件是编译安装&#xff0c;更适合Linux系统&#xff0c;更稳定效率更高卸载方便。2&#xff09;缺点…

如何有效编写软件的75条建议

1. 你们的项目组使用源代码管理工具了么&#xff1f; 应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。2. 你们的项目组使用缺陷管理系统了么&#xff1f; 应该用。ClearQuest太复杂&#xff0c;我的推荐是BugZilla。 3. 你们的测试组还在用…

【spring】使用spring的环境配置及从官网获得配置文件所用代码的方法

环境配置 1、添加jar包 spring-beans-4.1.3.RELEASE.jarspring-context-4.1.3.RELEASE.jarspring-core-4.1.3.RELEASE.jarspring-expression-4.1.3.RELEASE.jar 2、配置文件 &#xff08;1&#xff09;在下创建一个config文件夹 &#xff08;2&#xff09;在文件夹下创建一…

C语言:1孩半问题

题目&#xff1a; 一孩半&#xff0c;又称独女户二胎&#xff0c;即中国大陆部分农村的一项计划生育政策&#xff0c;第一胎是女孩的夫妻可以生育第二个子女。如果第二胎有n%人工性别选择干预&#xff08;选择男孩&#xff09;&#xff0c;试问男女比例为多少。&#xff08;10分…

Javascript字符串及数组赋值区别

最近做一个分页的javascript程序&#xff0c;需要先将tbody下面的tr标签全部删除&#xff0c;然后再append新的tr&#xff0c;使用下面的代码 var trs$d("tbdoys").getElementsByTagName("tr");for(var j0;j<trs.length;j){$d("tbdoys").remo…

Linux系统分辨率设置

linux 设置分辨率 如果你需要在linux上设置显示屏的分辨率&#xff0c;分两种情况&#xff1a;分辨率模式存在与分辨率模式不存在&#xff0c;具体如下。 1&#xff0c;分辨率模式已存在 1&#xff09;如何查询是否存在&#xff1a; 图形界面&#xff1a;在System Settings/Dis…

【spring】使用构造方法依赖注入

注 &#xff1a; &#xff08;1&#xff09;使用构造方法依赖注入有两种一种是通过参数顺序一种是按照参数类型的顺序 &#xff08;2&#xff09;所有的依赖注入都必须拥有无参的构造方法&#xff0c;一开始没有添加是因为jvm会自动分配 按照参数的顺序 代码实现&#xff1…

【技术贴】火狐的悬停激活标签扩展插件下载。Tab Focus

火狐专用鼠标悬停激活标签&#xff0c;像360和搜狗浏览器那样的把鼠 标放在标签上&#xff0c;一般都是设置200ms激活此标签。 https://addons.mozilla.org/zh-CN/firefox/addon/tab-focus/ 在组件里可以设置Tab Focus &#xff0c;我都是设置1ms激活。比较爽。

数据结构_顺序栈的代码实践

#include <iostream> using namespace std; #define Maxsize 100//预先分配空间&#xff0c;这个数值根据实际情况预估确定 typedef struct SqStack{int *base;//栈底指针int *top;//栈顶指针 }SqStack;bool InitStack(SqStack &S)//构造空栈 {S.base new int…

C#字符串与享元(Flyweight)模式

写这个文章&#xff0c;主要是因为网上对C#字符串和享元模式的误解比较多。 Flyweight模式 先说这名字&#xff0c;fly呢&#xff0c;就是苍蝇&#xff0c;没错这里面不是飞的意思&#xff0c;是苍蝇的意思&#xff0c;weight大家都知道&#xff0c;就是重量&#xff0c;苍蝇的…

CarTool 使用,获取图片资源

程序&#xff1a;gitHub: 项目地址 使用方法&#xff1a; 1.拿到资源包 在itunes里找到喜欢的应用&#xff0c;然后下载&#xff0c;直接将app拖到桌面。得到一个一个ipa资源包&#xff0c;如图 2.将资源包改成zip格式 3.解压zip资源包&#xff0c;随后打开&#xff0c;显示包…

【spring】p命名空间的使用

1、在xml文件中添加配置 xmlns:p"http://www.springframework.org/schema/p" 2、在xml中进行更改 更改前&#xff08;使用属性依赖注入&#xff09;&#xff1a; 代码实现&#xff1a; <bean id"UserService" class"springboottest.ioc.UserSe…

ARM的位置无关程序设计在Bootloader中的应用

http://www.mcuol.com/tech/107/26052.htm 引言 基于位置无关代码PIC&#xff08;PositionIndependent Code&#xff09;的程序设计在嵌入式应用系统开发中具有重要的作用。 尤其在裸机状态下开发Bootloader程序及进行内核初始化设计&#xff1b;利用位置无关的程序设计方…

CentOS 7 添加系统开机服务

CentOS 7的服务systemctl脚本存放在&#xff1a;/usr/lib/systemd/&#xff0c;有系统&#xff08;system&#xff09;和用户&#xff08;user&#xff09;之分&#xff0c;需要开机不登陆就能运行的程序&#xff0c;存在系统服务里&#xff0c;即&#xff1a;/usr/lib/systemd…

UITableView HeaderView,FooterView 使用SnapKit布局导致约束异常

今天做一个APP里面设置页面(个人中心) 就是一个列表菜单 顶部是一个头像和账户标题, 底部为一个退出登录按钮 当然我第一时间就想到了UITableView, HeaderView, FooterView // 我创建了两个类文件, 用来做UITableView 的header, footer class SettingHeaderView: UIView {//里面…

【spring】专项配置文件的使用

1、编写专项配置文件&#xff08;数据库专项文件&#xff09; 代码实现&#xff1a; mysql-urljdbc:mysql://localhost:3306/test mysql-drivercom.mysql.jdbc.Driver 2、在xml文件里配置contest 代码实现&#xff1a; xmlns:context"http://www.springframework.org…

Ubuntu换回Gnome界面

安装了Ubuntu11.10&#xff0c;Unity界面实在是不怎么习惯。遂换回Gnome。 1. 首先安装Gnome sudo apt-get install gnome-shell sudo apt-get install gnome-tweak-tool 2. 设置自动登录Gnome shell classic sudo /usr/lib/lightdm/lightdm-set-defaults -s gnome-classic  …

Linux设备文件简介。

概述 设备管理是linux中比较基础的东西&#xff0c;但是由于Linux智能程度的越来越高&#xff0c;Udev的使用越来越广泛&#xff0c;使得越来越多的Linux新用户对 /dev 目录下的东西变得不再熟悉。有时候遇见问题就会变得抓狂。 Linux 中的设备有2种类型&#xff1a;字符设备(无…

羊车门问题分析

1、按照你的第一感觉回答&#xff0c;你觉得不换选择能有更高的几率获得汽车&#xff0c;还是换选择能有更高的几率获得汽车&#xff1f;或几率没有发生变化&#xff1f;答&#xff1a;换。2、请自己认真分析一下“不换选择能有更高的几率获得汽车&#xff0c;还是换选择能有更…

python多版本共存使用pip

有时候大家使用python的时候都会用到两个版本&#xff0c;虽说可以独立设置环境变量独立使用&#xff0c;但是用到pip的时候就不行了&#xff0c;python2和python3中的都用相同的pip。在这里我就把我的经验分享给大家。 这是python设置的环境变量 下面是python2的名字 下面是py…

Ruby开发环境

假设您已经安装了Eclipse&#xff0c;那么只需按照如下步骤即可&#xff1a;Please copy the following Update Site URL to your clipboard and then follow the steps listed below to add this URL to your Available Software Sites list. Attempting to access this URL u…