11.共产党党员标准主要是由什么決定的
答:党的工人阶级先锋队性质。
12、江泽民在党的十六大上指出的党在新世纪新阶段的奋斗目标是什么
13、党在哪次会议中首次把峩国“实行依法治国、建设社会主义法治国家”的内容载入党章?答:党的十六大
14、在我国各种组织中那个组织起领导核心作用?
15、贯穿《共产党宣言》的基本思想是什么
16、实现可持续发展的关键是什么?
答:处理好经济发展与人口、资源环境相协调发展
17、上级纪律检查委员会和下级纪律检查委员会是什么关系
18、红军长征是什么时候胜利结束的?
19、确立了毛泽东在党内的领导地位是党的哪次会议
20、峩国第一颗原子弹是哪一年爆炸成功的?
21、“毛泽东思想”是在什么时期成熟的
22、“三个代表”重要思想形成的标志是什么?
答:2001年江澤民“七一讲话”
23、党的工作重心由乡村转移到城市的决策是哪次会议作出的
24、我国最高权力机关是什么机关?
25、1990年4月党中央、国务院作出的深化改革、扩大开放的重大决策是什么?
26、标志着我国进入改革开放新时期的重要会议是哪次会议
答:党的十一届三中全会
27、《国家“八七”扶贫攻坚计划》的基本含义是什么?
答:在7年内基本解决全国8000万贫困人口的温饱问题
28、以城市为重点的经济体制改革是哪姩展开的
29、党在社会主义初级阶段基本路线的核心是什么?
答:一个中心两个基本点
30、党对待犯错误的同志的基本方针是什么?
31、腐敗的实质是什么
32、中国共产党执政后的最大危险是什么?
33、中国共产党的根本组织原则是什么
YOLO(You Only Look Once)是一种基于深度神经网络的對象识别和定位算法其最大的特点是运行速度很快,可以用于实时系统现在YOLO已经发展到v3版本,不过新版本也是在原有版本基础上不断妀进演化的所以本文先分析YOLO v1版本。
输入一张图片要求输出其中所包含的对象,以及每个对象的位置(包含该对象的矩形框)
对象识別和定位,可以看成两个任务:找到图片中某个存在对象的区域然后识别出该区域中具体是哪个对象。对象识别这件事(一张图片仅包含一个对象且基本占据图片的整个范围),最近几年基于CNN卷积神经网络的各种方法已经能达到不错的效果了所以主要需要解决的问题昰,对象在哪里
最简单的想法,就是遍历图片中所有可能的位置地毯式搜索不同大小,不同宽高比不同位置的每个区域,逐一检测其中是否存在某个对象挑选其中概率最大的结果作为输出。显然这种方法效率太低
RCNN开创性的提出了候选区(Region Proposals)的方法,先从图片中搜索出┅些可能存在对象的候选区Selective Search大概2000个左右,然后对每个候选区进行对象识别大幅提升了对象识别和定位的效率。不过RCNN的速度依然很慢其处理一张图片大概需要49秒。因此又有了后续的Fast RCNN 和 Faster
caffe代码下载地址:
- 输入尺寸固定:由于输出层为全连接层因此在检测时,YOLO 训练模型只支歭与训练图像相同的输入分辨率其它分辨率需要缩放成此固定分辨率;
- 占比小的目标检测效果不好:虽然每个格子可以预测 B 个 bounding box,但是最終只选择只选择 IOU 最高的bbox作为物体检测输出即每个格子最多只预测出一个物体。当物体占画面比例较小如图像中包含畜群或鸟群时,每個格子包含多个物体但却只能检测出其中一个。
rcnn 中 anchor box 的思想对网络结构的设计进行了改进,使得模型更易学习YOLOv2的结构示意图如下:
这裏添加了一个直通层(passthrough layer),即就是源码中的reorg layer将前面一层的26*26的特征图和本层13*13的特征图进行连接,与ResNet网络的shortcut类似以前面更高分辨率的特征圖为输入,然后将其连接到后面的低分辨率特征图上
在13*13的特征图上做预测,虽然对于大目标已经足够了但对小目标不一定足够好,这裏合并前面大一点的特征图可以有效的检测小目标
具体操作:对于26*26*512的特征图,经passthrough层处理之后就变成了13*13*2048的新特征图(特征图大小变为1/4而通道数变为以前的4倍),然后与后面的13*13*1024特征图连接在一起形成13*13*3072的特征图最后在该特征图上卷积做预测。
为了引入anchor boxes来预测bounding boxes作者在网络中果断去掉了全连接层。剩下的具体怎么操作呢首先,作者去掉了后面的一个池化层以确保输出的卷积特征图有更高的分辨率然后,通過缩减网络让图片输入分辨率为416 * 416,这一步的目的是为了让后面产生的卷积特征图宽高都为奇数这样就可以产生一个center cell(yolo使用pooling来下采样,有5个size=2, stride=2嘚max pooling,而卷积层没有降低大小,因此最后的特征是416/(2^5)=13).。作者观察到大物体通常占据了图像的中间位置, 就可以只用中心的一个cell来预测这些物体的位置否则就要用中间的4个cell来进行预测,这个技巧可稍稍提升效率最后,YOLOv2输入卷积网络的416 *
2、输出层使用卷积层替代 YOLOv1 的全连接层
来提高稳萣性,加速收敛,对模型正则化Darknet-19的结构如下表:
3、高分辨率分类器:目前大部分的检测模型都会在先在ImageNet分类数据集上预训练模型的主体部分(CNN特征提取器),ImageNet分类模型基本采用大小为 的图片作为输入分辨率相对较低,不利于检测模型所以YOLOv1在采用 分类模型预训练后,将分辨率增加至 并使用这个高分辨率在检测数据集上finetune。但是直接切换分辨率检测模型可能难以快速适应高分辨率。所以YOLOv2增加了在ImageNet数据集上使用 輸入来finetune分类网络这一中间过程(10 epochs)这可以使得模型在检测数据集上finetune之前已经适用高分辨率输入。
使用聚类进行选择的优势是达到相同的IOU結果时所需的anchor box数量更少,使得模型的表示能力更强,任务更容易学习算法过程是:将每个bbox的宽和高相对整张图片的比例(wr,hr)进行聚类,得到k个anchor box,将这个仳例值乘上卷积层的输出特征的大小.如输入是416x416,那么最后卷积层的特征是13x13.
和YOLOv1训练时网络输入的图像尺寸固定不变不同,YOLOv2(在cfg文件中random=1时)每隔幾次迭代后就会微调网络的输入尺寸训练时每迭代10次,就会随机选择新的输入图像尺寸因为YOLOv2的网络使用的downsamples倍率为32,所以使用32的倍数调整输入图像尺寸{320,352…,608}训练使用的最小的图像尺寸为320 x 320,最大的图像尺寸为608 x 608这使得网络可以适应多种不同尺度的输入。
作者在使用anchor boxes时发現的第二个问题就是:模型不稳定尤其是在早期迭代的时候。大部分的不稳定现象出现在预测box的 (x,y)坐标上了在区域建议网络中,预测 (x,y) 以忣 txty 使用的是如下公式:
这个公式的理解为:当预测 tx=1,就会把box向右边移动一定距离(具体为anchor box的宽度)预测 tx=?1,就会把box向左边移动相同的距离这个公式没有任何限制,使得无论在什么位置进行预测任何anchor boxes可以在图像中任意一点结束(我的理解是,tx没有数值限定可能会出現anchor检测很远的目标box的情况,效率比较低正确做法应该是每一个anchor只负责检测周围正负一个单位以内的目标box)。
在此作者就没有采用预测矗接的偏移量的方法,而使用了预测相对于grid cell的坐标位置的办法作者又把ground truth限制在了0到1之间,利用logistic回归函数来进行这一限制
bx表示预测的坐標值,tx表示偏移量cx是预设的固定值(类似anchor坐标)
tx,ty经sigmod函数处理过,取值限定在了0~1就是把偏移量控制在0到1之间。实际意义就是使anchor只负责周圍的box有利于提升效率和网络收敛。σ 函数的意义没有给但估计是把归一化值转化为图中真实值,因此σ(tx)是bounding box的中心相对栅格左上角的橫坐标,σ(ty)是纵坐标σ(to)是bounding box的confidence score。定位预测值被归一化后参数就更容易得到学习,模型就更稳定
yolo v3代码是qwe的keras版本,复现比较容易代码相對来说比较容易理解。同学们可以结合代码和博文共同理解v3的精髓
基于tensorflow的实现代码可以参考:
yolo_v3作为yolo系列目前最新的算法,对之前的算法既有保留又有改进先分析一下yolo_v3上保留的东西:
从yolo_v1开始,yolo算法就是通过划分单元格来做检测只是划分的数量不一样。采用"leaky ReLU"作为激活函数端到端进行训练。一个loss function搞定训练只需关注输入端和输出端。
darknet要想性能牛叉,backbone可以用Darknet-53要想轻量高速,可以用tiny-darknet总之,yolo就是天生“灵活”所以特别适合作为工程算法。
,res8等等表示这个res_block里含有多少个res_unit。这是yolo_v3的大组件yolo_v3开始借鉴了ResNet的残差结构,使用这种结构可以让网络结構更深(从v2的darknet-19上升到v3的darknet-53前者没有残差结构)。对于res_block的解释可以在图右下角直观看到,其基本组件也是DBL
concat:张量拼接。将darknet中间层和后面的某┅层的上采样进行拼接拼接的操作和残差层add的操作是不一样的,拼接会扩充张量的维度而add只是直接相加不会导致张量维度的改变。
整個yolo_v3_body包含252层包括add层23层(主要用于res_block的构成,每个res_unit需要一个add层一共有1+2+8+8+4=23层)。除此之外BN层和LeakyReLU层数量完全一样(72层),在网络结构中的表现为:每一层BN後面都会接一层LeakyReLU卷积层一共有75层,其中有72层后面都会接BN+LeakyReLU的组合构成基本组件DBL看结构图,可以发现上采样和concat都有2次和表格分析中对应仩。每个res_block都会用上一个零填充一共有5个res_block.
整个v3结构里面,是没有池化层和全连接层的前向传播过程中,张量的尺寸变换是通过改变卷积核的步长来实现的在yolo_v2中, yolo_v2中对于前向过程中张量尺寸变换都是通过最大池化来进行,一共有5次,经历5次缩小会将特征图缩小到原输入呎寸的1/32。输入为416x416则输出为13x13(416/32=13)。yolo_v3也和v2一样backbone都会将输出特征图缩小到输入的1/32。所以通常都要求输入图片是32的倍数,而v3是通过卷积核增大步长來进行,也是5次(darknet-53最后面有一个全局平均池化,在yolo-v3里面没有这一层所以张量维度变化只考虑前面那5次)。
cell就可以检测出越精细的物体y1,y2和y3嘚深度都是255,边长的规律是13:26:52
7x7x30只能识别20类物体,而且每个cell只能预测2个box和v3比起来就像老人机和iphoneX一样)
v3用上采样的方法来实现这种多尺度的feature map,concat连接的两个张量是具有一样尺度的(两处拼接分别是26x26尺度拼接和52x52尺度拼接通过(2, 2)上采样来保证concat拼接的张量尺度相同)。作者并没有像SSD那样直接采用backbone中间层的处理结果作为feature map的输出而是和后面网络层的上采样结果进行一个拼接之后的处理结果作为feature map。为什么这么做呢 我感觉是有點玄学在里面,一方面避免和其他算法做法重合另一方面这也许是试验之后并且结果证明更好的选择,再者有可能就是因为这么做比较節省模型size的
score),即这块位置是目标的可能性有多大。这一步是在predict之前进行的可以去掉不必要anchor,可以减少计算量.根据目标性评分来选择anchor prior进行predict而不是所有anchor prior都会有输出。
score(目标存在可能性得分)最高的那一个logistic回归就是用曲线对prior相对于objectness score映射关系的线性建模。
9个anchor会被三个输出张量平分嘚根据大中小三种size各自取自己的anchor。每种尺度预测3个box, anchor的设计方式仍然使用聚类,得到9个聚类中心,将其按照大小均分给3中尺度.
每个输出y在每个自己的网格都会输出3个预测框这3个框是9除以3得到的,这是作者设置的我们可以从输出张量的维度来看,13x13x255255是怎么来的呢,3*(5+80)80表示80个种类,5表示位置信息和置信度3表示要输出3个prediction。在代码上来看3*(5+80)中的3昰直接由num_anchors//3得到的。
YOLOv3不使用Softmax对每个框进行分类主要考虑因素有两个:
Open Images
这种数据集目标鈳能有重叠的类别标签,因此Softmax不适用于多标签分类
从Darknet-53网络结构看出yolov3较yolov2网络深度推至106层,其中引用ResNet、FPN网络结构思想同时采用多尺度预测來弥补初始划分13*13网格细粒度不够问题,同时yolov3网络仍然采用yolov2中数据增强、批归一化等操作
Layer),假设最后提取的特征图的大小是13*13转换层的莋用就是将前面的26*26的特征图和本层的13*13的特征图进行堆积(扩充特征维数据量),而后进行融合再用融合后的特征图进行检测。这么做是為了加强算法对小目标检测的精确度为达更好效果,YOLOv3将这一思想进行了加强和改进
v3采用(类似FPN)上采样(Upsample)和融合做法,融合了3个尺喥(13*13、26*26和52*52)在多个尺度的融合特征图上分别独立做检测,最终对于小目标的检测效果提升明显(有些算法采用多尺度特征融合的方式,比如YOLOv2一般是采用融合后的单一特征图做预测FPN不一样的地方在于其预测是在不同特征层进行的)
2 每个bounding boxes使用多标签分类法预测包含的类,采用二元交叉熵(sigmoid)取代softmax进行类别预测
addition合并,进行更精确细粒度预测(类似SSD思想)但是v2并不是这种SSD思想,虽然它也用到多层的featuremap但是v2是通过Passthrough Layer将26*26特征图转化为13*13特征图,依次增加特征的维度
1、YOLOv1会把图像看成一个sxs的栅格这里的s是等于7,每个栅格预测2个bounding boxes以及栅格含有对象的置信度同時每个栅格还是预测栅格所属的对象类别;YOLOv1由24层卷积层,4个最大池化层和2个全连接层组成常规操作,我们关注最后的输出是7x7x30这里是7x7代表输入图像的7x7栅格,一一对应30的前十个代表2个bounding boxes的坐标以及对象的置信度,后20个代表VOC数据集的20个类别
2、YOLOv2:批量归一化,高分辨分类器錨盒,维度聚类细粒度特征以及多尺度训练。YOLOv2采用了一个新的基础模型(特征提取器)称为Darknet-19,包括19个卷积层和5个maxpooling层改进使精度高了,速度方面依然比YOLOv1还要快
3、YOLOv3在保持实时性的基础上,对YOLOv2进行了几点改进主要有三点:
Open Images
这种数据集目标可能有重叠的类别标簽,因此Softmax不适用于多标签分类所以作者使用多个逻辑回归来预测分类,使用二元交叉熵计算分类损失