YOLOv2-详解

YOLO9000:Better, Faster, Stronger

论文下载:https://arxiv.org/abs/1612.08242

代码下载:https://pjreddie.com/darknet/yolo/

目录

摘要

(一)简介

(二)精度的改进(better)

1. Batch normalization(每次卷积后批标准化)

2. High-resolution classifier(分辨率更高的分类器)

3. Convolutional with anchor boxes(引入anchor预测边界框坐标)

4. Dimension clusters(K-means聚类确定anchor初始值)

5. Direct location prediction(直接位置预测)

6. Fine-grained features(特征融合)

7. Multi-scale training(多尺度训练)

(三)速度的改进(faster)

Darknet-19

Training for classification

Training for detection

(四)分类的改进

(五)总结

(六)知识点学习

1. 平移不变性(分类)

2. 平移敏感性(检测)

参考资料:



摘要

首先,提出了相对于yolov1做出的改进。yolov2采用多尺度训练方法,可以对不同大小的图片进行处理,实现检测速度与精度的先对平衡。67fps时,在voc2007数据集上达到76.8map,40fps时,达到78.6map,性能由于采用resnet的fasrer r-cnn和ssd算法。最后,提出一种联合训练目标检测和分类的方法,可以同时在coco目标检测数据集和imagenet目标分类数据集上进行训练,联合训练方法允许YOLO9000预测没有标记检测数据的目标类的检测。

(一)简介

当前相对于分类任务来说,目标检测数据集比较有限,标注目标检测数据集的成本也比较昂贵。论文提出一种新方法,使用当前已有的大量目标分类数据集,扩大目标检测系统的范围。使用目标分类的层次视图,允许将不同的数据集合在一起。另外,提出一种联合训练算法,允许我们在目标分类和目标检测数据集上训练目标检测器,该方法使用标注的检测图像学习目标的位置信息,使用分类图像增加语义和鲁棒性。采用这种方法训练的yolo9000模型可以检测9000种目标类别。

(二)精度的改进(better)

yolov1产生大量定位误差,并且与基于候选区域的目标检测算法相比,yolov1的召回率较低。因此,主要在保证精度的前提下,提高召回率和定位精度。

1. Batch normalization(每次卷积后批标准化)

参考:https://blog.csdn.net/hjimce/article/details/50866313; https://zhuanlan.zhihu.com/p/24810318;https://www.zhihu.com/question/38102762

文献来源:《Batch Normalization: Accelerating Deep Network Training by  Reducing Internal Covariate Shift》,与《Spatial Transformer Networks》结构相似。

Batch Normalization, 批标准化, 和普通的数据标准化类似, 是将分散的数据统一的一种做法,具有统一规格的数据, 能让机器学习更容易学习到数据之中的规律。

yolov2中在所有卷积层后添加Batch Normalization,map增加2%,且有助于规范化模型。

2. High-resolution classifier(分辨率更高的分类器)

YOLOv2则将预训练分成两步:先用224*224的输入在ImageNet数据集训练分类网络,大概160个epoch(将所有训练数据循环跑160次)后将输入调整到448*448,再训练10个epoch(这两步都是在ImageNet数据集上操作)。然后利用预训练得到的模型在检测数据集上fine-tuning。这样训练得到的模型,在检测时用448*448的图像作为输入可以顺利检测。然后,作者对检测网络部分(也就是后半部分)也进行finetune。这样通过提升输入的分辨率,mAP获得了4%的提升。

3. Convolutional with anchor boxes(引入anchor预测边界框坐标)

参考:https://blog.csdn.net/ft_sunshine/article/details/98682310?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-8&spm=1001.2101.3001.4242

https://blog.csdn.net/just_sort/article/details/80822038;https://blog.csdn.net/qq_34037046/article/details/87393407

YOLOv1最后直接使用全连接层对边界框进行预测,其中边界框的高度是相对整张图片大小的,而由于各个图片中存在不同尺寸和长宽比的物体,YOLOv1在训练过程中学习适应不同物体的形状是比较困难的,这也导致YOLOv1在精确定位方面的表现较差。

YOLOv2借鉴Faster-CNN的RPN网络的先验框,PRN对CNN特征提取器得到的特征图进行卷积来预测每个位置的边界框以及置信度(是否有目标),并且各个位置设置不同尺寸和比例的先验框,所有RPN预测的是边界框相对于先验框的偏移值,使用先验框使得更容易学习。

为了引入anchor boxes来预测bounding boxes对网络的修改:作者在网络中果断去掉了全连接层。首先,去掉了后面的一个池化层以确保输出的卷积特征图有更高的分辨率。然后,通过缩减网络(如何缩减?直接resize,参考https://zhuanlan.zhihu.com/p/55999926),让图片输入分辨率为416 * 416,这一步的目的是为了让后面产生的卷积特征图宽高都为奇数(下采样步长为32),最终得到13 * 13的卷积特征图(416/32=13),这样就可以只有一个center cell。因为,作者观察到,大物体通常占据了图像的中间位置, 就可以只用中心的一个cell来预测这些物体的位置,否则就要用中间的4个cell来进行预测,这个技巧可稍稍提升效率。

加入了anchor boxes后,召回率上升,准确率下降的原因:我们来计算一下,假设每个cell预测9个anchor boxs,那么总共会预测13 * 13 * 9 = 1521个boxes,而之前的网络仅仅预测7 * 7 * 2 = 98个boxes。具体数据为:没有anchor boxes,模型recall为81%,mAP为69.5%;加入anchor boxes,模型recall为88%,mAP为69.2%。这样看来,准确率只有小幅度的下降,而召回率则提升了7%。(mAP下降的原因是什么?)

关于输出tensor:对于YOLOv1,每个cell都预测2个boxes,每个boxes包含5个值:( x , y , w , h , c ) (x, y, w, h, c)(x,y,w,h,c) ,前4个值是边界框位置与大小,最后一个值是置信度(confidence scores,包含两部分:含有物体的概率以及预测框与ground truth的IOU)。但是每个cell只预测一套分类概率值(class predictions,其实是置信度下的条件概率值),供2个boxes共享。YOLOv2使用了anchor boxes之后,每个位置的各个anchor box都单独预测一套分类概率值,这和SSD比较类似(但SSD没有预测置信度,而是把background作为一个类别来处理)。

4. Dimension clusters(K-means聚类确定anchor初始值

作者在使用anchor的时候遇到了两个问题,第一个是anchor boxes的宽高维度往往是精选的先验框(hand-picked priors),虽说在训练过程中网络也会学习调整boxes的宽高维度,最终得到准确的bounding boxes。但是,如果一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就更容易学到准确的预测位置。(如何选定anchor初始值?参考https://blog.csdn.net/xiaomifanhxx/article/details/81215051,没有看懂??????

因此,作者使用了K-means聚类方法类训练bounding boxes,可以自动找到更好的boxes宽高维度。传统的K-means聚类方法使用的是欧氏距离函数,也就意味着较大的boxes会比较小的boxes产生更多的error,聚类结果可能会偏离。并且,先验框的主要目的是为了使得预测框和ground truth的IOU更好,所以聚类分析时选用box与聚类中心box之间的IOU值作为距离标准,这样,error就和box的尺度无关了,最终的距离函数为:d(box,centroid)=1−IOU(box,centroid)

作者在召回率和模型复杂度之间进行平衡之后,取了k=5。意味着作者选择了5种大小的box维度来进行定位预测,这与手动精选的box维度不同。结果中扁长的框较少,而瘦高的框更多。

5. Direct location prediction(直接位置预测)

参考:https://blog.csdn.net/weixin_43198141/article/details/90178512;https://blog.csdn.net/xiaohu2022/article/details/80666655

作者在使用anchor boxes时发现的第二个问题就是:模型不稳定,尤其是在早期迭代的时候。

首先回顾一下Faster R-CNN中RPN网络使用anchor boxes来预测边界框相对先验框的offsets:

那么经过何种变换才能从图11中的窗口P变为窗口呢?比较简单的思路就是:

Faster R-CNN的平移因子:需要和Anchors的宽高做比值,原因:不同大小的Anchors对同一偏移值容忍度不一样,坐标值获得相对位移更有意义。论文称:相对(Anchors)坐标预测(参考:https://zhuanlan.zhihu.com/p/55999926----几个问题的整理)

注意:只有当Proposal和Ground Truth比较接近时(线性问题),我们才能将其作为训练样本训练我们的线性回归模型,否则会导致训练的回归模型不work(当Proposal跟GT离得较远,就是复杂的非线性问题了,此时用线性回归建模显然不合理).这个也是G-CNN: an Iterative Grid Based Object Detector多次迭代实现目标准确定位的关键. 线性回归就是给定输入的特征向量X,学习一组参数W,使得经过线性回归后的值跟真实值Y(Ground Truth)非常接近.即.那么Bounding-box中我们的输入以及输出分别是什么呢?

但是上面的公式是无约束的,预测的边界框很容易向任何方向偏移,如当dx(P)=1时边界框将向右偏移先验框的一个宽度大小,而当dx(P)=−1时边界框将向左偏移先验框的一个宽度大小,因此每个位置预测的边界框可以落在图片任何位置,这导致模型的不稳定性,在训练时需要很长时间来预测出正确的offsets。

所以,YOLOv2弃用了这种预测方式,而是沿用YOLOv1的方法,就是预测边界框中心点相对于对应cell左上角位置的相对偏移值,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,这样预测的偏移值在(0,1)范围内(每个cell的尺度看做1)。yolov2的平移因子:是相对Gridcelll的,没有除以Anchors的wa和ha,论文称:直接坐标预测。总结来看,根据边界框预测的4个offsets tx,ty,tw,th(在上面的faster r-cnn的描述中采用tx,ty,tw,th表示偏移量的真值,在这里为了方便写作,直接用tx,ty,tw,th表示预测的偏移量了),可以按如下公式计算出边界框实际位置和大小(相对于特征图):

其中(cx,cy)为cell的左上角坐标,如图所示,在计算时每个cell的尺度为1,所以当前cell的左上角坐标为(1,1)。由于sigmoid函数的处理,边界框的中心位置会约束在当前cell内部,防止偏移过多。而pw和ph是先验框的宽度与长度,前面说过它们的值也是相对于特征图大小的,在特征图中每个cell的长和宽均为1。这里记特征图的大小为(W,H)(在文中是(13,13)),这样我们可以将边界框相对于整张图片的位置(为什么?)和大小计算出来(4个值均在0和1之间),约束了bbox的位置预测值到[0,1]会使得模型更容易稳定训练(如果不是[0,1]区间,yolo的每个bbox的维度都是85,前5个属性是(bx,by,bw,bh,class confidence),后80个是类别概率,如果坐标不归一化,和这些概率值一起训练肯定不收敛)。:

如果再将上面的4个值分别乘以图片的宽度和长度(像素点值)就可以得到边界框的最终位置和大小了。这就是YOLOv2边界框的整个解码过程。约束了边界框的位置预测值使得模型更容易稳定训练,结合聚类分析得到先验框与这种预测方法,YOLOv2的mAP值提升了约5%。

6. Fine-grained features(特征融合)

参考:https://blog.csdn.net/Jesse_Mx/article/details/53925356

yolov2最终在13 * 13的特征图上进行预测,虽然这足以胜任大尺度物体的检测,但是用上细粒度特征的话,这可能对小尺度的物体检测有帮助。Faser R-CNN和SSD都在不同层次的特征图上产生区域建议(SSD直接就可看得出来这一点),获得了多尺度的适应性。这里使用了一种不同的方法,简单添加了一个转移层( passthrough layer),这一层要把浅层特征图(分辨率为26 * 26,是底层分辨率4倍)连接到深层特征图。

转移层( passthrough layer)就是将深层特征与浅层特征进行连接,这里采用的是通道上的连接而非空间位置上的连接,即叠加特征到不同的通道,类似于Resnet中的identity mappings。yolov2把26 * 26 * 512的特征图变换为13 * 13 * 2048的特征图,将这个特征图与原来的特征相连接。yolov2使用的就是经过连接的特征图,它可以拥有更好的细粒度特征,使得模型的性能获得了1%的提升。

关于特征融合的具体方法为:passthrough layer,具体来说就是特征重排(不涉及到参数学习),前面26 * 26 * 512的特征图使用按行和按列隔行采样的方法,就可以得到4个新的特征图,维度都是13 * 13 * 512,然后做concat操作,得到13 * 13 * 2048的特征图,将其拼接到后面的层,相当于做了一次特征融合,有利于检测小目标。

passthrough层示意图:(https://blog.csdn.net/xiaohu2022)

7. Multi-scale training(多尺度训练)

参考:https://blog.csdn.net/Jesse_Mx/article/details/53925356;https://blog.csdn.net/stu_shan022;https://blog.csdn.net/stu_shanghui/article/details/91042187?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&dist_request_id=1332023.8528.16189937820376317&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control

yolov1网络使用固定的448 * 448的图片作为输入,在加入anchor boxes后,yolov2的输入变成了416 * 416。由于yolov2只用到了卷积层和池化层,那么就可以进行动态调整(意思是可检测任意大小图片)。作者希望YOLOv2具有不同尺寸图片的鲁棒性,因此在训练的时候也考虑了这一点。

不同于固定输入网络的图片尺寸的方法,作者在几次迭代后就会微调网络。每经过10次训练(10 epoch),就会随机选择新的图片尺寸。YOLO网络使用的降采样参数为32,那么就使用32的倍数进行尺度池化{320,352,…,608},最终最小的尺寸为320 * 320,最大的尺寸为608 * 608,接着按照输入尺寸调整网络进行训练。这种机制使得网络可以更好地预测不同尺寸的图片,意味着同一个网络可以进行不同分辨率的检测任务,在小尺寸图片上YOLOv2运行更快,在速度和精度上达到了平衡。

YOLOv2的训练:

  • 在ImageNet训练Draknet-19,模型输入为224*224,共160个epochs
  • 调整网络输入为448*448,继续在ImageNet上finetune分类模型,训练10epoches
  • 修改Darknet-16分类模型为检测模型,并在监测数据集上继续finetune模型

网络修改包括:

  • 移除最后一个卷积层、global avgpooling层和softmax层
  • 增加3个3*3*2014卷积层
  • 增加passthrough层
  • 最后使用1*1卷积层输出预测结果,输出的channel数为num_anchors*(5+num_calsses)

Num_anchors在文中为5,num_classes=20是类别个数,5是坐标值和置信度

VOC数据集中输出channel是125, COCO数据集为425,以VOC数据集为例,最终的预测矩阵为T(shape为(batch_size, 13, 13, 125),将其reshape为(batch_size,13,13,5,25),其中T[:, :, :, :, 0:4]为边界框的位置和大小(tx,ty,tw,th),T[:,:,:,:, 4]是边界框的置信度,T[:,:,:,;,5:]为类别预测值)

下图是YOLOv2训练的三个阶段:

在小尺寸图片检测中,YOLOv2成绩很好,输入为228 * 228的时候,帧率达到90FPS,mAP几乎和Faster R-CNN的水准相同。使得其在低性能GPU、高帧率视频、多路视频场景中更加适用。在大尺寸图片检测中,YOLOv2达到了先进水平,VOC2007 上mAP为78.6%,仍然高于平均水准,下图是YOLOv2和其他网络的成绩对比:

(三)速度的改进(faster)

YOLO一向是速度和精度并重,作者为了改善检测速度,也作了一些相关工作。大多数检测网络有赖于VGG-16作为特征提取部分,VGG-16的确是一个强大而准确的分类网络,但是复杂度有些冗余。224 * 224的图片进行一次前向传播,其卷积层就需要多达306.9亿次浮点数运算。YOLOv2使用的是基于Googlenet的定制网络,比VGG-16更快,一次前向传播仅需85.2亿次运算。可是它的精度要略低于VGG-16,单张224 * 224取前五个预测概率的对比成绩为88%和90%(低一点点也是可以接受的)

Darknet-19

YOLOv2使用了一个新的分类网络作为特征提取部分,参考了前人的先进经验,比如类似于VGG,作者使用了较多的3 * 3卷积核,在每一次池化操作后把通道数翻倍。借鉴了network in network的思想,网络使用了全局平均池化(global average pooling),把1 * 1的卷积核置于3 * 3的卷积核之间,用来压缩特征。也用了batch normalization(前面介绍过)稳定模型训练。
最终得出的基础模型就是Darknet-19,如下图,其包含19个卷积层、5个最大值池化层(maxpooling layers ),下图展示网络具体结构。Darknet-19运算次数为55.8亿次,imagenet图片分类top-1准确率72.9%,top-5准确率91.2%。

Training for classification

作者使用Darknet-19在标准1000类的ImageNet上训练了160次,用的随机梯度下降法,starting learning rate 为0.1,polynomial rate decay 为4,weight decay为0.0005 ,momentum 为0.9。训练的时候仍然使用了很多常见的数据扩充方法(data augmentation),包括random crops, rotations, and hue, saturation, and exposure shifts。 (这些训练参数是基于darknet框架)初始的224 * 224训练后,作者把分辨率上调到了448 * 448,然后又训练了10次,学习率调整到了0.001。高分辨率下训练的分类网络在top-1准确率76.5%,top-5准确率93.3%。

Training for detection

分类网络训练完后,就该训练检测网络了,作者去掉了原网络最后一个卷积层,转而增加了三个3 * 3 * 1024的卷积层(可参考darknet中cfg文件),并且在每一个上述卷积层后面跟一个1 * 1的卷积层,输出维度是检测所需的数量。对于VOC数据集,预测5种boxes大小,每个box包含5个坐标值和20个类别,所以总共是5 * (5+20)= 125个输出维度。同时也添加了转移层(passthrough layer ),从最后那个3 * 3 * 512的卷积层连到倒数第二层,使模型有了细粒度特征。作者的检测模型以0.001的初始学习率训练了160次,在60次和90次的时候,学习率减为原来的十分之一。其他的方面,weight decay为0.0005,momentum为0.9,依然使用了类似于Faster-RCNN和SSD的数据扩充(data augmentation)策略。

(四)分类的改进

这一部分,作者使用联合训练方法,结合wordtree等方法,使YOLOv2的检测种类扩充到了上千种。
http://www.360doc.com/content/17/0810/10/10408243_678094588.shtml

(五)总结

总结来看,虽然YOLOv2做了很多改进,但是大部分都是借鉴其它论文的一些技巧,如Faster R-CNN的anchor boxes,YOLOv2采用anchor boxes和卷积做预测,这基本上与SSD模型(单尺度特征图的SSD)非常类似了,而且SSD也是借鉴了Faster R-CNN的RPN网络。从某种意义上来说,YOLOv2和SSD这两个one-stage模型与RPN网络本质上无异,只不过RPN不做类别的预测,只是简单地区分物体与背景。在two-stage方法中,RPN起到的作用是给出region proposals,其实就是作出粗糙的检测,所以另外增加了一个stage,即采用R-CNN网络来进一步提升检测的准确度(包括给出类别预测)。而对于one-stage方法,它们想要一步到位,直接采用“RPN”网络作出精确的预测,要因此要在网络设计上做很多的tricks。YOLOv2的一大创新是采用Multi-Scale Training策略,这样同一个模型其实就可以适应多种大小的图片了。

(六)知识点学习

1. 平移不变性(分类)

摘抄:https://blog.csdn.net/ytusdc/article/details/107666902

不变性意味着即使目标的外观发生了某种变化,但是你依然可以把它识别出来。这对图像分类来说是一种很好的特性,因为我们希望图像中目标无论是被平移,被旋转,还是被缩放,甚至是不同的光照条件、视角,都可以被成功地识别出来。

所以上面的描述就对应着各种不变性:

  • 平移不变性:Translation Invariance
  • 旋转/视角不变性:Ratation/Viewpoint Invariance
  • 尺度不变性:Size Invariance
  • 光照不变性:Illumination Invariance

在欧几里得几何中,平移是一种几何变换,表示把一幅图像或一个空间中的每一个点在相同方向移动相同距离。比如对图像分类任务来说,图像中的目标不管被移动到图片的哪个位置,得到的结果(标签)应该是相同的,这就是卷积神经网络中的平移不变性。平移不变性意味着系统产生完全相同的响应(输出),不管它的输入是如何平移的 。平移同变性(translation equivariance)意味着系统在不同位置的工作原理相同,但它的响应随着目标位置的变化而变化 。

为什么卷积神经网络具有平移不变性:简单地说,卷积+最大池化约等于平移不变性。

  • 卷积:简单地说,图像经过平移,相应的特征图上的表达也是平移的。下图只是一个为了说明这个问题的例子。输入图像的左下角有一个人脸,经过卷积,人脸的特征(眼睛,鼻子)也位于特征图的左下角。假如人脸特征在图像的左上角,那么卷积后对应的特征也在特征图的左上角。 (如下两幅图所示)

在神经网络中,卷积被定义为不同位置的特征检测器,也就意味着,无论目标出现在图像中的哪个位置,它都会检测到同样的这些特征,输出同样的响应。比如人脸被移动到了图像左下角,卷积核直到移动到左下角的位置才会检测到它的特征。

  • 池化:比如最大池化,它返回感受野中的最大值,如果最大值被移动了,但是仍然在这个感受野中,那么池化层也仍然会输出相同的最大值。这就有点平移不变的意思了。

    所以这两种操作共同提供了一些平移不变性,即使图像被平移,卷积保证仍然能检测到它的特征,池化则尽可能地保持一致的表达。

总结:卷积的平移不变性就是通过卷积+池化以后不管某一特征移动了位置,总可以检测出来输入到下一层中,又由于全连接是加权求和计算,被CNN激活的特征又可以传导到下一层中。

2. 平移敏感性(检测)

目标检测是从原始图像中找到包含目标的子区域,所以对目标的位置变化应该需要敏感一点,也就是平移敏感性。在目前的目标检测模型中,必须要对目标区域进行分类,而分类任务侧重的是平移不变形,不管翻转还是如何,都应该能分类正确,也就是关注区域的类别语义。

因此,目标检测任务中平移敏感性与平移不变性之间存在矛盾。

参考资料:

https://blog.csdn.net/Jesse_Mx/article/details/53925356

https://blog.csdn.net/just_sort/article/details/80822038

https://blog.csdn.net/stu_shanghui/article/details/91042187?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&dist_request_id=1332023.8528.16189937820376317&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control

https://blog.csdn.net/ft_sunshine/article/details/98682310?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-8&spm=1001.2101.3001.4242

https://blog.csdn.net/xiaomifanhxx/article/details/81215051(k-means)

https://zhuanlan.zhihu.com/p/55999926(bbox坐标)

https://blog.csdn.net/qq_34037046/article/details/87393407

论文(二)YOLOv2详解(翻译、总结和思考)相关推荐

  1. ViewPager 详解(二)---详解四大函数

    前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合Android的API说明 ...

  2. [深入浅出Cocoa]之消息(二)-详解动态方法决议(Dynamic Method Resolution)

    [深入浅出Cocoa]之消息(二)-详解动态方法决议(Dynamic Method Resolution) 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循&quo ...

  3. RxJS 系列之二 - Observable 详解

    查看新版教程,请访问前端修仙之路 RxJS 系列目录 RxJS 系列之一 - Functional Programming 简介 RxJS 系列之二 - Observable 详解 (本文) RxJS ...

  4. 程序的编译(详解翻译环境)

    程序的编译 1. 程序的翻译环境和执行环境 2. 详解翻译环境 2.1 详解编译过程 2.1.1 预编译(预处理) 2.1.2 编译 ①词法分析 ②语法分析 ③语义分析 2.1.3 汇编 ①将汇编代码 ...

  5. CORS跨域资源共享(二):详解Spring MVC对CORS支持的相关类和API【享学Spring MVC】

    每篇一句 重构一时爽,一直重构一直爽.但出了问题火葬场 前言 上篇文章通过我模拟的跨域请求实例和结果分析,相信小伙伴们都已经80%的掌握了CORS到底是怎么一回事以及如何使用它.由于Java语言中的w ...

  6. 十二、详解计算网络中的流量控制和差错控制、HDLC

    十二.详解计算网络中的流量控制和差错控制 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动 ...

  7. DFT - 对芯片测试的理解(二) 详解

    DFT - 对芯片测试的理解(二) 详解 参考: https://www.docin.com/p-2014360649.html The basic view of DFT scan chain 这图 ...

  8. 32.深度解密三十二:详解影响QQ群整体排名的那些秘密

    网络营销推广技术.技巧深度解密(三十二)指南: 1.本文档适合零基础以及互联网营销推广人员,主要讲解营销QQ群排名的一些问题. 2.原创版权文档,任何抄袭或者全部.部分模仿都是侵权行为. 3.敬畏法律 ...

  9. Vuex入门(二)—— mutations详解

    目录 知识不足的地方赶快点击学习呦~~~ Vuex入门(一)-- state,mapState,-mapState对象展开符详解 Vuex入门(二)-- mutations详解 Vuex入门(三)-- ...

  10. 目标检测算法YOLO-V2详解

    ❝ 上期我们一起学习了YOLO-V1算法的框架原来和损失函数等知识,如下: 目标检测算法YOLO-V1算法详解 目标检测模型YOLO-V1损失函数详解 [文末领福利] ❞ 今天,我们一起学习下YOLO ...

最新文章

  1. List Bakcup在catalog的不同显示问题
  2. 再谈 Struts1.x 的运行机制
  3. Java线程详解(13)-锁
  4. 新建虚拟机Ubuntu16.4安装搜狗输入法的问题
  5. 最新详细的JMM内存模型(三天熬夜血肝)
  6. zend studio一些常用配置
  7. 推美妆、搭IP,出货千万的天猫精灵打上95后的主意...
  8. 手把手教,使用VMware虚拟机安装Windows XP系统,爷青回
  9. 13.包装类和字符串
  10. 计算机网络原理笔记精整理(汇总)
  11. 桌面窗口管理器占用过高解决办法
  12. vivo陷全国手机行业反垄断第一案
  13. 海天蚝油《挑战不可能》7岁神童”盲棋“对抗,展现惊人脑力
  14. Google Doodle — 谷歌的插画之道
  15. 自动化测试遇到的难点_1.5 自动化测试普遍存在的问题
  16. Channel接口的层次结构解析
  17. 特征工程--特征离散化的意义
  18. 微信小程序源码分享合集-4
  19. 内存压缩是什么?有什么用?
  20. linux默认路由0.0.0.0,最基本的路由---默认路由

热门文章

  1. 云渲染和渲染农场的区别,什么是真正的云渲染
  2. 史上最简SLAM零基础解读(7) - Jacobian matrix(雅可比矩阵) → 理论分析与应用详解(Bundle Adjustment)
  3. 被市场「遗忘」的匹克体育
  4. MATLAB基础图像处理算法
  5. HTML5期末大作业:出行网站设计——西安旅游-高质量(9页) HTML+CSS+JavaScript 学生DW网页设计
  6. C++ 统计n个学生三门课的平均成绩,统计各学生三门课的平均成绩。
  7. Python实现--使用微信定时每天和女友发送定制消息(附代码教程)
  8. 理解virt res shr之间的关系 - linux
  9. 解决C#WinForm在设置FormBorderStyle属性=None时出现的窗口大小变化问题
  10. 计算机的cup颗数、核数、线程数