From 729eecac2e4279fcf0542f6df4b78b0d07ef4238 Mon Sep 17 00:00:00 2001 From: ChrisKong <609027949@qq.com> Date: Sat, 28 Dec 2019 17:48:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=E4=BB=A3=E7=A0=81=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 整理代码结构 Co-Authored-By: Chris Kong <609027949@qq.com> --- src/facenet.cpp | 437 ++++++++++++++++++------------------------------ src/facenet.h | 23 --- src/mtcnn.cpp | 62 +++---- src/network.cpp | 133 ++++++++++----- src/network.h | 20 ++- src/pBox.cpp | 2 +- src/pBox.h | 26 +-- src/pikaqiu.cpp | 2 +- 8 files changed, 301 insertions(+), 404 deletions(-) diff --git a/src/facenet.cpp b/src/facenet.cpp index 2bdd890..4aee9c4 100755 --- a/src/facenet.cpp +++ b/src/facenet.cpp @@ -4,102 +4,6 @@ #include "facenet.h" -facenet::facenet() { - -} - -facenet::~facenet() { - -} - -void facenet::printData(pBox *in) { - for (long i = 0; i < in->height * in->width * in->channel; ++i) { -// if (in->pdata[i] != 0) - printf("%f\n", in->pdata[i]); - } - cout << "printData" << endl; -} - -void facenet::run(Mat &image, vector &o, int count) { - cout << "=====This is No." + to_string(count) + " Picture=====" << endl; - pBox *output = new pBox; - pBox *input; - Stem(image, output); -// printData(output); -// return; - cout << "Stem Finally" << endl; - input = output; - output = new pBox; - for (int i = 0; i < 5; ++i) { -// model_128/block35_1_list.txt - string filepath = "../model_" + to_string(Num) + "/block35_" + to_string((i + 1)) + "_list.txt"; - Inception_resnet_A(input, output, filepath, 0.17); - input = output; - output = new pBox; - } - cout << "Inception_resnet_A Finally" << endl; - Reduction_A(input, output); - cout << "Reduction_A Finally" << endl; - input = output; -// freepBox(output); - output = new pBox; - for (int j = 0; j < 10; ++j) { -// model_128/block17_1_list.txt - string filepath = "../model_" + to_string(Num) + "/block17_" + to_string((j + 1)) + "_list.txt"; - Inception_resnet_B(input, output, filepath, 0.1); - input = output; - output = new pBox; - } - cout << "Inception_resnet_B Finally" << endl; - Reduction_B(input, output); - cout << "Reduciotn_B Finally" << endl; - input = output; -// freepBox(output); - output = new pBox; - for (int k = 0; k < 5; ++k) { -// model_128/block8_1_list.txt - string filepath = "../model_" + to_string(Num) + "/block8_" + to_string((k + 1)) + "_list.txt"; -// cout << filepath << endl; - Inception_resnet_C(input, output, filepath, 0.2); - input = output; -// freepBox(output); - output = new pBox; - } - cout << "Inception_resnet_C Finally" << endl; - Inception_resnet_C_None(input, output, "../model_" + to_string(Num) + "/Block8_list.txt"); - cout << "Inception_resnet_C_None Finally" << endl; - input = output; -// freepBox(output); - output = new pBox; - AveragePooling(input, output); - cout << "AveragePooling Finally" << endl; - input = output; -// freepBox(output); - output = new pBox; - Flatten(input, output); - cout << "Flatten Finally" << endl; - input = output; - output = new pBox; - fully_connect(input, output, "../model_" + to_string(Num) + "/Bottleneck_list.txt"); - cout << "Fully_Connect Finally" << endl; - mydataFmt sq = 0, sum = 0; - for (int i = 0; i < Num; ++i) { - sq = pow(output->pdata[i], 2); - sum += sq; - } - mydataFmt divisor = 0; - if (sum < 1e-10) { - divisor = sqrt(1e-10); - } else { - divisor = sqrt(sum); - } - for (int j = 0; j < Num; ++j) { -// o[j] = output->pdata[j] / divisor; - o.push_back(output->pdata[j] / divisor); - } -// memcpy(o, output->pdata, Num * sizeof(mydataFmt)); - freepBox(output); -} void facenet::Stem(Mat &image, pBox *output) { pBox *rgb = new pBox; @@ -142,18 +46,18 @@ void facenet::Stem(Mat &image, pBox *output) { struct BN *conv6_mean = new BN; struct BN *conv6_beta = new BN; - long conv1 = initConvAndFc(conv1_wb, 32, 3, 3, 2, 0); - initBN(conv1_var, conv1_mean, conv1_beta, 32); - long conv2 = initConvAndFc(conv2_wb, 32, 32, 3, 1, 0); - initBN(conv2_var, conv2_mean, conv2_beta, 32); - long conv3 = initConvAndFc(conv3_wb, 64, 32, 3, 1, 1); - initBN(conv3_var, conv3_mean, conv3_beta, 64); - long conv4 = initConvAndFc(conv4_wb, 80, 64, 1, 1, 0); - initBN(conv4_var, conv4_mean, conv4_beta, 80); - long conv5 = initConvAndFc(conv5_wb, 192, 80, 3, 1, 0); - initBN(conv5_var, conv5_mean, conv5_beta, 192); - long conv6 = initConvAndFc(conv6_wb, 256, 192, 3, 2, 0); - initBN(conv6_var, conv6_mean, conv6_beta, 256); + long conv1 = ConvAndFcInit(conv1_wb, 32, 3, 3, 2, 0); + BatchNormInit(conv1_var, conv1_mean, conv1_beta, 32); + long conv2 = ConvAndFcInit(conv2_wb, 32, 32, 3, 1, 0); + BatchNormInit(conv2_var, conv2_mean, conv2_beta, 32); + long conv3 = ConvAndFcInit(conv3_wb, 64, 32, 3, 1, 1); + BatchNormInit(conv3_var, conv3_mean, conv3_beta, 64); + long conv4 = ConvAndFcInit(conv4_wb, 80, 64, 1, 1, 0); + BatchNormInit(conv4_var, conv4_mean, conv4_beta, 80); + long conv5 = ConvAndFcInit(conv5_wb, 192, 80, 3, 1, 0); + BatchNormInit(conv5_var, conv5_mean, conv5_beta, 192); + long conv6 = ConvAndFcInit(conv6_wb, 256, 192, 3, 2, 0); + BatchNormInit(conv6_var, conv6_mean, conv6_beta, 256); long dataNumber[24] = {conv1, 32, 32, 32, conv2, 32, 32, 32, conv3, 64, 64, 64, conv4, 80, 80, 80, conv5, 192, 192, 192, conv6, 256, 256, 256}; @@ -301,24 +205,24 @@ void facenet::Inception_resnet_A(pBox *input, pBox *output, string filepath, flo struct BN *conv6_beta = new BN; - long conv1 = initConvAndFc(conv1_wb, 32, 256, 1, 1, 0); - initBN(conv1_var, conv1_mean, conv1_beta, 32); + long conv1 = ConvAndFcInit(conv1_wb, 32, 256, 1, 1, 0); + BatchNormInit(conv1_var, conv1_mean, conv1_beta, 32); - long conv2 = initConvAndFc(conv2_wb, 32, 256, 1, 1, 0); - initBN(conv2_var, conv2_mean, conv2_beta, 32); - long conv3 = initConvAndFc(conv3_wb, 32, 32, 3, 1, 1); - initBN(conv3_var, conv3_mean, conv3_beta, 32); + long conv2 = ConvAndFcInit(conv2_wb, 32, 256, 1, 1, 0); + BatchNormInit(conv2_var, conv2_mean, conv2_beta, 32); + long conv3 = ConvAndFcInit(conv3_wb, 32, 32, 3, 1, 1); + BatchNormInit(conv3_var, conv3_mean, conv3_beta, 32); - long conv4 = initConvAndFc(conv4_wb, 32, 256, 1, 1, 0); - initBN(conv4_var, conv4_mean, conv4_beta, 32); - long conv5 = initConvAndFc(conv5_wb, 32, 32, 3, 1, 1); - initBN(conv5_var, conv5_mean, conv5_beta, 32); - long conv6 = initConvAndFc(conv6_wb, 32, 32, 3, 1, 1); - initBN(conv6_var, conv6_mean, conv6_beta, 32); + long conv4 = ConvAndFcInit(conv4_wb, 32, 256, 1, 1, 0); + BatchNormInit(conv4_var, conv4_mean, conv4_beta, 32); + long conv5 = ConvAndFcInit(conv5_wb, 32, 32, 3, 1, 1); + BatchNormInit(conv5_var, conv5_mean, conv5_beta, 32); + long conv6 = ConvAndFcInit(conv6_wb, 32, 32, 3, 1, 1); + BatchNormInit(conv6_var, conv6_mean, conv6_beta, 32); - long conv7 = initConvAndFc(conv7_wb, 256, 96, 1, 1, 0); + long conv7 = ConvAndFcInit(conv7_wb, 256, 96, 1, 1, 0); - long conv8 = initConvAndFc(conv8_wb, 256, 0, 0, 0, 0); + long conv8 = ConvAndFcInit(conv8_wb, 256, 0, 0, 0, 0); long dataNumber[28] = {conv1, 32, 32, 32, conv2, 32, 32, 32, conv3, 32, 32, 32, conv4, 32, 32, 32, conv5, 32, 32, 32, conv6, 32, 32, 32, conv7, 256, conv8, 0}; @@ -450,15 +354,15 @@ void facenet::Reduction_A(pBox *input, pBox *output) { struct BN *conv4_beta = new BN; - long conv1 = initConvAndFc(conv1_wb, 384, 256, 3, 2, 0); - initBN(conv1_var, conv1_mean, conv1_beta, 384); + long conv1 = ConvAndFcInit(conv1_wb, 384, 256, 3, 2, 0); + BatchNormInit(conv1_var, conv1_mean, conv1_beta, 384); - long conv2 = initConvAndFc(conv2_wb, 192, 256, 1, 1, 0); - initBN(conv2_var, conv2_mean, conv2_beta, 192); - long conv3 = initConvAndFc(conv3_wb, 192, 192, 3, 1, 0); - initBN(conv3_var, conv3_mean, conv3_beta, 192); - long conv4 = initConvAndFc(conv4_wb, 256, 192, 3, 2, 0); - initBN(conv4_var, conv4_mean, conv4_beta, 256); + long conv2 = ConvAndFcInit(conv2_wb, 192, 256, 1, 1, 0); + BatchNormInit(conv2_var, conv2_mean, conv2_beta, 192); + long conv3 = ConvAndFcInit(conv3_wb, 192, 192, 3, 1, 0); + BatchNormInit(conv3_var, conv3_mean, conv3_beta, 192); + long conv4 = ConvAndFcInit(conv4_wb, 256, 192, 3, 2, 0); + BatchNormInit(conv4_var, conv4_mean, conv4_beta, 256); long dataNumber[16] = {conv1, 384, 384, 384, conv2, 192, 192, 192, conv3, 192, 192, 192, conv4, 256, 256, 256}; mydataFmt *pointTeam[16] = {conv1_wb->pdata, conv1_var->pdata, conv1_mean->pdata, conv1_beta->pdata, \ @@ -554,19 +458,19 @@ void facenet::Inception_resnet_B(pBox *input, pBox *output, string filepath, flo struct BN *conv4_beta = new BN; - long conv1 = initConvAndFc(conv1_wb, 128, 896, 1, 1, 0); - initBN(conv1_var, conv1_mean, conv1_beta, 128); + long conv1 = ConvAndFcInit(conv1_wb, 128, 896, 1, 1, 0); + BatchNormInit(conv1_var, conv1_mean, conv1_beta, 128); - long conv2 = initConvAndFc(conv2_wb, 128, 896, 1, 1, 0); - initBN(conv2_var, conv2_mean, conv2_beta, 128); - long conv3 = initConvAndFc(conv3_wb, 128, 128, 0, 1, -1, 7, 1, 3, 0);//[1,7] - initBN(conv3_var, conv3_mean, conv3_beta, 128); - long conv4 = initConvAndFc(conv4_wb, 128, 128, 0, 1, -1, 1, 7, 0, 3);//[7,1] - initBN(conv4_var, conv4_mean, conv4_beta, 128); + long conv2 = ConvAndFcInit(conv2_wb, 128, 896, 1, 1, 0); + BatchNormInit(conv2_var, conv2_mean, conv2_beta, 128); + long conv3 = ConvAndFcInit(conv3_wb, 128, 128, 0, 1, -1, 7, 1, 3, 0);//[1,7] + BatchNormInit(conv3_var, conv3_mean, conv3_beta, 128); + long conv4 = ConvAndFcInit(conv4_wb, 128, 128, 0, 1, -1, 1, 7, 0, 3);//[7,1] + BatchNormInit(conv4_var, conv4_mean, conv4_beta, 128); - long conv5 = initConvAndFc(conv5_wb, 896, 256, 1, 1, 0); + long conv5 = ConvAndFcInit(conv5_wb, 896, 256, 1, 1, 0); - long conv6 = initConvAndFc(conv6_wb, 896, 0, 0, 0, 0); + long conv6 = ConvAndFcInit(conv6_wb, 896, 0, 0, 0, 0); long dataNumber[20] = {conv1, 128, 128, 128, conv2, 128, 128, 128, conv3, 128, 128, 128, conv4, 128, 128, 128, conv5, 896, conv6, 0}; @@ -688,22 +592,22 @@ void facenet::Reduction_B(pBox *input, pBox *output) { struct BN *conv7_beta = new BN; - long conv1 = initConvAndFc(conv1_wb, 256, 896, 1, 1, 0); - initBN(conv1_var, conv1_mean, conv1_beta, 256); - long conv2 = initConvAndFc(conv2_wb, 384, 256, 3, 2, 0); - initBN(conv2_var, conv2_mean, conv2_beta, 384); + long conv1 = ConvAndFcInit(conv1_wb, 256, 896, 1, 1, 0); + BatchNormInit(conv1_var, conv1_mean, conv1_beta, 256); + long conv2 = ConvAndFcInit(conv2_wb, 384, 256, 3, 2, 0); + BatchNormInit(conv2_var, conv2_mean, conv2_beta, 384); - long conv3 = initConvAndFc(conv3_wb, 256, 896, 1, 1, 0); - initBN(conv3_var, conv3_mean, conv3_beta, 256); - long conv4 = initConvAndFc(conv4_wb, 256, 256, 3, 2, 0); - initBN(conv4_var, conv4_mean, conv4_beta, 256); + long conv3 = ConvAndFcInit(conv3_wb, 256, 896, 1, 1, 0); + BatchNormInit(conv3_var, conv3_mean, conv3_beta, 256); + long conv4 = ConvAndFcInit(conv4_wb, 256, 256, 3, 2, 0); + BatchNormInit(conv4_var, conv4_mean, conv4_beta, 256); - long conv5 = initConvAndFc(conv5_wb, 256, 896, 1, 1, 0); - initBN(conv5_var, conv5_mean, conv5_beta, 256); - long conv6 = initConvAndFc(conv6_wb, 256, 256, 3, 1, 1); - initBN(conv6_var, conv6_mean, conv6_beta, 256); - long conv7 = initConvAndFc(conv7_wb, 256, 256, 3, 2, 0); - initBN(conv7_var, conv7_mean, conv7_beta, 256); + long conv5 = ConvAndFcInit(conv5_wb, 256, 896, 1, 1, 0); + BatchNormInit(conv5_var, conv5_mean, conv5_beta, 256); + long conv6 = ConvAndFcInit(conv6_wb, 256, 256, 3, 1, 1); + BatchNormInit(conv6_var, conv6_mean, conv6_beta, 256); + long conv7 = ConvAndFcInit(conv7_wb, 256, 256, 3, 2, 0); + BatchNormInit(conv7_var, conv7_mean, conv7_beta, 256); long dataNumber[28] = {conv1, 256, 256, 256, conv2, 384, 384, 384, conv3, 256, 256, 256, conv4, 256, 256, 256, conv5, 256, 256, 256, conv6, 256, 256, 256, conv7, 256, 256, 256}; @@ -839,18 +743,18 @@ void facenet::Inception_resnet_C(pBox *input, pBox *output, string filepath, flo struct BN *conv4_beta = new BN; - long conv1 = initConvAndFc(conv1_wb, 192, 1792, 1, 1, 0); - initBN(conv1_var, conv1_mean, conv1_beta, 192); - long conv2 = initConvAndFc(conv2_wb, 192, 1792, 1, 1, 0); - initBN(conv2_var, conv2_mean, conv2_beta, 192); - long conv3 = initConvAndFc(conv3_wb, 192, 192, 0, 1, -1, 3, 1, 1, 0); - initBN(conv3_var, conv3_mean, conv3_beta, 192); - long conv4 = initConvAndFc(conv4_wb, 192, 192, 0, 1, -1, 1, 3, 0, 1); - initBN(conv4_var, conv4_mean, conv4_beta, 192); + long conv1 = ConvAndFcInit(conv1_wb, 192, 1792, 1, 1, 0); + BatchNormInit(conv1_var, conv1_mean, conv1_beta, 192); + long conv2 = ConvAndFcInit(conv2_wb, 192, 1792, 1, 1, 0); + BatchNormInit(conv2_var, conv2_mean, conv2_beta, 192); + long conv3 = ConvAndFcInit(conv3_wb, 192, 192, 0, 1, -1, 3, 1, 1, 0); + BatchNormInit(conv3_var, conv3_mean, conv3_beta, 192); + long conv4 = ConvAndFcInit(conv4_wb, 192, 192, 0, 1, -1, 1, 3, 0, 1); + BatchNormInit(conv4_var, conv4_mean, conv4_beta, 192); - long conv5 = initConvAndFc(conv5_wb, 1792, 384, 1, 1, 0); + long conv5 = ConvAndFcInit(conv5_wb, 1792, 384, 1, 1, 0); - long conv6 = initConvAndFc(conv6_wb, 1792, 0, 0, 0, 0); + long conv6 = ConvAndFcInit(conv6_wb, 1792, 0, 0, 0, 0); long dataNumber[20] = {conv1, 192, 192, 192, conv2, 192, 192, 192, conv3, 192, 192, 192, conv4, 192, 192, 192, conv5, 1792, conv6, 0}; @@ -959,15 +863,15 @@ void facenet::Inception_resnet_C_None(pBox *input, pBox *output, string filepath struct BN *conv4_mean = new BN; struct BN *conv4_beta = new BN; - long conv1 = initConvAndFc(conv1_wb, 192, 1792, 1, 1, 0); - initBN(conv1_var, conv1_mean, conv1_beta, 192); - long conv2 = initConvAndFc(conv2_wb, 192, 1792, 1, 1, 0); - initBN(conv2_var, conv2_mean, conv2_beta, 192); - long conv3 = initConvAndFc(conv3_wb, 192, 192, 0, 1, -1, 3, 1, 1, 0); - initBN(conv3_var, conv3_mean, conv3_beta, 192); - long conv4 = initConvAndFc(conv4_wb, 192, 192, 0, 1, -1, 1, 3, 0, 1); - initBN(conv4_var, conv4_mean, conv4_beta, 192); - long conv5 = initConvAndFc(conv5_wb, 1792, 384, 1, 1, 0); + long conv1 = ConvAndFcInit(conv1_wb, 192, 1792, 1, 1, 0); + BatchNormInit(conv1_var, conv1_mean, conv1_beta, 192); + long conv2 = ConvAndFcInit(conv2_wb, 192, 1792, 1, 1, 0); + BatchNormInit(conv2_var, conv2_mean, conv2_beta, 192); + long conv3 = ConvAndFcInit(conv3_wb, 192, 192, 0, 1, -1, 3, 1, 1, 0); + BatchNormInit(conv3_var, conv3_mean, conv3_beta, 192); + long conv4 = ConvAndFcInit(conv4_wb, 192, 192, 0, 1, -1, 1, 3, 0, 1); + BatchNormInit(conv4_var, conv4_mean, conv4_beta, 192); + long conv5 = ConvAndFcInit(conv5_wb, 1792, 384, 1, 1, 0); long dataNumber[18] = {conv1, 192, 192, 192, conv2, 192, 192, 192, conv3, 192, 192, 192, conv4, 192, 192, 192, conv5, 1792}; @@ -1067,8 +971,8 @@ void facenet::fully_connect(pBox *input, pBox *output, string filepath) { struct BN *conv1_var = new BN; struct BN *conv1_mean = new BN; struct BN *conv1_beta = new BN; - long conv1 = initConvAndFc(conv1_wb, Num, 1792, input->height, 1, 0); - initBN(conv1_var, conv1_mean, conv1_beta, Num); + long conv1 = ConvAndFcInit(conv1_wb, Num, 1792, input->height, 1, 0); + BatchNormInit(conv1_var, conv1_mean, conv1_beta, Num); long dataNumber[4] = {conv1, Num, Num, Num}; // cout << to_string(sum) << endl; @@ -1083,117 +987,104 @@ void facenet::fully_connect(pBox *input, pBox *output, string filepath) { fullconnect(conv1_wb, input, output); BatchNorm(output, conv1_var, conv1_mean, conv1_beta); -// relu(output, conv1_wb->pbias, prelu_gmma1->pdata); - freeWeight(conv1_wb); freeBN(conv1_var); freeBN(conv1_mean); freeBN(conv1_beta); } -void facenet::conv_mergeInit(pBox *output, pBox *c1, pBox *c2, pBox *c3, pBox *c4) { - output->channel = 0; - output->height = c1->height; - output->width = c1->width; - if (c1 != 0) { - output->channel = c1->channel; - if (c2 != 0) { - output->channel += c2->channel; - if (c3 != 0) { - output->channel += c3->channel; - if (c4 != 0) { - output->channel += c4->channel; - } - } - } - } else { cout << "conv_mergeInit" << endl; } - output->pdata = (mydataFmt *) malloc(output->width * output->height * output->channel * sizeof(mydataFmt)); - if (output->pdata == NULL)cout << "the conv_mergeInit is failed!!" << endl; - memset(output->pdata, 0, output->width * output->height * output->channel * sizeof(mydataFmt)); +facenet::facenet() { + } -void facenet::conv_merge(pBox *output, pBox *c1, pBox *c2, pBox *c3, pBox *c4) { -// cout << "output->channel:" << output->channel << endl; - if (c1 != 0) { - long count1 = c1->height * c1->width * c1->channel; - //output->pdata = c1->pdata; - for (long i = 0; i < count1; i++) { - output->pdata[i] = c1->pdata[i]; - } - if (c2 != 0) { - long count2 = c2->height * c2->width * c2->channel; - for (long i = 0; i < count2; i++) { - output->pdata[count1 + i] = c2->pdata[i]; - } - if (c3 != 0) { - long count3 = c3->height * c3->width * c3->channel; - for (long i = 0; i < count3; i++) { - output->pdata[count1 + count2 + i] = c3->pdata[i]; - } - if (c4 != 0) { - long count4 = c4->height * c4->width * c4->channel; - for (long i = 0; i < count4; i++) { - output->pdata[count1 + count2 + count3 + i] = c4->pdata[i]; - } - } - } - } - } else { cout << "conv_mergeInit" << endl; } -// cout << "output->pdata:" << *(output->pdata) << endl; +facenet::~facenet() { + } -void facenet::mulandaddInit(const pBox *inpbox, const pBox *temppbox, pBox *outpBox, float scale) { - outpBox->channel = temppbox->channel; - outpBox->width = temppbox->width; - outpBox->height = temppbox->height; - outpBox->pdata = (mydataFmt *) malloc(outpBox->width * outpBox->height * outpBox->channel * sizeof(mydataFmt)); - if (outpBox->pdata == NULL)cout << "the mulandaddInit is failed!!" << endl; - memset(outpBox->pdata, 0, outpBox->width * outpBox->height * outpBox->channel * sizeof(mydataFmt)); -} - -void facenet::mulandadd(const pBox *inpbox, const pBox *temppbox, pBox *outpBox, float scale) { - mydataFmt *ip = inpbox->pdata; - mydataFmt *tp = temppbox->pdata; - mydataFmt *op = outpBox->pdata; - long dis = inpbox->width * inpbox->height * inpbox->channel; - for (long i = 0; i < dis; i++) { - op[i] = ip[i] + tp[i] * scale; +void facenet::printData(pBox *in) { + for (long i = 0; i < in->height * in->width * in->channel; ++i) { +// if (in->pdata[i] != 0) + printf("%f\n", in->pdata[i]); } + cout << "printData" << endl; } -void facenet::prewhiten(Mat &image) { - double mean, stddev, sqr, stddev_adj; - int size; - - Mat temp_m, temp_sd; - meanStdDev(image, temp_m, temp_sd); - mean = temp_m.at(0, 0); - stddev = temp_sd.at(0, 0); - size = image.cols * image.rows * image.channels(); - sqr = sqrt(double(size)); - if (stddev > 1.0 / sqr) { - stddev_adj = stddev; +void facenet::run(Mat &image, vector &o, int count) { + cout << "=====This is No." + to_string(count) + " Picture=====" << endl; + pBox *output = new pBox; + pBox *input; + Stem(image, output); +// printData(output); +// return; + cout << "Stem Finally" << endl; + input = output; + output = new pBox; + for (int i = 0; i < 5; ++i) { +// model_128/block35_1_list.txt + string filepath = "../model_" + to_string(Num) + "/block35_" + to_string((i + 1)) + "_list.txt"; + Inception_resnet_A(input, output, filepath, 0.17); + input = output; + output = new pBox; + } + cout << "Inception_resnet_A Finally" << endl; + Reduction_A(input, output); + cout << "Reduction_A Finally" << endl; + input = output; +// freepBox(output); + output = new pBox; + for (int j = 0; j < 10; ++j) { +// model_128/block17_1_list.txt + string filepath = "../model_" + to_string(Num) + "/block17_" + to_string((j + 1)) + "_list.txt"; + Inception_resnet_B(input, output, filepath, 0.1); + input = output; + output = new pBox; + } + cout << "Inception_resnet_B Finally" << endl; + Reduction_B(input, output); + cout << "Reduciotn_B Finally" << endl; + input = output; +// freepBox(output); + output = new pBox; + for (int k = 0; k < 5; ++k) { +// model_128/block8_1_list.txt + string filepath = "../model_" + to_string(Num) + "/block8_" + to_string((k + 1)) + "_list.txt"; +// cout << filepath << endl; + Inception_resnet_C(input, output, filepath, 0.2); + input = output; +// freepBox(output); + output = new pBox; + } + cout << "Inception_resnet_C Finally" << endl; + Inception_resnet_C_None(input, output, "../model_" + to_string(Num) + "/Block8_list.txt"); + cout << "Inception_resnet_C_None Finally" << endl; + input = output; +// freepBox(output); + output = new pBox; + AveragePooling(input, output); + cout << "AveragePooling Finally" << endl; + input = output; +// output = new pBox; +// Flatten(input, output); +// cout << "Flatten Finally" << endl; +// input = output; + output = new pBox; + fully_connect(input, output, "../model_" + to_string(Num) + "/Bottleneck_list.txt"); + cout << "Fully_Connect Finally" << endl; + mydataFmt sq = 0, sum = 0; + for (int i = 0; i < Num; ++i) { + sq = pow(output->pdata[i], 2); + sum += sq; + } + mydataFmt divisor = 0; + if (sum < 1e-10) { + divisor = sqrt(1e-10); } else { - stddev_adj = 1.0 / sqr; + divisor = sqrt(sum); } - Mat temp_image(image.rows, image.cols, CV_64F); - for (int i = 0; i < image.rows; i++) { - for (int j = 0; j < image.cols; j++) { - image.at(i, j); - temp_image.at(i, j)[0] = (image.at(i, j)[0] - mean) / stddev_adj; - temp_image.at(i, j)[0] = (image.at(i, j)[0] - mean) / stddev_adj; - temp_image.at(i, j)[0] = (image.at(i, j)[0] - mean) / stddev_adj; - cout << 1 << endl; - } + for (int j = 0; j < Num; ++j) { +// o[j] = output->pdata[j] / divisor; + o.push_back(output->pdata[j] / divisor); } -// double max, min; -// minMaxLoc(temp_image, &min, &max); -// for (int i = 0; i < image.rows; i++) { -// for (int j = 0; j < image.cols; j++) { -// double pixelVal = temp_image.at(i, j); -// image.at(i, j) = temp_image.at(i, j); -// } -// } -// imshow("New Image", image); -// waitKey(0); -} +// memcpy(o, output->pdata, Num * sizeof(mydataFmt)); + freepBox(output); +} \ No newline at end of file diff --git a/src/facenet.h b/src/facenet.h index f47d35e..dc8267f 100755 --- a/src/facenet.h +++ b/src/facenet.h @@ -16,8 +16,6 @@ public: void run(Mat &image, vector &o, int count = 1); - void prewhiten(Mat &image); - private: void Stem(Mat &image, pBox *output); @@ -37,30 +35,9 @@ private: void fully_connect(pBox *input, pBox *output, string filepath = ""); - void conv_merge(pBox *output, pBox *c1 = 0, pBox *c2 = 0, pBox *c3 = 0, pBox *c4 = 0); - - void conv_mergeInit(pBox *output, pBox *c1 = 0, pBox *c2 = 0, pBox *c3 = 0, pBox *c4 = 0); - - void mulandaddInit(const pBox *inpbox, const pBox *temppbox, pBox *outpBox, float scale); - - void mulandadd(const pBox *inpbox, const pBox *temppbox, pBox *outpBox, float scale = 1); - void Flatten(pBox *input, pBox *output); void printData(pBox *output); - - - -// Mat reImage; -// float nms_threshold[3]; -// vector scales_; -// vector firstBbox_; -// vector firstOrderScore_; -// vector secondBbox_; -// vector secondBboxScore_; -// vector thirdBbox_; -// vector thirdBboxScore_; - }; #endif //MAIN_FACENET_H diff --git a/src/mtcnn.cpp b/src/mtcnn.cpp index b56f81e..ed1fce9 100755 --- a/src/mtcnn.cpp +++ b/src/mtcnn.cpp @@ -23,14 +23,14 @@ Pnet::Pnet() { this->conv4c1_wb = new Weight; this->conv4c2_wb = new Weight; // w sc lc ks s p - long conv1 = initConvAndFc(this->conv1_wb, 10, 3, 3, 1, 0); - initpRelu(this->prelu_gmma1, 10); - long conv2 = initConvAndFc(this->conv2_wb, 16, 10, 3, 1, 0); - initpRelu(this->prelu_gmma2, 16); - long conv3 = initConvAndFc(this->conv3_wb, 32, 16, 3, 1, 0); - initpRelu(this->prelu_gmma3, 32); - long conv4c1 = initConvAndFc(this->conv4c1_wb, 2, 32, 1, 1, 0); - long conv4c2 = initConvAndFc(this->conv4c2_wb, 4, 32, 1, 1, 0); + long conv1 = ConvAndFcInit(this->conv1_wb, 10, 3, 3, 1, 0); + pReluInit(this->prelu_gmma1, 10); + long conv2 = ConvAndFcInit(this->conv2_wb, 16, 10, 3, 1, 0); + pReluInit(this->prelu_gmma2, 16); + long conv3 = ConvAndFcInit(this->conv3_wb, 32, 16, 3, 1, 0); + pReluInit(this->prelu_gmma3, 32); + long conv4c1 = ConvAndFcInit(this->conv4c1_wb, 2, 32, 1, 1, 0); + long conv4c2 = ConvAndFcInit(this->conv4c2_wb, 4, 32, 1, 1, 0); long dataNumber[13] = {conv1, 10, 10, conv2, 16, 16, conv3, 32, 32, conv4c1, 2, conv4c2, 4}; mydataFmt *pointTeam[13] = {this->conv1_wb->pdata, this->conv1_wb->pbias, this->prelu_gmma1->pdata, \ this->conv2_wb->pdata, this->conv2_wb->pbias, this->prelu_gmma2->pdata, \ @@ -171,16 +171,16 @@ Rnet::Rnet() { this->score_wb = new Weight; this->location_wb = new Weight; // // w sc lc ks s p - long conv1 = initConvAndFc(this->conv1_wb, 28, 3, 3, 1, 0); - initpRelu(this->prelu_gmma1, 28); - long conv2 = initConvAndFc(this->conv2_wb, 48, 28, 3, 1, 0); - initpRelu(this->prelu_gmma2, 48); - long conv3 = initConvAndFc(this->conv3_wb, 64, 48, 2, 1, 0); - initpRelu(this->prelu_gmma3, 64); - long fc4 = initConvAndFc(this->fc4_wb, 128, 576, 1, 1, 0); - initpRelu(this->prelu_gmma4, 128); - long score = initConvAndFc(this->score_wb, 2, 128, 1, 1, 0); - long location = initConvAndFc(this->location_wb, 4, 128, 1, 1, 0); + long conv1 = ConvAndFcInit(this->conv1_wb, 28, 3, 3, 1, 0); + pReluInit(this->prelu_gmma1, 28); + long conv2 = ConvAndFcInit(this->conv2_wb, 48, 28, 3, 1, 0); + pReluInit(this->prelu_gmma2, 48); + long conv3 = ConvAndFcInit(this->conv3_wb, 64, 48, 2, 1, 0); + pReluInit(this->prelu_gmma3, 64); + long fc4 = ConvAndFcInit(this->fc4_wb, 128, 576, 1, 1, 0); + pReluInit(this->prelu_gmma4, 128); + long score = ConvAndFcInit(this->score_wb, 2, 128, 1, 1, 0); + long location = ConvAndFcInit(this->location_wb, 4, 128, 1, 1, 0); long dataNumber[16] = {conv1, 28, 28, conv2, 48, 48, conv3, 64, 64, fc4, 128, 128, score, 2, location, 4}; mydataFmt *pointTeam[16] = {this->conv1_wb->pdata, this->conv1_wb->pbias, this->prelu_gmma1->pdata, \ this->conv2_wb->pdata, this->conv2_wb->pbias, this->prelu_gmma2->pdata, \ @@ -303,19 +303,19 @@ Onet::Onet() { this->keyPoint_wb = new Weight; // // w sc lc ks s p - long conv1 = initConvAndFc(this->conv1_wb, 32, 3, 3, 1, 0); - initpRelu(this->prelu_gmma1, 32); - long conv2 = initConvAndFc(this->conv2_wb, 64, 32, 3, 1, 0); - initpRelu(this->prelu_gmma2, 64); - long conv3 = initConvAndFc(this->conv3_wb, 64, 64, 3, 1, 0); - initpRelu(this->prelu_gmma3, 64); - long conv4 = initConvAndFc(this->conv4_wb, 128, 64, 2, 1, 0); - initpRelu(this->prelu_gmma4, 128); - long fc5 = initConvAndFc(this->fc5_wb, 256, 1152, 1, 1, 0); - initpRelu(this->prelu_gmma5, 256); - long score = initConvAndFc(this->score_wb, 2, 256, 1, 1, 0); - long location = initConvAndFc(this->location_wb, 4, 256, 1, 1, 0); - long keyPoint = initConvAndFc(this->keyPoint_wb, 10, 256, 1, 1, 0); + long conv1 = ConvAndFcInit(this->conv1_wb, 32, 3, 3, 1, 0); + pReluInit(this->prelu_gmma1, 32); + long conv2 = ConvAndFcInit(this->conv2_wb, 64, 32, 3, 1, 0); + pReluInit(this->prelu_gmma2, 64); + long conv3 = ConvAndFcInit(this->conv3_wb, 64, 64, 3, 1, 0); + pReluInit(this->prelu_gmma3, 64); + long conv4 = ConvAndFcInit(this->conv4_wb, 128, 64, 2, 1, 0); + pReluInit(this->prelu_gmma4, 128); + long fc5 = ConvAndFcInit(this->fc5_wb, 256, 1152, 1, 1, 0); + pReluInit(this->prelu_gmma5, 256); + long score = ConvAndFcInit(this->score_wb, 2, 256, 1, 1, 0); + long location = ConvAndFcInit(this->location_wb, 4, 256, 1, 1, 0); + long keyPoint = ConvAndFcInit(this->keyPoint_wb, 10, 256, 1, 1, 0); long dataNumber[21] = {conv1, 32, 32, conv2, 64, 64, conv3, 64, 64, conv4, 128, 128, fc5, 256, 256, score, 2, location, 4, keyPoint, 10}; mydataFmt *pointTeam[21] = {this->conv1_wb->pdata, this->conv1_wb->pbias, this->prelu_gmma1->pdata, \ diff --git a/src/network.cpp b/src/network.cpp index 0d3e116..5abdce4 100755 --- a/src/network.cpp +++ b/src/network.cpp @@ -50,7 +50,7 @@ void image2Matrix(const Mat &image, const struct pBox *pbox, int num) { mydataFmt mymean, mystddev; // prewhiten if (num != 0) { - meanAndDev(image, mymean, mystddev); + MeanAndDev(image, mymean, mystddev); cout << mymean << "----" << mystddev << endl; size = image.cols * image.rows * image.channels(); sqr = sqrt(double(size)); @@ -78,14 +78,11 @@ void image2Matrix(const Mat &image, const struct pBox *pbox, int num) { } } -void meanAndDev(const Mat &image, mydataFmt &p, mydataFmt &q) { +void MeanAndDev(const Mat &image, mydataFmt &p, mydataFmt &q) { mydataFmt meansum = 0, stdsum = 0; for (int rowI = 0; rowI < image.rows; rowI++) { for (int colK = 0; colK < image.cols; colK++) { meansum += image.at(rowI, colK)[0] + image.at(rowI, colK)[1] + image.at(rowI, colK)[2]; -// cout << int(image.at(rowI, colK)[0]) << endl; -// cout << int(image.at(rowI, colK)[1]) << endl; -// cout << int(image.at(rowI, colK)[2]) << endl; } } p = meansum / (image.cols * image.rows * image.channels()); @@ -172,12 +169,6 @@ void convolutionInit(const Weight *weight, pBox *pbox, pBox *outpBox) { } void convolution(const Weight *weight, const pBox *pbox, pBox *outpBox) { -// if (weight->pad != 0) { -// pBox *padpbox = new pBox; -// featurePadInit(outpBox, padpbox, weight->pad, weight->padw, weight->padh); -// featurePad(outpBox, padpbox, weight->pad, weight->padw, weight->padh); -// *outpBox = *padpbox; -// } int ckh, ckw, ckd, stride, cknum, ckpad, imginputh, imginputw, imginputd, Nh, Nw; mydataFmt *ck, *imginput; // float *output = outpBox->pdata; @@ -214,15 +205,6 @@ void convolution(const Weight *weight, const pBox *pbox, pBox *outpBox) { + (k * stride + i1) + m * imginputh * imginputw] * ck[i * ckh * ckw * ckd + m * ckh * ckw + n * ckw + i1]; -// cout << "(" << imginput[(j * stride + n) * imginputw -// + (k * stride + i1) -// + m * imginputh * imginputw] << ")x(" -// << ck[i * ckh * ckw * ckd + m * ckh * ckw + n * ckw + i1] << ")=" -// << imginput[(j * stride + n) * imginputw -// + (k * stride + i1) -// + m * imginputh * imginputw] -// * ck[i * ckh * ckw * ckd + m * ckh * ckw + n * ckw + i1] << endl; -// cout << temp << endl; } } } @@ -231,7 +213,6 @@ void convolution(const Weight *weight, const pBox *pbox, pBox *outpBox) { } } } -// cout << "output->pdata:" << (outpBox->pdata[10]) << endl; } void maxPoolingInit(const pBox *pbox, pBox *Matrix, int kernelSize, int stride, int flag) { @@ -340,6 +321,13 @@ void avePooling(const pBox *pbox, pBox *Matrix, int kernelSize, int stride) { } } + +/** + * 激活函数 有系数 + * @param pbox + * @param pbias + * @param prelu_gmma + */ void prelu(struct pBox *pbox, mydataFmt *pbias, mydataFmt *prelu_gmma) { if (pbox->pdata == NULL) { cout << "the pRelu feature is NULL!!" << endl; @@ -365,6 +353,11 @@ void prelu(struct pBox *pbox, mydataFmt *pbias, mydataFmt *prelu_gmma) { } } +/** + * 激活函数 没有系数 + * @param pbox + * @param pbias + */ void relu(struct pBox *pbox, mydataFmt *pbias) { if (pbox->pdata == NULL) { cout << "the Relu feature is NULL!!" << endl; @@ -411,24 +404,17 @@ void fullconnect(const Weight *weight, const pBox *pbox, pBox *outpBox) { // row no trans A's row A'col //cblas_sgemv(CblasRowMajor, CblasNoTrans, weight->selfChannel, weight->lastChannel, 1, weight->pdata, weight->lastChannel, pbox->pdata, 1, 0, outpBox->pdata, 1); vectorXmatrix(pbox->pdata, weight->pdata, - pbox->width * pbox->height * pbox->channel, weight->lastChannel, weight->selfChannel, outpBox->pdata); } -void vectorXmatrix(mydataFmt *matrix, mydataFmt *v, int size, int v_w, int v_h, mydataFmt *p) { +void vectorXmatrix(mydataFmt *matrix, mydataFmt *v, int v_w, int v_h, mydataFmt *p) { for (int i = 0; i < v_h; i++) { p[i] = 0; for (int j = 0; j < v_w; j++) { p[i] += matrix[j] * v[i * v_w + j]; -// cout << p[i] << endl; } -// cout << p[i] << endl; -// p[i] = -0.0735729; -// cout << "...." << endl; -// break; } -// cout << "...." << endl; } void readData(string filename, long dataNumber[], mydataFmt *pTeam[], int length) { @@ -481,19 +467,15 @@ void readData(string filename, long dataNumber[], mydataFmt *pTeam[], int length } // w sc lc ks s p kw kh -long initConvAndFc(struct Weight *weight, int schannel, int lchannel, int kersize, +long ConvAndFcInit(struct Weight *weight, int schannel, int lchannel, int kersize, int stride, int pad, int w, int h, int padw, int padh) { weight->selfChannel = schannel; weight->lastChannel = lchannel; weight->kernelSize = kersize; -// if (kersize == 0) { weight->h = h; weight->w = w; -// } -// if (pad == -1) { weight->padh = padh; weight->padw = padw; -// } weight->stride = stride; weight->pad = pad; weight->pbias = (mydataFmt *) malloc(schannel * sizeof(mydataFmt)); @@ -511,7 +493,7 @@ long initConvAndFc(struct Weight *weight, int schannel, int lchannel, int kersiz return byteLenght; } -void initpRelu(struct pRelu *prelu, int width) { +void pReluInit(struct pRelu *prelu, int width) { prelu->width = width; prelu->pdata = (mydataFmt *) malloc(width * sizeof(mydataFmt)); if (prelu->pdata == NULL)cout << "prelu apply for memory failed!!!!"; @@ -652,7 +634,76 @@ void refineAndSquareBbox(vector &vecBbox, const int &height, const } } -void initBN(struct BN *var, struct BN *mean, struct BN *beta, int width) { +void conv_mergeInit(pBox *output, pBox *c1, pBox *c2, pBox *c3, pBox *c4) { + output->channel = 0; + output->height = c1->height; + output->width = c1->width; + if (c1 != 0) { + output->channel = c1->channel; + if (c2 != 0) { + output->channel += c2->channel; + if (c3 != 0) { + output->channel += c3->channel; + if (c4 != 0) { + output->channel += c4->channel; + } + } + } + } + output->pdata = (mydataFmt *) malloc(output->width * output->height * output->channel * sizeof(mydataFmt)); + if (output->pdata == NULL)cout << "the conv_mergeInit is failed!!" << endl; + memset(output->pdata, 0, output->width * output->height * output->channel * sizeof(mydataFmt)); +} + +void conv_merge(pBox *output, pBox *c1, pBox *c2, pBox *c3, pBox *c4) { +// cout << "output->channel:" << output->channel << endl; + if (c1 != 0) { + long count1 = c1->height * c1->width * c1->channel; + //output->pdata = c1->pdata; + for (long i = 0; i < count1; i++) { + output->pdata[i] = c1->pdata[i]; + } + if (c2 != 0) { + long count2 = c2->height * c2->width * c2->channel; + for (long i = 0; i < count2; i++) { + output->pdata[count1 + i] = c2->pdata[i]; + } + if (c3 != 0) { + long count3 = c3->height * c3->width * c3->channel; + for (long i = 0; i < count3; i++) { + output->pdata[count1 + count2 + i] = c3->pdata[i]; + } + if (c4 != 0) { + long count4 = c4->height * c4->width * c4->channel; + for (long i = 0; i < count4; i++) { + output->pdata[count1 + count2 + count3 + i] = c4->pdata[i]; + } + } + } + } + } else { cout << "conv_mergeInit" << endl; } +} + +void mulandaddInit(const pBox *inpbox, const pBox *temppbox, pBox *outpBox, float scale) { + outpBox->channel = temppbox->channel; + outpBox->width = temppbox->width; + outpBox->height = temppbox->height; + outpBox->pdata = (mydataFmt *) malloc(outpBox->width * outpBox->height * outpBox->channel * sizeof(mydataFmt)); + if (outpBox->pdata == NULL)cout << "the mulandaddInit is failed!!" << endl; + memset(outpBox->pdata, 0, outpBox->width * outpBox->height * outpBox->channel * sizeof(mydataFmt)); +} + +void mulandadd(const pBox *inpbox, const pBox *temppbox, pBox *outpBox, float scale) { + mydataFmt *ip = inpbox->pdata; + mydataFmt *tp = temppbox->pdata; + mydataFmt *op = outpBox->pdata; + long dis = inpbox->width * inpbox->height * inpbox->channel; + for (long i = 0; i < dis; i++) { + op[i] = ip[i] + tp[i] * scale; + } +} + +void BatchNormInit(struct BN *var, struct BN *mean, struct BN *beta, int width) { var->width = width; var->pdata = (mydataFmt *) malloc(width * sizeof(mydataFmt)); if (var->pdata == NULL)cout << "prelu apply for memory failed!!!!"; @@ -689,18 +740,8 @@ void BatchNorm(struct pBox *pbox, struct BN *var, struct BN *mean, struct BN *be for (int channel = 0; channel < pbox->channel; channel++) { temp = gamma / sqrt(((vp[channel]) + epsilon)); for (int col = 0; col < dis; col++) { -// *pp = *pp + *vp; -// cout << ((*pp) / (sqrt(*vp + bias))) << endl; -// cout << ((*pp) * (*mp) / (sqrt(*vp + bias))) << endl; -// if (*pp == 0) { -// cout << *vp << "===" << *mp << "===" << *bp << endl; -// } *pp = temp * (*pp) + ((bp[channel]) - temp * (mp[channel])); -// cout << *pp << endl; pp++; } -// vp++; -// mp++; -// bp++; } } \ No newline at end of file diff --git a/src/network.h b/src/network.h index d08bb1f..eb1aacd 100755 --- a/src/network.h +++ b/src/network.h @@ -11,7 +11,6 @@ #include #include #include "pBox.h" -//#include using namespace cv; @@ -33,10 +32,10 @@ void fullconnect(const Weight *weight, const pBox *pbox, pBox *outpBox); void readData(string filename, long dataNumber[], mydataFmt *pTeam[], int length = 0); -long initConvAndFc(struct Weight *weight, int schannel, int lchannel, int kersize, int stride, int pad, +long ConvAndFcInit(struct Weight *weight, int schannel, int lchannel, int kersize, int stride, int pad, int w = 0, int h = 0, int padw = 0, int padh = 0); -void initpRelu(struct pRelu *prelu, int width); +void pReluInit(struct pRelu *prelu, int width); void softmax(const struct pBox *pbox); @@ -59,14 +58,21 @@ void nms(vector &boundingBox_, vector &bboxScore void refineAndSquareBbox(vector &vecBbox, const int &height, const int &width); -void vectorXmatrix(mydataFmt *matrix, mydataFmt *v, int size, int v_w, int v_h, mydataFmt *p); +void vectorXmatrix(mydataFmt *matrix, mydataFmt *v, int v_w, int v_h, mydataFmt *p); void convolution(const Weight *weight, const pBox *pbox, pBox *outpBox); -void meanAndDev(const Mat &image, mydataFmt &p, mydataFmt &q); +void MeanAndDev(const Mat &image, mydataFmt &p, mydataFmt &q); -void initBN(struct BN *var, struct BN *mean, struct BN *beta, int width); +void conv_merge(pBox *output, pBox *c1 = 0, pBox *c2 = 0, pBox *c3 = 0, pBox *c4 = 0); + +void conv_mergeInit(pBox *output, pBox *c1 = 0, pBox *c2 = 0, pBox *c3 = 0, pBox *c4 = 0); + +void mulandaddInit(const pBox *inpbox, const pBox *temppbox, pBox *outpBox, float scale); + +void mulandadd(const pBox *inpbox, const pBox *temppbox, pBox *outpBox, float scale = 1); + +void BatchNormInit(struct BN *var, struct BN *mean, struct BN *beta, int width); void BatchNorm(struct pBox *pbox, struct BN *var, struct BN *mean, struct BN *beta); - #endif \ No newline at end of file diff --git a/src/pBox.cpp b/src/pBox.cpp index d7960bd..0969cf4 100755 --- a/src/pBox.cpp +++ b/src/pBox.cpp @@ -30,4 +30,4 @@ void freeBN(struct BN *bn) { free(bn->pdata); bn->pdata = NULL; delete bn; -} \ No newline at end of file +} diff --git a/src/pBox.h b/src/pBox.h index 903d4fb..8703500 100755 --- a/src/pBox.h +++ b/src/pBox.h @@ -6,12 +6,15 @@ #include #include +/** + * 声明结构体 + */ + using namespace std; //#define mydataFmt double #define Num 128 typedef float mydataFmt; - struct pBox : public cv::String { mydataFmt *pdata; int width; @@ -19,7 +22,6 @@ struct pBox : public cv::String { int channel; }; - struct pRelu { mydataFmt *pdata; int width; @@ -30,7 +32,6 @@ struct BN { int width; }; - struct Weight { mydataFmt *pdata; mydataFmt *pbias; @@ -45,25 +46,6 @@ struct Weight { int padh; }; -class pBox1 { -public: - vector>> pdata; -}; - -class pRelu1 { -public: - vector pdata; -}; - -class Weight1 { -public: - vector>>> pdata; - vector pbias; - int stride; - int padw; - int padh; -}; - struct Bbox { float score; int x1; diff --git a/src/pikaqiu.cpp b/src/pikaqiu.cpp index 9515ed9..81bbe08 100755 --- a/src/pikaqiu.cpp +++ b/src/pikaqiu.cpp @@ -183,7 +183,7 @@ void run() { } void test() { - Mat image0 = imread("../kkk.jpg"); + Mat image0 = imread("../hejiong1.jpeg"); Mat image1 = imread("../hejiong0.jpeg"); clock_t start;