DNN

Age gender tal example

Small Octopus 2016. 4. 27. 22:02

caffe::Net<float> net_age;

caffe::Blob<float> mean_blob;

std::vector<caffe::Blob<float>*> input_vec;


net_age.CopyTrainedLayersFrom(caffemodel);

BlobProto blob_proto;

ReadProtoFromBinaryFileOrDie(mean, &blob_proto);

mean_blob.FromProto(blob_proto);


Caffe::set_mode(Caffe::CPU);


vector<Blob<float>*> input_vec;

Blob<float> blob(1, 3, mImg.cols, mImg.rows);


// copy image data (small_image) to blob

int i, j;

for (i = 0; i< mImg.cols; ++i) // height

{

for (j = 0; j< mImg.rows; ++j) // width

{

blob.mutable_cpu_data()[blob.offset(0, 0, i, j)] = (float)(unsigned char)mImg.at<Vec3b>(i, j).val[0] - mean_blob.mutable_cpu_data()[mean_blob.offset(0, 0, i, j)]; // blue

blob.mutable_cpu_data()[blob.offset(0, 1, i, j)] = (float)(unsigned char)mImg.at<Vec3b>(i, j).val[1] - mean_blob.mutable_cpu_data()[mean_blob.offset(0, 1, i, j)]; // green

blob.mutable_cpu_data()[blob.offset(0, 2, i, j)] = (float)(unsigned char)mImg.at<Vec3b>(i, j).val[2] - mean_blob.mutable_cpu_data()[mean_blob.offset(0, 2, i, j)]; // red

}

}



input_vec.push_back(&blob);


clock_t st = clock();

// Net forward

float loss = 0.0;

const vector<Blob<float>*> & results_age = net_age.Forward(input_vec, &loss);

float *output_age = results_age[0]->mutable_cpu_data(); // 2


float fMax = FLT_MIN;

int nResultAgeGroup = -1;

for (int i = 0; i<8; i++)

{

if (output_age[i] > fMax)

{

fMax = output_age[i];

nResultAgeGroup = i;

fProb = output_age[i];

}

}


return nResultAgeGroup;