27 #ifndef LBANN_UTILS_IM2COL_HPP 28 #define LBANN_UTILS_IM2COL_HPP 49 template <
typename TensorDataType>
50 void im2col(
const CPUMatDT<TensorDataType>& im,
51 CPUMatDT<TensorDataType>& col,
56 const int* window_dims,
57 const int* window_strides);
60 template <
typename TensorDataType>
61 void im2col(
const El::Matrix<TensorDataType, El::Device::GPU>& im,
62 El::Matrix<TensorDataType, El::Device::GPU>& col,
63 const int num_channels,
64 const int im_num_dims,
67 const int* window_dims,
68 const int* window_strides,
69 const El::SyncInfo<El::Device::GPU>& sync_info);
70 #endif // LBANN_HAS_GPU 75 const int num_channels,
76 const int im_num_dims,
79 const int* window_dims,
80 const int* window_strides);
98 template <
typename TensorDataType>
99 void col2im(
const CPUMatDT<TensorDataType>& col,
100 CPUMatDT<TensorDataType>& im,
105 const int* window_dims,
106 const int* window_strides);
125 template <
typename TensorDataType>
126 void col2im(
const CPUMatDT<TensorDataType>& col,
127 CPUMatDT<TensorDataType>& im,
132 const int* window_dims,
133 const int* window_strides,
134 std::function<TensorDataType(
const TensorDataType&,
135 const TensorDataType&)> reduction_op);
143 template <
typename TensorDataType>
144 void im2col_1x1(
const TensorDataType* input_buffer,
145 TensorDataType* output_buffer,
148 const int* input_dims);
154 template <
typename TensorDataType>
155 void im2col_2d(
const TensorDataType* __restrict__ input_buffer,
156 TensorDataType* __restrict__ output_buffer,
165 int offset_stride_y);
173 template <
typename TensorDataType>
174 void col2im_1x1(
const TensorDataType* input_buffer,
175 TensorDataType* output_buffer,
176 const int num_channels,
177 const int num_output_dims,
178 const int* output_dims);
184 template <
typename TensorDataType>
185 void col2im_2d(
const TensorDataType* __restrict__ input_buffer,
186 TensorDataType* __restrict__ output_buffer,
195 int offset_stride_y);
199 #endif // LBANN_UTILS_IM2COL_HPP void col2im(const CPUMatDT< TensorDataType > &col, CPUMatDT< TensorDataType > &im, int num_channels, int im_num_dims, const int *im_dims, const int *im_pads, const int *window_dims, const int *window_strides)
Rearrange matrix columns into image blocks.
void col2im_2d(const TensorDataType *__restrict__ input_buffer, TensorDataType *__restrict__ output_buffer, int output_dim_x, int output_dim_y, int output_pad_x, int output_pad_y, int num_channels, int window_dim_x, int window_dim_y, int offset_stride_x, int offset_stride_y)
Rearrange matrix columns into 2D image blocks.
void im2col_1x1(const TensorDataType *input_buffer, TensorDataType *output_buffer, int num_channels, int num_input_dims, const int *input_dims)
Rearrange 1x1 image blocks into matrix columns.
void im2col(const CPUMatDT< TensorDataType > &im, CPUMatDT< TensorDataType > &col, int num_channels, int im_num_dims, const int *im_dims, const int *im_pads, const int *window_dims, const int *window_strides)
Rearrange image blocks into matrix columns.
std::pair< size_t, size_t > get_im2col_output_size(const int num_samples, const int num_channels, const int im_num_dims, const int *im_dims, const int *im_pads, const int *window_dims, const int *window_strides)
void col2im_1x1(const TensorDataType *input_buffer, TensorDataType *output_buffer, const int num_channels, const int num_output_dims, const int *output_dims)
Rearrange matrix columns into 1x1 image blocks.
void im2col_2d(const TensorDataType *__restrict__ input_buffer, TensorDataType *__restrict__ output_buffer, int input_dim_x, int input_dim_y, int input_pad_x, int input_pad_y, int num_channels, int window_dim_x, int window_dim_y, int offset_stride_x, int offset_stride_y)
Rearrange 2D image blocks into matrix columns.