Faster rcnn test浮点运算次数(卷积实现过程,Faster rcnn总体结构和参数)

Faster rcnn test浮点运算次数(卷积实现过程,Faster rcnn总体结构和参数)_第1张图片

      我在调试faster rcnn demo.py的代码后,用监控卡口图片做了测试,并统计了其浮点运算次数(这只是一个粗略的统计,即仅统计了卷积部分乘法运算次数),另外,该代码可以通过pycharm调试,为了能深入理解其内部原理,建议大家动手调试。

     上表中,结合protobuf文件,我们知道,layer_name表示层名,bottom表示层输入数据,top表示层输出数据,kernel_size表示卷积核大小,pad表示补全(即在特征图四周补0),stride:表示卷积核滑动的步长。我们知道caffe中数据使用blob存储的,blob是一个四位数组,维度从高到低为(num,channels,height,width),floating-point浮点运算次数。

    date为1*3*600*982是怎么得到的呢?

    我输入的是一个彩色的2072*3392大小的监控卡口图片,通过调试可以发现,为了减少计算,faster rcnn先将图片短边设置为600,长边再按同等比例缩放,即3392*(600/2072)=982,这样就得到了一个600*982*3的图,blob形式即:1*3*600*982。

Conv1浮点运算次数如何计算的呢?

    输入1*3*600*982的data,kernel_size:3*7*7(特别注意:卷积核channels和bottom的channels相同,是一个三维数组,具体理解可以看卷积部分源码),pad:0,stride:2,这是具体参数部分,计算过程如下:

    卷积核在原图上第一次卷积时,乘法次数为:7*7*3,以步长为2滑动一次,乘法次数为:7*7*3,一共滑动了conv1_heigh*conv1*width次,即得到的特征图的长乘宽,这只得到了一个特征图,乘法次数为:(kernel_size* kernel_size*data_channels)*conv1_heigh*conv1*width。一共得到了96个特征图,故乘法次数: (kernel_size* kernel_size*data_channels)*conv1_heigh*conv1*width*conv1_channels。细读卷积源码理解更容易。

    具体卷积实现过程可以参考博客:卷积实现过程

    如果不好理解,也可以看下卷积层浮点运算计算量公式是:Caculation(convn)=I*J*M*N*K*L

其中,I,J表示卷积核大小 M,N表示输出通道的特征图大小, K表示输入通道数, L表示输出通道数。其他部分计算同上。

    RPN、ROI proposal、RCNN部分的所以参数大家可以在这里下载点击打开链接。

细读这个表格,可以帮助大家更好地理解faster rcnn实现部分,免费提供给大家,希望对大家有帮助。

Faster rcnn test浮点运算次数(卷积实现过程,Faster rcnn总体结构和参数)_第2张图片

你可能感兴趣的:(目标检测,人脸检测)