Age gender tal example
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;