/usr/include/caffe/layers/spp_layer.hpp is in libcaffe-cpu-dev 1.0.0~rc4-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #ifndef CAFFE_SPP_LAYER_HPP_
#define CAFFE_SPP_LAYER_HPP_
#include <vector>
#include "caffe/blob.hpp"
#include "caffe/layer.hpp"
#include "caffe/proto/caffe.pb.h"
namespace caffe {
/**
* @brief Does spatial pyramid pooling on the input image
* by taking the max, average, etc. within regions
* so that the result vector of different sized
* images are of the same size.
*/
template <typename Dtype>
class SPPLayer : public Layer<Dtype> {
public:
explicit SPPLayer(const LayerParameter& param)
: Layer<Dtype>(param) {}
virtual void LayerSetUp(const vector<Blob<Dtype>*>& bottom,
const vector<Blob<Dtype>*>& top);
virtual void Reshape(const vector<Blob<Dtype>*>& bottom,
const vector<Blob<Dtype>*>& top);
virtual inline const char* type() const { return "SPP"; }
virtual inline int ExactNumBottomBlobs() const { return 1; }
virtual inline int ExactNumTopBlobs() const { return 1; }
protected:
virtual void Forward_cpu(const vector<Blob<Dtype>*>& bottom,
const vector<Blob<Dtype>*>& top);
virtual void Backward_cpu(const vector<Blob<Dtype>*>& top,
const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom);
// calculates the kernel and stride dimensions for the pooling layer,
// returns a correctly configured LayerParameter for a PoolingLayer
virtual LayerParameter GetPoolingParam(const int pyramid_level,
const int bottom_h, const int bottom_w, const SPPParameter spp_param);
int pyramid_height_;
int bottom_h_, bottom_w_;
int num_;
int channels_;
int kernel_h_, kernel_w_;
int pad_h_, pad_w_;
bool reshaped_first_time_;
/// the internal Split layer that feeds the pooling layers
shared_ptr<SplitLayer<Dtype> > split_layer_;
/// top vector holder used in call to the underlying SplitLayer::Forward
vector<Blob<Dtype>*> split_top_vec_;
/// bottom vector holder used in call to the underlying PoolingLayer::Forward
vector<vector<Blob<Dtype>*>*> pooling_bottom_vecs_;
/// the internal Pooling layers of different kernel sizes
vector<shared_ptr<PoolingLayer<Dtype> > > pooling_layers_;
/// top vector holders used in call to the underlying PoolingLayer::Forward
vector<vector<Blob<Dtype>*>*> pooling_top_vecs_;
/// pooling_outputs stores the outputs of the PoolingLayers
vector<Blob<Dtype>*> pooling_outputs_;
/// the internal Flatten layers that the Pooling layers feed into
vector<FlattenLayer<Dtype>*> flatten_layers_;
/// top vector holders used in call to the underlying FlattenLayer::Forward
vector<vector<Blob<Dtype>*>*> flatten_top_vecs_;
/// flatten_outputs stores the outputs of the FlattenLayers
vector<Blob<Dtype>*> flatten_outputs_;
/// bottom vector holder used in call to the underlying ConcatLayer::Forward
vector<Blob<Dtype>*> concat_bottom_vec_;
/// the internal Concat layers that the Flatten layers feed into
shared_ptr<ConcatLayer<Dtype> > concat_layer_;
};
} // namespace caffe
#endif // CAFFE_SPP_LAYER_HPP_
|