yolov2

参考:https://blog.youkuaiyun.com/u014380165/article/details/77961414、
转载:https://blog.youkuaiyun.com/qiu931110/article/details/81449617?utm_source=blogxgwz4
请看原文

Faster R-CNN中RPN的Loss:

L ( { p i } , { t i } ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ i p i ∗ L r e g ( t i , t i ∗ ) L(\left \{ p_{i} \right \},\left \{ t_{i} \right \})=\frac{1}{N_{cls}}\sum _{i}L_{cls}(p_{i},p_{i}^{*})+\lambda \frac{1}{N_{reg}}\sum _{i}p_{i}^{*}L_{reg}(t_{i},t_{i}^{*}) L({pi},{ti})=Ncls1iLcls(pi,pi)+λNreg1ipiLreg(ti,ti)
以特征图上每个位置生成9个候选框为例,其中, i i i逐个代表9个候选框; p i p_{i} pi代表第i个预测框属于正样本的概率; p i ∗ p_{i}^{*} pi当第i个标准anchor为正样本时,其值为1,为负样本时,其值为0; t i t_{i} ti表示预测的框坐标,形式为带有四个参数的向量,具体运算规则见下方; t i ∗ t_{i}^{*} ti表示正样本的anchor和相应的GT的偏移标准量; L c l s L_{cls} Lcls表示一个二分类的log损失函数; L r e g L_{reg} Lreg表示smooth L1损失函数; p i ∗ L r e g p_{i}^{*}L_{reg} piLreg表示回归损失只对正anchor对应的预测结果起作用。

基本思路是:分别计算出预测结果与anchors的差值和GT与anchors的差值,用损失函数对两者进行逼近。 网络的直接预测结果是:tx,ty,然后有tx,ty根据以下公式计算出对应坐标
t x = ( x − x a ) / w a t_{x} = (x-x_{a})/w_{a} tx=(xxa)/wa t y = ( y − y a ) / h a t_{y} = (y-y_{a})/h_{a} ty=(yya)/ha
t w = l o g ( w / w a ) t_{w} = log(w/w_{a}) tw=log(w/wa) t h = l o g ( h / h a ) t_{h} = log(h/h_{a}) th=log(h/ha)
这里 t x , t y t_{x},t_{y} txty的取值范围太大,并没有将其限制在一个范围内, t w , t h t_{w},t_{h} twth相对有一个经验性的范围,但理论上仍然可以是任意数,取值范围的过大会造成模型的震荡,不易收敛。
t x ∗ = ( x ∗ − x a ) / w a t_{x}^{*} = (x^{*}-x_{a})/w_{a} tx=(xxa)/wa t y ∗ = ( y ∗ − y a ) / h a t_{y}^{*} = (y^{*}-y_{a})/h_{a} ty=(yya)/ha
t w ∗ = l o g ( w ∗ / w a ) t_{w}^{*} = log(w^{*}/w_{a}) tw=log(w/wa) t h ∗ = l o g ( h ∗ / h a ) t_{h}^{*} = log(h^{*}/h_{a}) th=log(h/ha)
x , y , w , h x,y,w,h x,y,w,h分别为中心点坐标和宽高。 x , x a , x ∗ x,x_{a},x^{*} x,xa,x分别代表预测框,anchor框和ground-truth。

Better:

  1. BN。对每一层的都用BN,BN作用在非线性激活函数之前,在第零维,即batch-size维度上做归一化。
  2. High Resolution Classifier。即在网络初始化时,先用224224,再用448448进行微调,使网络适应检测时分辨率的变化。
  3. Convolutional With Anchor Boxes。原来的YOLO是利用全连接层直接预测bounding box的坐标,而YOLOv2借鉴了Faster R-CNN的思想,引入anchor。首先将原网络的全连接层和最后一个pooling层去掉,使得最后的卷积层可以有更高分辨率的特征。
  4. Dimension Clusters,我们知道在Faster R-CNN中anchor box的大小和比例是按经验设定的,然后网络会在训练过程中调整anchor box的尺寸。但是如果一开始就能选择到合适尺寸的anchor box,那肯定可以帮助网络越好地预测detection。所以作者采用k-means的方式对训练集的bounding boxes做聚类,试图找到合适的anchor box。
  5. Direct Location prediction改进Faster R-CNN模型中RPN部分损失函数不稳定问题。
  6. Fine-Grained Features。这里主要是添加了一个层:passthrough layer。这个层的作用就是将前面一层的2626的feature map和本层的1313的feature map进行连接,有点像ResNet。这样做的原因在于虽然13*13的feature map对于预测大的object以及足够了,但是对于预测小的object就不一定有效。也容易理解,越小的object,经过层层卷积和pooling,可能到最后都不见了,所以通过合并前一层的size大一点的feature map,可以有效检测小的object。
  7. Multi-Scale Training。这里是在检测模型训练时采用的,具体为每训练10个batch,网络就会随机选择另一种size的输入。那么输入图像的size的变化范围要怎么定呢?前面我们知道本文网络本来的输入是416416,最后会输出1313的feature map,也就是说downsample的factor是32,因此作者采用32的倍数作为输入的size,具体来讲文中作者采用从{320,352,…,608}的输入尺寸。
    这种网络训练方式使得相同网络可以对不同分辨率的图像做detection。

YOLOv2配置文件

[net]
batch=64                           每batch个样本更新一次参数。
subdivisions=8                     如果内存不够大,将batch分割为subdivisions个子batch,\
                                             每个子batch的大小为batch/subdivisions。在darknet代码中,\
                                             会将batch/subdivisions命名为batch。
height=416                         input图像的高
width=416                          Input图像的宽
channels=3                         Input图像的通道数
momentum=0.9                       动量
decay=0.0005                       权重衰减正则项,防止过拟合
angle=0                            通过旋转角度来生成更多训练样本
saturation = 1.5                   通过调整饱和度来生成更多训练样本
exposure = 1.5                     通过调整曝光量来生成更多训练样本
hue=.1                             通过调整色调来生成更多训练样本
 
learning_rate=0.0001               初始学习率
max_batches = 45000                训练达到max_batches后停止学习
policy=steps                       调整学习率的policy,有如下policy:
                                  CONSTANT, STEP, EXP, POLY, STEPS, SIG, RANDOM
steps=100,25000,35000              根据batch_num调整学习率
scales=10,.1,.1                    学习率变化的比例,累计相乘
 
[convolutional]
batch_normalize=1                  是否做BN
filters=32                         输出多少个特征图
size=3                             卷积核的尺寸
stride=1                           做卷积运算的步长
pad=1                              如果pad为0,padding由 padding参数指定。\
                                          如果pad为1,padding大小为size/2
activation=leaky                   激活函数:
                                   logistic,loggy,relu,elu,relie,plse,hardtan,lhtan,linear,ramp,leaky,tanh,stair
 
[maxpool]
size=2                             池化层尺寸
stride=2                           池化步进
 
[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky
 
[maxpool]
size=2
stride=2
 
......
......
 
 
#######
 
[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky
 
[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky
 
[route]                            这是指用当前层减去9得到的那一层来进行特征组合
layers=-9
 
[reorg]          这里是把上面得到大分辨率的特征图以什么方式组合到当前层,\
                 成为当前层的特征。其中stride的值要根据大分辨率特征图跟当前层来确定的
stride=2
 
[route]
layers=-1,-3
 
[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky
 
[convolutional]
size=1
stride=1
pad=1
filters=125                        region前最后一个卷积层的filters数是特定的,
                                             计算公式为filter=num*(classes+5) 
                                   5的意义是5个坐标,论文中的tx,ty,tw,th,to
activation=linear
 
[region]
anchors = 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52          预选框,可以手工挑选,也可以通过k means 从训练样本中学出
bias_match=1
classes=20                         网络需要识别的物体种类数
coords=4                           每个box的4个坐标tx,ty,tw,th
num=5                              每个grid cell预测几个box,和anchors的数量一致。当想要使用更
                              多anchors时需要调大num,且如果调大num后训练时Obj趋近0的话可以尝
                                     试调大object_scale
softmax=1                          使用softmax做激活函数
jitter=.2                          通过抖动增加噪声来抑制过拟合
rescore=1                          暂理解为一个开关,非0时通过重打分来调整l.delta
                                            (预测值与真实值的差)
 
object_scale=5                     栅格中有物体时,bbox的confidence loss对总loss计算贡献的权重
noobject_scale=1                   栅格中没有物体时,bbox的confidence loss对总loss计算贡献的权重
class_scale=1                      类别loss对总loss计算贡献的权重                      
coord_scale=1                      bbox坐标预测loss对总loss计算贡献的权重
 
absolute=1
thresh = .6
random=0                           random为1时会启用Multi-Scale Training,随机使用不同
                                        尺寸的图片进

reorg层的理解:
在这里插入图片描述

输出的网络结构

layer     filters    size              input                output
    0 conv     32  3 x 3 / 1   416 x 416 x   3   ->   416 x 416 x  32
    1 max          2 x 2 / 2   416 x 416 x  32   ->   208 x 208 x  32
    2 conv     64  3 x 3 / 1   208 x 208 x  32   ->   208 x 208 x  64
    3 max          2 x 2 / 2   208 x 208 x  64   ->   104 x 104 x  64
    4 conv    128  3 x 3 / 1   104 x 104 x  64   ->   104 x 104 x 128
    5 conv     64  1 x 1 / 1   104 x 104 x 128   ->   104 x 104 x  64
    6 conv    128  3 x 3 / 1   104 x 104 x  64   ->   104 x 104 x 128
    7 max          2 x 2 / 2   104 x 104 x 128   ->    52 x  52 x 128
    8 conv    256  3 x 3 / 1    52 x  52 x 128   ->    52 x  52 x 256
    9 conv    128  1 x 1 / 1    52 x  52 x 256   ->    52 x  52 x 128
   10 conv    256  3 x 3 / 1    52 x  52 x 128   ->    52 x  52 x 256
   11 max          2 x 2 / 2    52 x  52 x 256   ->    26 x  26 x 256
   12 conv    512  3 x 3 / 1    26 x  26 x 256   ->    26 x  26 x 512
   13 conv    256  1 x 1 / 1    26 x  26 x 512   ->    26 x  26 x 256
   14 conv    512  3 x 3 / 1    26 x  26 x 256   ->    26 x  26 x 512
   15 conv    256  1 x 1 / 1    26 x  26 x 512   ->    26 x  26 x 256
   16 conv    512  3 x 3 / 1    26 x  26 x 256   ->    26 x  26 x 512
   17 max          2 x 2 / 2    26 x  26 x 512   ->    13 x  13 x 512
   18 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024
   19 conv    512  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 512
   20 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024
   21 conv    512  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 512
   22 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024
   23 conv   1024  3 x 3 / 1    13 x  13 x1024   ->    13 x  13 x1024
   24 conv   1024  3 x 3 / 1    13 x  13 x1024   ->    13 x  13 x1024
   25 route  16                                                             //指的是第16层
   26 reorg              / 2    26 x  26 x 512   ->    13 x  13 x2048       //把16层网络进行重整
   27 route  26 24                                                          //指的是进行融合的网络
   28 conv   1024  3 x 3 / 1    13 x  13 x3072   ->    13 x  13 x1024
   29 conv    125  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 125
   30 detection
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值