| 186 | |
| 187 | template <typename Dtype> |
| 188 | void SPPLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype>*>& bottom, |
| 189 | const vector<Blob<Dtype>*>& top) { |
| 190 | if (pyramid_height_ == 1) { |
| 191 | pooling_layers_[0]->Forward(bottom, top); |
| 192 | return; |
| 193 | } |
| 194 | split_layer_->Forward(bottom, split_top_vec_); |
| 195 | for (int i = 0; i < pyramid_height_; i++) { |
| 196 | pooling_layers_[i]->Forward( |
| 197 | *pooling_bottom_vecs_[i], *pooling_top_vecs_[i]); |
| 198 | flatten_layers_[i]->Forward( |
| 199 | *pooling_top_vecs_[i], *flatten_top_vecs_[i]); |
| 200 | } |
| 201 | concat_layer_->Forward(concat_bottom_vec_, top); |
| 202 | } |
| 203 | |
| 204 | template <typename Dtype> |
| 205 | void SPPLayer<Dtype>::Backward_cpu(const vector<Blob<Dtype>*>& top, |