435
src/facenet.cpp
435
src/facenet.cpp
@@ -4,102 +4,6 @@
|
|||||||
|
|
||||||
#include "facenet.h"
|
#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<mydataFmt> &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) {
|
void facenet::Stem(Mat &image, pBox *output) {
|
||||||
pBox *rgb = new pBox;
|
pBox *rgb = new pBox;
|
||||||
@@ -142,18 +46,18 @@ void facenet::Stem(Mat &image, pBox *output) {
|
|||||||
struct BN *conv6_mean = new BN;
|
struct BN *conv6_mean = new BN;
|
||||||
struct BN *conv6_beta = new BN;
|
struct BN *conv6_beta = new BN;
|
||||||
|
|
||||||
long conv1 = initConvAndFc(conv1_wb, 32, 3, 3, 2, 0);
|
long conv1 = ConvAndFcInit(conv1_wb, 32, 3, 3, 2, 0);
|
||||||
initBN(conv1_var, conv1_mean, conv1_beta, 32);
|
BatchNormInit(conv1_var, conv1_mean, conv1_beta, 32);
|
||||||
long conv2 = initConvAndFc(conv2_wb, 32, 32, 3, 1, 0);
|
long conv2 = ConvAndFcInit(conv2_wb, 32, 32, 3, 1, 0);
|
||||||
initBN(conv2_var, conv2_mean, conv2_beta, 32);
|
BatchNormInit(conv2_var, conv2_mean, conv2_beta, 32);
|
||||||
long conv3 = initConvAndFc(conv3_wb, 64, 32, 3, 1, 1);
|
long conv3 = ConvAndFcInit(conv3_wb, 64, 32, 3, 1, 1);
|
||||||
initBN(conv3_var, conv3_mean, conv3_beta, 64);
|
BatchNormInit(conv3_var, conv3_mean, conv3_beta, 64);
|
||||||
long conv4 = initConvAndFc(conv4_wb, 80, 64, 1, 1, 0);
|
long conv4 = ConvAndFcInit(conv4_wb, 80, 64, 1, 1, 0);
|
||||||
initBN(conv4_var, conv4_mean, conv4_beta, 80);
|
BatchNormInit(conv4_var, conv4_mean, conv4_beta, 80);
|
||||||
long conv5 = initConvAndFc(conv5_wb, 192, 80, 3, 1, 0);
|
long conv5 = ConvAndFcInit(conv5_wb, 192, 80, 3, 1, 0);
|
||||||
initBN(conv5_var, conv5_mean, conv5_beta, 192);
|
BatchNormInit(conv5_var, conv5_mean, conv5_beta, 192);
|
||||||
long conv6 = initConvAndFc(conv6_wb, 256, 192, 3, 2, 0);
|
long conv6 = ConvAndFcInit(conv6_wb, 256, 192, 3, 2, 0);
|
||||||
initBN(conv6_var, conv6_mean, conv6_beta, 256);
|
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,
|
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};
|
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;
|
struct BN *conv6_beta = new BN;
|
||||||
|
|
||||||
|
|
||||||
long conv1 = initConvAndFc(conv1_wb, 32, 256, 1, 1, 0);
|
long conv1 = ConvAndFcInit(conv1_wb, 32, 256, 1, 1, 0);
|
||||||
initBN(conv1_var, conv1_mean, conv1_beta, 32);
|
BatchNormInit(conv1_var, conv1_mean, conv1_beta, 32);
|
||||||
|
|
||||||
long conv2 = initConvAndFc(conv2_wb, 32, 256, 1, 1, 0);
|
long conv2 = ConvAndFcInit(conv2_wb, 32, 256, 1, 1, 0);
|
||||||
initBN(conv2_var, conv2_mean, conv2_beta, 32);
|
BatchNormInit(conv2_var, conv2_mean, conv2_beta, 32);
|
||||||
long conv3 = initConvAndFc(conv3_wb, 32, 32, 3, 1, 1);
|
long conv3 = ConvAndFcInit(conv3_wb, 32, 32, 3, 1, 1);
|
||||||
initBN(conv3_var, conv3_mean, conv3_beta, 32);
|
BatchNormInit(conv3_var, conv3_mean, conv3_beta, 32);
|
||||||
|
|
||||||
long conv4 = initConvAndFc(conv4_wb, 32, 256, 1, 1, 0);
|
long conv4 = ConvAndFcInit(conv4_wb, 32, 256, 1, 1, 0);
|
||||||
initBN(conv4_var, conv4_mean, conv4_beta, 32);
|
BatchNormInit(conv4_var, conv4_mean, conv4_beta, 32);
|
||||||
long conv5 = initConvAndFc(conv5_wb, 32, 32, 3, 1, 1);
|
long conv5 = ConvAndFcInit(conv5_wb, 32, 32, 3, 1, 1);
|
||||||
initBN(conv5_var, conv5_mean, conv5_beta, 32);
|
BatchNormInit(conv5_var, conv5_mean, conv5_beta, 32);
|
||||||
long conv6 = initConvAndFc(conv6_wb, 32, 32, 3, 1, 1);
|
long conv6 = ConvAndFcInit(conv6_wb, 32, 32, 3, 1, 1);
|
||||||
initBN(conv6_var, conv6_mean, conv6_beta, 32);
|
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,
|
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};
|
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;
|
struct BN *conv4_beta = new BN;
|
||||||
|
|
||||||
|
|
||||||
long conv1 = initConvAndFc(conv1_wb, 384, 256, 3, 2, 0);
|
long conv1 = ConvAndFcInit(conv1_wb, 384, 256, 3, 2, 0);
|
||||||
initBN(conv1_var, conv1_mean, conv1_beta, 384);
|
BatchNormInit(conv1_var, conv1_mean, conv1_beta, 384);
|
||||||
|
|
||||||
long conv2 = initConvAndFc(conv2_wb, 192, 256, 1, 1, 0);
|
long conv2 = ConvAndFcInit(conv2_wb, 192, 256, 1, 1, 0);
|
||||||
initBN(conv2_var, conv2_mean, conv2_beta, 192);
|
BatchNormInit(conv2_var, conv2_mean, conv2_beta, 192);
|
||||||
long conv3 = initConvAndFc(conv3_wb, 192, 192, 3, 1, 0);
|
long conv3 = ConvAndFcInit(conv3_wb, 192, 192, 3, 1, 0);
|
||||||
initBN(conv3_var, conv3_mean, conv3_beta, 192);
|
BatchNormInit(conv3_var, conv3_mean, conv3_beta, 192);
|
||||||
long conv4 = initConvAndFc(conv4_wb, 256, 192, 3, 2, 0);
|
long conv4 = ConvAndFcInit(conv4_wb, 256, 192, 3, 2, 0);
|
||||||
initBN(conv4_var, conv4_mean, conv4_beta, 256);
|
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};
|
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, \
|
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;
|
struct BN *conv4_beta = new BN;
|
||||||
|
|
||||||
|
|
||||||
long conv1 = initConvAndFc(conv1_wb, 128, 896, 1, 1, 0);
|
long conv1 = ConvAndFcInit(conv1_wb, 128, 896, 1, 1, 0);
|
||||||
initBN(conv1_var, conv1_mean, conv1_beta, 128);
|
BatchNormInit(conv1_var, conv1_mean, conv1_beta, 128);
|
||||||
|
|
||||||
long conv2 = initConvAndFc(conv2_wb, 128, 896, 1, 1, 0);
|
long conv2 = ConvAndFcInit(conv2_wb, 128, 896, 1, 1, 0);
|
||||||
initBN(conv2_var, conv2_mean, conv2_beta, 128);
|
BatchNormInit(conv2_var, conv2_mean, conv2_beta, 128);
|
||||||
long conv3 = initConvAndFc(conv3_wb, 128, 128, 0, 1, -1, 7, 1, 3, 0);//[1,7]
|
long conv3 = ConvAndFcInit(conv3_wb, 128, 128, 0, 1, -1, 7, 1, 3, 0);//[1,7]
|
||||||
initBN(conv3_var, conv3_mean, conv3_beta, 128);
|
BatchNormInit(conv3_var, conv3_mean, conv3_beta, 128);
|
||||||
long conv4 = initConvAndFc(conv4_wb, 128, 128, 0, 1, -1, 1, 7, 0, 3);//[7,1]
|
long conv4 = ConvAndFcInit(conv4_wb, 128, 128, 0, 1, -1, 1, 7, 0, 3);//[7,1]
|
||||||
initBN(conv4_var, conv4_mean, conv4_beta, 128);
|
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,
|
long dataNumber[20] = {conv1, 128, 128, 128, conv2, 128, 128, 128, conv3, 128, 128, 128, conv4, 128, 128, 128,
|
||||||
conv5, 896, conv6, 0};
|
conv5, 896, conv6, 0};
|
||||||
@@ -688,22 +592,22 @@ void facenet::Reduction_B(pBox *input, pBox *output) {
|
|||||||
struct BN *conv7_beta = new BN;
|
struct BN *conv7_beta = new BN;
|
||||||
|
|
||||||
|
|
||||||
long conv1 = initConvAndFc(conv1_wb, 256, 896, 1, 1, 0);
|
long conv1 = ConvAndFcInit(conv1_wb, 256, 896, 1, 1, 0);
|
||||||
initBN(conv1_var, conv1_mean, conv1_beta, 256);
|
BatchNormInit(conv1_var, conv1_mean, conv1_beta, 256);
|
||||||
long conv2 = initConvAndFc(conv2_wb, 384, 256, 3, 2, 0);
|
long conv2 = ConvAndFcInit(conv2_wb, 384, 256, 3, 2, 0);
|
||||||
initBN(conv2_var, conv2_mean, conv2_beta, 384);
|
BatchNormInit(conv2_var, conv2_mean, conv2_beta, 384);
|
||||||
|
|
||||||
long conv3 = initConvAndFc(conv3_wb, 256, 896, 1, 1, 0);
|
long conv3 = ConvAndFcInit(conv3_wb, 256, 896, 1, 1, 0);
|
||||||
initBN(conv3_var, conv3_mean, conv3_beta, 256);
|
BatchNormInit(conv3_var, conv3_mean, conv3_beta, 256);
|
||||||
long conv4 = initConvAndFc(conv4_wb, 256, 256, 3, 2, 0);
|
long conv4 = ConvAndFcInit(conv4_wb, 256, 256, 3, 2, 0);
|
||||||
initBN(conv4_var, conv4_mean, conv4_beta, 256);
|
BatchNormInit(conv4_var, conv4_mean, conv4_beta, 256);
|
||||||
|
|
||||||
long conv5 = initConvAndFc(conv5_wb, 256, 896, 1, 1, 0);
|
long conv5 = ConvAndFcInit(conv5_wb, 256, 896, 1, 1, 0);
|
||||||
initBN(conv5_var, conv5_mean, conv5_beta, 256);
|
BatchNormInit(conv5_var, conv5_mean, conv5_beta, 256);
|
||||||
long conv6 = initConvAndFc(conv6_wb, 256, 256, 3, 1, 1);
|
long conv6 = ConvAndFcInit(conv6_wb, 256, 256, 3, 1, 1);
|
||||||
initBN(conv6_var, conv6_mean, conv6_beta, 256);
|
BatchNormInit(conv6_var, conv6_mean, conv6_beta, 256);
|
||||||
long conv7 = initConvAndFc(conv7_wb, 256, 256, 3, 2, 0);
|
long conv7 = ConvAndFcInit(conv7_wb, 256, 256, 3, 2, 0);
|
||||||
initBN(conv7_var, conv7_mean, conv7_beta, 256);
|
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,
|
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};
|
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;
|
struct BN *conv4_beta = new BN;
|
||||||
|
|
||||||
|
|
||||||
long conv1 = initConvAndFc(conv1_wb, 192, 1792, 1, 1, 0);
|
long conv1 = ConvAndFcInit(conv1_wb, 192, 1792, 1, 1, 0);
|
||||||
initBN(conv1_var, conv1_mean, conv1_beta, 192);
|
BatchNormInit(conv1_var, conv1_mean, conv1_beta, 192);
|
||||||
long conv2 = initConvAndFc(conv2_wb, 192, 1792, 1, 1, 0);
|
long conv2 = ConvAndFcInit(conv2_wb, 192, 1792, 1, 1, 0);
|
||||||
initBN(conv2_var, conv2_mean, conv2_beta, 192);
|
BatchNormInit(conv2_var, conv2_mean, conv2_beta, 192);
|
||||||
long conv3 = initConvAndFc(conv3_wb, 192, 192, 0, 1, -1, 3, 1, 1, 0);
|
long conv3 = ConvAndFcInit(conv3_wb, 192, 192, 0, 1, -1, 3, 1, 1, 0);
|
||||||
initBN(conv3_var, conv3_mean, conv3_beta, 192);
|
BatchNormInit(conv3_var, conv3_mean, conv3_beta, 192);
|
||||||
long conv4 = initConvAndFc(conv4_wb, 192, 192, 0, 1, -1, 1, 3, 0, 1);
|
long conv4 = ConvAndFcInit(conv4_wb, 192, 192, 0, 1, -1, 1, 3, 0, 1);
|
||||||
initBN(conv4_var, conv4_mean, conv4_beta, 192);
|
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,
|
long dataNumber[20] = {conv1, 192, 192, 192, conv2, 192, 192, 192, conv3, 192, 192, 192, conv4, 192, 192, 192,
|
||||||
conv5, 1792, conv6, 0};
|
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_mean = new BN;
|
||||||
struct BN *conv4_beta = new BN;
|
struct BN *conv4_beta = new BN;
|
||||||
|
|
||||||
long conv1 = initConvAndFc(conv1_wb, 192, 1792, 1, 1, 0);
|
long conv1 = ConvAndFcInit(conv1_wb, 192, 1792, 1, 1, 0);
|
||||||
initBN(conv1_var, conv1_mean, conv1_beta, 192);
|
BatchNormInit(conv1_var, conv1_mean, conv1_beta, 192);
|
||||||
long conv2 = initConvAndFc(conv2_wb, 192, 1792, 1, 1, 0);
|
long conv2 = ConvAndFcInit(conv2_wb, 192, 1792, 1, 1, 0);
|
||||||
initBN(conv2_var, conv2_mean, conv2_beta, 192);
|
BatchNormInit(conv2_var, conv2_mean, conv2_beta, 192);
|
||||||
long conv3 = initConvAndFc(conv3_wb, 192, 192, 0, 1, -1, 3, 1, 1, 0);
|
long conv3 = ConvAndFcInit(conv3_wb, 192, 192, 0, 1, -1, 3, 1, 1, 0);
|
||||||
initBN(conv3_var, conv3_mean, conv3_beta, 192);
|
BatchNormInit(conv3_var, conv3_mean, conv3_beta, 192);
|
||||||
long conv4 = initConvAndFc(conv4_wb, 192, 192, 0, 1, -1, 1, 3, 0, 1);
|
long conv4 = ConvAndFcInit(conv4_wb, 192, 192, 0, 1, -1, 1, 3, 0, 1);
|
||||||
initBN(conv4_var, conv4_mean, conv4_beta, 192);
|
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 dataNumber[18] = {conv1, 192, 192, 192, conv2, 192, 192, 192, conv3, 192, 192, 192, conv4, 192, 192, 192,
|
long dataNumber[18] = {conv1, 192, 192, 192, conv2, 192, 192, 192, conv3, 192, 192, 192, conv4, 192, 192, 192,
|
||||||
conv5, 1792};
|
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_var = new BN;
|
||||||
struct BN *conv1_mean = new BN;
|
struct BN *conv1_mean = new BN;
|
||||||
struct BN *conv1_beta = new BN;
|
struct BN *conv1_beta = new BN;
|
||||||
long conv1 = initConvAndFc(conv1_wb, Num, 1792, input->height, 1, 0);
|
long conv1 = ConvAndFcInit(conv1_wb, Num, 1792, input->height, 1, 0);
|
||||||
initBN(conv1_var, conv1_mean, conv1_beta, Num);
|
BatchNormInit(conv1_var, conv1_mean, conv1_beta, Num);
|
||||||
long dataNumber[4] = {conv1, Num, Num, Num};
|
long dataNumber[4] = {conv1, Num, Num, Num};
|
||||||
|
|
||||||
// cout << to_string(sum) << endl;
|
// cout << to_string(sum) << endl;
|
||||||
@@ -1083,117 +987,104 @@ void facenet::fully_connect(pBox *input, pBox *output, string filepath) {
|
|||||||
fullconnect(conv1_wb, input, output);
|
fullconnect(conv1_wb, input, output);
|
||||||
BatchNorm(output, conv1_var, conv1_mean, conv1_beta);
|
BatchNorm(output, conv1_var, conv1_mean, conv1_beta);
|
||||||
|
|
||||||
// relu(output, conv1_wb->pbias, prelu_gmma1->pdata);
|
|
||||||
|
|
||||||
freeWeight(conv1_wb);
|
freeWeight(conv1_wb);
|
||||||
freeBN(conv1_var);
|
freeBN(conv1_var);
|
||||||
freeBN(conv1_mean);
|
freeBN(conv1_mean);
|
||||||
freeBN(conv1_beta);
|
freeBN(conv1_beta);
|
||||||
}
|
}
|
||||||
|
|
||||||
void facenet::conv_mergeInit(pBox *output, pBox *c1, pBox *c2, pBox *c3, pBox *c4) {
|
facenet::facenet() {
|
||||||
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));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void facenet::conv_merge(pBox *output, pBox *c1, pBox *c2, pBox *c3, pBox *c4) {
|
facenet::~facenet() {
|
||||||
// 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void facenet::mulandaddInit(const pBox *inpbox, const pBox *temppbox, pBox *outpBox, float scale) {
|
void facenet::printData(pBox *in) {
|
||||||
outpBox->channel = temppbox->channel;
|
for (long i = 0; i < in->height * in->width * in->channel; ++i) {
|
||||||
outpBox->width = temppbox->width;
|
// if (in->pdata[i] != 0)
|
||||||
outpBox->height = temppbox->height;
|
printf("%f\n", in->pdata[i]);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
cout << "printData" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void facenet::prewhiten(Mat &image) {
|
void facenet::run(Mat &image, vector<mydataFmt> &o, int count) {
|
||||||
double mean, stddev, sqr, stddev_adj;
|
cout << "=====This is No." + to_string(count) + " Picture=====" << endl;
|
||||||
int size;
|
pBox *output = new pBox;
|
||||||
|
pBox *input;
|
||||||
Mat temp_m, temp_sd;
|
Stem(image, output);
|
||||||
meanStdDev(image, temp_m, temp_sd);
|
// printData(output);
|
||||||
mean = temp_m.at<double>(0, 0);
|
// return;
|
||||||
stddev = temp_sd.at<double>(0, 0);
|
cout << "Stem Finally" << endl;
|
||||||
size = image.cols * image.rows * image.channels();
|
input = output;
|
||||||
sqr = sqrt(double(size));
|
output = new pBox;
|
||||||
if (stddev > 1.0 / sqr) {
|
for (int i = 0; i < 5; ++i) {
|
||||||
stddev_adj = stddev;
|
// 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 {
|
} else {
|
||||||
stddev_adj = 1.0 / sqr;
|
divisor = sqrt(sum);
|
||||||
}
|
}
|
||||||
Mat temp_image(image.rows, image.cols, CV_64F);
|
for (int j = 0; j < Num; ++j) {
|
||||||
for (int i = 0; i < image.rows; i++) {
|
// o[j] = output->pdata[j] / divisor;
|
||||||
for (int j = 0; j < image.cols; j++) {
|
o.push_back(output->pdata[j] / divisor);
|
||||||
image.at<uchar>(i, j);
|
|
||||||
temp_image.at<Vec3b>(i, j)[0] = (image.at<Vec3b>(i, j)[0] - mean) / stddev_adj;
|
|
||||||
temp_image.at<Vec3b>(i, j)[0] = (image.at<Vec3b>(i, j)[0] - mean) / stddev_adj;
|
|
||||||
temp_image.at<Vec3b>(i, j)[0] = (image.at<Vec3b>(i, j)[0] - mean) / stddev_adj;
|
|
||||||
cout << 1 << endl;
|
|
||||||
}
|
}
|
||||||
}
|
// memcpy(o, output->pdata, Num * sizeof(mydataFmt));
|
||||||
// double max, min;
|
freepBox(output);
|
||||||
// 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<double>(i, j);
|
|
||||||
// image.at<uchar>(i, j) = temp_image.at<double>(i, j);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// imshow("New Image", image);
|
|
||||||
// waitKey(0);
|
|
||||||
}
|
}
|
||||||
@@ -16,8 +16,6 @@ public:
|
|||||||
|
|
||||||
void run(Mat &image, vector<mydataFmt> &o, int count = 1);
|
void run(Mat &image, vector<mydataFmt> &o, int count = 1);
|
||||||
|
|
||||||
void prewhiten(Mat &image);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void Stem(Mat &image, pBox *output);
|
void Stem(Mat &image, pBox *output);
|
||||||
|
|
||||||
@@ -37,30 +35,9 @@ private:
|
|||||||
|
|
||||||
void fully_connect(pBox *input, pBox *output, string filepath = "");
|
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 Flatten(pBox *input, pBox *output);
|
||||||
|
|
||||||
void printData(pBox *output);
|
void printData(pBox *output);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Mat reImage;
|
|
||||||
// float nms_threshold[3];
|
|
||||||
// vector<float> scales_;
|
|
||||||
// vector<struct Bbox> firstBbox_;
|
|
||||||
// vector<struct orderScore> firstOrderScore_;
|
|
||||||
// vector<struct Bbox> secondBbox_;
|
|
||||||
// vector<struct orderScore> secondBboxScore_;
|
|
||||||
// vector<struct Bbox> thirdBbox_;
|
|
||||||
// vector<struct orderScore> thirdBboxScore_;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //MAIN_FACENET_H
|
#endif //MAIN_FACENET_H
|
||||||
|
|||||||
@@ -23,14 +23,14 @@ Pnet::Pnet() {
|
|||||||
this->conv4c1_wb = new Weight;
|
this->conv4c1_wb = new Weight;
|
||||||
this->conv4c2_wb = new Weight;
|
this->conv4c2_wb = new Weight;
|
||||||
// w sc lc ks s p
|
// w sc lc ks s p
|
||||||
long conv1 = initConvAndFc(this->conv1_wb, 10, 3, 3, 1, 0);
|
long conv1 = ConvAndFcInit(this->conv1_wb, 10, 3, 3, 1, 0);
|
||||||
initpRelu(this->prelu_gmma1, 10);
|
pReluInit(this->prelu_gmma1, 10);
|
||||||
long conv2 = initConvAndFc(this->conv2_wb, 16, 10, 3, 1, 0);
|
long conv2 = ConvAndFcInit(this->conv2_wb, 16, 10, 3, 1, 0);
|
||||||
initpRelu(this->prelu_gmma2, 16);
|
pReluInit(this->prelu_gmma2, 16);
|
||||||
long conv3 = initConvAndFc(this->conv3_wb, 32, 16, 3, 1, 0);
|
long conv3 = ConvAndFcInit(this->conv3_wb, 32, 16, 3, 1, 0);
|
||||||
initpRelu(this->prelu_gmma3, 32);
|
pReluInit(this->prelu_gmma3, 32);
|
||||||
long conv4c1 = initConvAndFc(this->conv4c1_wb, 2, 32, 1, 1, 0);
|
long conv4c1 = ConvAndFcInit(this->conv4c1_wb, 2, 32, 1, 1, 0);
|
||||||
long conv4c2 = initConvAndFc(this->conv4c2_wb, 4, 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};
|
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, \
|
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, \
|
this->conv2_wb->pdata, this->conv2_wb->pbias, this->prelu_gmma2->pdata, \
|
||||||
@@ -171,16 +171,16 @@ Rnet::Rnet() {
|
|||||||
this->score_wb = new Weight;
|
this->score_wb = new Weight;
|
||||||
this->location_wb = new Weight;
|
this->location_wb = new Weight;
|
||||||
// // w sc lc ks s p
|
// // w sc lc ks s p
|
||||||
long conv1 = initConvAndFc(this->conv1_wb, 28, 3, 3, 1, 0);
|
long conv1 = ConvAndFcInit(this->conv1_wb, 28, 3, 3, 1, 0);
|
||||||
initpRelu(this->prelu_gmma1, 28);
|
pReluInit(this->prelu_gmma1, 28);
|
||||||
long conv2 = initConvAndFc(this->conv2_wb, 48, 28, 3, 1, 0);
|
long conv2 = ConvAndFcInit(this->conv2_wb, 48, 28, 3, 1, 0);
|
||||||
initpRelu(this->prelu_gmma2, 48);
|
pReluInit(this->prelu_gmma2, 48);
|
||||||
long conv3 = initConvAndFc(this->conv3_wb, 64, 48, 2, 1, 0);
|
long conv3 = ConvAndFcInit(this->conv3_wb, 64, 48, 2, 1, 0);
|
||||||
initpRelu(this->prelu_gmma3, 64);
|
pReluInit(this->prelu_gmma3, 64);
|
||||||
long fc4 = initConvAndFc(this->fc4_wb, 128, 576, 1, 1, 0);
|
long fc4 = ConvAndFcInit(this->fc4_wb, 128, 576, 1, 1, 0);
|
||||||
initpRelu(this->prelu_gmma4, 128);
|
pReluInit(this->prelu_gmma4, 128);
|
||||||
long score = initConvAndFc(this->score_wb, 2, 128, 1, 1, 0);
|
long score = ConvAndFcInit(this->score_wb, 2, 128, 1, 1, 0);
|
||||||
long location = initConvAndFc(this->location_wb, 4, 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};
|
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, \
|
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, \
|
this->conv2_wb->pdata, this->conv2_wb->pbias, this->prelu_gmma2->pdata, \
|
||||||
@@ -303,19 +303,19 @@ Onet::Onet() {
|
|||||||
this->keyPoint_wb = new Weight;
|
this->keyPoint_wb = new Weight;
|
||||||
|
|
||||||
// // w sc lc ks s p
|
// // w sc lc ks s p
|
||||||
long conv1 = initConvAndFc(this->conv1_wb, 32, 3, 3, 1, 0);
|
long conv1 = ConvAndFcInit(this->conv1_wb, 32, 3, 3, 1, 0);
|
||||||
initpRelu(this->prelu_gmma1, 32);
|
pReluInit(this->prelu_gmma1, 32);
|
||||||
long conv2 = initConvAndFc(this->conv2_wb, 64, 32, 3, 1, 0);
|
long conv2 = ConvAndFcInit(this->conv2_wb, 64, 32, 3, 1, 0);
|
||||||
initpRelu(this->prelu_gmma2, 64);
|
pReluInit(this->prelu_gmma2, 64);
|
||||||
long conv3 = initConvAndFc(this->conv3_wb, 64, 64, 3, 1, 0);
|
long conv3 = ConvAndFcInit(this->conv3_wb, 64, 64, 3, 1, 0);
|
||||||
initpRelu(this->prelu_gmma3, 64);
|
pReluInit(this->prelu_gmma3, 64);
|
||||||
long conv4 = initConvAndFc(this->conv4_wb, 128, 64, 2, 1, 0);
|
long conv4 = ConvAndFcInit(this->conv4_wb, 128, 64, 2, 1, 0);
|
||||||
initpRelu(this->prelu_gmma4, 128);
|
pReluInit(this->prelu_gmma4, 128);
|
||||||
long fc5 = initConvAndFc(this->fc5_wb, 256, 1152, 1, 1, 0);
|
long fc5 = ConvAndFcInit(this->fc5_wb, 256, 1152, 1, 1, 0);
|
||||||
initpRelu(this->prelu_gmma5, 256);
|
pReluInit(this->prelu_gmma5, 256);
|
||||||
long score = initConvAndFc(this->score_wb, 2, 256, 1, 1, 0);
|
long score = ConvAndFcInit(this->score_wb, 2, 256, 1, 1, 0);
|
||||||
long location = initConvAndFc(this->location_wb, 4, 256, 1, 1, 0);
|
long location = ConvAndFcInit(this->location_wb, 4, 256, 1, 1, 0);
|
||||||
long keyPoint = initConvAndFc(this->keyPoint_wb, 10, 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,
|
long dataNumber[21] = {conv1, 32, 32, conv2, 64, 64, conv3, 64, 64, conv4, 128, 128, fc5, 256, 256, score, 2,
|
||||||
location, 4, keyPoint, 10};
|
location, 4, keyPoint, 10};
|
||||||
mydataFmt *pointTeam[21] = {this->conv1_wb->pdata, this->conv1_wb->pbias, this->prelu_gmma1->pdata, \
|
mydataFmt *pointTeam[21] = {this->conv1_wb->pdata, this->conv1_wb->pbias, this->prelu_gmma1->pdata, \
|
||||||
|
|||||||
133
src/network.cpp
133
src/network.cpp
@@ -50,7 +50,7 @@ void image2Matrix(const Mat &image, const struct pBox *pbox, int num) {
|
|||||||
mydataFmt mymean, mystddev;
|
mydataFmt mymean, mystddev;
|
||||||
// prewhiten
|
// prewhiten
|
||||||
if (num != 0) {
|
if (num != 0) {
|
||||||
meanAndDev(image, mymean, mystddev);
|
MeanAndDev(image, mymean, mystddev);
|
||||||
cout << mymean << "----" << mystddev << endl;
|
cout << mymean << "----" << mystddev << endl;
|
||||||
size = image.cols * image.rows * image.channels();
|
size = image.cols * image.rows * image.channels();
|
||||||
sqr = sqrt(double(size));
|
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;
|
mydataFmt meansum = 0, stdsum = 0;
|
||||||
for (int rowI = 0; rowI < image.rows; rowI++) {
|
for (int rowI = 0; rowI < image.rows; rowI++) {
|
||||||
for (int colK = 0; colK < image.cols; colK++) {
|
for (int colK = 0; colK < image.cols; colK++) {
|
||||||
meansum += image.at<Vec3b>(rowI, colK)[0] + image.at<Vec3b>(rowI, colK)[1] + image.at<Vec3b>(rowI, colK)[2];
|
meansum += image.at<Vec3b>(rowI, colK)[0] + image.at<Vec3b>(rowI, colK)[1] + image.at<Vec3b>(rowI, colK)[2];
|
||||||
// cout << int(image.at<Vec3b>(rowI, colK)[0]) << endl;
|
|
||||||
// cout << int(image.at<Vec3b>(rowI, colK)[1]) << endl;
|
|
||||||
// cout << int(image.at<Vec3b>(rowI, colK)[2]) << endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p = meansum / (image.cols * image.rows * image.channels());
|
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) {
|
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;
|
int ckh, ckw, ckd, stride, cknum, ckpad, imginputh, imginputw, imginputd, Nh, Nw;
|
||||||
mydataFmt *ck, *imginput;
|
mydataFmt *ck, *imginput;
|
||||||
// float *output = outpBox->pdata;
|
// float *output = outpBox->pdata;
|
||||||
@@ -214,15 +205,6 @@ void convolution(const Weight *weight, const pBox *pbox, pBox *outpBox) {
|
|||||||
+ (k * stride + i1)
|
+ (k * stride + i1)
|
||||||
+ m * imginputh * imginputw]
|
+ m * imginputh * imginputw]
|
||||||
* ck[i * ckh * ckw * ckd + m * ckh * ckw + n * ckw + i1];
|
* 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) {
|
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) {
|
void prelu(struct pBox *pbox, mydataFmt *pbias, mydataFmt *prelu_gmma) {
|
||||||
if (pbox->pdata == NULL) {
|
if (pbox->pdata == NULL) {
|
||||||
cout << "the pRelu feature is NULL!!" << endl;
|
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) {
|
void relu(struct pBox *pbox, mydataFmt *pbias) {
|
||||||
if (pbox->pdata == NULL) {
|
if (pbox->pdata == NULL) {
|
||||||
cout << "the Relu feature is NULL!!" << endl;
|
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
|
// 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);
|
//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,
|
vectorXmatrix(pbox->pdata, weight->pdata,
|
||||||
pbox->width * pbox->height * pbox->channel,
|
|
||||||
weight->lastChannel, weight->selfChannel,
|
weight->lastChannel, weight->selfChannel,
|
||||||
outpBox->pdata);
|
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++) {
|
for (int i = 0; i < v_h; i++) {
|
||||||
p[i] = 0;
|
p[i] = 0;
|
||||||
for (int j = 0; j < v_w; j++) {
|
for (int j = 0; j < v_w; j++) {
|
||||||
p[i] += matrix[j] * v[i * 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) {
|
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
|
// 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) {
|
int stride, int pad, int w, int h, int padw, int padh) {
|
||||||
weight->selfChannel = schannel;
|
weight->selfChannel = schannel;
|
||||||
weight->lastChannel = lchannel;
|
weight->lastChannel = lchannel;
|
||||||
weight->kernelSize = kersize;
|
weight->kernelSize = kersize;
|
||||||
// if (kersize == 0) {
|
|
||||||
weight->h = h;
|
weight->h = h;
|
||||||
weight->w = w;
|
weight->w = w;
|
||||||
// }
|
|
||||||
// if (pad == -1) {
|
|
||||||
weight->padh = padh;
|
weight->padh = padh;
|
||||||
weight->padw = padw;
|
weight->padw = padw;
|
||||||
// }
|
|
||||||
weight->stride = stride;
|
weight->stride = stride;
|
||||||
weight->pad = pad;
|
weight->pad = pad;
|
||||||
weight->pbias = (mydataFmt *) malloc(schannel * sizeof(mydataFmt));
|
weight->pbias = (mydataFmt *) malloc(schannel * sizeof(mydataFmt));
|
||||||
@@ -511,7 +493,7 @@ long initConvAndFc(struct Weight *weight, int schannel, int lchannel, int kersiz
|
|||||||
return byteLenght;
|
return byteLenght;
|
||||||
}
|
}
|
||||||
|
|
||||||
void initpRelu(struct pRelu *prelu, int width) {
|
void pReluInit(struct pRelu *prelu, int width) {
|
||||||
prelu->width = width;
|
prelu->width = width;
|
||||||
prelu->pdata = (mydataFmt *) malloc(width * sizeof(mydataFmt));
|
prelu->pdata = (mydataFmt *) malloc(width * sizeof(mydataFmt));
|
||||||
if (prelu->pdata == NULL)cout << "prelu apply for memory failed!!!!";
|
if (prelu->pdata == NULL)cout << "prelu apply for memory failed!!!!";
|
||||||
@@ -652,7 +634,76 @@ void refineAndSquareBbox(vector<struct Bbox> &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->width = width;
|
||||||
var->pdata = (mydataFmt *) malloc(width * sizeof(mydataFmt));
|
var->pdata = (mydataFmt *) malloc(width * sizeof(mydataFmt));
|
||||||
if (var->pdata == NULL)cout << "prelu apply for memory failed!!!!";
|
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++) {
|
for (int channel = 0; channel < pbox->channel; channel++) {
|
||||||
temp = gamma / sqrt(((vp[channel]) + epsilon));
|
temp = gamma / sqrt(((vp[channel]) + epsilon));
|
||||||
for (int col = 0; col < dis; col++) {
|
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]));
|
*pp = temp * (*pp) + ((bp[channel]) - temp * (mp[channel]));
|
||||||
// cout << *pp << endl;
|
|
||||||
pp++;
|
pp++;
|
||||||
}
|
}
|
||||||
// vp++;
|
|
||||||
// mp++;
|
|
||||||
// bp++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "pBox.h"
|
#include "pBox.h"
|
||||||
//#include <cblas.h>
|
|
||||||
|
|
||||||
using namespace cv;
|
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);
|
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);
|
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);
|
void softmax(const struct pBox *pbox);
|
||||||
|
|
||||||
@@ -59,14 +58,21 @@ void nms(vector<struct Bbox> &boundingBox_, vector<struct orderScore> &bboxScore
|
|||||||
|
|
||||||
void refineAndSquareBbox(vector<struct Bbox> &vecBbox, const int &height, const int &width);
|
void refineAndSquareBbox(vector<struct Bbox> &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 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);
|
void BatchNorm(struct pBox *pbox, struct BN *var, struct BN *mean, struct BN *beta);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
26
src/pBox.h
26
src/pBox.h
@@ -6,12 +6,15 @@
|
|||||||
#include <opencv2/core/cvstd.hpp>
|
#include <opencv2/core/cvstd.hpp>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 声明结构体
|
||||||
|
*/
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
//#define mydataFmt double
|
//#define mydataFmt double
|
||||||
#define Num 128
|
#define Num 128
|
||||||
typedef float mydataFmt;
|
typedef float mydataFmt;
|
||||||
|
|
||||||
|
|
||||||
struct pBox : public cv::String {
|
struct pBox : public cv::String {
|
||||||
mydataFmt *pdata;
|
mydataFmt *pdata;
|
||||||
int width;
|
int width;
|
||||||
@@ -19,7 +22,6 @@ struct pBox : public cv::String {
|
|||||||
int channel;
|
int channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct pRelu {
|
struct pRelu {
|
||||||
mydataFmt *pdata;
|
mydataFmt *pdata;
|
||||||
int width;
|
int width;
|
||||||
@@ -30,7 +32,6 @@ struct BN {
|
|||||||
int width;
|
int width;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct Weight {
|
struct Weight {
|
||||||
mydataFmt *pdata;
|
mydataFmt *pdata;
|
||||||
mydataFmt *pbias;
|
mydataFmt *pbias;
|
||||||
@@ -45,25 +46,6 @@ struct Weight {
|
|||||||
int padh;
|
int padh;
|
||||||
};
|
};
|
||||||
|
|
||||||
class pBox1 {
|
|
||||||
public:
|
|
||||||
vector<vector<vector<mydataFmt>>> pdata;
|
|
||||||
};
|
|
||||||
|
|
||||||
class pRelu1 {
|
|
||||||
public:
|
|
||||||
vector<mydataFmt> pdata;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Weight1 {
|
|
||||||
public:
|
|
||||||
vector<vector<vector<vector<mydataFmt>>>> pdata;
|
|
||||||
vector<mydataFmt> pbias;
|
|
||||||
int stride;
|
|
||||||
int padw;
|
|
||||||
int padh;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Bbox {
|
struct Bbox {
|
||||||
float score;
|
float score;
|
||||||
int x1;
|
int x1;
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ void run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void test() {
|
void test() {
|
||||||
Mat image0 = imread("../kkk.jpg");
|
Mat image0 = imread("../hejiong1.jpeg");
|
||||||
Mat image1 = imread("../hejiong0.jpeg");
|
Mat image1 = imread("../hejiong0.jpeg");
|
||||||
|
|
||||||
clock_t start;
|
clock_t start;
|
||||||
|
|||||||
Reference in New Issue
Block a user