@@ -153,6 +153,13 @@ class BaseConvolutionLayer : public Layer<Dtype> {
153
153
pad_.cpu_data ()[0 ], pad_.cpu_data ()[1 ],
154
154
stride_.cpu_data ()[0 ], stride_.cpu_data ()[1 ],
155
155
dilation_.cpu_data ()[0 ], dilation_.cpu_data ()[1 ], col_buff);
156
+ } else if (!force_nd_im2col_ && num_spatial_axes_ == 3 ) {
157
+ im3d2col_cpu (data, conv_in_channels_,
158
+ conv_input_shape_.cpu_data ()[1 ], conv_input_shape_.cpu_data ()[2 ], conv_input_shape_.cpu_data ()[3 ],
159
+ kernel_shape_.cpu_data ()[0 ], kernel_shape_.cpu_data ()[1 ], kernel_shape_.cpu_data ()[2 ],
160
+ pad_.cpu_data ()[0 ], pad_.cpu_data ()[1 ], pad_.cpu_data ()[2 ],
161
+ stride_.cpu_data ()[0 ], stride_.cpu_data ()[1 ], stride_.cpu_data ()[2 ],
162
+ dilation_.cpu_data ()[0 ], dilation_.cpu_data ()[1 ], dilation_.cpu_data ()[2 ], col_buff);
156
163
} else {
157
164
im2col_nd_cpu (data, num_spatial_axes_, conv_input_shape_.cpu_data (),
158
165
col_buffer_shape_.data (), kernel_shape_.cpu_data (),
@@ -167,6 +174,13 @@ class BaseConvolutionLayer : public Layer<Dtype> {
167
174
pad_.cpu_data ()[0 ], pad_.cpu_data ()[1 ],
168
175
stride_.cpu_data ()[0 ], stride_.cpu_data ()[1 ],
169
176
dilation_.cpu_data ()[0 ], dilation_.cpu_data ()[1 ], data);
177
+ } else if (!force_nd_im2col_ && num_spatial_axes_ == 3 ) {
178
+ col2im3d_cpu (col_buff, conv_in_channels_,
179
+ conv_input_shape_.cpu_data ()[1 ], conv_input_shape_.cpu_data ()[2 ], conv_input_shape_.cpu_data ()[3 ],
180
+ kernel_shape_.cpu_data ()[0 ], kernel_shape_.cpu_data ()[1 ], kernel_shape_.cpu_data ()[2 ],
181
+ pad_.cpu_data ()[0 ], pad_.cpu_data ()[1 ], pad_.cpu_data ()[2 ],
182
+ stride_.cpu_data ()[0 ], stride_.cpu_data ()[1 ], stride_.cpu_data ()[2 ],
183
+ dilation_.cpu_data ()[0 ], dilation_.cpu_data ()[1 ], dilation_.cpu_data ()[2 ], data);
170
184
} else {
171
185
col2im_nd_cpu (col_buff, num_spatial_axes_, conv_input_shape_.cpu_data (),
172
186
col_buffer_shape_.data (), kernel_shape_.cpu_data (),
0 commit comments