caffe显存问题

caffe在test的时候,blob的capacity_这个值是初始化是根据deploy的h和w来确定的,在真正开始跑的时候,可能test的时候输入尺寸并不是deploy的大小,比这个大小小的时候,在reshape之后,由于count_的值小于capacity_导致capacity_并不更新,从而在分配显存的时候,总是对不上,感觉显存多分配了。这是在图像超分遇到的问题,如果不存在这个用法,也就是说,处理的图像严格按照deploy的输入大小来run的话,就没问题。同样caffe处理使用了空间换时间的方式,图像转成向量,向量与kernel进行并发得到的结果还是向量,同样会使用更多的向量来接收处理结果,这些处理结果还会重组成最终的图像featuremap,所以中间会使用很多的显存,举个例子,bottom是1×64×108×132,top是1×32×54×66;kernel大小是5;那么首先会将bottom的图像转成适合当前kernel的向量,这么多像素(108×132×64)个5×5的向量,这就是图像转成向量的使用gpu进行多发机制的向量,同样接受的向量需要66×32×64×32这么多像素个接收向量,同样是kernel大小5×5的,最后才是向量转图像需要的66×54×32×1的featuremap空间,所以每一层实际的显存需求是这么大,而不是简单的count_ × 4这么多,还有其他的参数需求空间。所以根据kernel大小确定,所以,kernel越大,空间消耗越大,尽量避免。

同样,cpu模式的时候分配的空间也是根据capacity_确定的!

猜你喜欢

转载自blog.csdn.net/lily1234567/article/details/79975403