Convolution Layer */
| 375 | |
| 376 | /** Convolution Layer */ |
| 377 | class ConvolutionLayer final : public ILayer |
| 378 | { |
| 379 | public: |
| 380 | /** Construct a convolution layer. |
| 381 | * |
| 382 | * @param[in] conv_width Convolution width. |
| 383 | * @param[in] conv_height Convolution height. |
| 384 | * @param[in] ofm Output feature map. |
| 385 | * @param[in] weights Accessor to get kernel weights from. |
| 386 | * @param[in] bias Accessor to get kernel bias from. |
| 387 | * @param[in] conv_info Padding and stride information. |
| 388 | * @param[in] num_groups (Optional) Number of groups. Default: 1. |
| 389 | * @param[in] weights_quant_info (Optional) Weights quantization information |
| 390 | * @param[in] out_quant_info (Optional) Output quantization info |
| 391 | */ |
| 392 | ConvolutionLayer(unsigned int conv_width, |
| 393 | unsigned int conv_height, |
| 394 | unsigned int ofm, |
| 395 | ITensorAccessorUPtr weights, |
| 396 | ITensorAccessorUPtr bias, |
| 397 | PadStrideInfo conv_info, |
| 398 | unsigned int num_groups = 1, |
| 399 | const QuantizationInfo weights_quant_info = QuantizationInfo(), |
| 400 | const QuantizationInfo out_quant_info = QuantizationInfo()) |
| 401 | : _conv_width(conv_width), |
| 402 | _conv_height(conv_height), |
| 403 | _ofm(ofm), |
| 404 | _conv_info(std::move(conv_info)), |
| 405 | _num_groups(num_groups), |
| 406 | _weights(std::move(weights)), |
| 407 | _bias(std::move(bias)), |
| 408 | _weights_quant_info(std::move(weights_quant_info)), |
| 409 | _out_quant_info(std::move(out_quant_info)) |
| 410 | { |
| 411 | } |
| 412 | |
| 413 | NodeID create_layer(IStream &s) override |
| 414 | { |
| 415 | NodeIdxPair input = {s.tail_node(), 0}; |
| 416 | NodeParams common_params = {name(), s.hints().target_hint}; |
| 417 | return GraphBuilder::add_convolution_node(s.graph(), common_params, input, Size2D(_conv_width, _conv_height), |
| 418 | _ofm, _conv_info, _num_groups, s.hints().convolution_method_hint, |
| 419 | s.hints().fast_math_hint, std::move(_weights), std::move(_bias), |
| 420 | std::move(_weights_quant_info), std::move(_out_quant_info)); |
| 421 | } |
| 422 | |
| 423 | private: |
| 424 | unsigned int _conv_width; |
| 425 | unsigned int _conv_height; |
| 426 | unsigned int _ofm; |
| 427 | const PadStrideInfo _conv_info; |
| 428 | unsigned int _num_groups; |
| 429 | ITensorAccessorUPtr _weights; |
| 430 | ITensorAccessorUPtr _bias; |
| 431 | const QuantizationInfo _weights_quant_info; |
| 432 | const QuantizationInfo _out_quant_info; |
| 433 | }; |
| 434 |
no outgoing calls
no test coverage detected