blob: 042617e8df81e57598400d76cea724fc6fd25fc7 [file] [log] [blame]
John Richardson7f4a8192018-02-05 15:12:22 +00001/*
Michele Di Giorgiod9eaf612020-07-08 11:12:57 +01002 * Copyright (c) 2018 Arm Limited.
John Richardson7f4a8192018-02-05 15:12:22 +00003 *
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_HOG_MULTI_DETECTION_DATASET
25#define ARM_COMPUTE_HOG_MULTI_DETECTION_DATASET
26
27#include "arm_compute/core/HOGInfo.h"
28#include "tests/framework/datasets/Datasets.h"
29
30namespace arm_compute
31{
32namespace test
33{
34namespace datasets
35{
36class HOGMultiDetectionDataset
37{
38public:
39 using type = std::tuple<std::string, std::vector<HOGInfo>>;
40
41 struct iterator
42 {
43 iterator(std::vector<std::string>::const_iterator image_it,
44 std::vector<std::string>::const_iterator hog_infos_name_it,
45 std::vector<std::vector<HOGInfo>>::const_iterator hog_infos_it)
46 : _image_it{ std::move(image_it) },
47 _hog_infos_name_it{ std::move(hog_infos_name_it) },
48 _hog_infos_it{ std::move(hog_infos_it) }
49 {
50 }
51
52 std::string description() const
53 {
54 std::stringstream description;
55 description << "Image=" << *_image_it << ":";
56 description << "HOGInfoSet=" << *_hog_infos_name_it;
57
58 return description.str();
59 }
60
61 HOGMultiDetectionDataset::type operator*() const
62 {
63 return std::make_tuple(*_image_it, *_hog_infos_it);
64 }
65
66 iterator &operator++()
67 {
68 ++_image_it;
69 ++_hog_infos_name_it;
70 ++_hog_infos_it;
71
72 return *this;
73 }
74
75 private:
76 std::vector<std::string>::const_iterator _image_it;
77 std::vector<std::string>::const_iterator _hog_infos_name_it;
78 std::vector<std::vector<HOGInfo>>::const_iterator _hog_infos_it;
79 };
80
81 iterator begin() const
82 {
83 return iterator(_image.begin(), _hog_infos_name.begin(), _hog_infos.begin());
84 }
85
86 int size() const
87 {
88 return std::min(_image.size(), _hog_infos.size());
89 }
90
91 void add_config(std::string image,
92 std::string hog_infos_name,
93 std::vector<HOGInfo> hog_info_vec)
94 {
95 _image.emplace_back(std::move(image));
96 _hog_infos_name.emplace_back(std::move(hog_infos_name));
97 _hog_infos.emplace_back(hog_info_vec);
98 }
99
100protected:
101 HOGMultiDetectionDataset() = default;
102 HOGMultiDetectionDataset(HOGMultiDetectionDataset &&) = default;
103
104private:
105 std::vector<std::string> _image{};
106 std::vector<std::string> _hog_infos_name{};
107 std::vector<std::vector<HOGInfo>> _hog_infos{};
108};
109
110using MultiHOGDataset = std::vector<HOGInfo>;
111
112// *INDENT-OFF*
113// clang-format off
114static const MultiHOGDataset mixed
115{
116 // cell_size block_size detection_size block_stride bin normalization_type thresh phase_type
117 HOGInfo(Size2D(8U, 8U), Size2D(16U, 16U), Size2D(64U, 128U), Size2D(8U, 8U), 3U, HOGNormType::L1_NORM, 0.2f, PhaseType::SIGNED),
118 HOGInfo(Size2D(8U, 8U), Size2D(16U, 16U), Size2D(128U, 256U), Size2D(8U, 8U), 5U, HOGNormType::L1_NORM, 0.3f, PhaseType::SIGNED),
119 HOGInfo(Size2D(16U, 16U), Size2D(32U, 32U), Size2D(64U, 128U), Size2D(32U, 32U), 7U, HOGNormType::L1_NORM, 0.4f, PhaseType::SIGNED),
120 HOGInfo(Size2D(16U, 16U), Size2D(32U, 32U), Size2D(128U, 256U), Size2D(32U, 32U), 9U, HOGNormType::L1_NORM, 0.5f, PhaseType::SIGNED),
121};
122
123// cell_size and bin_size fixed
124static const MultiHOGDataset skip_binning
125{
126 // cell_size block_size detection_size block_stride bin normalization_type thresh phase_type
127 HOGInfo(Size2D(8U, 8U), Size2D(16U, 16U), Size2D(64U, 128U), Size2D(8U, 8U), 9U, HOGNormType::L2HYS_NORM, 0.2f, PhaseType::SIGNED),
128 HOGInfo(Size2D(8U, 8U), Size2D(16U, 16U), Size2D(128U, 256U), Size2D(8U, 8U), 9U, HOGNormType::L2HYS_NORM, 0.2f, PhaseType::SIGNED),
129 HOGInfo(Size2D(8U, 8U), Size2D(32U, 32U), Size2D(64U, 128U), Size2D(16U, 16U), 9U, HOGNormType::L2HYS_NORM, 0.2f, PhaseType::SIGNED),
130 HOGInfo(Size2D(8U, 8U), Size2D(32U, 32U), Size2D(128U, 256U), Size2D(16U, 16U), 9U, HOGNormType::L2HYS_NORM, 0.2f, PhaseType::SIGNED),
131};
132
133// cell_size and bin_size and block_size and block_stride fixed
134static const MultiHOGDataset skip_normalization
135{
136 // cell_size block_size detection_size block_stride bin normalization_type thresh phase_type
137 HOGInfo(Size2D(8U, 8U), Size2D(16U, 16U), Size2D(64U, 128U), Size2D(8U, 8U), 9U, HOGNormType::L2_NORM, 0.2f, PhaseType::SIGNED),
138 HOGInfo(Size2D(8U, 8U), Size2D(16U, 16U), Size2D(128U, 256U), Size2D(8U, 8U), 9U, HOGNormType::L2_NORM, 0.3f, PhaseType::SIGNED),
139 HOGInfo(Size2D(8U, 8U), Size2D(16U, 16U), Size2D(64U, 128U), Size2D(8U, 8U), 9U, HOGNormType::L2_NORM, 0.4f, PhaseType::SIGNED),
140 HOGInfo(Size2D(8U, 8U), Size2D(16U, 16U), Size2D(128U, 256U), Size2D(8U, 8U), 9U, HOGNormType::L2_NORM, 0.5f, PhaseType::SIGNED),
141};
142// clang-format on
143// *INDENT-ON*
144
145class SmallHOGMultiDetectionDataset final : public HOGMultiDetectionDataset
146{
147public:
148 SmallHOGMultiDetectionDataset()
149 {
150 add_config("800x600.ppm", "MIXED", mixed);
151 add_config("800x600.ppm", "SKIP_BINNING", skip_binning);
152 add_config("800x600.ppm", "SKIP_NORMALIZATION", skip_normalization);
153 }
154};
155
156class LargeHOGMultiDetectionDataset final : public HOGMultiDetectionDataset
157{
158public:
159 LargeHOGMultiDetectionDataset()
160 {
161 add_config("1920x1080.ppm", "MIXED", mixed);
162 add_config("1920x1080.ppm", "SKIP_BINNING", skip_binning);
163 add_config("1920x1080.ppm", "SKIP_NORMALIZATION", skip_normalization);
164 }
165};
166
167} // namespace datasets
168} // namespace test
169} // namespace arm_compute
170#endif /* ARM_COMPUTE_HOG_MULTI_DETECTION_DATASET */