大家好,本次分享的是YOLOv4的那篇论文我将主要从这几个部分对该论文进行详细的解读首先来看论文的主要内容YOLOv4这篇论文主要是介绍如何使用一些通用的新方法达到了最先进的实验结果,他们在COCO数据集上实现了65 FPS的速度和精度为43.5%的AP的检测。这个是论文中YOLOv4与其他方法的对比图。从图中可以看出,在相同FPS情况下,它取得的AP是最高的,在相同的AP的情况下,它的FPS是最高的。接下来我们介绍目标检测模型现代的目标检测器通常由两部分组成,一个是在ImageNet上预训练的backbone(骨架网络),另一个是用来预测对象的类别和边界框的head(头部)。对于在GPU平台上运行的那些检测器,其骨干网络可能是VGG,ResNet,ResNeXt或DenseNet。对于在CPU平台上运行的那些检测器,其骨架可以是SqueezeNet,MobileNet或ShuffleNet。至于头部,通常分为两类,即单阶段目标检测器和双阶段目标检测器。最具有代表性的双阶段目标检测器是R-CNN系列,包括Fast R-CNN,Faster R-CNN,R-FCN和Libra R-CNN。也可以使两阶段目标检测器成为anchor-free(无需借助锚点)检测器,例如RepPoints。对于单阶段目标检测器,最具代表性的模型是YOLO,SSD和RetinaNet。近年来,有研究开发了anchor-free的单阶段目标检测器,例如CenterNet,CornerNet,FCOS等。近年来开发的目标检测器通常在骨架和头部之间插入一些层,通常使用这些层。收集不同阶段的特征图。我们可以称其为目标检测器的neck(颈部)。通常,颈部由几个自下而上的路径和几个自上而下的路径组成。应用此机制的网络包括特征金字塔网络(FPN),路径聚集网络(PAN),BiFPN和NAS-FPN。除上述模型外,一些研究人员还着重于直接构建用于目标检测的新骨架网(DetNet,DetNAS)或新的整个模型(SpineNet,HitDeector) 。综上所述,普通的目标检测器由以下几部分组成(输入,骨架网络,颈部,头部):这是YOLOv4原论文中的总结内容这里展示的是计算机视觉常用的VGG16模型结构的示意图以及ResNet50模型结构的示意图YOLO这个名字完整体现了算法的精髓:You Only Look Once。它与RCNN系列算法不同:RCNN系列算法(RCNN/Fast RCNN/Faster RCNN)是经过了两次检测,第一次是获取proposal box,第二次才是图像预测。YOLO算法通过回归来完成物体检测,期间使用了统一的网络来完成物体识别和框定位。具体来说,Yolo的CNN网络将输入的图片分割成s*s的网格,然后每个单元格负责去检测那些中心点落在该格子内的目标,如图所示,可以看到狗这个目标的中心落在左下角一个单元格内,那么该单元格负责预测这个狗。每个单元格会预测一定数量个边界框(bounding box)以及边界框的置信度(confidence score)。所谓置信度其实包含两个方面,一是这个边界框含有目标的可能性大小,二是这个边界框的准确度。还有分类问题,对于每一个单元格其还要给出预测出n个类别概率值,其表征的是由该单元格负责预测的边界框其目标属于各个类别的概率。接下来我们介绍BoF通常,传统的目标检测器是离线训练的。因此,研究人员总是喜欢利用这一优势,并开发出更好的训练方法,这些方法可以使目标检测器获得更好的精度,却又不会增加推理成本,于是我们称这些方法为bag of freebies(意为:免费赠品),仅改变训练策略或仅增加训练成本。目标检测方法经常采用并且符合bag of freebies定义的是数据增强。数据增强的目的是增加输入图像的多样性,从而使设计的目标检测模型对从不同环境获得的图像具有更高的鲁棒性。例如,光度畸变和几何畸变是两种常用的数据增强方法,它们无疑有益于目标检测任务。在处理光度畸变时,我们会调整图像的亮度,对比度,色相,饱和度和噪点。对于几何畸变,我们添加了随机缩放,裁剪,翻转和旋转。这些数据扩充方法都是逐像素调整,并且保留了调整区域中的所有原始像素信息。此外,一些从事数据增强的研究人员还将重点放在模拟目标遮挡问题上。他们在图像分类和目标检测中取得了良好的效果。例如,随机擦除和CutOut(裁剪)可以随机选择图像中的矩形区域,并填充零的随机或互补值。至于hide-and-seek和网格遮盖,他们随机或均匀地选择图像中的多个矩形区域,并将它们替换为零。如果类似的概念应用于特征图,则有DropOut ,DropConnect和DropBlock方法。另外,一些研究人员提出了使用多个图像一起执行数据增强的方法。例如,MixUp使用两个图像以不同的系数比值相乘和叠加,然后使用这些叠加的比值来调整标签。对于CutMix,它是将裁切后的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。除了上述方法之外,style transfer GAN还被用于数据扩充,这种用法可以有效地减少CNN所学习的纹理偏差。然后我们来看一下BoS方面对于那些仅少量增加推理成本,但可以显著提高目标检测准确性的插件模块和后处理方法,我们称它们为bag of specials(意为:特价袋)。一般而言,这些插件模块用于增强模型中的某些属性,例如扩大感受野,引入注意力机制或增强特征集成能力等,而后处理是一种筛选模型预测结果的方法,可以用来增强感受野的通用模块是SPP,ASPP和RFB。SPP模块起源于空间金字塔匹配(SPM),SPM的原始方法是将特征图分割为几个d×d个相等的块,其中d可以为{1,2,3,… },从而形成空间金字塔,然后提取bag-of-word(词袋)特征。SPP将SPM集成到CNN中,并使用最大池化操作而不是词袋操作。由于He等人提出的SPP模块将输出一维特征向量,在全卷积网络(FCN)中应用是不可行的。因此,在YOLOv3的设计中,Redmon和Farhadi将SPP模块改进为内核大小为k×k的最大池化输出的级联,其中k = {1、5、9、13},步幅等于1。在这种设计下,较大的k×k最大池有效地增加了骨架网络特征的感受野。在添加了改进版本的SPP模块之后,YOLOv3-608在MS COCO目标检测任务上将AP50提高了2.7%,而额外的计算代价为0.5%。ASPP模块和改进的SPP模块之间在操作上的差异主要在于原始k×k内核大小、步幅等于1的最大池化到几个3×3内核大小,扩展比率等于k和在膨胀卷积运算中,步幅等于1。RFB模块将使用k×k核的多个膨胀卷积,膨胀比等于k,步幅等于1,以获得比ASPP更全面的空间覆盖。RFB仅花费7%的额外推理时间,即可将MS COCO上SSD的AP50提高5.7%。通常在目标检测中使用的注意力模块主要分为通道注意和点注意,这两个注意模型的代表是Squeeze-and-Excitation(SE)和Spatial Attention module(SAM)。尽管SE模块可以使ImNetNet图像分类任务中的ResNet50提高1%的top-1准确性,同时仅增加2%计算量,但是通常在GPU上它将使推理时间增加大约10%,因此更适合在移动设备中使用。但是对于SAM,它只需要支付0.1%的额外计算量,就可以在ImageNet图像分类任务上将ResNet50-SE的top-1准确性提高0.5%。最好的是,它根本不影响GPU上的推理速度。在特征集成方面,早期的实践是使用跳过连接或hyper-column将低层物理特征集成到高层语义特征。由于诸如FPN的多尺度预测方法已变得流行,因此提出了许多集成了不同特征金字塔的轻量级模块。这种模块包括SFAM,ASFF和BiFPN。SFAM的主要思想是使用SE模块在多尺度级联特征图上执行通道级级别的加权。对于ASFF,它使用softmax作为逐点级别权重,然后添加不同比例的特征图。在BiFPN中,提出了多输入加权残差连接以执行按比例的级别重新加权,然后添加不同比例的特征图。然后我们来看一下YOLOv4的方案最终是怎么选择的YOLOv4的目标是在输入网络分辨率,卷积层数,参数数量(过滤器大小2 过滤器通道/组)和层输出(过滤器)的数量之间找到最佳平衡。论文中的研究提到,就ILSVRC2012(ImageNet)数据集上的目标分类而言,CSPResNext50与CSPDarknet53相比要好得多。但是相反,在MS COCO数据集上的目标检测方面,CSPDarknet53比CSPResNext50更好。下一个目标是针对不同的检测器、不同的骨架网络,选择其他模块来增加感受野和参数聚集的最佳方法:FPN,PAN,ASFF,BiFPN。分类最佳的参考模型对于检测器并非总是最佳的。YOLOv4方案将SPP模块添加到CSPDarknet53上,因为它显着增加了感受野,分离出最重要的上下文特征,并且几乎没有降低网络运行速度。然后使用PANet为不同检测器从不同backbone级别的参数聚合方法,而不是YOLOv3中使用的FPN。最后,YOLOv4方案选择CSPDarknet53为骨架网络,SPP作为附加模块,PANet路径聚合作为颈部以及和YOLOv3(anchor based)的头部作为YOLOv4的体系结构。将来还计划大幅扩展检测器的bag of freebies(BoF)的内容,从理论上讲,它可以解决一些问题并提高检测器的准确性,并以实验方式依次检查每个功能的影响。YOLO V4 不使用跨GPU批量标准化(CGBN或SyncBN)或昂贵的专用设备。这样一来,任何人都可以在传统的图形处理器上重现其最新技术成果,例如GTX 1080Ti或RTX 2080Ti。BoF和BoS的选择为了改进目标检测训练过程,CNN通常使用以下方法:

  • 激活函数:ReLU,leakage-ReLU,parameter-ReLU,ReLU6,SELU,Swish或Mish

  • 边界框回归损失函数:MSE,IoU,GIoU,DIoU

  • 数据增强:CutOut,MixUp,CutMix

  • 正则化方法:DropOut,DropPath,Spacial DropOut或DropBlock

  • 通过计算均值和方差的网络激活函数归一化:批次归一化(BN),跨GPU批量归一化(CGBN或SyncBN),过滤器响应归一化(FRN)或交叉迭代批量归一化(CBN)

  • 跳过连接:残差连接,加权残差连接,多输入加权残差连接或跨阶段部分连接(CSP)

至于训练用的激活函数,由于PReLU和SELU更难以训练,并且ReLU6是专门为量化网络设计的,因此方案从候选列表中删除了上述激活函数。在重新量化方法中,发布DropBlock的人已将其方法与其他方法进行了详细的比较,并且其正则化方法胜过其他方法许多。因此,YOLOv4方案毫不犹豫地选择了DropBlock作为正则化方法。至于归一化方法的选择,由于方案专注于仅使用一个GPU的训练策略,因此不考虑syncBN。额外的提升为了使设计的检测器更适合在单个GPU上进行训练,方案进行了以下附加设计和改进:

  • 引入了一种新的数据增强方法,即自我对抗训练(SAT)

  • 在应用遗传算法时选择最佳超参数

  • 我们修改了一些现有方法,使方案的设计适合进行有效的训练和检测,例如修改后的SAM,修改后的PAN和交叉小批量归一化(CmBN)

  • 马赛克代表一种新的数据增强方法,该方法混合了4个训练图像,而 CutMix 只有两个输入图像。这样就可以检测到超出其正常背景的对象。

  • 此外,批量归一化从每层上的4张不同图像计算激活统计信息,这大大减少了对大的mini-batch size的需求。

  • 自对抗训练(SAT)也代表了一项新的数据增强技术,该技术执行2个前向和反向传播。在第一阶段,神经网络会更改原始图像,而不是网络权重。这样,神经网络通过改变原始图像,从而创造了一种图像上没有想要目标的假象,对其自身执行了对抗攻击。在第二阶段,训练神经网络以正常方式检测此修改图像上的目标。CmBN是CBN修改版本,定义为Cross mini-Batch Normalization(CmBN)。这仅收集单个batch中的mini-batches之间的统计信息。

  • 方案还将SAM从空间注意改为点注意,并将PAN的快捷连接替换为串联。

YOLOv4的细节YOLOv4的组成:

  • 骨架网络: CSPDarknet53

  • 颈部: SPP, PAN

  • 头部: YOLOv3

YOLO v4使用了:

  • Bag of Freebies (BoF) for backbone: CutMix和马赛克数据增强,DropBlock正则化, 类标签平滑

  • Bag of Specials (BoS) for backbone: Mish激活函数,跨阶段部分连接(CSP),多输入加权残差连接 (MiWRC)

  • Bag of Freebies (BoF) for detector: CIoU损失函数, CmBN, DropBlock正则化,马赛克数据增强,自对抗训练(SAT),Eliminate grid sensitivity,为每个真实标签使用多个锚点,,Cosine annealing scheduler,优化的超参数,随机的训练形状

  • Bag of Specials (BoS) for detector: Mish激活函数,SPP模块,SAM模块,路径聚合模块(PAN), DIoU-NMS

实验方案测试了不同训练改进技术对ImageNet(ILSVRC 2012 val)数据集上分类器准确性的影响,然后对MS COCO(test-dev 2017)数据集上检测器的准确性进行了影响。在ImageNet图像分类实验中,默认的超参数如下:训练步骤为8,000,000;批量大小和最小批量大小分别为128和32;采用多项式衰减学习率调度策略,初始学习率为0.1。预热步骤为1000;动量和重量偏差分别设置为0.9和0.005。方案所有的BoS实验都使用与默认设置相同的超参数,并且在BoF实验中,方案添加了额外的50%训练步骤。在BoF实验中,方案验证了MixUp,CutMix,Mosaic,模糊数据增强和标签平滑正则化方法。在BoS实验中, 方案比较了LReLU,Swish和Mish激活功能的效果。所有实验均使用1080 Ti或2080 Ti GPU进行训练。在MS COCO目标检测实验中,默认超参数如下:训练步骤为500,500;训练步骤为500,500。采用步阶衰减学习率调度策略,初始学习率为0.01,分别在40万步和45万步上乘以系数0.1。动量和重量衰减分别设置为0.9和0.0005。所有架构均使用单个GPU以64的批处理大小执行多尺度训练,而最小批处理大小为8或4则取决于架构和GPU内存限制。除了使用遗传算法进行超参数搜索实验外,所有其他实验均使用默认设置。遗传算法使用YOLOv3-SPP训练GIoU损失,并搜索300个epoch的最小5k集。对于遗传算法实验,方案采用搜索学习率0.00261,动量0.949,IoU阈值来分配ground truth 0.213,并使用损失归一化器0.07。方案已经验证了许多BoF,包括消除网格敏感性,分子数据增强,IoU阈值,遗传算法,类标签平滑,交叉小批量归一化,自对抗训练,余弦退火调度程序,动态小批量大小,DropBlock,优化锚点,不同类型的IoU损失。方案还对各种BoS进行了实验,包括Mish,SPP,SAM,RFB,BiFPN和高斯YOLO。对于所有实验,方案仅使用一个GPU进行训练,因此未使用可优化多个GPU的诸如syncBN之类的技术。结果与其他最先进的目标检测器获得的结果比较如图所示。YOLOv4位于Pareto最优曲线上,在速度和准确性方面均优于最快,最精确的检测器。由于不同的方法使用不同架构的GPU进行推理时间验证,因此在Maxwell,Pascal和Volta架构的通用GPU上运行YOLOv4,并将它们与其他最新方法进行比较。结论该论文中的YOLOv4方案提供了一种最先进的检测器,其速度(FPS)和准确度(MS COCO AP50 … 95和AP50)比所有可用的替代检测器都要高。所描述的检测器可以训练并在具有8-16 GB-VRAM的常规GPU上使用,这使得它的广泛使用成为可能。单阶段基于锚的检测器的原始概念已经证明了其可行性。方案已经验证了大量新的方法,并选择使用这些方法以提高分类器和检测器的准确性。这些功能可以用作未来研究和开发的最佳实践。接下来是YOLOv4网络的整体架构介绍一张图,整体感受一下yolov4网络结构该图是白勇老师所绘制的YOLOv4网络架构图Cross Stage Partial(CSP)可以增强CNN的学习能力,能够在轻量化的同时保持准确性、降低计算瓶颈、降低内存成本。CSPNet论文详见:https://arxiv.org/pdf/1911.11929.pdfDarknet53的结构如图所示,共有5个大残差块,每个大残差块所包含的小残差单元个数为1、2、8、8、4。CSPDarknet53是在Darknet53的每个大残差块上加上CSP,对应layer 0~layer 104。Darknet53分块1加上CSP后的结果,对应layer 0~layer 10。其中,layer [0, 1, 5, 6, 7]与分块1完全一样,而 layer [2, 4, 8, 9, 10]属于CSP部分。Darknet53分块2加上CSP后的结果,对应layer 11~layer 23。其中,layer [11, 15~20]对应分块2(注意:残差单元中的3×3卷积核的深度改变了,由Darknet53分块2中的128改为64,请看layer 16 和 layer 19),其余 layer属于CSP部分。Darknet53分块3加上CSP后的结果,对应layer 24~layer 54。其中,layer [24, 27~51]对应分块3(注意:残差单元中的3×3卷积核的深度改变了,由Darknet53分块3中的256改为128,请看layer 29等),其余 layer属于CSP部分。Darknet53分块4加上CSP后的结果,对应layer 55~layer 85。其中,layer [55, 58~82]对应分块4(注意:残差单元中的3×3卷积核的深度改变了,由Darknet53分块4中的512改为256,请看layer 60等),其余 layer属于CSP部分。Darknet53分块5加上CSP后的结果,对应layer 86~layer 104。其中,layer [86, 89~101]对应分块5(注意:残差单元中的3×3卷积核的深度改变了,由Darknet53分块5中的1024改为512,请看layer 91等),其余 layer属于CSP部分。SPP全称为Spatial Pyramid Pooling ,即,空间金字塔池化,SPP论文详见这里:https://arxiv.org/pdf/1406.4729.pdf,网络结构如图所示。SPP网络用在YOLOv4中的目的是增加网络的感受野。实现是对layer107进行 5×5 、 9×9 、 13×13 的最大池化,分别得到layer 108,layer 110和layer 112,完成池化后,将layer 107,layer 108,layer 110和layer 112进行concatenete,连接成一个特征图layer 114并通过 1×1降维到512个通道。SAM(spatial attention module)模块如Figure4所示。这部分主要是基于RPN特征得到一个权重矩阵,因为RPN参数训练时有一个前背景分类的监督信息,因此这个权重矩阵可以用来表达特征图上前景和背景的区域差异,将该权重矩阵和原来的特征图相乘后就得到调整后的特征图,这样基于调整后的特征图执行RoI特征提取就能达到强调前景特征,弱化背景特征的目的。Figure6给出了是否增加SAM模块对特征图的影响,可以看到增加SAM后目标区域的特征值相比非目标区域的特征值要更大一些,这样提取到的RoI特征中目标特征占比也越大,达到强化目标特征,弱化背景特征的目的。PANet 的论文详见这里https://arxiv.org/pdf/1803.01534.pdf,网络结构如图所示,与FPN相比,PANet 在UpSample之后又加了DownSample的操作。PANet上采样对应的layer为layer 105到layer 128。PANet实现示意图PANet实现示意图PANet实现示意图YOLOv3的Head实现示意图最后,我们来看一下部分代码的实际实现我们以这一份复现代码为例可以看到其中的yolov4具体代码实现,由大量的残差卷积模块、SPP等组成以及Mish激活函数的实现然后我们来看一些官方代码实现这里是用到的相关激活函数的函数体同样,是mish激活函数的实现,只不过官方代码中加入了3种代码实现,最终采样的是其中的mish_yashas2的实现。这里展示的是模型结构配置的定义,该配置定义在这个cfg文件里。其C++代码的SAM实现做了并行计算的优化,这里将前向计算的一些串行的for循环代码通过编译器预处理指令转换为了并行的计算SAM的反向计算也进行了相同的处理最后谢谢大家,如果有什么不懂的欢迎提出来一起讨论研究。


往期精彩

ASRT上线测试Demo啦

[论文分享]迁移学习实现基于预算的语音识别

计算机的内功真的很重要吗?

[论文分享]FastSpeech: 快速鲁棒可控的语音合成

教你如何使用ASRT部署中文语音识别API服务器

教你如何使用ASRT训练中文语音识别模型

·END·

AI柠檬博客

分享AI技术文章

关注前沿科技

QQ交流群:  867888133

微信号:ailemon_me

博客网址:https://blog.ailemon.me

点击下方“”即可阅读博客原文,并参与评论和互动。

点在看,让柠檬菌知道你在看~

yolov4论文_YOLOv4论文详细解读相关推荐

  1. TinyBERT论文及代码详细解读

    简介 TinyBERT是知识蒸馏的一种模型,于2020年由华为和华中科技大学来拟合提出. 常见的模型压缩技术主要分为: 量化 权重减枝 知识蒸馏 为了加快推理速度并减小模型大小,同时又保持精度,Tin ...

  2. 元学习之《On First-Order Meta-Learning Algorithms》论文详细解读

    元学习系列文章 optimization based meta-learning <Model-Agnostic Meta-Learning for Fast Adaptation of Dee ...

  3. 经典神经网络论文超详细解读(三)——GoogLeNet InceptionV1学习笔记(翻译+精读+代码复现)

    前言 在上一期中介绍了VGG,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而今天要介绍的就是同年分类任务的第一名--GoogLeNet . 作为2014年Ima ...

  4. PSGAN——姿态稳健型可感知空间式生成对抗网络论文详细解读与整理

    PSGAN--姿态稳健型可感知空间式生成对抗网络论文详细解读与整理 1.摘要 2.什么是PSGAN? 3.主要贡献 4.整体模块 5.目标函数 6.实验结果--部分化妆和插值化妆 7.定量比较 8.参 ...

  5. 经典神经网络论文超详细解读(八)——ResNeXt学习笔记(翻译+精读+代码复现)

    前言 今天我们一起来学习何恺明大神的又一经典之作: ResNeXt(<Aggregated Residual Transformations for Deep Neural Networks&g ...

  6. 博通语法纠错技术方案入选ACL2022,论文详细解读

    语法纠错团队成功入选ACL 2022的中文纠错模型CRASpell和CNEG | 导语 语法纠错是一项基础的NLP任务,在机器翻译.语音识别.自动问答等任务中具有重要的作用.我们针对中文语法纠错进行了 ...

  7. BoT-SORT: Robust Associations Multi-Pedestrian Tracking 论文详细解读

    BoT-SORT: Robust Associations Multi-Pedestrian Tracking 论文详细解读 文章目录 BoT-SORT: Robust Associations Mu ...

  8. 【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)

    前言 从这篇开始,我们将进入YOLO的学习.YOLO是目前比较流行的目标检测算法,速度快且结构简单,其他的目标检测算法如RCNN系列,以后有时间的话再介绍. 本文主要介绍的是YOLOV1,这是由以Jo ...

  9. 经典神经网络论文超详细解读(二)——VGGNet学习笔记(翻译+精读)

    前言 上一篇我们介绍了经典神经网络的开山力作--AlexNet:经典神经网络论文超详细解读(一)--AlexNet学习笔记(翻译+精读) 在文章最后提及了深度对网络结果很重要.今天我们要读的这篇VGG ...

最新文章

  1. Lyft估值目标近200亿美元 有望成今年来美国最大IPO
  2. iOS 隐藏导航栏整个视图上移闪屏问题
  3. 原来这就是Java代码生成器的原理啊,太简单了
  4. psfaddtable - 添加一个Unicode字符表到控制台字体中
  5. 【控制】《自动控制原理》胡寿松老师-第6章-线性系统的校正方法
  6. SQLite 删除表(http://www.w3cschool.cc/sqlite/sqlite-drop-table.html)
  7. 命令行command更新android sdk + gradle设置代理
  8. catia如何整列加工_”模具加工“最全面的诠释,你真的都懂了吗?
  9. Loj#2880-「JOISC 2014 Day3」稻草人【CDQ分治,单调栈,二分】
  10. phaser java_【Java并发编程实战】-----“J.U.C”:Phaser
  11. C# Winform 窗体美化(六、双层窗体)
  12. Python BeautifuSoup4 爬表格
  13. java无法输出_这个java程序为什么不能输出结果?
  14. 使用google analytics(分析)监测百度竞价关键词效果(网址构建工具)
  15. SRGAN——使用与超分辨率重建的GAN
  16. 关闭windows自动更新小妙招
  17. 【申博攻略】一.北交计算机学院学术型博士“申请-考核”攻略(招生简章篇)
  18. 百度地图 控件——路网地图和影像地图切换
  19. ASUS ZenBook Duo 14 UX481电脑 Hackintosh 黑苹果efi引导文件
  20. html json是什么文件,JSON是什么?

热门文章

  1. ELK学习11_ELK Stack交流群问题汇总一
  2. TCP三次握手四次挥手 TCP/UDP区别
  3. CSS3的box-sizing:向外撑content-box向内挤border-box 外撑的padding算自己的盒子会变大 内挤的padding会缩小自己
  4. Go的testing包数据类型M/T/B/PB
  5. Yii的各种query
  6. 小红帽linux操作教程_【免费】Linux从入门到精通教程!
  7. c语言再大文件内搜索,C语言中大型磁盘文件的二进制搜索
  8. maven静态资源导出(Ctrl+C+V)
  9. ajax获取网页新闻,基于Ajax的新闻网页动态数据的抓取方法及系统
  10. nginx注册为windows系统服务