深度学习10篇文章之Interleaved Group Convolution

2023-10-31

本文主要讲解Ting Zhang的Interleaved Group Convolutions for Deep Neural Networks,该文对Group convolution有较为详细的讲解。

Abstract

文章开篇引出了 IGCNets —— IGCNets 将两个个完整的卷积块打乱重组成一对连续的交错卷积,一个叫主卷积(primary group convolution),另一个叫从卷积(secondary group convolution),它们最主要的特点是:

(i) the convolution on each partition in primary group convolution is a spatial convolution, while on each partition in secondary group convolution, the convolution is a point-wise convolution; (ii) the channels in the same secondary partition come from different primary partitions.

  1. 在主群卷积内的所有卷积都是空间域卷积,而在第二组卷积(或者可以对应叫次群卷积)则是一个 point-wise 卷积,也就是 1$\times$1 卷积。

(ii) the channels in the same secondary partition come from different primary partitions.

  1. 次群卷积内的同一通道来自不同的主群卷积。

这是对于该网络独有结构的高度集中概括。

Introduction

这一部分首先讲到了一个许多模型都存在的问题——卷积核冗余(redundancy of convolutional kernels)。这一类冗余来自于两方面,第一方面是空域卷积,另一方面则是来自于多通道的问题。

the spatial extent, small kernels are developed, such as 3$\times 3 , 3 3, 3 3,3\times 1 , 1 1, 1 1,1\times$3. In the channel extent, group convolutions and channel-wise convolutions or separable filters, have been studied.

目前来看,空域冗余可以用小卷积核解决(small kernels),通道冗余则用通道可分离卷积来做,本文主要工作是后者。

接下来就是介绍模型中最为重要的卷积交错组块(如下图):

在这里插入图片描述

主群卷积的输入来自于直接分割图像的通道,像上图有绿和黄两个主分区,每个主分区又依照通道有三个次分区,在主组卷积中,卷积完全是空域的,而次组卷积的1$\times$1卷积则是为了把主组卷积结果的不同通道混合。

原文中提到相同数量的参数/计算复杂度下,IGC块比常规的卷积的空间内核要大得多,换句话讲则是相同卷积核大小下,参数和计算复杂度小得多。并且,具有深刻意义的是:

It is known that a group convolution is equivalent to a regular convolution with sparse kernels: there is no connections across the channels in different partitions. Accordingly,
an IGC block is equivalent to a regular convolution with the kernel composed from the product of two sparse kernels, resulting in a dense kernel.

IGC块等价于由两个稀疏卷积核的乘积组成的常规卷积卷积,是一个密核,这一点在下面的文章里多次被提到,并进行了证明。

related work

这一节主要就组卷积与多分支结构、稀疏卷积核、张量分解三方面来描述了一下 IGCNets 的主要技术。

Group convolutions and multi-branch

Group convolution最初在AlexNet中提出,其初衷在于克服早期硬件计算资源不足的问题,将feature maps分到多张GPU上进行运算,有点类似于现在的分布式运算。

而 Multi-branch 则是

Our approach further improves parameter efficiency and adopts primary and secondary group convolutions, where secondary group convolution acts as a role of blending the channels outputted by primary group convolution.

文章在此处的重点就在于这最后一句,本模型的的对于原有模型的改进在于采用主次两级组卷积,其中次级组卷积用于混合不同通道输入。

Sparse convolutional kernels

稀疏卷积核部分,原文并没有讲的很详细,笔者结合自己查阅的知识来详细讲解(此节部分内容来自于网络)。
在这里插入图片描述

在这里插入图片描述

稀疏卷积核的本意也是想把矩阵跟向量相乘变得快一点、模型的参数少一点,于是有人想到了一种最简单的方法——把里面的有些数变成 0,比如 2.91 变成 0,3.06 变成 0,变成 0 以后就成了稀疏的矩阵,这个稀疏矩阵存储量会变小,如果你足够稀疏的话,计算量会小,因为直接是 0 就不用乘了。还有一种 Structured sparse(结构化稀疏),比如这种对角形式,矩阵跟向量相乘,可以优化得很好。正如下图所示,这里 Structured sparse 就是本文组卷积(Group convolution)所用到的。

在这里插入图片描述

这也就是文章中多次提到的一句话:一个密矩阵可以由过多个稀疏矩阵相乘来近似。

Decomposition

对于张量分解,可以理解为矩阵分解向多维的延伸,也可以理解为对高维数据的一种低秩逼近或者特征提取,可以减少冗余和加速运算,除了文章中的方法,主要有 CP 分解和 Tucker 分解两种。

Rather than compressing previouslytrained networks by approximating a convolution kernel using the product of two sparse kernels corresponding to our primary and secondary group convolutions, we train our network from scratch and show that our network can improve parameter efficiency and classification accuracy.

本节最后也提到本文不是通过用两个稀疏的内核来近似一个卷积核来压缩以前训练过的网络,而是用我们的主次和次组卷积来计算我们的网络,并证明我们的网络可以提高参数效率和分类精度。

Our Network

Interleaved Group Convolutions

Definition

在这里,文章又一次提到了 IGC 块与稀疏卷积核的关系,说明这一点很重要,因此笔者将此处原文贴出:

A group convolution can be viewed as a regular convolution with a sparse block-diagonal convolution kernel, where each block corresponds to a partition of channels and there are no connections across the partitions.

最后一段提到的比较重要的的信息是原文作者建议主级组卷积采用 3$\times 3 的 卷 积 核 , 而 次 级 组 卷 积 为 了 混 合 输 入 的 图 像 的 通 道 自 然 只 能 选 择 1 3 的卷积核,而次级组卷积为了混合输入的图像的通道自然只能选择 1 31\times$1 卷积核。

Primary group convolutions

在讲这部分内容之前,我们先明确几组参数的意义。

  • L 代表分区数。
  • M 代表通道数。
  • S 代表卷积核尺寸,比如 3$\times$3 卷积核的尺寸 S 就是9。
  • Z L是 (M S) 维向量。
  • Wpll是一个 M × \times ×(M S)大小类的矩阵。

下面就是主级组卷积的数学表达式:

在这里插入图片描述

其中,x = [ ZT1 ZT2 … ZTL ]T 就是整个模型在各个分区各个通道的输入;Wpll 是对应第 L 分区的卷积核。
把上式展开就可以看出来该式的含义无非是对每一分区的图做不同的映射处理:

在这里插入图片描述

Secondary group convolutions

根据上面我们提到的理论,我们可以清楚的直到文章作者在次组卷积所采用的策略:次组卷积的第 m 个分区来自于主组卷积的第 m 个输出通道。

在这里插入图片描述

P 在这里就是负责把输入的多个矩阵重新排列的矩阵。

而第m个次组卷积分区的操作就是:

在这里插入图片描述

Wdmm是对应于第m个次组卷积分区的 1 × 1 1\times1 1×1 卷积核,其本身是一个大小为 L × L L \times L L×L 的矩阵。次组卷积的输出结果需要作为下一个 IGC 块的输入,因此必然会经历一个与主组卷积之后镜像的过程,以达到使次组卷积输出回到原有输出的形式:

在这里插入图片描述

这里因为原文描述比较详细,就没有过多重复,其实笔者觉得这里的过程结合上面的 IGC 结构图来看很清楚明白。


(这里的部分原文中没有,是笔者结合自己查阅的内容对最后一个式子进行补充描述。)

最后一个式子按原文作者话讲是为了引进一个严格的互补条件:如果有两个通道在第一组卷积里面,落在同一个Branch(分支),就希望在第二组里面落在不同的Branch(分支)。第二组里面比如一个Branch(分支)里面的若干个通道,要来自于第一个组卷积里面的所有Branches(分支),这个称为互补条件。这个互补条件会带来什么?它会带来(任何一对输入输出通道之间存在)path,也就是说相乘矩阵是密集矩阵。并且重要的是,任何一个 input 和 output 之间有一条path,而且有且只有一条path。

好处显而易见是模型变宽,坏处就是模型在这个地方可能会过于稀疏,反而导致整体不会达到一个最优的效果。

Analysis

Wider than regular convolutions

考虑到次组卷积的卷积核大小是 1 × \times × 1,那么整个 IGC 块的参数量是:

在这里插入图片描述

其中,G = ML 就是这节重点要讨论的 IGC 块的宽度。

对于大小为S卷积核的普通卷积而言,如果输入与输出的宽度是C,那么参数量就是:Tigc=Trc=T ,则我们得到:
C 2 = T / S C^2=T/S C2=T/S, G 2 = 1 S L + 1 M T G^2=\dfrac{1}{\tfrac{S}{L}+\tfrac{1}{M}}T G2=LS+M11T

顺势可以推得:

在这里插入图片描述

考虑到主组卷积的核大小 3 × 3 3\times3 3×3,我们可以得出当 L > 1 L>1 L>1时, G > C G>C G>C。也就是说除了 L = 1 L=1 L=1这种特殊情况,IGC 块都要比普通卷积组要宽。

When is the widest?

这节主要讨论主次组卷积的 L 和 M 参数如何来影响最终的 IGC 块宽度。从 IGC 块参数量的公式我们可以推得:

在这里插入图片描述

这个式子第三行的不等式意味着宽度 G 是有上限的:

在这里插入图片描述

L = M S L=MS L=MS 时,宽度是最好的。

Wider leads to better performance?

前面说到了一个 IGC块等于一个由两个稀疏卷积组成的普通卷积: W = P W d P T W p W=PW^dP^TW^p W=PWdPTWp ,也就是说从参数角度来讲有下面的约束:

∣ ∣ W P ∣ ∣ 0 + ∣ ∣ W d ∣ ∣ 0 = T ||W^P||_0+||W^d||_0=T WP0+Wd0=T
∣ ∣ ⋅ ∣ ∣ 0 ||·||_0 0 是矩阵的 l 0 l_0 l0 范数)

This equation means that when the IGC is wider (or the dimension of the input x is higher), Wp and Wd are larger but more sparse.

IGC 块越宽,主次组卷积的一二级卷积矩阵越稀疏。这样也就是说,并非 IGC 块的宽度越宽,性能就更好,这是一个权衡的过程。

Discussions and Connections

这一章节主要讨论 IGC 块与普通组卷积、ResNet 和 Xception 结构的联系。

Connection to regular convolutions

对于普通组卷积而言,空域上单个点的映射过程是 X`=Wx。IGC 块以 L = 4 L=4 L=4 举例而言(就像最开始的结构图那样):

在这里插入图片描述

W p W^p Wp是块对角矩阵:

W p = d i a g ( W 11 , W 12 , W 21 , W 22 ) W^p=diag(W_{11},W_{12},W_{21},W_{22}) Wp=diag(W11,W12,W21,W22)

W i j W_{ij} Wij是 W 的 2 × 2 2\times2 2×2分块矩阵。

W = [ W 11 W 12 W 21 W 22 ] W=\begin{bmatrix}{W_{11}}&{W_{12}}\\{W_{21}}&{W_{22}}\\\end{bmatrix} W=[W11W21W12W22]

W d W^d Wd 也是一个块对角矩阵,只不过它的大小是 L × L L \times L L×L,并且所有的 W d W^d Wd 都是一样的:
W 11 d = W 22 d = ⋯ = W M M d = [ 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 ] W^d_{11}=W^d_{22}=\cdots=W^d_{MM}=\begin{bmatrix} {1}&{1}&{0}&{0}\\ {0}&{0}&{1}&{1}\\ {1}&{1}&{0}&{0}\\ {0}&{0}&{1}&{1}\\ \end{bmatrix} W11d=W22d==WMMd=1010101001010101


附注: 从这里, W d W^d Wd W p W^p Wp 的结构和量值我们就可以清楚地印证上文所讲的内容—— W p W^p Wp 是主组卷积中的同分区内卷积过程,而 W d W^d Wd 是次组卷积中为了混合不同通道的卷积过程。

Connection to summation fusion

在这里插入图片描述
(a图是普通组卷积,b图是summation fusion)

summation fusion 的代表性结构是 ResNet ,其重要的操作是求和接收所有的输入,并将它们加在一起作为多个输出:

在这里插入图片描述

这个用交叉组卷积的形式来表示的话, W m m d W^d_{mm} Wmmd 就是一个全1卷积核。在有4个主分区的情况下:

W 11 d = W 22 d = ⋯ = W M M d = [ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ] W^d_{11}=W^d_{22}=\cdots=W^d_{MM}=\begin{bmatrix}{1}&{1}&{1}&{1}\\{1}&{1}&{1}&{1}\\{1}&{1}&{1}&{1}\\ {1}&{1}&{1}&{1}\\ \end{bmatrix} W11d=W22d==WMMd=1111111111111111

Xception is an extreme case

这一节我们讨论两个极端情况:L=1 和 M=1。

在L=1的情况下,主组卷积变成了一个常规的卷积,而次组卷积的行为就像分配不同权重(weight)的每个通道。

在M=1的情况下,主组卷积变成了一个极端的组卷积:一个 channel-wise 组卷积,而第二组卷积变成了一个 1 × 1 1\times1 1×1的卷积。

这两个极端情况很接近于 Xception —— 在一个 channel-wise 空间卷积前放置一个 1 × 1 1\times1 1×1 卷积。而在 Xception: Deep learning with depthwise separable convolutions. 一文中指出 1 × 1 1\times1 1×1 卷积放置在 channel-wise 空间卷积前后都没有影响。

而原文中的这张表也显示出这两种极端情况都不是最优结果,换句话而言,Xception 作为 IGCNets 的极端情况是不如 IGCNets 本身的。

在这里插入图片描述

Extensions and variants

三点补充:

  1. 主组卷积和次组卷积并不是固定的,二者之间可以交换位置。
  2. 次组卷积可以用线性映射或者普通空间卷积代替,只要其可以完成通道分配任务。但是原文中没有提到,因为考虑到额外的参数和计算复杂度的原因。
  3. 文章中介绍的 IGC 块可以作为现有模型的补充。比如其他模型采用的 1 × 3 1\times3 1×3 3 × 1 3\times1 3×1 卷积也可以用到主组卷积中。

GITHUB:https://blog.csdn.net/bazhidao0031/article/details/81937653(非笔者所写,后面有空再补)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习10篇文章之Interleaved Group Convolution 的相关文章

  • 重新思考语义分割范式:SETR

    点击上方 CVer 选择加 星标 置顶 重磅干货 第一时间送达 本文作者 湃森 来源 知乎 已授权 https zhuanlan zhihu com p 348418189 一 论文信息 标题 Rethinking Semantic Seg
  • 卷积神经网络中卷积层、池化层、全连接层的作用

    1 卷积层的作用 卷积层的作用是提取输入图片中的信息 这些信息被称为图像特征 这些特征是由图像中的每个像素通过组合或者独立的方式所体现 比如图片的纹理特征 颜色特征 比如下面这张图片 蓝色框框住的地方就是脸部特征 这些特征其实是由一个个像素
  • 深度学习10篇文章之Interleaved Group Convolution

    本文主要讲解Ting Zhang的Interleaved Group Convolutions for Deep Neural Networks 该文对Group convolution有较为详细的讲解 Abstract 文章开篇引出了 I
  • 从零开始实现SSD目标检测(pytorch)(一)

    目录 从零开始实现SSD目标检测 pytorch 第一章 相关概念概述 1 1 检测框表示 1 2 交并比 第二章 基础网络 2 1 基础网络 2 2 附加网络 第三章 先验框设计 3 1 引言 3 2 先验框设计 3 3 先验框可视化 3
  • 综述:图像滤波去噪的常用算法实现及原理解析

    综述 图像滤波常用算法实现及原理解析 目录 综述 图像滤波常用算法实现及原理解析 前言 目录 自适应中值滤波 中值滤波器 自适应中值滤波器 自适应中值滤波算法描述 自适应中值滤波原理说明 算法实现 高斯滤波 高斯滤波实现方式一 高斯滤波实现
  • DCN和DCNv2(可变性卷积)学习笔记(原理代码实现方式)

    DCN和DCNv2 可变性卷积 网上关于两篇文章的详细描述已经很多了 我这里具体的细节就不多讲了 只说一下其中实现起来比较困惑的点 黑体字会讲解 DCNv1解决的问题就是我们常规的图像增强 仿射变换 线性变换加平移 不能解决的多种形式目标变
  • 神经网络学习小记录53——TF2搭建孪生神经网络(Siamese network)比较图片相似性

    神经网络学习小记录53 TF2搭建孪生神经网络 Siamese network 比较图片相似性 学习前言 什么是孪生神经网络 代码下载 孪生神经网络的实现思路 一 预测部分 1 主干网络介绍 2 比较网络 二 训练部分 1 数据集的格式 2
  • Fire-YOLO:一种用于火灾检测的小目标检测方法

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 作者丨CY 来源丨当交通遇上机器学习 编辑丨极市平台 极市导读 本次介绍的文章是太原理工大学团队在2022年发表在 Sustainability 的关于火灾检测的小目标实
  • 模式识别课程:目标检测③基于深度学习的检测算法

    title 目标检测 基于深度学习的检测算法 目标检测实验报告 检测所用软硬件 云服务器 硬件 macOS或者windows电脑 软件 pycharm 生成的测试集 云服务器 滴滴云 https www didiyun com activi
  • 计算机视觉2021年3月28最新论文

    编辑 AI速递 计算机视觉 3月28日 1 USB Universal Scale Object Detection Benchmark 标题 USB 万能物体检测基准 链接 https arxiv org abs 2103 14027 2
  • 轻量级卷积神经网络的设计技巧

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 这篇文章将从一个证件检测网络 Retinanet 的轻量化谈起 简洁地介绍 我在实操中使用到的设计原则和idea 并贴出相关的参考资料和成果供读者参考 因此本文是一篇注重
  • 深度学习最基础理论知识总结 (CS231课程总结,持续更新)

    因为有在看CS231学习深度学习的简单知识 所以打算整理成blog 持续更新中 一 损失函数loss function 1 SVM 最简单的loss function 其中为真实label对应的分数 为label j对应的分数 Li为每个样
  • 三种常见的卷积概述(线性卷积周期卷积圆周卷积)

    note 2020 07 26搬运 下面的内容来自我的公众号 yhm同学 upd 2020 10 18 推荐学习辅助用书 江志红的 深入浅出数字信号处理 有别于学院派的教材 这本书讲得比较易懂清楚 upd 2020 10 18 数字信号处理
  • 时间序列预测方法最全总结!

    时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息 包括连续型预测 数值预测 范围估计 与离散型预测 事件预测 等 具有非常高的商业价值 需要明确一点的是 与回归分析预测模型不同 时间序列模型依赖于数值在时间上的先后顺序 同样
  • 【信号与系统】傅里叶变换

    傅里叶变换 文章目录 傅里叶变换 傅里叶级数 基本公式 常用公式 基本性质 其他公式 卷积公式 周期信号的傅里叶变换 抽样信号的傅里叶变换 提供延时的理想滤波器 无失真传输 傅里叶级数 https blog csdn net lafea a
  • 搞懂Vision Transformer 原理和代码,看这篇技术综述就够了(三)

    点击蓝字 关注极市平台 作者丨科技猛兽 来源丨极市平台 审核丨邓富城 极市导读 本文为详细解读Vision Transformer的第三篇 主要解读了两篇关于Transformer在识别任务上的演进的文章 DeiT与VT 它们的共同特点是避
  • Keras+CNN模型识别手写数字(mnist)详细分析

    CNN模型 CNN卷积神经网络 包含卷积层 卷积运算提取输入的不同特征 更多层的网络能从低级特征中迭代提取等复杂的特征 线性整流层 RELU 池化层 卷积后会得到维度很大的特征 将特征切成几个区域 取最大值或平均值 得到新的较小维度特征 全
  • 4.4 目标检测YOLO-V3算法--主线二:卷积神经网络提取特征(百度架构师手把手带你零基础实践深度学习原版笔记系列)

    4 4 目标检测YOLO V3算法 主线二 卷积神经网络提取特征 百度架构师手把手带你零基础实践深度学习原版笔记系列 目录 4 4 目标检测YOLO V3算法 主线二 卷积神经网络提取特征 百度架构师手把手带你零基础实践深度学习原版笔记系列
  • 图像分割必备知识点

    文章转自 微信公众号 机器学习炼丹术 文章转载或者交流联系作者微信 cyx645016617 Unet其实挺简单的 所以今天的文章并不会很长 喜欢的话可以参与文中的讨论 在文章末尾点赞 在看点一下呗 0 概述 语义分割 Semantic S
  • Densely Connected Convolutional Networks 密集连接卷积网络

    什么是DenseNet DenseNet是由清华大学的Zhuang Liu 康奈尔大学的Gao Huang和Kilian Q Weinberger 以及Facebook研究员Laurens van der Maaten在CVPR 2017所

随机推荐

  • Uniapp学习之从零开始写一个简单的小程序demo(新建页面,通过导航切换页面,发送请求)

    先把官网文档摆在这 后面会用到的 uniapp官网文档 https uniapp dcloud net cn vernacular html 一 开发工具准备 1 1 安装HBuilder 按照官方推荐 先装一个HBuilder 下载地址
  • 修复maven缓存导致Jenkins打包失败

    问题 笔者近期在公司搭建了一个内网的nexus 所以每次有新项目要部署到Jenkins时需要使用脚本将相关依赖导入到nexus上 近期笔者在Jenkins配置了一个item报错 然后将相关依赖导入nexus中 再次打包时出现下面这段异常 笔
  • 【VUE】在vue项目实践当中使用swiper轮播图教程

    步骤 1 安装vue awesome swiper npm install vue awesome swiper S 2 在vue项目中引用vue awesome swiper main js import VueAwesomeSwiper
  • Java是面向过程语言还是面向对象语言?

    目录 一 面向过程语言 二 面向对象语言 三 Java是面向过程语言还是面向对象语言 一 面向过程语言 面向过程语言是一种编程范式 它将程序设计看作是按照一定的步骤或流程进行处理的过程 在面向过程语言中 程序员需要自己定义数据结构和算法 并
  • linux的链接方式

    linux的硬链接和软链接 1 链接的概念 Linux链接分两种 一种被称为硬链接 Hard Link 另一种被称为软链接也叫符号链接 Symbolic Link 默认情况下 ln命令产生硬链接 2 硬链接 在Linux文件系统当中 保存在
  • 年入50万,程序员的第二条赛道

    大家好 我是厂长 我有个朋友 叫佩佩 这几年我亲眼见证了她从月薪6千 到年入百万 她曾经靠一条短视频带货就赚了30万佣金 最近 我看到她在做小红书无货源电商这个风口项目 两个月就做到了单店30万的战绩 她说2023年是小红书电商元年 0粉
  • 回味C语言

    虽然在实际上没怎么使用C语言了 但是看到C语言的书总是忍不住想看一下 喜欢这种至简 却又有着强大能力的语言 读完书随手写的一些笔记 略有些简单 书还是很喜欢的 推荐给大家 C专家编程 第一章 C 穿越时空的迷雾 原型决定C语言不支持函数重载
  • 小程序面试题

    1 简单描述一下微信小程序的相关文件类型 答 WXML WeiXin Markup Language 是框架设计的一套标签语言 结合基础组件 事件系统 可以构建出页面的结构 内部主要是微信自己定义的 套组件 WXSS WeiXin Styl
  • mysql 利用binlog增量备份,还原实例(日志备份数据库)

    一 什么是增量备份 增量备份 就是将新增加的数据进行备份 假如你一个数据库 有10G的数据 每天会增加10M的数据 数据库每天都要备份一次 这么多数据是不是都要备份呢 还是只要备份增加的数据呢 很显然 我只要备份增加的数据 这样减少服务器的
  • C++ 调用python

    本文代码已在vs2017上验证 c 调用python需要三类文件 这些文件都可以在python安装目录下找到 1 include文件夹 位于python目录下 2 dll文件 位于python目录下 如python37 dll 3 lib文
  • 超分辨率概述

    1 什么是超分辨率增强 Video super resolution is the task of upscaling a video from a low resolution to a high resolution 超分辨率 Supe
  • Git & GitHub 入门6:用好commit message

    git log 可以查看所有的 commit messages 修改repo中的文件内容后 add该文件 直接运行命令git commit进入message编辑状态 可以输入多行commit message说明 完成后点击ECS键退出编辑
  • Gin-swaggo为gin框架提供Swagger 文档

    官方 https github com swaggo gin swagger 开始使用 为API方法增加注释 加在controller api 层 See Declarative Comments Format 运行下面命令下载swgo g
  • L2-4 部落PTA

    在一个社区里 每个人都有自己的小圈子 还可能同时属于很多不同的朋友圈 我们认为朋友的朋友都算在一个部落里 于是要请你统计一下 在一个给定社区中 到底有多少个互不相交的部落 并且检查任意两个人是否属于同一个部落 输入格式 输入在第一行给出一个
  • hadoop3.2.1编译安装

    基础环境 centos 7 7 三台 hadoop需要的环境 Requirements Unix System JDK 1 8 Maven 3 3 or later ProtocolBuffer 2 5 0 CMake 3 1 or new
  • echart 折线图设置y轴单位_如何让echarts中y轴的单位位于数值的右上角

    展开全部 1 创建折线图的数据区 包括年份和数据 2 仅选择数据区创建折线图 插入选项卡 图表62616964757a686964616fe78988e69d8331333363396364工具组 折线图 3 得到的折线图x坐标不满足要求
  • c++可变参数模板函数

    可变参数模版函数 类型一致 可变参数 使用头文件 cstdarg va list arg ptr 开头指针 va start arg ptr n 从开头开始读取n个 va arg arg ptr T 根据数据类型取出数据 va end ar
  • jdk1.8升级后 sun.io.CharToByteConverter 错误处理

    项目工程中用到jdk1 6相关方法 可以使用 但是升级到jdk1 8以后 编译出现java lang NoClassDefFoundError sun io CharToByteConverter错误 后经查询 是jdk1 8版本中已经从s
  • 前端02:CSS选择器等基础知识

    CSS基础选择器 设置字体样式 文本样式 CSS的三种引入方式 能使用Chrome调试工具调试样式 HTML专注做结构呈现 样式交给CSS 即结构 HTML 和样式CSS相分离 CSS主要由量分布构成 选择器以及一条或多条声明 选择器 给谁
  • 深度学习10篇文章之Interleaved Group Convolution

    本文主要讲解Ting Zhang的Interleaved Group Convolutions for Deep Neural Networks 该文对Group convolution有较为详细的讲解 Abstract 文章开篇引出了 I