saurabh
October 26, 2024, 11:47am
9
I managed to update the logic to handle 16 bits output. Used get_xtensor_uint16
to get 16 bit output. and also at few other places I replaced uint8_t
to uint16_t
.
Code Lines are shown below where we need to update…
int num_proposals = output_b.shape(0) * output_b.shape(1);
auto output_boxes = xt::view(output_b, xt::all(), xt::all(), xt::all());
xt::xarray<uint8_t> quantized_boxes = xt::reshape_view(output_boxes, {num_proposals, 4, regression_length + 1});
auto shape = {quantized_boxes.shape(1), quantized_boxes.shape(2)};
// Keypoints setup
float32_t qp_scale_kpts = raw_keypoints[i]->vstream_info().quant_info.qp_scale;
float32_t qp_zp_kpts = raw_keypoints[i]->vstream_info().quant_info.qp_zp;
auto output_keypoints = common::get_xtensor(raw_keypoints[i]);
int num_proposals_keypoints = output_keypoints.shape(0) * output_keypoints.shape(1);
auto output_keypoints_quantized = xt::view(output_keypoints, xt::all(), xt::all(), xt::all());
xt::xarray<uint8_t> quantized_keypoints = xt::reshape_view(output_keypoints_quantized, {num_proposals_keypoints, 17, 3});
auto keypoints_shape = {quantized_keypoints.shape(1), quantized_keypoints.shape(2)};
// Bbox decoding
for (uint j = 0; j < uint(num_proposals); j++) {
confidence = xt::row(scores, instance_index)(0);
instance_index++;
auto shape = {quantized_boxes.shape(1), quantized_boxes.shape(2)};
// Keypoints setup
float32_t qp_scale_kpts = raw_keypoints[i]->vstream_info().quant_info.qp_scale;
float32_t qp_zp_kpts = raw_keypoints[i]->vstream_info().quant_info.qp_zp;
auto output_keypoints = common::get_xtensor(raw_keypoints[i]);
int num_proposals_keypoints = output_keypoints.shape(0) * output_keypoints.shape(1);
auto output_keypoints_quantized = xt::view(output_keypoints, xt::all(), xt::all(), xt::all());
xt::xarray<uint8_t> quantized_keypoints = xt::reshape_view(output_keypoints_quantized, {num_proposals_keypoints, 17, 3});
auto keypoints_shape = {quantized_keypoints.shape(1), quantized_keypoints.shape(2)};
// Bbox decoding
for (uint j = 0; j < uint(num_proposals); j++) {
confidence = xt::row(scores, instance_index)(0);
instance_index++;
if (confidence < SCORE_THRESHOLD)
continue;
float dequantize_value(uint8_t val, float32_t qp_scale, float32_t qp_zp){
return (float(val) - qp_zp) * qp_scale;
}
void dequantize_box_values(xt::xarray<float>& dequantized_outputs, int index,
xt::xarray<uint8_t>& quantized_outputs,
size_t dim1, size_t dim2, float32_t qp_scale, float32_t qp_zp){
for (size_t i = 0; i < dim1; i++){
for (size_t j = 0; j < dim2; j++){
dequantized_outputs(i, j) = dequantize_value(quantized_outputs(index, i, j), qp_scale, qp_zp);
}
}
}