zoukankan      html  css  js  c++  java
  • 细节问题思考

    1.为什么high level特征位置信息不精确?

    fpn:The bottom-up feature map is of lower-level semantics, but its activations are more accurately localized as it was subsampled fewer times.

    进一步问题:为什么下采样或者说pooling会导致位置信息不精确?

    首先明确卷积层卷积后其实是有位置信息的,但经过pooling之后,对于每个pooling里面框住的像素丢失了位置信息,但两个pooling之间框住的部分像素的位置信息其实是保留了的。为什么?因为max-pooling取的是pooling框的最大值,只保留了最大值的值,但具体在pooling框的哪个位置并没有保留。不仅仅是max-pooling,mean-pooling也一样没有保留。

    https://blog.csdn.net/bojackhosreman/article/details/78081422 

    个人觉得,高层检测物体的性能不好,除了高层特征的位置信息不精确,还有就是高层的感受野大,大感受野其实更多的是平移不变性,但检测位置其实是需要的平移不变性。

    再进一步的问题:那为什么还要采用pooling或者maxpooling?

    因为需要分类,需要抽取特征,分类需要平移不变性,并且减少了参数量

    2.如果人们选择图像中的连续范围作为池化区域,并且只是池化相同(重复)的隐藏单元产生的特征,那么,这些池化单元就具有平移不变性 (translation invariant)。

    也就是说在池化框住的范围内,是具有平移不变性的。

    Deep Learning Review(发表在Nature)中提到了池化层能够reduce the dimensionality of the representation, create an invariance to small shifts and distortions.
    池化层能够降低特征表示的维度这个很好理解,伴随来的副作用是局部特征信息的损失,想象如果池化层的filtering bank不是通常的2x2维的矩阵,而是更大维度的矩阵,用max pooling 或者average pooling,信息会损失更多,而且因为每层卷积后都跟着池化层,实际上是相当于在特征的每个提取阶段,从低级特征到中级特征再到高级特征,都有略微的信息损失,因为做了多层的pooling,而不是只做一次pooling,这也是设计上的一个trick啊.这是计算复杂度和性能的trade-off
     
    其实pooling的目的就是为了使参数量减少,因为根本不需要那么多参数。pooling也只能做到在极小范围内的平移不变性,旋转和 伸缩是做不到的。其实不变性都是特征工程时代的概念了,现在在数据量极大的情况下,样本覆盖了足够多的variance,dnn自动就会把各种不变性学习出来。

    3.以前自己认为识别只需要语义信息,但这篇博客中https://www.aiuai.cn/aifarm119.html的人脸那个例子发现,识别不仅仅需要语义信息,也需要位置信息,或者说整体信息和局部信息。以前的分类网络的设计是先经过卷积层,然后fc,其实也就是一个局部特征提取并且保留局部的空间位置信息,fc相当于整个图片的一个卷积,也就是从前面的具体特征抽一个整体的特征。局部信息拥有跟多的局部信息但缺乏平移不变性,整体信息正好相反。

    总结一下:前面层由于在原图的感受野小,抽取的是局部特征,这个特征提取器就是卷积;后面的层由于在原图的感受野大,抽取的是大的局部特征或者说整体特征。无论是分类还是检测,局部到整体还必须保证位置信息。这个位置信息对于分类来是两个特征的相对位置关系,对于检测来说是具体的坐标数值和相对位置关系。

    4.为什么高层有更多的语义信息?

       1.从可视化实验看到的,越到高层分辨率越低,并且越模糊

     2.感受野大了。比如浅层可能只关注了车的的一些局部纹理,中层能感受野扩大后进一步看到轮胎,高层可能就能识别出是车了。还有就是通过卷积一层一层的提取特征,到后面是把特征拼接起来

    http://baijiahao.baidu.com/s?id=1573869113211570&wfr=spider&for=pc这个讲小挎包那个例子还是说的很好

    5.rfcn为什么最后要用mean pooling

    实际上mean pooling也没有保留位置信息,

    但反向传播的时候会让pooling框的几个值都获得梯度进行更新

    http://yann.lecun.com/exdb/publis/orig/boureau-cvpr-10.pdf

    6.为什么图像金字塔有很高的时间和计算量消耗?

    我采用的图像金字塔train的时候用多个image scale,测试用一个scale。如果你测试使用放大的scale,本身计算量就要增大,因为输入增多了;如果使用小的scale,还好。训练的时候,因为用了多个尺度,其实就是数据增强,如果训练10个epoch时间就会增加,因为每个epoch的图片数量增加,如果你是放大的图片本身计算量和时间也要增加

    7.为什么图像金字塔的效果好?

    类似于数据增强,让网络能适应多尺度的形变。其实做一个分类识别,难点也就在于形变(或者说不通的pattern),尺寸变换,位置变换

  • 相关阅读:
    1276
    1235
    1170
    Grids
    1137
    1127
    1076
    🍖Mysql三种模式的指定方式介绍
    🍖存储引擎介绍
    🍖MySQL库的详细操作
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/9585803.html
Copyright © 2011-2022 走看看