ARM-software / ML-examples

Arm Machine Learning tutorials and examples

Home Page:https://developer.arm.com/technologies/machine-learning-on-arm

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Why the two ways of input pre-processing are different?

mhdong opened this issue · comments

This is code from folder CMSIS_5-5.6.0\CMSIS\NN\Examples\IAR\iar_nn_examples\NN-example-cifar10.
/* input pre-processing /
int mean_data[3] = INPUT_MEAN_SHIFT;
unsigned int scale_data[3] = INPUT_RIGHT_SHIFT;
for (int i=0;i<32
32*3; i+=3) {
img_buffer2[i] = (q7_t)__SSAT( ((((int)image_data[i] - mean_data[0])<<7) + (0x1<<(scale_data[0]-1)))
>> scale_data[0], 8);
img_buffer2[i+1] = (q7_t)__SSAT( ((((int)image_data[i+1] - mean_data[1])<<7) + (0x1<<(scale_data[1]-1)))
>> scale_data[1], 8);
img_buffer2[i+2] = (q7_t)__SSAT( ((((int)image_data[i+2] - mean_data[2])<<7) + (0x1<<(scale_data[2]-1)))
>> scale_data[2], 8);
}

This is code_gen.py generate code.
void mean_subtract(q7_t* image_data) {
for(int i=0; i<DATA_OUT_CHDATA_OUT_DIMDATA_OUT_DIM; i++) {
image_data[i] = (q7_t)__SSAT( ((int)(image_data[i] - mean[i]) >> DATA_RSHIFT), 8);
}
}

When I replace mean_file in the file cifar10_m4_train_test.prototxt with mean_value, then I get the following code.
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mean_file: "/home/ubuntu/caffe/examples/cifar10/mean.binaryproto"
}
data_param {
source: "/home/ubuntu/caffe/examples/cifar10/cifar10_train_lmdb"
batch_size: 100
backend: LMDB
}
}
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mean_value:101
mean_value:102
mean_value:103
}
data_param {
source: "/home/ubuntu/caffe/examples/cifar10/cifar10_train_lmdb"
batch_size: 100
backend: LMDB
}
}

void mean_subtract(q7_t* image_data) {
for(int i=0; i<DATA_OUT_CHDATA_OUT_DIMDATA_OUT_DIM; i+=3) {
image_data[i] = (q7_t)__SSAT( (((int)image_data[i] - mean[0]) >> DATA_RSHIFT), 8);
image_data[i+1] = (q7_t)__SSAT( (((int)image_data[i+1] - mean[1]) >> DATA_RSHIFT), 8);
image_data[i+2] = (q7_t)__SSAT( (((int)image_data[i+2] - mean[2]) >> DATA_RSHIFT), 8);
}
}