diff --git a/tools/caffe/caffe.proto b/tools/caffe/caffe.proto index c78595482..5ce0bb32c 100644 --- a/tools/caffe/caffe.proto +++ b/tools/caffe/caffe.proto @@ -396,6 +396,7 @@ message LayerParameter { optional PowerParameter power_param = 122; optional PReLUParameter prelu_param = 131; optional PriorBoxParameter prior_box_param = 203; + optional PSROIPoolingParameter psroi_pooling_param = 149; optional PythonParameter python_param = 130; optional RecurrentParameter recurrent_param = 146; optional ReductionParameter reduction_param = 136; @@ -1131,6 +1132,12 @@ message PriorBoxParameter { optional float offset = 13 [default = 0.5]; } +message PSROIPoolingParameter { + required float spatial_scale = 1; + required int32 output_dim = 2; // output channel number + required int32 group_size = 3; // number of groups to encode position-sensitive score maps +} + message PythonParameter { optional string module = 1; optional string layer = 2; diff --git a/tools/caffe/caffe2ncnn.cpp b/tools/caffe/caffe2ncnn.cpp index d962a2865..45abdb33c 100644 --- a/tools/caffe/caffe2ncnn.cpp +++ b/tools/caffe/caffe2ncnn.cpp @@ -1419,6 +1419,14 @@ int main(int argc, char** argv) fprintf(pp, " 12=%f", step_height); fprintf(pp, " 13=%f", prior_box_param.offset()); } + else if (layer.type() == "PSROIPooling") + { + const caffe::PSROIPoolingParameter& psroi_pooling_param = layer.psroi_pooling_param(); + fprintf(pp, " 0=%d", psroi_pooling_param.group_size()); + fprintf(pp, " 1=%d", psroi_pooling_param.group_size()); + fprintf(pp, " 2=%f", psroi_pooling_param.spatial_scale()); + fprintf(pp, " 3=%d", psroi_pooling_param.output_dim()); + } else if (layer.type() == "Python") { const caffe::PythonParameter& python_param = layer.python_param();