Compute Library
 21.11
CLCropResize.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019-2021 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_CL_CROP_RESIZE_H
25 #define ARM_COMPUTE_CL_CROP_RESIZE_H
26 
28 
34 
35 #include <cstdint>
36 #include <memory>
37 
38 namespace arm_compute
39 {
40 // Forward Declarations
41 class CLCompileContext;
42 class ITensor;
43 class ITensorInfo;
44 
45 /** Function to perform cropping and resizing */
46 class CLCropResize : public IFunction
47 {
48 public:
49  /** Default constructor */
50  CLCropResize();
51  /** Prevent instances of this class from being copied (As this class contains pointers) */
52  CLCropResize(const CLCropResize &) = delete;
53  /** Prevent instances of this class from being copied (As this class contains pointers) */
54  CLCropResize &operator=(const CLCropResize &) = delete;
55  /** Allow instances of this class to be moved */
56  CLCropResize(CLCropResize &&) = default;
57  /** Allow instances of this class to be moved */
58  CLCropResize &operator=(CLCropResize &&) = default;
59  /** Default destructor */
60  ~CLCropResize();
61 
62  /** Configure kernel
63  *
64  * Valid data layouts:
65  * - NHWC
66  *
67  * Valid data type configurations:
68  * |src0 |src1 |src2 |dst |
69  * |:--------|:--------|:------|:--------|
70  * |All |F32 |F32 |F32 |
71  *
72  * @note Supported tensor rank: up to 4
73  * @note Box indices may be outside of the bounds, in which case @p extrapolation_value is used.
74  * @note Start and end indices of boxes are inclusive.
75  *
76  * @param[in] input Source tensor containing N batches of 3D images to be cropped. Data type supported: All
77  * @param[in] boxes Tensor containing the boxes used to crop the images. It has to be known before configuration. Data type supported: F32
78  * @param[in] box_ind One dimensional tensor containing the batch index of the 3D image in @p input that the corresponding
79  * box in @p boxes will be applied to. It has to be known before configuration. Data type supported: F32
80  * @param[out] output Destination tensor containing a cropped and resized image for each box in @p boxes. Data type supported: F32
81  * @param[in] crop_size The dimensions that each cropped image will be resized to.
82  * @param[in] method The policy to be used when resizing image. Default is bilinear.
83  * @param[in] extrapolation_value Value to be used for values outside of the image for cropping and resizing. Default is 0.
84  */
85  void configure(const ICLTensor *input, ICLTensor *boxes, ICLTensor *box_ind, ICLTensor *output, Coordinates2D crop_size,
86  InterpolationPolicy method = InterpolationPolicy::BILINEAR, float extrapolation_value = 0);
87  /** Configure kernel
88  *
89  * @note Supported tensor rank: up to 4
90  * @note Box indices may be outside of the bounds, in which case @p extrapolation_value is used.
91  * @note Start and end indices of boxes are inclusive.
92  *
93  * @param[in] compile_context The compile context to be used.
94  * @param[in] input Source tensor containing N batches of 3D images to be cropped. Data type supported: All
95  * @param[in] boxes Tensor containing the boxes used to crop the images. It has to be known before configuration. Data type supported: F32
96  * @param[in] box_ind One dimensional tensor containing the batch index of the 3D image in @p input that the corresponding
97  * box in @p boxes will be applied to. It has to be known before configuration. Data type supported: F32
98  * @param[out] output Destination tensor containing a cropped and resized image for each box in @p boxes. Data type supported: F32
99  * @param[in] crop_size The dimensions that each cropped image will be resized to.
100  * @param[in] method The policy to be used when resizing image. Default is bilinear.
101  * @param[in] extrapolation_value Value to be used for values outside of the image for cropping and resizing. Default is 0.
102  */
103  void configure(const CLCompileContext &compile_context, const ICLTensor *input, ICLTensor *boxes, ICLTensor *box_ind, ICLTensor *output, Coordinates2D crop_size,
104  InterpolationPolicy method = InterpolationPolicy::BILINEAR, float extrapolation_value = 0);
105 
106  /** Static function to check if given info will lead to a valid configuration of @ref NESlice
107  *
108  * @note Supported tensor rank: up to 4
109  * @note Box indices may be outside of the bounds, in which case @p extrapolation_value is used.
110  * @note Start and end indices of boxes are inclusive.
111  *
112  * @param[in] input Source tensor info containing N batches of 3D images to be cropped. Data type supported: All
113  * @param[in] boxes Tensor info for the tensor containing the boxes used to crop the images. Data type supported: F32
114  * @param[in] box_ind Tensor info for the one dimensional tensor containing the batch index of the 3D image in @p input
115  * that the corresponding box in @p boxes will be applied to. Data type supported: F32
116  * @param[in] output Tensor info for the destination tensor containing a cropped and resized image for each box in @p boxes.
117  * Data type supported: F32
118  * @param[in] crop_size The dimensions that each cropped image will be resized to.
119  * @param[in] method The policy to be used when resizing image. Default is bilinear.
120  * @param[in] extrapolation_value Value to be used for values outside of the image for cropping and resizing. Default is 0.
121  *
122  * @return A status
123  */
124  static Status validate(const ITensorInfo *input, ITensorInfo *boxes, ITensorInfo *box_ind, const ITensorInfo *output,
125  Coordinates2D crop_size, InterpolationPolicy method, float extrapolation_value);
126 
127  void run() override;
128 
133  size_t _num_boxes;
136 
137  std::vector<std::unique_ptr<CLScale>> _scale;
138  std::vector<std::unique_ptr<CLCopy>> _copy;
139  std::vector<std::unique_ptr<CLTensor>> _crop_results;
140  std::vector<std::unique_ptr<CLTensor>> _scaled_results;
141 
142  std::vector<std::unique_ptr<IFunction>> _internal_functions;
143 };
144 } // namespace arm_compute
145 #endif /* ARM_COMPUTE_CL_CROP_RESIZE_H */
InterpolationPolicy
Interpolation method.
Definition: Types.h:398
std::vector< std::unique_ptr< CLTensor > > _crop_results
Definition: CLCropResize.h:139
CLCropResize()
Default constructor.
~CLCropResize()
Default destructor.
Base class for all functions.
Definition: IFunction.h:30
std::vector< std::unique_ptr< CLCopy > > _copy
Definition: CLCropResize.h:138
std::vector< std::unique_ptr< IFunction > > _internal_functions
Definition: CLCropResize.h:142
Output values are defined by bilinear interpolation between the pixels.
Store the tensor&#39;s metadata.
Definition: ITensorInfo.h:40
Status class.
Definition: Error.h:52
Copyright (c) 2017-2021 Arm Limited.
std::vector< std::unique_ptr< CLTensor > > _scaled_results
Definition: CLCropResize.h:140
InterpolationPolicy _method
Definition: CLCropResize.h:134
static Status validate(const ITensorInfo *input, ITensorInfo *boxes, ITensorInfo *box_ind, const ITensorInfo *output, Coordinates2D crop_size, InterpolationPolicy method, float extrapolation_value)
Static function to check if given info will lead to a valid configuration of NESlice.
void run() override
Run the kernels contained in the function.
const ICLTensor * _input
Definition: CLCropResize.h:129
CLCompileContext class.
Interface for OpenCL tensor.
Definition: ICLTensor.h:42
Coordinate type.
Definition: Types.h:422
void configure(const ICLTensor *input, ICLTensor *boxes, ICLTensor *box_ind, ICLTensor *output, Coordinates2D crop_size, InterpolationPolicy method=InterpolationPolicy::BILINEAR, float extrapolation_value=0)
Configure kernel.
std::vector< std::unique_ptr< CLScale > > _scale
Definition: CLCropResize.h:137
Function to perform cropping and resizing.
Definition: CLCropResize.h:46
CLCropResize & operator=(const CLCropResize &)=delete
Prevent instances of this class from being copied (As this class contains pointers) ...