实习总结(三)

来到了实习的第三周,这周的主题是caffe,SE_dispnet,简单的阅读的densenet论文和对基于深度学习的双目视觉问题的一些未来研究实验方向的总结,其中仍然贯穿着一些linux的知识。

先来今天刚刚疏导的一个很尬的问题:使用deploy.py文件生成测试效果图。早上的时候照着郑义的dispnet_lstm的代码改了以后发现并不能成功运行,总是提示memory(77 vs .0)这种错误。问题出就出在我caffe的python接口使用错误了,我一直在使用的接口是之前装的caffe所配置的,而我现在用的应该是dispnet所带的Python接口,caffe的源代码和库函数都发生了改变,所以python接口也是不一样的,这是我一直都未想到的,c++还是需要注意注意的。另外,deploy.prototxt文件的制作应该不是很烦,修改输入,注意得reshape成自己需要的输入大小,改掉输出层的loss并且换成需要的图片输出,删掉一些无用的激活函数。

再来就是对dispnet_c网络结构的修改了,没什么办法,只能硬着头皮上了,看到了SEnet,觉着该有点用,没想到,网络层数加深反而导致loss无法收敛了,真是尴尬。其实计算机视觉也是分很多任务的,没不存在说一个网络能够解决所有问题,SEnet虽然在图像分类问题上取得了很好的效果,但是,在这个图像匹配+估计的问题上确实效果不佳。可以说,SEnet之类的网络只是加强了网络的表征能力,即拟合非线性函数的能力更强了,与我要解决的深度估计问题并没有非常好的切合度,我目前的方向应该是:针对处理一些 bad或者是hard样本(通常来说是天空、田野等纹理较少的图像),这要怎么解决?郑义的想法是增大卷积的感受野范围,使用诸如‘带动卷积‘、LSTM等,使得输出图片更加平滑。还有一点就是目前的这些dispnet,flownet,CRL之类的网络泛化能力太差了,在flytings3D上表现的好的不行,但是在内部数据集上就差的一匹,说是因为图片尺寸问题,包括各个数据集所需要的correlaion层的D不同,这得接着考虑了,感觉并不存在一个普适的方法啊!! 另外,赵总说匹配与估计结合的方向到底在何方啊?
下周,我应该会尝试 只替换掉conv6_1,然后看predict_6和predict_5的输出并比较下,确实,有时候需要分步,渐进地解决一个问题。然后,就是用CRF去尝试做做看序列问题,另外,加在哪里也是个问题。

Densenet阅读后记:
今天又把densnet粗略地读了一遍,年龄大了,记忆力确实不行了啊。
densenet其实是在resnet上的一次创新。resnet是对一个block(1x1,3x3,1x1)之后的结果的summation(叠加),再经过激活函数,这样的好处就是能够解决难训练(degradient问题)以及添加了一些浅层网络所学习到的信息,这样就等于说给原本的单通道串联CNN层与层之间多了一些联系,但是呢,densenet论文中提到:由于使用的是summation,可能会阻碍到网络中的信息流通,而且上下文信息用的也不是很充分。
这里写出resnet与densenet的前向传播公式和网络结构图。
densenet的设计:我们让网络中的每一层都直接与其前面层相连,实现特征的重复利用;同时把网络每一层设计得特别‘窄’,即只学习非常少的特征图,达到降低冗余性的目的。
针对densenet,作者还并不是说简单的搞了 L(L+1)/2 L ∗ ( L + 1 ) / 2 次层连接。网络分为denseblock以及transition layers,denseblock下面进一步解释,这个transition layer就是各个block之间的桥梁,作者是这里设置的是一个BN层及一个1x1的卷积核以及一个2x2且stride为2的average pooling layer,主要是来改变feature map的大小的。
接下来,是作者对densenet做的他认为与resnet最不同的地方,其一,设置了一个Growth rate K,这个K就是block里面,每层间连接多的channel数,每多一个连接就多K个channel。这个growth rate控制了每一层给整个网络贡献的新的信息数量的多少。设定完了这个k,整个网络就“流通”了,而且有一点,就是控制K代表着不重复地吸收信息;其二就是效仿inception中的1x1conv,来做bottleneck,还是那个结构(BN-Relu-Conv),也就是 Hl H l ,作者把用了这种结构的densenet称为DenseNet-B;其三,感觉就是引入了稀疏化得思想,参数并不是越多越好,作者他说是为了让层与层之间变得更加紧密,所以引入一个 θm θ m ,这个 θ θ 是属于(0,1)的,代表着只激活transition layer前的 θoutput θ ∗ o u t p u t 个feature map,这个结构就叫做DenseNet-C。他们在imagenet比赛上所用的是224x224的输入,4个denseblock,(初始网络压缩了2K个7x7且stride为2的卷积层??)。
作者在文章后面对比resnet,提出densenet在跟resnet达到同等识别精度的情况下,参数少了非常多。
最后的总结是,densenet使得网络模型更加地紧凑,添加了一种隐式的深层监督机制(这点还没有看的懂),就是因为层与层间的多次连接吗???
densenet的想法很大程度上源于作者在(Deep networks with stochastic depth)的工作,该文章提出了一种“stochastic dropout”的机制改进版resnet去训练网络,这个启发在于:网络并不是一定要是递进层级的结构,所以这种改进的网络可以看做是具有随机连接的densenet,这与文章最后的总结关于与resnet的差别类似。
最后,densenet的优点:

省参数

在 ImageNet 分类数据集上达到同样的准确率,DenseNet 所需的参数量不到 ResNet 的一半。对于工业界而言,小模型可以显著地节省带宽,降低存储开销。

省计算

达到与 ResNet 相当的精度,DenseNet 所需的计算量也只有 ResNet 的一半左右。
另外,我们还提出了一个可实现自适应推理的多尺度 DenseNet,用于提高深度学习模型的推理效率。这个方法的主要思想是用浅层的特征来预测相对「简单」的图片,而只用深层的特征来预测比较「难」的图片。由于很多实际应用中,简单的图片占有较大的比例,而它们并不需要非常深的模型也能被正确预测,因此这种自适应推理方法可以有效的降低深度模型推理时的平均计算开销,而不降低精度。

抗过拟合

DenseNet 抗过拟合的原因有一个比较直观的解释:神经网络每一层提取的特征都相当于对输入数据的一个非线性变换,而随着深度的增加,变换的复杂度也逐渐增加(更多非线性函数的复合)。相比于一般神经网络的分类器直接依赖于网络最后一层(复杂度最高)的特征,DenseNet 可以综合利用浅层复杂度低的特征,因而更容易得到一个光滑的具有更好泛化性能的决策函数。

总结

实际上 DenseNet 比其他网络效率更高,其关键就在于网络每层计算量的减少以及特征的重复利用。DenseNet 的每一层只需学习很少的特征,使得参数量和计算量显著减少。

你可能感兴趣的:(实习总结)