Skip to content

Commit 3169f7f

Browse files
committed
major update new shape handling and sizes handeling
1 parent f640546 commit 3169f7f

23 files changed

Lines changed: 501 additions & 290 deletions

docs/anira-usage.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ When your pre- and post-processing requires to access values from the `anira::In
109109
class CustomPrePostProcessor : public anira::PrePostProcessor {
110110
public:
111111
virtual void pre_process(anira::RingBuffer& input, anira::BufferF& output, [[maybe_unused]] anira::InferenceBackend current_inference_backend) override {
112-
pop_samples_from_buffer(input, output, inference_config.m_output_sizes[inference_config.m_index_audio_data[anira::IndexAudioData::Output]], inference_config.m_input_sizes[inference_config.m_index_audio_data[anira::IndexAudioData::Input]]-inference_config.m_output_sizes[inference_config.m_index_audio_data[anira::IndexAudioData::Output]]);
112+
pop_samples_from_buffer(input, output, inference_config.get_tensor_output_size()[inference_config.m_index_audio_data[anira::IndexAudioData::Output]], inference_config.get_tensor_input_size()[inference_config.m_index_audio_data[anira::IndexAudioData::Input]]-inference_config.get_tensor_output_size()[inference_config.m_index_audio_data[anira::IndexAudioData::Output]]);
113113
};
114114

115115
anira::InferenceConfig config = inference_config;

examples/benchmark/advanced-benchmark/defineAdvancedBenchmark.cpp

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -131,27 +131,26 @@ void adapt_config(anira::InferenceConfig& inference_config, int buffer_size, int
131131
int output_size = buffer_size;
132132

133133
#ifdef USE_LIBTORCH
134-
inference_config.set_input_shape({{1, 1, input_size}}, anira::LIBTORCH);
135-
inference_config.set_output_shape({{1, 1, output_size}}, anira::LIBTORCH);
134+
inference_config.set_tensor_input_shape({{1, 1, input_size}}, anira::LIBTORCH);
135+
inference_config.set_tensor_output_shape({{1, 1, output_size}}, anira::LIBTORCH);
136136
#endif
137137
#ifdef USE_ONNXRUNTIME
138-
inference_config.set_input_shape({{1, 1, input_size}}, anira::ONNX);
139-
inference_config.set_output_shape({{1, 1, output_size}}, anira::ONNX);
138+
inference_config.set_tensor_input_shape({{1, 1, input_size}}, anira::ONNX);
139+
inference_config.set_tensor_output_shape({{1, 1, output_size}}, anira::ONNX);
140140
#endif
141141
#ifdef USE_TFLITE
142-
inference_config.set_input_shape({{1, input_size, 1}}, anira::TFLITE);
143-
inference_config.set_output_shape({{1, output_size, 1}}, anira::TFLITE);
142+
inference_config.set_tensor_input_shape({{1, input_size, 1}}, anira::TFLITE);
143+
inference_config.set_tensor_output_shape({{1, output_size, 1}}, anira::TFLITE);
144144
#endif
145-
inference_config.m_input_sizes[0] = input_size;
146-
inference_config.m_output_sizes[0] = output_size;
145+
inference_config.set_preprocess_input_size(std::vector<size_t>{static_cast<size_t>(input_size - receptive_field)});
147146
} else if (model == 1) {
148147
#ifdef USE_LIBTORCH
149-
inference_config.set_input_shape({{buffer_size, 1, 150}}, anira::LIBTORCH);
150-
inference_config.set_output_shape({{buffer_size, 1}}, anira::LIBTORCH);
148+
inference_config.set_tensor_input_shape({{buffer_size, 1, 150}}, anira::LIBTORCH);
149+
inference_config.set_tensor_output_shape({{buffer_size, 1}}, anira::LIBTORCH);
151150
#endif
152151
#ifdef USE_ONNXRUNTIME
153-
inference_config.set_input_shape({{buffer_size, 1, 150}}, anira::ONNX);
154-
inference_config.set_output_shape({{buffer_size, 1}}, anira::ONNX);
152+
inference_config.set_tensor_input_shape({{buffer_size, 1, 150}}, anira::ONNX);
153+
inference_config.set_tensor_output_shape({{buffer_size, 1}}, anira::ONNX);
155154
#endif
156155
#ifdef USE_TFLITE
157156
std::string model_data = inference_config.get_model_path(anira::TFLITE);
@@ -160,25 +159,22 @@ void adapt_config(anira::InferenceConfig& inference_config, int buffer_size, int
160159
model_data.replace(pos, 3, std::to_string(buffer_size));
161160
}
162161
inference_config.set_model_path(model_data, anira::TFLITE);
163-
inference_config.set_input_shape({{buffer_size, 150, 1}}, anira::TFLITE);
164-
inference_config.set_output_shape({{buffer_size, 1}}, anira::TFLITE);
162+
inference_config.set_tensor_input_shape({{buffer_size, 150, 1}}, anira::TFLITE);
163+
inference_config.set_tensor_output_shape({{buffer_size, 1}}, anira::TFLITE);
165164
#endif
166-
inference_config.m_input_sizes[0] = buffer_size * 150;
167-
inference_config.m_output_sizes[0] = buffer_size;
165+
inference_config.set_preprocess_input_size(std::vector<size_t>{static_cast<size_t>(buffer_size)});
168166
} else if (model == 2) {
169167
#ifdef USE_LIBTORCH
170-
inference_config.set_input_shape({{buffer_size, 1, 1}}, anira::LIBTORCH);
171-
inference_config.set_output_shape({{buffer_size, 1, 1}}, anira::LIBTORCH);
168+
inference_config.set_tensor_input_shape({{buffer_size, 1, 1}}, anira::LIBTORCH);
169+
inference_config.set_tensor_output_shape({{buffer_size, 1, 1}}, anira::LIBTORCH);
172170
#endif
173171
#ifdef USE_ONNXRUNTIME
174-
inference_config.set_input_shape({{buffer_size, 1, 1}}, anira::ONNX);
175-
inference_config.set_output_shape({{buffer_size, 1, 1}}, anira::ONNX);
172+
inference_config.set_tensor_input_shape({{buffer_size, 1, 1}}, anira::ONNX);
173+
inference_config.set_tensor_output_shape({{buffer_size, 1, 1}}, anira::ONNX);
176174
#endif
177175
#ifdef USE_TFLITE
178-
inference_config.set_input_shape({{1, buffer_size, 1}}, anira::TFLITE);
179-
inference_config.set_output_shape({{1, buffer_size, 1}}, anira::TFLITE);
176+
inference_config.set_tensor_input_shape({{1, buffer_size, 1}}, anira::TFLITE);
177+
inference_config.set_tensor_output_shape({{1, buffer_size, 1}}, anira::TFLITE);
180178
#endif
181-
inference_config.m_input_sizes[0] = buffer_size;
182-
inference_config.m_output_sizes[0] = buffer_size;
183179
}
184180
}

examples/benchmark/cnn-size-benchmark/defineCNNSizeBenchmark.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -119,17 +119,16 @@ void adapt_cnn_config(anira::InferenceConfig& inference_config, int buffer_size,
119119
int output_size = buffer_size;
120120

121121
#ifdef USE_LIBTORCH
122-
inference_config.set_input_shape({{1, 1, input_size}}, anira::LIBTORCH);
123-
inference_config.set_output_shape({{1, 1, output_size}}, anira::LIBTORCH);
122+
inference_config.set_tensor_input_shape({{1, 1, input_size}}, anira::LIBTORCH);
123+
inference_config.set_tensor_output_shape({{1, 1, output_size}}, anira::LIBTORCH);
124124
#endif
125125
#ifdef USE_ONNXRUNTIME
126-
inference_config.set_input_shape({{1, 1, input_size}}, anira::ONNX);
127-
inference_config.set_output_shape({{1, 1, output_size}}, anira::ONNX);
126+
inference_config.set_tensor_input_shape({{1, 1, input_size}}, anira::ONNX);
127+
inference_config.set_tensor_output_shape({{1, 1, output_size}}, anira::ONNX);
128128
#endif
129129
#ifdef USE_TFLITE
130-
inference_config.set_input_shape({{1, input_size, 1}}, anira::TFLITE);
131-
inference_config.set_output_shape({{1, output_size, 1}}, anira::TFLITE);
130+
inference_config.set_tensor_input_shape({{1, input_size, 1}}, anira::TFLITE);
131+
inference_config.set_tensor_output_shape({{1, output_size, 1}}, anira::TFLITE);
132132
#endif
133-
inference_config.m_input_sizes[0] = input_size;
134-
inference_config.m_output_sizes[0] = output_size;
133+
inference_config.set_preprocess_input_size(std::vector<size_t>{static_cast<size_t>(input_size - receptive_field)});
135134
}

examples/minimal-inference/libtorch/minimal-libtorch.cpp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ void minimal_inference(anira::InferenceConfig m_inference_config) {
3939
}
4040

4141
// Fill an Buffer with some data
42-
anira::BufferF input(1, m_inference_config.m_input_sizes[m_inference_config.m_index_audio_data[anira::Input]]);
43-
for(int i = 0; i < m_inference_config.m_input_sizes[m_inference_config.m_index_audio_data[anira::Input]]; ++i) {
42+
anira::BufferF input(1, m_inference_config.get_tensor_input_size()[m_inference_config.m_index_audio_data[anira::Input]]);
43+
for(int i = 0; i < m_inference_config.get_tensor_input_size()[m_inference_config.m_index_audio_data[anira::Input]]; ++i) {
4444
input.set_sample(0, i, i * 0.000001f);
4545
}
4646

@@ -49,17 +49,17 @@ void minimal_inference(anira::InferenceConfig m_inference_config) {
4949
std::vector<anira::MemoryBlock<float>> m_input_data;
5050

5151
// Create input tensors
52-
m_inputs.resize(m_inference_config.m_input_sizes.size());
53-
m_input_data.resize(m_inference_config.m_input_sizes.size());
54-
for (size_t i = 0; i < m_inference_config.m_input_sizes.size(); i++) {
55-
m_input_data[i].resize(m_inference_config.m_input_sizes[i]);
52+
m_inputs.resize(m_inference_config.get_tensor_input_shape().size());
53+
m_input_data.resize(m_inference_config.get_tensor_input_shape().size());
54+
for (size_t i = 0; i < m_inference_config.get_tensor_input_shape().size(); i++) {
55+
m_input_data[i].resize(m_inference_config.get_tensor_input_size()[i]);
5656
if (i != m_inference_config.m_index_audio_data[anira::Input]) {
5757
m_input_data[i].clear();
5858
} else {
5959
m_input_data[i].swap_data(input.get_memory_block());
6060
input.reset_channel_ptr();
6161
}
62-
m_inputs[i] = torch::from_blob(m_input_data[i].data(), m_inference_config.get_input_shape(anira::InferenceBackend::LIBTORCH)[i]);
62+
m_inputs[i] = torch::from_blob(m_input_data[i].data(), m_inference_config.get_tensor_input_shape(anira::InferenceBackend::LIBTORCH)[i]);
6363
}
6464

6565

@@ -76,34 +76,34 @@ void minimal_inference(anira::InferenceConfig m_inference_config) {
7676
// We need to copy the data because we cannot access the data pointer ref of the tensor directly
7777
if(m_outputs.isTuple()) {
7878
std::cout << "Output is a tensor list" << std::endl;
79-
for (size_t i = 0; i < m_inference_config.m_output_sizes.size(); i++) {
79+
for (size_t i = 0; i < m_inference_config.get_tensor_output_shape().size(); i++) {
8080
std::cout << "Output size " << i << ": " << m_outputs.toTuple()->elements()[i].toTensor().sizes() << '\n';
8181
}
82-
m_output_data.resize(m_inference_config.m_output_sizes.size());
83-
for (size_t i = 0; i < m_inference_config.m_output_sizes.size(); i++) {
84-
m_output_data[i].resize(m_inference_config.m_output_sizes[i]);
85-
for (size_t j = 0; j < m_inference_config.m_output_sizes[i]; j++) {
82+
m_output_data.resize(m_inference_config.get_tensor_output_shape().size());
83+
for (size_t i = 0; i < m_inference_config.get_tensor_output_shape().size(); i++) {
84+
m_output_data[i].resize(m_inference_config.get_tensor_output_size()[i]);
85+
for (size_t j = 0; j < m_inference_config.get_tensor_output_size()[i]; j++) {
8686
m_output_data[i][j] = m_outputs.toTuple()->elements()[i].toTensor().view({-1}).data_ptr<float>()[j];
8787
}
8888
}
8989
} else if(m_outputs.isTensorList()) {
9090
std::cout << "Output is a tensor list" << std::endl;
91-
for (size_t i = 0; i < m_inference_config.m_output_sizes.size(); i++) {
91+
for (size_t i = 0; i < m_inference_config.get_tensor_output_shape().size(); i++) {
9292
std::cout << "Output size " << i << ": " << m_outputs.toTensorList().get(i).sizes() << '\n';
9393
}
94-
m_output_data.resize(m_inference_config.m_output_sizes.size());
95-
for (size_t i = 0; i < m_inference_config.m_output_sizes.size(); i++) {
96-
m_output_data[i].resize(m_inference_config.m_output_sizes[i]);
97-
for (size_t j = 0; j < m_inference_config.m_output_sizes[i]; j++) {
94+
m_output_data.resize(m_inference_config.get_tensor_output_shape().size());
95+
for (size_t i = 0; i < m_inference_config.get_tensor_output_shape().size(); i++) {
96+
m_output_data[i].resize(m_inference_config.get_tensor_output_size()[i]);
97+
for (size_t j = 0; j < m_inference_config.get_tensor_output_size()[i]; j++) {
9898
m_output_data[i][j] = m_outputs.toTensorList().get(i).view({-1}).data_ptr<float>()[j];
9999
}
100100
}
101101
} else if (m_outputs.isTensor()) {
102102
std::cout << "Output is a tensor" << std::endl;
103103
std::cout << "Output size: " << m_outputs.toTensor().sizes() << '\n';
104104
m_output_data.resize(1);
105-
m_output_data[0].resize(m_inference_config.m_output_sizes[0]);
106-
for (size_t i = 0; i < m_inference_config.m_output_sizes[0]; i++) {
105+
m_output_data[0].resize(m_inference_config.get_tensor_output_size()[0]);
106+
for (size_t i = 0; i < m_inference_config.get_tensor_output_size()[0]; i++) {
107107
m_output_data[0][i] = m_outputs.toTensor().view({-1}).data_ptr<float>()[i];
108108
}
109109
}

examples/minimal-inference/onnxruntime/minimal-onnxruntime.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,35 +45,35 @@ void minimal_inference(anira::InferenceConfig m_inference_config) {
4545
#endif
4646

4747
// Fill an Buffer with some data
48-
anira::BufferF input(1, m_inference_config.m_input_sizes[m_inference_config.m_index_audio_data[anira::Input]]);
49-
for(int i = 0; i < m_inference_config.m_input_sizes[m_inference_config.m_index_audio_data[anira::Input]]; ++i) {
48+
anira::BufferF input(1, m_inference_config.get_tensor_input_size()[m_inference_config.m_index_audio_data[anira::Input]]);
49+
for(int i = 0; i < m_inference_config.get_tensor_input_size()[m_inference_config.m_index_audio_data[anira::Input]]; ++i) {
5050
input.set_sample(0, i, i * 0.000001f);
5151
}
5252

5353
std::vector<anira::MemoryBlock<float>> m_input_data;
5454
std::vector<Ort::Value> m_inputs;
5555
std::vector<Ort::Value> m_outputs;
5656

57-
m_input_data.resize(m_inference_config.m_input_sizes.size());
57+
m_input_data.resize(m_inference_config.get_tensor_input_shape().size());
5858
m_inputs.clear();
59-
for (size_t i = 0; i < m_inference_config.m_input_sizes.size(); i++) {
60-
m_input_data[i].resize(m_inference_config.m_input_sizes[i]);
59+
for (size_t i = 0; i < m_inference_config.get_tensor_input_shape().size(); i++) {
60+
m_input_data[i].resize(m_inference_config.get_tensor_input_size()[i]);
6161
if (i != m_inference_config.m_index_audio_data[anira::Input]) {
6262
m_input_data[i].clear();
6363
m_inputs.emplace_back(Ort::Value::CreateTensor<float>(
6464
m_memory_info,
6565
m_input_data[i].data(),
6666
m_input_data[i].size(),
67-
m_inference_config.get_input_shape(anira::InferenceBackend::ONNX)[i].data(),
68-
m_inference_config.get_input_shape(anira::InferenceBackend::ONNX)[i].size()
67+
m_inference_config.get_tensor_input_shape(anira::InferenceBackend::ONNX)[i].data(),
68+
m_inference_config.get_tensor_input_shape(anira::InferenceBackend::ONNX)[i].size()
6969
));
7070
} else {
7171
m_inputs.emplace_back(Ort::Value::CreateTensor<float>(
7272
m_memory_info,
7373
input.data(),
7474
input.get_num_samples(),
75-
m_inference_config.get_input_shape(anira::InferenceBackend::ONNX)[i].data(),
76-
m_inference_config.get_input_shape(anira::InferenceBackend::ONNX)[i].size()
75+
m_inference_config.get_tensor_input_shape(anira::InferenceBackend::ONNX)[i].data(),
76+
m_inference_config.get_tensor_input_shape(anira::InferenceBackend::ONNX)[i].size()
7777
));
7878
}
7979
}
@@ -115,9 +115,9 @@ void minimal_inference(anira::InferenceConfig m_inference_config) {
115115

116116
for (size_t i = 0; i < m_outputs.size(); i++) {
117117
const auto output_read_ptr = m_outputs[i].GetTensorMutableData<float>();
118-
m_output_data[i].resize(m_inference_config.m_output_sizes[i]);
118+
m_output_data[i].resize(m_inference_config.get_tensor_output_size()[i]);
119119

120-
for (size_t j = 0; j < m_inference_config.m_output_sizes[i]; j++) {
120+
for (size_t j = 0; j < m_inference_config.get_tensor_output_size()[i]; j++) {
121121
std::cout << "Output data [" << i << "][" << j << "]: " << output_read_ptr[j] << std::endl;
122122
m_output_data[i][j] = output_read_ptr[j];
123123
}

0 commit comments

Comments
 (0)