pcod-common v1.0.0
Shared preprocessing and postprocessing for point-cloud object detection
Loading...
Searching...
No Matches
test_manifest.cpp File Reference
#include "pcod_common/model_manifest.hpp"
#include <cassert>
#include <fstream>
#include <stdexcept>
#include <string>

Go to the source code of this file.

Functions

int main ()
 

Function Documentation

◆ main()

int main ( )

Run manifest parsing and unknown-key validation checks.

Definition at line 12 of file test_manifest.cpp.

12 {
13 const std::string path = "./test_manifest.yml";
14 std::ofstream out(path);
15 out << "schema_version: '2.0'\n";
16 out << "artifact:\n";
17 out << " bundle_name: 'pbod_fp16_gpu_onnx_test'\n";
18 out << " export_format: 'onnx_fp16_gpu'\n";
19 out << " backend: 'onnx'\n";
20 out << " precision: 'fp16'\n";
21 out << " device: 'cuda'\n";
22 out << " files:\n";
23 out << " model: 'model.onnx'\n";
24 out << " checkpoint: 'checkpoints/best.pt'\n";
25 out << " resolved_training_config: 'config/resolved_training_config.yml'\n";
26 out << " triton:\n";
27 out << " enabled: false\n";
28 out << " inputs:\n";
29 out << " - name: 'point_features'\n";
30 out << " dtype: 'float16'\n";
31 out << " shape: ['batch', 100, 1]\n";
32 out << " outputs:\n";
33 out << " - name: 'reg_logits'\n";
34 out << " dtype: 'float16'\n";
35 out << " shape: ['batch', 10, 7]\n";
36 out << "frozen_contract:\n";
37 out << " preprocessing:\n";
38 out << " max_num_points: 100\n";
39 out << " num_point_features: 1\n";
40 out << " point_cloud_range:\n";
41 out << " x: [-1.0, 1.0]\n";
42 out << " y: [-1.0, 1.0]\n";
43 out << " z: [-1.0, 1.0]\n";
44 out << " voxel_size:\n";
45 out << " x: 0.1\n";
46 out << " y: 0.1\n";
47 out << " z: 0.1\n";
48 out << " point_feature_normalization:\n";
49 out << " type: value_threshold\n";
50 out << " epsilon: 1e-6\n";
51 out << " postprocessing:\n";
52 out << " grid_size:\n";
53 out << " x: 10\n";
54 out << " y: 10\n";
55 out << " num_classes: 1\n";
56 out << " class_names: ['car']\n";
57 out << " model:\n";
58 out << " stride: [2, 1, 2]\n";
59 out << " up_stride: [1, 1, 2]\n";
60 out << " first_up_stride: 1\n";
61 out << " pillar_map_size: [10, 10]\n";
62 out << " pillar_map_range: [[-1.0, 1.0], [-1.0, 1.0], [-1.0, 1.0]]\n";
63 out << "runtime_defaults:\n";
64 out << " preprocessing:\n";
65 out << " point_feature:\n";
66 out << " value_threshold: 1.0\n";
67 out << " postprocessing:\n";
68 out << " class_score_threshold: 0.0\n";
69 out << " nms:\n";
70 out << " score_threshold: 0.2\n";
71 out << " iou_threshold: 0.5\n";
72 out << " max_num_objects: 10\n";
73 out.close();
74
75 auto manifest = pcod_common::LoadModelManifest(path);
77 assert(manifest.frozen_contract.preprocessing.max_num_points == 100);
78 assert(manifest.runtime_defaults.preprocessing.point_feature.value_threshold == 1.0f);
79
80 const std::string invalid_path = "./test_manifest_invalid.yml";
81 std::ofstream invalid(invalid_path);
82 invalid << "schema_version: '2.0'\n";
83 invalid << "artifact:\n";
84 invalid << " bundle_name: 'pbod_fp16_gpu_onnx_test'\n";
85 invalid << " export_format: 'onnx_fp16_gpu'\n";
86 invalid << " backend: 'onnx'\n";
87 invalid << " precision: 'fp16'\n";
88 invalid << " device: 'cuda'\n";
89 invalid << " hardware_compatible: true\n";
90 invalid << " files:\n";
91 invalid << " model: 'model.onnx'\n";
92 invalid << " checkpoint: 'checkpoints/best.pt'\n";
93 invalid << " resolved_training_config: 'config/resolved_training_config.yml'\n";
94 invalid << " triton:\n";
95 invalid << " enabled: false\n";
96 invalid << " inputs:\n";
97 invalid << " - name: 'point_features'\n";
98 invalid << " dtype: 'float16'\n";
99 invalid << " shape: ['batch', 100, 1]\n";
100 invalid << " outputs:\n";
101 invalid << " - name: 'reg_logits'\n";
102 invalid << " dtype: 'float16'\n";
103 invalid << " shape: ['batch', 10, 7]\n";
104 invalid << "frozen_contract:\n";
105 invalid << " preprocessing:\n";
106 invalid << " max_num_points: 100\n";
107 invalid << " num_point_features: 1\n";
108 invalid << " point_cloud_range:\n";
109 invalid << " x: [-1.0, 1.0]\n";
110 invalid << " y: [-1.0, 1.0]\n";
111 invalid << " z: [-1.0, 1.0]\n";
112 invalid << " voxel_size:\n";
113 invalid << " x: 0.1\n";
114 invalid << " y: 0.1\n";
115 invalid << " z: 0.1\n";
116 invalid << " point_feature_normalization:\n";
117 invalid << " type: value_threshold\n";
118 invalid << " epsilon: 1e-6\n";
119 invalid << " postprocessing:\n";
120 invalid << " grid_size:\n";
121 invalid << " x: 10\n";
122 invalid << " y: 10\n";
123 invalid << " num_classes: 1\n";
124 invalid << " class_names: ['car']\n";
125 invalid << " model:\n";
126 invalid << " stride: [2, 1, 2]\n";
127 invalid << " up_stride: [1, 1, 2]\n";
128 invalid << " first_up_stride: 1\n";
129 invalid << " pillar_map_size: [10, 10]\n";
130 invalid << " pillar_map_range: [[-1.0, 1.0], [-1.0, 1.0], [-1.0, 1.0]]\n";
131 invalid << "runtime_defaults:\n";
132 invalid << " preprocessing:\n";
133 invalid << " point_feature:\n";
134 invalid << " value_threshold: 1.0\n";
135 invalid << " postprocessing:\n";
136 invalid << " class_score_threshold: 0.0\n";
137 invalid << " nms:\n";
138 invalid << " score_threshold: 0.2\n";
139 invalid << " iou_threshold: 0.5\n";
140 invalid << " max_num_objects: 10\n";
141 invalid.close();
142
143 bool rejected_unknown_key = false;
144 try {
145 (void)pcod_common::LoadModelManifest(invalid_path);
146 } catch (const std::runtime_error&) {
147 rejected_unknown_key = true;
148 }
149 assert(rejected_unknown_key);
150 return 0;
151}
void ValidateModelManifest(const ModelManifest &manifest)
ModelManifest LoadModelManifest(const std::string &path)

References pcod_common::LoadModelManifest(), and pcod_common::ValidateModelManifest().