309 lines
5.8 KiB
C
Raw Permalink Normal View History

2024-07-15 10:31:26 +08:00
#ifndef TORCHDEFINE_H_
#define TORCHDEFINE_H_
#include <stdio.h>
#include "malloc.h"
#define LENGTH 256
#define MAX_GPU_COUNT 8
#define CLS_MODEL_BASE (10)
#define SEG_MODEL_BASE (10)
#define DET_MODEL_BASE (0)
#define PER_MODEL_MAX_COUNT (10)
enum DNN_MODEL_TYPE
{
DNN_MODEL_TYPE_CLS=0,
DNN_MODEL_TYPE_DET=1,
DNN_MODEL_TYPE_SEG=2,
DNN_MODEL_TYPE_DET_YOLO = 3,
DNN_MODEL_TYPE_SEG_FILTER = 4,
};
enum DNN_MODEL_FILE_TYPE
{
DNN_MODEL_CAFFE=0,
DNN_MODEL_TORCH=1,
DNN_MODEL_TENSORRT=2,
DNN_MODEL_ONNX=3,
};
#ifndef _TrainInfo_
#define _TrainInfo_
struct TrainInfo {
float loss;
float accuracy;//<2F>û<EFBFBD>ָ<EFBFBD><D6B8>iou<6F><75>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>ֵ<EFBFBD>µ<EFBFBD>Precison * Recall
int record_index; //ѵ<><D1B5>ִ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
bool is_detection; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ѵ<EFBFBD><D1B5><EFBFBD><EFBFBD>λģ<CEBB><C4A3>
float mAP;//coco <20><><EFBFBD>ʽ<E3B7BD>µ<EFBFBD> map@0.5:0.95
float mAP50;//coco <20><><EFBFBD>ʽ<E3B7BD>µ<EFBFBD> map@0.5
float mAP75;//coco <20><><EFBFBD>ʽ<E3B7BD>µ<EFBFBD> map@0.75
float mIOU; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>iou
float accuracy_bg;
float accuracy_fg;
float accuracy_objectness;
bool is_multilabel;
float accuracy_fg_all;
};
#endif
#ifndef _DetResult_
#define _DetResult_
struct DetResult
{
int image_id;
int label;
char name[16];
float score;
int left, top, height, width;
};
#endif
#ifndef _GpuDeviceInfo_
#define _GpuDeviceInfo_
struct GpuDeviceInfo
{
int gpu_count;
char gpu_name[MAX_GPU_COUNT][LENGTH];
int gpu_memory_size[MAX_GPU_COUNT];//<2F><>λMB
int gpu_sharedMemPerBlock[MAX_GPU_COUNT];//<2F><>λKB
int gpu_maxThreadsPerBlock[MAX_GPU_COUNT];
};
#endif
#ifndef _YYDLL_ERRORMSG_
#define _YYDLL_ERRORMSG_
struct YYErrorMsg
{
char strErrorMsg[1024];
};
#endif
#ifndef _DnnInferInfo_
#define _DnnInferInfo_
struct DnnInferInfo
{
char strModelFile[256];
int iBatchSize;
int iInferMode;
int iDeviceIndex;
};
#endif
#ifndef _Shape_
#define _Shape_
struct Shape
{
Shape() { N = 1; C = 1; H = 1; W = 1; }
Shape(unsigned int n, unsigned int c, unsigned int h, unsigned int w)
{
N = n; C = c; H = h; W = w;
}
unsigned int count()
{
return N * C * H * W;
}
unsigned int N;
unsigned int C;
unsigned int H;
unsigned int W;
};
#endif // !_Shape_
#ifndef _SegResult_
struct SegResult
{
unsigned char* pLabel;
float* pProb;
Shape inferShape;
int offsetX;
int offsetY;
double dScale;
};
#endif
#ifndef _Datum_
#define _Datum_
struct Datum
{
Datum()
{
data = NULL;
data_item_size = 4;
alloc = false;
}
Datum(int iDataItemSize)
{
data = NULL;
data_item_size = iDataItemSize;
alloc = false;
}
Datum(void* pData, Shape tshape, int itemSize)
{
data = pData;
this->shape = tshape;
data_item_size = itemSize;
alloc = false;
}
int GetDataItemSize()
{
return data_item_size;
}
void* Getdata()
{
if (data != NULL)
{
return data;
}
else
{
unsigned int size = shape.count();
data = malloc(size * data_item_size);
alloc = true;
return data;
}
}
void SetDataItemSize(int iDataItemSize)
{
if (data != NULL && iDataItemSize > data_item_size )
{
free(data);
data = NULL;
alloc = false;
}
data_item_size = iDataItemSize;
if (NULL == data)
{
unsigned int size = shape.count();
data = malloc(size * data_item_size);
alloc = true;
}
}
void Reshape(Shape s)
{
if (data != NULL && s.count() > shape.count())
{
free(data);
data = NULL;
alloc = false;
}
shape = s;
if (NULL == data)
{
unsigned int size = shape.count();
data = malloc(size * data_item_size);
alloc = true;
}
}
~Datum()
{
if (data != NULL)
{
if (alloc)
{
free(data);
data = NULL;
}
}
}
Shape shape;
void* data;
int data_item_size;
bool alloc;
};
#endif // !_Datum_
#ifndef _TrainingParameter_
#define _TrainingParameter_
struct TrainingParameter
{
//enhance relate
bool flip;
bool blur;
bool hsv;
bool transform;
bool crop;
//train information
int train_size;//100000
int kLogInterval;//100
int save_model_iterval;//1000
int batch_size;
//model relate need to write to file
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѵ<EFBFBD><D1B5>
int use_model_type;//0: small model; 1: medium model; 2: big model
int channel;
int height;
int width;
char data_file_root[LENGTH];
char val_data_file_root[LENGTH];
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>batch<63><68>֤һ<D6A4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ѵ<EFBFBD><D1B5><EFBFBD><EFBFBD>
char harddata_file_root[LENGTH];
float input_scale;//1
float learn_rate;//0.01
//save relate
char pretrained_model_path[LENGTH];
char save_model_path[LENGTH];
int train_iter; //ѵ<><D1B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool save_interval_flag; //<2F>Ƿ񱣴<C7B7>ѵ<EFBFBD><D1B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
bool vflip; //<2F>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>ת
float max_rotate_angle; //ʹ<><CAB9><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ǿʱ<C7BF><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƕ<EFBFBD>(+-<2D><>Χ)
int loss_type; //ѵ<><D1B5>loss_type
float image_scale; //ͼ<><CDBC>ѵ<EFBFBD><D1B5>ǰԤ<C7B0><D4A4><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>
int infer_height; //<2F><><EFBFBD><EFBFBD>ʱģ<CAB1><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4>߶<EFBFBD>
int infer_width; //<2F><><EFBFBD><EFBFBD>ʱģ<CAB1><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD>
double label_smooth; //<2F>Ƿ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪԤ<CEAA><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>
bool in_memory_train; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ѵ<EFBFBD><D1B5>
int model_type; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,0<><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>,1<><31>ʾ<EFBFBD><CABE>λ<EFBFBD><CEBB>2<EFBFBD><32>ʾ<EFBFBD>ָ<EFBFBD>
bool with_prob; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>Ƿ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double crop_min_scale; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>crop<6F><70>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
double crop_max_scale; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>crop<6F><70>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
/*------------------ for detect --------------------------------------*/
char background_images_path[LENGTH];//<2F><>ˮӡ<CBAE>ı<EFBFBD><C4B1><EFBFBD>ͼ
bool is_create_anchor;//
float pos_overlap_low;//overlap<61><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>Ϊǰ<CEAA><C7B0>Ŀ<EFBFBD><C4BF>
float neg_overlap_up;//overlapС<70><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>Ե<EFBFBD>ǰ<EFBFBD><C7B0>Ŀ<EFBFBD><C4BF>
float gamma; //focal loss parameter
float balance; //focal loss parameter
};
#endif
#ifndef _InferenceParameter_
#define _InferenceParameter_
struct InferenceParameterEx
{
int use_model_type;
int batch_size;
int input_channel;
int input_width;
int input_height;
int label_num;
double input_scale;
int model_type; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,0<><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>,1<><31>ʾ<EFBFBD><CABE>λ<EFBFBD><CEBB>2<EFBFBD><32>ʾ<EFBFBD>ָ<EFBFBD>
float mean_values[4];
float scale_value[4];
int input_count;
char input_name[3][64];
int output_count;
char output_name[3][64];
double image_scale;
};
#endif
#endif