Untitled
unknown
plain_text
a year ago
2.2 kB
4
Indexable
#include <stdio.h> #include <stdlib.h> #include <math.h> #include "vsi_nn_pub.h" static vsi_status vnn_PostProcessNeuralNetwork ( vsi_nn_graph_t *graph ) { vsi_status status = vnn_PostProcessOnnx(graph); if (status != VSI_SUCCESS) { return status; } // Số lượng đầu ra const uint32_t num_detections = 3549; const uint32_t num_classes = 2; const uint32_t num_features = 34; // Tổng số tính năng const float confidence_threshold = 0.35; // Lấy dữ liệu đầu ra từ tensor vsi_nn_tensor_t *tensor = vsi_nn_GetTensor(graph, graph->output.tensors[0]); int16_t *tensor_data = NULL; vsi_nn_GetTensorHandle(tensor, (void**)&tensor_data); if (!tensor_data) { printf("Error getting tensor data\n"); return VSI_FAILURE; } // In ra kích thước của tensor printf("Tensor dimensions: "); for (uint32_t i = 0; i < tensor->attr.dim_num; i++) { printf("%d ", tensor->attr.size[i]); } printf("\n"); // Tính toán kích thước của tensor uint32_t tensor_size = 1; for (uint32_t j = 0; j < tensor->attr.dim_num; j++) { tensor_size *= tensor->attr.size[j]; } // Dequantize dữ liệu tensor sang float float *output_tensor_buf = calloc(tensor_size, sizeof(float)); if (!output_tensor_buf) { printf("Error allocating memory for output tensor buffer\n"); return VSI_FAILURE; } for (uint32_t j = 0; j < tensor_size; j++) { vsi_nn_DtypeToFloat32(&tensor_data[j], &output_tensor_buf[j], &tensor->attr.dtype); } // Duyệt qua các đầu ra for (uint32_t i = 0; i < num_detections; i++) { // Lấy giá trị confidence cuối cùng của mỗi phần tử float object_confidence = 1 / (1 + exp(-output_tensor_buf[i * num_features + num_features - 1])); // Áp dụng sigmoid if (object_confidence > confidence_threshold) { printf("ok\n"); break; // Chỉ cần in "ok" một lần nếu phát hiện bất kỳ đối tượng nào } } // Giải phóng bộ nhớ free(output_tensor_buf); return VSI_SUCCESS; }
Editor is loading...
Leave a Comment