博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解 YOLO
阅读量:4659 次
发布时间:2019-06-09

本文共 4677 字,大约阅读时间需要 15 分钟。

YOLO:

 

1. YOLO的网络结构

YOLO v1 network (没看懂论文上的下图,看下面这个表一目了然了)

24层的卷积层,开始用前面20层来training, 图片是224x224的,然后用448x448 再train 后面4层,最后得到的model 是24层的model.

最后输出7x7个grid cell, 30 表示 2个bounding box (每个5个数字) 加上 20 classes

  

 

┌────────────┬────────────────────────┬───────────────────┐ │    Name    │        Filters         │ Output Dimension  │ ├────────────┼────────────────────────┼───────────────────┤ │ Conv 1     │ 7 x 7 x 64, stride=2   │ 224 x 224 x 64    │ │ Max Pool 1 │ 2 x 2, stride=2        │ 112 x 112 x 64    │ │ Conv 2     │ 3 x 3 x 192            │ 112 x 112 x 192   │ │ Max Pool 2 │ 2 x 2, stride=2        │ 56 x 56 x 192     │ │ Conv 3     │ 1 x 1 x 128            │ 56 x 56 x 128     │ │ Conv 4     │ 3 x 3 x 256            │ 56 x 56 x 256     │ │ Conv 5     │ 1 x 1 x 256            │ 56 x 56 x 256     │ │ Conv 6     │ 1 x 1 x 512            │ 56 x 56 x 512     │ │ Max Pool 3 │ 2 x 2, stride=2        │ 28 x 28 x 512     │ │ Conv 7     │ 1 x 1 x 256            │ 28 x 28 x 256     │ │ Conv 8     │ 3 x 3 x 512            │ 28 x 28 x 512     │ │ Conv 9     │ 1 x 1 x 256            │ 28 x 28 x 256     │ │ Conv 10    │ 3 x 3 x 512            │ 28 x 28 x 512     │ │ Conv 11    │ 1 x 1 x 256            │ 28 x 28 x 256     │ │ Conv 12    │ 3 x 3 x 512            │ 28 x 28 x 512     │ │ Conv 13    │ 1 x 1 x 256            │ 28 x 28 x 256     │ │ Conv 14    │ 3 x 3 x 512            │ 28 x 28 x 512     │ │ Conv 15    │ 1 x 1 x 512            │ 28 x 28 x 512     │ │ Conv 16    │ 3 x 3 x 1024           │ 28 x 28 x 1024    │ │ Max Pool 4 │ 2 x 2, stride=2        │ 14 x 14 x 1024    │ │ Conv 17    │ 1 x 1 x 512            │ 14 x 14 x 512     │ │ Conv 18    │ 3 x 3 x 1024           │ 14 x 14 x 1024    │ │ Conv 19    │ 1 x 1 x 512            │ 14 x 14 x 512     │ │ Conv 20    │ 3 x 3 x 1024           │ 14 x 14 x 1024    │ │ Conv 21    │ 3 x 3 x 1024           │ 14 x 14 x 1024    │ │ Conv 22    │ 3 x 3 x 1024, stride=2 │ 7 x 7 x 1024      │ │ Conv 23    │ 3 x 3 x 1024           │ 7 x 7 x 1024      │ │ Conv 24    │ 3 x 3 x 1024           │ 7 x 7 x 1024      │ │ FC 1       │ -                      │ 4096              │ │ FC 2       │ -                      │ 7 x 7 x 30 (1470) │ └────────────┴────────────────────────┴───────────────────┘ 上图中,至于为什么448x448通过conv成了224x224, 可以参考这里 ,因为一般会做zero-padding, padding = (f-1)/2 Yolo v2 的网络结构如下:采用 Darknet-19 backbone, 输出 13x13x (5x25). 引入了 anchor box. 由于v2 去掉了fully connected layer, 这样可以对各种size 的输入进行traning, 这个技术叫 multi-scale traning, input size 的大小为 {320, 352, ..., 608}   

 

Darknet-19 分类模型:

 

Darknet-19 对象检测模型:

 

看一下passthrough层。图中第25层route 16,意思是来自16层的output,即26*26*512,这是passthrough层的来源(细粒度特征)。第26层1*1卷积降低通道数,从512降低到64(这一点论文在讨论passthrough的时候没有提到),输出26*26*64。第27层进行拆分(passthrough层)操作,1拆4分成13*13*256。第28层叠加27层和24层的输出,得到13*13*1280。后面再经过3*3卷积和1*1卷积,最后输出13*13*125。 V3 检测网络结构:106层

 

 

2. v1 两个bounding box 怎么标注?

这里采用2个bounding box,有点不完全算监督算法,而是像进化算法。如果是监督算法,我们需要
事先根据样本就能给出一个正确的bounding box作为回归的目标。但YOLO的2个bounding box事先并不知道会在什么位置,只有经过前向计算,网络会输出2个bounding box,这两个bounding box与样本中对象实际的bounding box计算IOU。这时才能确定,IOU值大的那个bounding box,作为负责预测该对象的bounding box。
训练开始阶段,网络预测的bounding box可能都是乱来的,但总是选择IOU相对好一些的那个,随着训练的进行,每个bounding box会逐渐擅长对某些情况的预测(可能是对象大小、宽高比、不同类型的对象等)。所以,这是一种进化或者非监督学习的思想。
训练样本的bounding box位置应该填写对象实际的bounding box,但一个对象对应了2个bounding box,该填哪一个呢?上面讨论过,需要根据网络输出的bounding box与对象实际bounding box的IOU来选择,所以要在训练过程中动态决定到底填哪一个bounding box。
3. v2 的训练过程
YOLO2的训练主要包括三个阶段。第一阶段就是先在ImageNet分类数据集上预训练Darknet-19,此时模型输入为 224*224 ,共训练160个epochs。然后第二阶段将网络的输入调整为 448*448 ,继续在ImageNet数据集上finetune分类模型,训练10个epochs,此时分类模型的top-1准确度为76.5%,而top-5准确度为93.3%。第三个阶段就是修改Darknet-19分类模型为检测模型,移除最后一个卷积层、global avgpooling层以及softmax层,并且新增了三个 3*3*1024卷积层,同时增加了一个passthrough层,最后使用 1*1 卷积层输出预测结果,输出的channels数为:num_anchors*(5+num_classes) ,和训练采用的数据集有关系。由于anchors数为5,对于VOC数据集(20种分类对象)输出的channels数就是125,最终的预测矩阵T的shape为 (batch_size, 13, 13, 125),可以先将其reshape为 (batch_size, 13, 13, 5, 25) ,其中 T[:, :, :, :, 0:4] 为边界框的位置和大小 
(t_x, t_y, t_w, t_h) ,T[:, :, :, :, 4] 为边界框的置信度,而 T[:, :, :, :, 5:] 为类别预测值。
YOLO9000依然采用YOLO2的网络结构,不过5个先验框减少到3个先验框,以减少计算量。YOLO2的输出是13*13*5*(4+1+20),现在YOLO9000的输出是13*13*3*(4+1+9418)。假设输入是416*416*3。
 
4. 为什么v2 比v1 运行更快,效果更好
faster: 采用了浮点运算更快的darknet-19结构, v1 的运算操作是8.52 billion operations, v2 是only requires 5.58 billion.
better: 采用了 BatchNorm的同时去掉了dropout 层, 采用 了high resolution classifier, K-means自动选取anchor box, multi-scale 训练使得能检测多种不同大小的对象
stronger: 采用了 wordTree的概念来预测超过9000中的对象 (9418)
 
Ref:

 

  1.  (v1里面有两个bounding box, 那标注时候到底填哪一个呢?这个文章解释了这个)
  2. , 这个对yolo v1 的网络结构解释的不错
  3.  
  4. https://blog.csdn.net/qq_34784753/article/details/78797213,https://zhuanlan.zhihu.com/p/24916786?utm_source=qq&utm_medium=social,  这个对yolo v1 的cost函数解释的不错

转载于:https://www.cnblogs.com/mashuai-191/p/10553413.html

你可能感兴趣的文章
【Abode Air程序开发】在设备上进行安装
查看>>
【读书笔记】程序员的自我修养总结(四)
查看>>
【Qt开发】QThread中的互斥、读写锁、信号量、条件变量
查看>>
object-c 对象内存分配
查看>>
阿铭linux笔记
查看>>
Oracle表字段的增加、删除、修改和重命名
查看>>
基于Java的Socket编程技术
查看>>
SVG学习小结
查看>>
Oracle-数据库启动步骤
查看>>
人物角色群体攻击判定(三)Physics.OverlapSphere(群体攻击)
查看>>
《美人心计》评论
查看>>
简单的图形学(三)——光源
查看>>
通过Tomcat Manager拿shell
查看>>
Mysql性能优化一:SQL语句性能优化
查看>>
设置EditText是否可编辑
查看>>
Huginn实现自动通过slack推送豆瓣高分电影
查看>>
javascript构造器模式创建对象
查看>>
linux centos7 文件挂载学习记录
查看>>
INSERT
查看>>
五子棋
查看>>