@ -188,9 +188,10 @@ public:
}
# ifdef HAVE_CANN
virtual Ptr < BackendNode > initCann ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes ) CV_OVERRIDE
virtual Ptr < BackendNode > initCann ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes ) CV_OVERRIDE
{
return func . initCannOp ( inputsWrapper , index , nodes ) ;
return func . initCannOp ( Layer : : name , inputsWrapper , nodes ) ;
}
# endif // HAVE_CANN
@ -459,7 +460,9 @@ struct ReLUFunctor : public BaseFunctor
# endif // HAVE_HALIDE
# ifdef HAVE_CANN
Ptr < BackendNode > initCannOp ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes )
Ptr < BackendNode > initCannOp ( const std : : string & name ,
const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes )
{
auto x = inputsWrapper [ 0 ] . dynamicCast < CannBackendWrapper > ( ) ;
auto op_x = nodes [ 0 ] . dynamicCast < CannBackendNode > ( ) - > getOp ( ) ;
@ -469,10 +472,9 @@ struct ReLUFunctor : public BaseFunctor
if ( slope )
{
std : : string op_name = cv : : format ( " leakyrelu_%d " , index ) ;
auto op = std : : make_shared < ge : : op : : LeakyRelu > ( op_name ) ;
auto op = std : : make_shared < ge : : op : : LeakyRelu > ( name ) ;
op - > set_input_x_by_name ( * op_x , " y " ) ;
op - > set_input_x_by_name ( * op_x , x - > name . c_str ( ) ) ;
op - > update_input_desc_x ( * x_desc ) ;
op - > set_attr_negative_slope ( slope ) ;
@ -482,10 +484,9 @@ struct ReLUFunctor : public BaseFunctor
return Ptr < BackendNode > ( new CannBackendNode ( op ) ) ;
}
std : : string op_name = cv : : format ( " relu_%d " , index ) ;
auto op = std : : make_shared < ge : : op : : Relu > ( op_name ) ; // FIXIT: Relu6?
auto op = std : : make_shared < ge : : op : : Relu > ( name ) ;
op - > set_input_x_by_name ( * op_x , " y " ) ;
op - > set_input_x_by_name ( * op_x , x - > name . c_str ( ) ) ;
op - > update_input_desc_x ( * x_desc ) ;
op - > update_output_desc_y ( * output_desc ) ;
@ -653,28 +654,29 @@ struct ReLU6Functor : public BaseFunctor
# endif // HAVE_HALIDE
# ifdef HAVE_CANN
Ptr < BackendNode > initCannOp ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes )
Ptr < BackendNode > initCannOp ( const std : : string & name ,
const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes )
{
auto x = inputsWrapper [ 0 ] . dynamicCast < CannBackendWrapper > ( ) ;
std : : string op_name = cv : : format ( " clip_%d " , index ) ;
auto op = std : : make_shared < ge : : op : : ClipByValue > ( op_name ) ;
auto op = std : : make_shared < ge : : op : : ClipByValue > ( name ) ;
auto op_x = nodes [ 0 ] . dynamicCast < CannBackendNode > ( ) - > getOp ( ) ;
op - > set_input_x_by_name ( * op_x , " y " ) ;
op - > set_input_x_by_name ( * op_x , x - > name . c_str ( ) ) ;
auto x_desc = x - > getTensorDesc ( ) ;
op - > update_input_desc_x ( * x_desc ) ;
Mat min_value_mat ( 1 , 1 , CV_32F , Scalar ( minValue ) ) ;
std : : vector < int > shape_ { 1 } ;
auto op_const_minv = std : : make_shared < CannConstOp > ( min_value_mat . data , min_value_mat . type ( ) , shape_ , cv : : format ( " %s_min_value " , op_ name. c_str ( ) ) ) ;
auto op_const_minv = std : : make_shared < CannConstOp > ( min_value_mat . data , min_value_mat . type ( ) , shape_ , cv : : format ( " %s_min_value " , name . c_str ( ) ) ) ;
op - > set_input_clip_value_min ( * ( op_const_minv - > getOp ( ) ) ) ;
op - > update_input_desc_clip_value_min ( * ( op_const_minv - > getTensorDesc ( ) ) ) ;
Mat max_value_mat ( 1 , 1 , CV_32F , Scalar ( maxValue ) ) ;
auto op_const_maxv = std : : make_shared < CannConstOp > ( max_value_mat . data , max_value_mat . type ( ) , shape_ , cv : : format ( " %s_max_value " , op_ name. c_str ( ) ) ) ;
op - > set_input_clip_value_min ( * ( op_const_maxv - > getOp ( ) ) ) ;
op - > update_input_desc_clip_value_min ( * ( op_const_maxv - > getTensorDesc ( ) ) ) ;
auto op_const_maxv = std : : make_shared < CannConstOp > ( max_value_mat . data , max_value_mat . type ( ) , shape_ , cv : : format ( " %s_max_value " , name . c_str ( ) ) ) ;
op - > set_input_clip_value_max ( * ( op_const_maxv - > getOp ( ) ) ) ;
op - > update_input_desc_clip_value_max ( * ( op_const_maxv - > getTensorDesc ( ) ) ) ;
auto output_desc = std : : make_shared < ge : : TensorDesc > ( ge : : Shape ( ) , ge : : FORMAT_NCHW , ge : : DT_FLOAT ) ;
op - > update_output_desc_y ( * output_desc ) ;
@ -805,7 +807,9 @@ struct BaseDefaultFunctor : public BaseFunctor
# endif // HAVE_HALIDE
# ifdef HAVE_CANN
Ptr < BackendNode > initCannOp ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes )
Ptr < BackendNode > initCannOp ( const std : : string & name ,
const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes )
{
CV_Error ( Error : : StsNotImplemented , " " ) ;
}
@ -925,15 +929,16 @@ struct TanHFunctor : public BaseDefaultFunctor<TanHFunctor>
# endif // HAVE_HALIDE
# ifdef HAVE_CANN
Ptr < BackendNode > initCannOp ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes )
Ptr < BackendNode > initCannOp ( const std : : string & name ,
const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes )
{
auto x = inputsWrapper [ 0 ] . dynamicCast < CannBackendWrapper > ( ) ;
std : : string op_name = cv : : format ( " tanh_%d " , index ) ;
auto op = std : : make_shared < ge : : op : : Tanh > ( op_name ) ;
auto op = std : : make_shared < ge : : op : : Tanh > ( name ) ;
auto op_x = nodes [ 0 ] . dynamicCast < CannBackendNode > ( ) - > getOp ( ) ;
op - > set_input_x_by_name ( * op_x , " y " ) ;
op - > set_input_x_by_name ( * op_x , x - > name . c_str ( ) ) ;
auto x_desc = x - > getTensorDesc ( ) ;
op - > update_input_desc_x ( * x_desc ) ;
@ -991,17 +996,18 @@ struct SwishFunctor : public BaseDefaultFunctor<SwishFunctor>
# endif // HAVE_HALIDE
# ifdef HAVE_CANN
Ptr < BackendNode > initCannOp ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes )
Ptr < BackendNode > initCannOp ( const std : : string & name ,
const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes )
{
auto x = inputsWrapper [ 0 ] . dynamicCast < CannBackendWrapper > ( ) ;
std : : string op_name = cv : : format ( " swish_%d " , index ) ;
auto op = std : : make_shared < ge : : op : : Swish > ( op_name ) ;
auto op = std : : make_shared < ge : : op : : Swish > ( name ) ;
op - > set_attr_scale ( 1.0f ) ;
auto op_x = nodes [ 0 ] . dynamicCast < CannBackendNode > ( ) - > getOp ( ) ;
op - > set_input_x_by_name ( * op_x , " y " ) ;
op - > set_input_x_by_name ( * op_x , x - > name . c_str ( ) ) ;
auto x_desc = x - > getTensorDesc ( ) ;
op - > update_input_desc_x ( * x_desc ) ;
@ -1068,15 +1074,16 @@ struct MishFunctor : public BaseDefaultFunctor<MishFunctor>
# endif // HAVE_HALIDE
# ifdef HAVE_CANN
Ptr < BackendNode > initCannOp ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes )
Ptr < BackendNode > initCannOp ( const std : : string & name ,
const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes )
{
auto x = inputsWrapper [ 0 ] . dynamicCast < CannBackendWrapper > ( ) ;
std : : string op_name = cv : : format ( " mish_%d " , index ) ;
auto op = std : : make_shared < ge : : op : : Mish > ( op_name ) ;
auto op = std : : make_shared < ge : : op : : Mish > ( name ) ;
auto op_x = nodes [ 0 ] . dynamicCast < CannBackendNode > ( ) - > getOp ( ) ;
op - > set_input_x_by_name ( * op_x , " y " ) ;
op - > set_input_x_by_name ( * op_x , x - > name . c_str ( ) ) ;
auto x_desc = x - > getTensorDesc ( ) ;
op - > update_input_desc_x ( * x_desc ) ;
@ -1143,15 +1150,16 @@ struct SigmoidFunctor : public BaseDefaultFunctor<SigmoidFunctor>
# endif // HAVE_HALIDE
# ifdef HAVE_CANN
Ptr < BackendNode > initCannOp ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes )
Ptr < BackendNode > initCannOp ( const std : : string & name ,
const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes )
{
auto x = inputsWrapper [ 0 ] . dynamicCast < CannBackendWrapper > ( ) ;
std : : string op_name = cv : : format ( " sigmoid_%d " , index ) ;
auto op = std : : make_shared < ge : : op : : Sigmoid > ( op_name ) ;
auto op = std : : make_shared < ge : : op : : Sigmoid > ( name ) ;
auto op_x = nodes [ 0 ] . dynamicCast < CannBackendNode > ( ) - > getOp ( ) ;
op - > set_input_x_by_name ( * op_x , " y " ) ;
op - > set_input_x_by_name ( * op_x , x - > name . c_str ( ) ) ;
auto x_desc = x - > getTensorDesc ( ) ;
op - > update_input_desc_x ( * x_desc ) ;
@ -1220,17 +1228,18 @@ struct ELUFunctor : public BaseDefaultFunctor<ELUFunctor>
# endif // HAVE_HALIDE
# ifdef HAVE_CANN
Ptr < BackendNode > initCannOp ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes )
Ptr < BackendNode > initCannOp ( const std : : string & name ,
const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes )
{
auto x = inputsWrapper [ 0 ] . dynamicCast < CannBackendWrapper > ( ) ;
std : : string op_name = cv : : format ( " elu_%d " , index ) ;
auto op = std : : make_shared < ge : : op : : Elu > ( op_name ) ;
auto op = std : : make_shared < ge : : op : : Elu > ( name ) ;
op - > set_attr_alpha ( alpha ) ;
auto op_x = nodes [ 0 ] . dynamicCast < CannBackendNode > ( ) - > getOp ( ) ;
op - > set_input_x_by_name ( * op_x , " y " ) ;
op - > set_input_x_by_name ( * op_x , x - > name . c_str ( ) ) ;
auto x_desc = x - > getTensorDesc ( ) ;
op - > update_input_desc_x ( * x_desc ) ;
@ -1291,15 +1300,16 @@ struct AbsValFunctor : public BaseDefaultFunctor<AbsValFunctor>
# endif // HAVE_HALIDE
# ifdef HAVE_CANN
Ptr < BackendNode > initCannOp ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes )
Ptr < BackendNode > initCannOp ( const std : : string & name ,
const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes )
{
auto x = inputsWrapper [ 0 ] . dynamicCast < CannBackendWrapper > ( ) ;
std : : string op_name = cv : : format ( " abs_%d " , index ) ;
auto op = std : : make_shared < ge : : op : : Abs > ( op_name ) ;
auto op = std : : make_shared < ge : : op : : Abs > ( name ) ;
auto op_x = nodes [ 0 ] . dynamicCast < CannBackendNode > ( ) - > getOp ( ) ;
op - > set_input_x_by_name ( * op_x , " y " ) ;
op - > set_input_x_by_name ( * op_x , x - > name . c_str ( ) ) ;
auto x_desc = x - > getTensorDesc ( ) ;
op - > update_input_desc_x ( * x_desc ) ;
@ -1352,15 +1362,16 @@ struct BNLLFunctor : public BaseDefaultFunctor<BNLLFunctor>
# endif
# ifdef HAVE_CANN
Ptr < BackendNode > initCannOp ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes )
Ptr < BackendNode > initCannOp ( const std : : string & name ,
const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes )
{
auto x = inputsWrapper [ 0 ] . dynamicCast < CannBackendWrapper > ( ) ;
std : : string op_name = cv : : format ( " bnll_%d " , index ) ;
auto op = std : : make_shared < ge : : op : : BNLL > ( op_name ) ;
auto op = std : : make_shared < ge : : op : : BNLL > ( name ) ;
auto op_x = nodes [ 0 ] . dynamicCast < CannBackendNode > ( ) - > getOp ( ) ;
op - > set_input_x_by_name ( * op_x , " y " ) ;
op - > set_input_x_by_name ( * op_x , x - > name . c_str ( ) ) ;
auto x_desc = x - > getTensorDesc ( ) ;
op - > update_input_desc_x ( * x_desc ) ;
@ -1408,15 +1419,16 @@ struct CeilFunctor : public BaseDefaultFunctor<CeilFunctor>
# endif
# ifdef HAVE_CANN
Ptr < BackendNode > initCannOp ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes )
Ptr < BackendNode > initCannOp ( const std : : string & name ,
const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes )
{
auto x = inputsWrapper [ 0 ] . dynamicCast < CannBackendWrapper > ( ) ;
std : : string op_name = cv : : format ( " bnll_%d " , index ) ;
auto op = std : : make_shared < ge : : op : : BNLL > ( op_name ) ;
auto op = std : : make_shared < ge : : op : : BNLL > ( name ) ;
auto op_x = nodes [ 0 ] . dynamicCast < CannBackendNode > ( ) - > getOp ( ) ;
op - > set_input_x_by_name ( * op_x , " y " ) ;
op - > set_input_x_by_name ( * op_x , x - > name . c_str ( ) ) ;
auto x_desc = x - > getTensorDesc ( ) ;
op - > update_input_desc_x ( * x_desc ) ;
@ -1466,15 +1478,16 @@ struct FloorFunctor : public BaseDefaultFunctor<FloorFunctor>
# endif
# ifdef HAVE_CANN
Ptr < BackendNode > initCannOp ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes )
Ptr < BackendNode > initCannOp ( const std : : string & name ,
const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes )
{
auto x = inputsWrapper [ 0 ] . dynamicCast < CannBackendWrapper > ( ) ;
std : : string op_name = cv : : format ( " floor_%d " , index ) ;
auto op = std : : make_shared < ge : : op : : Floor > ( op_name ) ;
auto op = std : : make_shared < ge : : op : : Floor > ( name ) ;
auto op_x = nodes [ 0 ] . dynamicCast < CannBackendNode > ( ) - > getOp ( ) ;
op - > set_input_x_by_name ( * op_x , " y " ) ;
op - > set_input_x_by_name ( * op_x , x - > name . c_str ( ) ) ;
auto x_desc = x - > getTensorDesc ( ) ;
op - > update_input_desc_x ( * x_desc ) ;
@ -2320,7 +2333,9 @@ struct PowerFunctor : public BaseFunctor
# endif // HAVE_HALIDE
# ifdef HAVE_CANN
Ptr < BackendNode > initCannOp ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes )
Ptr < BackendNode > initCannOp ( const std : : string & name ,
const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes )
{
CV_Error ( Error : : StsNotImplemented , " " ) ;
}
@ -2574,7 +2589,9 @@ struct ChannelsPReLUFunctor : public BaseFunctor
# endif // HAVE_HALIDE
# ifdef HAVE_CANN
Ptr < BackendNode > initCannOp ( const std : : vector < Ptr < BackendWrapper > > & inputsWrapper , const int index , const std : : vector < Ptr < BackendNode > > & nodes )
Ptr < BackendNode > initCannOp ( const std : : string & name ,
const std : : vector < Ptr < BackendWrapper > > & inputsWrapper ,
const std : : vector < Ptr < BackendNode > > & nodes )
{
auto x = inputsWrapper [ 0 ] . dynamicCast < CannBackendWrapper > ( ) ;
auto op_x = nodes [ 0 ] . dynamicCast < CannBackendNode > ( ) - > getOp ( ) ;
@ -2582,14 +2599,13 @@ struct ChannelsPReLUFunctor : public BaseFunctor
auto output_desc = std : : make_shared < ge : : TensorDesc > ( ge : : Shape ( ) , ge : : FORMAT_NCHW , ge : : DT_FLOAT ) ;
std : : string op_name = cv : : format ( " prelu_%d " , index ) ;
auto op = std : : make_shared < ge : : op : : PRelu > ( op_name ) ;
auto op = std : : make_shared < ge : : op : : PRelu > ( name ) ;
op - > set_input_x_by_name ( * op_x , " y " ) ;
op - > set_input_x_by_name ( * op_x , x - > name . c_str ( ) ) ;
op - > update_input_desc_x ( * x_desc ) ;
std : : vector < int > shape_ { scale . size [ 0 ] } ; // scale should be a 1d of shape [n] tensor, and it is a 2d mat of shape [n, 1] in opencv
auto op_const_slope = std : : make_shared < CannConstOp > ( scale . data , scale . type ( ) , shape_ , cv : : format ( " %s_weight " , op_ name. c_str ( ) ) ) ;
auto op_const_slope = std : : make_shared < CannConstOp > ( scale . data , scale . type ( ) , shape_ , cv : : format ( " %s_weight " , name . c_str ( ) ) ) ;
op - > set_input_weight ( * ( op_const_slope - > getOp ( ) ) ) ;
op - > update_input_desc_weight ( * ( op_const_slope - > getTensorDesc ( ) ) ) ;