xref: /aosp_15_r20/external/ComputeLibrary/src/core/CL/kernels/CLGenerateProposalsLayerKernel.h (revision c217d954acce2dbc11938adb493fc0abd69584f3)
1  /*
2   * Copyright (c) 2019-2020 Arm Limited.
3   *
4   * SPDX-License-Identifier: MIT
5   *
6   * Permission is hereby granted, free of charge, to any person obtaining a copy
7   * of this software and associated documentation files (the "Software"), to
8   * deal in the Software without restriction, including without limitation the
9   * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10   * sell copies of the Software, and to permit persons to whom the Software is
11   * furnished to do so, subject to the following conditions:
12   *
13   * The above copyright notice and this permission notice shall be included in all
14   * copies or substantial portions of the Software.
15   *
16   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22   * SOFTWARE.
23   */
24  #ifndef ARM_COMPUTE_CLGENERATEPROPOSALSLAYERKERNEL_H
25  #define ARM_COMPUTE_CLGENERATEPROPOSALSLAYERKERNEL_H
26  
27  #include "src/core/CL/ICLKernel.h"
28  namespace arm_compute
29  {
30  class ICLTensor;
31  
32  /** Interface for Compute All Anchors kernel */
33  class CLComputeAllAnchorsKernel : public ICLKernel
34  {
35  public:
36      /** Default constructor */
37      CLComputeAllAnchorsKernel();
38      /** Prevent instances of this class from being copied (As this class contains pointers) */
39      CLComputeAllAnchorsKernel(const CLComputeAllAnchorsKernel &) = delete;
40      /** Prevent instances of this class from being copied (As this class contains pointers) */
41      CLComputeAllAnchorsKernel &operator=(const CLComputeAllAnchorsKernel &) = delete;
42      /** Allow instances of this class to be moved */
43      CLComputeAllAnchorsKernel(CLComputeAllAnchorsKernel &&) = default;
44      /** Allow instances of this class to be moved */
45      CLComputeAllAnchorsKernel &operator=(CLComputeAllAnchorsKernel &&) = default;
46      /** Default destructor */
47      ~CLComputeAllAnchorsKernel() = default;
48  
49      /** Set the input and output tensors.
50       *
51       * @param[in]  anchors     Source tensor. Original set of anchors of size (4, A), where A is the number of anchors. Data types supported: QSYMM16/F16/F32
52       * @param[out] all_anchors Destination tensor. Destination anchors of size (4, H*W*A) where H and W are the height and width of the feature map and A is the number of anchors. Data types supported: Same as @p input
53       * @param[in]  info        Contains Compute Anchors operation information described in @ref ComputeAnchorsInfo
54       *
55       */
56      void configure(const ICLTensor *anchors, ICLTensor *all_anchors, const ComputeAnchorsInfo &info);
57      /** Set the input and output tensors.
58       *
59       * @param[in]  compile_context The compile context to be used.
60       * @param[in]  anchors         Source tensor. Original set of anchors of size (4, A), where A is the number of anchors. Data types supported: QSYMM16/F16/F32
61       * @param[out] all_anchors     Destination tensor. Destination anchors of size (4, H*W*A) where H and W are the height and width of the feature map and A is the number of anchors. Data types supported: Same as @p input
62       * @param[in]  info            Contains Compute Anchors operation information described in @ref ComputeAnchorsInfo
63       *
64       */
65      void configure(const CLCompileContext &compile_context, const ICLTensor *anchors, ICLTensor *all_anchors, const ComputeAnchorsInfo &info);
66  
67      /** Static function to check if given info will lead to a valid configuration of @ref CLComputeAllAnchorsKernel
68       *
69       * @param[in] anchors     Source tensor info. Original set of anchors of size (4, A), where A is the number of anchors. Data types supported: QSYMM16/F16/F32
70       * @param[in] all_anchors Destination tensor info. Destination anchors of size (4, H*W*A) where H and W are the height and width of the feature map and A is the number of anchors. Data types supported: Same as @p input
71       * @param[in] info        Contains Compute Anchors operation information described in @ref ComputeAnchorsInfo
72       *
73       * @return a Status
74       */
75      static Status validate(const ITensorInfo *anchors, const ITensorInfo *all_anchors, const ComputeAnchorsInfo &info);
76  
77      // Inherited methods overridden:
78      void run(const Window &window, cl::CommandQueue &queue) override;
79  
80  private:
81      const ICLTensor *_anchors;
82      ICLTensor       *_all_anchors;
83  };
84  } // arm_compute
85  #endif // ARM_COMPUTE_CLGENERATEPROSPOSALSLAYERKERNEL_H
86