deeplab hole algorithm

最近看了几篇文章,其中均用到了hole algorithm。

最早用的就是deeplab的文章了,Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFS  这篇文章和fcn不同的是,在最后产生score map时,不是进行upsampling,而是采用了hole algorithm,就是在pool4和pool5层,步长由2变成1,必然输出的score map变大了,但是receptive field也变小了,为了不降低receptive field,怎么做呢?利用hole algorithm,将卷积weights膨胀扩大,即原来卷积核是3x3,膨胀后,可能变成7x7了,这样receptive field变大了,而score map也很大,即输出变成dense的了。

这么做的好处是,输出的score map变大了,即是dense的输出了,而且receptive field不会变小,而且可以变大。这对做分割、检测等工作非常重要。

基于这个做检测的文章:SSD: Single Shot MultiBox Detector    

接下来做分割的文章:Learning Dense Convolutional Embeddings for Semantic Segmentation      Multi-Scale Context Aggregation by Dilated Convolutions

 

后来经同事提醒,回头看了看xiaogang wang的文章,Highly Efficient Forward and Backward Propagation of Convolutional Neural Networks for PixelwiseClassification 确实是一样的,但是他们的这篇文章引用率却不咋地啊,可能也和他们的开源态度有关系吧,他们只放出来部分代码,没诚心啊。

 

 

和同事讨论这个算法,我同事觉得这个后面的卷积核的变化必须和前面的pooling协调使用。可我始终觉得没有这个限定啊,目前都是这样用,是因为基本上都是用pooling进行降维,而不是convlution,感觉从文章里看也是没这个限定啊。当然如果能协调使用,就最大限度保证了位置信息,但是pooling步长变化了,其实严格来讲,已经不完全和之前的模型完全一样了,已经有变化了,但是如果不协调使用的话,变化就会更大了。而且如果从receptive field的角度来讲,其实是可以变化的,也就是说可以把receptive field变大,而且可以变的很大,而不是仅仅保持不变小,感觉其实hole algorithm的存在,一方面原因也是不想让receptive field变小。

 

这两篇文章都是我讲的,估计过几天我又忘记了。

posted @ 2016-04-13 10:55  caoeryingzi  阅读(3951)  评论(0编辑  收藏  举报