From 168af40fe9a3cc81c6ee16b3e81f154780c36bdb Mon Sep 17 00:00:00 2001 From: Scheaven <xuepengqiang> Date: 星期四, 03 六月 2021 15:03:27 +0800 Subject: [PATCH] up new v4 --- lib/detecter_tools/darknet/darknet.h | 2154 +++++++++++++++++++++++++++++++---------------------------- 1 files changed, 1,120 insertions(+), 1,034 deletions(-) diff --git a/lib/detecter_tools/darknet/darknet.h b/lib/detecter_tools/darknet/darknet.h index 00d6412..f5170f3 100644 --- a/lib/detecter_tools/darknet/darknet.h +++ b/lib/detecter_tools/darknet/darknet.h @@ -1,1034 +1,1120 @@ -#ifndef DARKNET_API -#define DARKNET_API - -#if defined(_MSC_VER) && _MSC_VER < 1900 -#define inline __inline -#endif - -#if defined(DEBUG) && !defined(_CRTDBG_MAP_ALLOC) -#define _CRTDBG_MAP_ALLOC -#endif - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <stdint.h> -#include <assert.h> -#include <pthread.h> - -#ifndef LIB_API -#ifdef LIB_EXPORTS -#if defined(_MSC_VER) -#define LIB_API __declspec(dllexport) -#else -#define LIB_API __attribute__((visibility("default"))) -#endif -#else -#if defined(_MSC_VER) -#define LIB_API -#else -#define LIB_API -#endif -#endif -#endif - -#define SECRET_NUM -1234 - -typedef enum { UNUSED_DEF_VAL } UNUSED_ENUM_TYPE; - -#ifdef GPU - -#include <cuda_runtime.h> -#include <curand.h> -#include <cublas_v2.h> - -#ifdef CUDNN -#include <cudnn.h> -#endif // CUDNN -#endif // GPU - -#ifdef __cplusplus -extern "C" { -#endif - -struct network; -typedef struct network network; - -struct network_state; -typedef struct network_state network_state; - -struct layer; -typedef struct layer layer; - -struct image; -typedef struct image image; - -struct detection; -typedef struct detection detection; - -struct load_args; -typedef struct load_args load_args; - -struct data; -typedef struct data data; - -struct metadata; -typedef struct metadata metadata; - -struct tree; -typedef struct tree tree; - -extern int gpu_index; - -// option_list.h -typedef struct metadata { - int classes; - char **names; -} metadata; - - -// tree.h -typedef struct tree { - int *leaf; - int n; - int *parent; - int *child; - int *group; - char **name; - - int groups; - int *group_size; - int *group_offset; -} tree; - - -// activations.h -typedef enum { - LOGISTIC, RELU, RELU6, RELIE, LINEAR, RAMP, TANH, PLSE, LEAKY, ELU, LOGGY, STAIR, HARDTAN, LHTAN, SELU, GELU, SWISH, MISH, NORM_CHAN, NORM_CHAN_SOFTMAX, NORM_CHAN_SOFTMAX_MAXVAL -}ACTIVATION; - -// parser.h -typedef enum { - IOU, GIOU, MSE, DIOU, CIOU -} IOU_LOSS; - -// parser.h -typedef enum { - DEFAULT_NMS, GREEDY_NMS, DIOU_NMS, CORNERS_NMS -} NMS_KIND; - -// parser.h -typedef enum { - YOLO_CENTER = 1 << 0, YOLO_LEFT_TOP = 1 << 1, YOLO_RIGHT_BOTTOM = 1 << 2 -} YOLO_POINT; - -// parser.h -typedef enum { - NO_WEIGHTS, PER_FEATURE, PER_CHANNEL -} WEIGHTS_TYPE_T; - -// parser.h -typedef enum { - NO_NORMALIZATION, RELU_NORMALIZATION, SOFTMAX_NORMALIZATION -} WEIGHTS_NORMALIZATION_T; - -// image.h -typedef enum{ - PNG, BMP, TGA, JPG -} IMTYPE; - -// activations.h -typedef enum{ - MULT, ADD, SUB, DIV -} BINARY_ACTIVATION; - -// layer.h -typedef enum { - CONVOLUTIONAL, - DECONVOLUTIONAL, - CONNECTED, - MAXPOOL, - LOCAL_AVGPOOL, - SOFTMAX, - DETECTION, - DROPOUT, - CROP, - ROUTE, - COST, - NORMALIZATION, - AVGPOOL, - LOCAL, - SHORTCUT, - SCALE_CHANNELS, - SAM, - ACTIVE, - RNN, - GRU, - LSTM, - CONV_LSTM, - CRNN, - BATCHNORM, - NETWORK, - XNOR, - REGION, - YOLO, - GAUSSIAN_YOLO, - ISEG, - REORG, - REORG_OLD, - UPSAMPLE, - LOGXENT, - L2NORM, - EMPTY, - BLANK -} LAYER_TYPE; - -// layer.h -typedef enum{ - SSE, MASKED, L1, SEG, SMOOTH,WGAN -} COST_TYPE; - -// layer.h -typedef struct update_args { - int batch; - float learning_rate; - float momentum; - float decay; - int adam; - float B1; - float B2; - float eps; - int t; -} update_args; - -// layer.h -struct layer { - LAYER_TYPE type; - ACTIVATION activation; - COST_TYPE cost_type; - void(*forward) (struct layer, struct network_state); - void(*backward) (struct layer, struct network_state); - void(*update) (struct layer, int, float, float, float); - void(*forward_gpu) (struct layer, struct network_state); - void(*backward_gpu) (struct layer, struct network_state); - void(*update_gpu) (struct layer, int, float, float, float, float); - layer *share_layer; - int train; - int avgpool; - int batch_normalize; - int shortcut; - int batch; - int dynamic_minibatch; - int forced; - int flipped; - int inputs; - int outputs; - float mean_alpha; - int nweights; - int nbiases; - int extra; - int truths; - int h, w, c; - int out_h, out_w, out_c; - int n; - int max_boxes; - int groups; - int group_id; - int size; - int side; - int stride; - int stride_x; - int stride_y; - int dilation; - int antialiasing; - int maxpool_depth; - int out_channels; - int reverse; - int flatten; - int spatial; - int pad; - int sqrt; - int flip; - int index; - int scale_wh; - int binary; - int xnor; - int peephole; - int use_bin_output; - int keep_delta_gpu; - int optimized_memory; - int steps; - int state_constrain; - int hidden; - int truth; - float smooth; - float dot; - int deform; - int grad_centr; - int sway; - int rotate; - int stretch; - int stretch_sway; - float angle; - float jitter; - float resize; - float saturation; - float exposure; - float shift; - float ratio; - float learning_rate_scale; - float clip; - int focal_loss; - float *classes_multipliers; - float label_smooth_eps; - int noloss; - int softmax; - int classes; - int coords; - int background; - int rescore; - int objectness; - int does_cost; - int joint; - int noadjust; - int reorg; - int log; - int tanh; - int *mask; - int total; - float bflops; - - int adam; - float B1; - float B2; - float eps; - - int t; - - float alpha; - float beta; - float kappa; - - float coord_scale; - float object_scale; - float noobject_scale; - float mask_scale; - float class_scale; - int bias_match; - float random; - float ignore_thresh; - float truth_thresh; - float iou_thresh; - float thresh; - float focus; - int classfix; - int absolute; - int assisted_excitation; - - int onlyforward; - int stopbackward; - int train_only_bn; - int dont_update; - int burnin_update; - int dontload; - int dontsave; - int dontloadscales; - int numload; - - float temperature; - float probability; - float dropblock_size_rel; - int dropblock_size_abs; - int dropblock; - float scale; - - int receptive_w; - int receptive_h; - int receptive_w_scale; - int receptive_h_scale; - - char * cweights; - int * indexes; - int * input_layers; - int * input_sizes; - float **layers_output; - float **layers_delta; - WEIGHTS_TYPE_T weights_type; - WEIGHTS_NORMALIZATION_T weights_normalization; - int * map; - int * counts; - float ** sums; - float * rand; - float * cost; - float * state; - float * prev_state; - float * forgot_state; - float * forgot_delta; - float * state_delta; - float * combine_cpu; - float * combine_delta_cpu; - - float *concat; - float *concat_delta; - - float *binary_weights; - - float *biases; - float *bias_updates; - - float *scales; - float *scale_updates; - - float *weights; - float *weight_updates; - - float scale_x_y; - int objectness_smooth; - float max_delta; - float uc_normalizer; - float iou_normalizer; - float cls_normalizer; - IOU_LOSS iou_loss; - IOU_LOSS iou_thresh_kind; - NMS_KIND nms_kind; - float beta_nms; - YOLO_POINT yolo_point; - - char *align_bit_weights_gpu; - float *mean_arr_gpu; - float *align_workspace_gpu; - float *transposed_align_workspace_gpu; - int align_workspace_size; - - char *align_bit_weights; - float *mean_arr; - int align_bit_weights_size; - int lda_align; - int new_lda; - int bit_align; - - float *col_image; - float * delta; - float * output; - float * activation_input; - int delta_pinned; - int output_pinned; - float * loss; - float * squared; - float * norms; - - float * spatial_mean; - float * mean; - float * variance; - - float * mean_delta; - float * variance_delta; - - float * rolling_mean; - float * rolling_variance; - - float * x; - float * x_norm; - - float * m; - float * v; - - float * bias_m; - float * bias_v; - float * scale_m; - float * scale_v; - - - float *z_cpu; - float *r_cpu; - float *h_cpu; - float *stored_h_cpu; - float * prev_state_cpu; - - float *temp_cpu; - float *temp2_cpu; - float *temp3_cpu; - - float *dh_cpu; - float *hh_cpu; - float *prev_cell_cpu; - float *cell_cpu; - float *f_cpu; - float *i_cpu; - float *g_cpu; - float *o_cpu; - float *c_cpu; - float *stored_c_cpu; - float *dc_cpu; - - float *binary_input; - uint32_t *bin_re_packed_input; - char *t_bit_input; - - struct layer *input_layer; - struct layer *self_layer; - struct layer *output_layer; - - struct layer *reset_layer; - struct layer *update_layer; - struct layer *state_layer; - - struct layer *input_gate_layer; - struct layer *state_gate_layer; - struct layer *input_save_layer; - struct layer *state_save_layer; - struct layer *input_state_layer; - struct layer *state_state_layer; - - struct layer *input_z_layer; - struct layer *state_z_layer; - - struct layer *input_r_layer; - struct layer *state_r_layer; - - struct layer *input_h_layer; - struct layer *state_h_layer; - - struct layer *wz; - struct layer *uz; - struct layer *wr; - struct layer *ur; - struct layer *wh; - struct layer *uh; - struct layer *uo; - struct layer *wo; - struct layer *vo; - struct layer *uf; - struct layer *wf; - struct layer *vf; - struct layer *ui; - struct layer *wi; - struct layer *vi; - struct layer *ug; - struct layer *wg; - - tree *softmax_tree; - - size_t workspace_size; - -//#ifdef GPU - int *indexes_gpu; - - float *z_gpu; - float *r_gpu; - float *h_gpu; - float *stored_h_gpu; - - float *temp_gpu; - float *temp2_gpu; - float *temp3_gpu; - - float *dh_gpu; - float *hh_gpu; - float *prev_cell_gpu; - float *prev_state_gpu; - float *last_prev_state_gpu; - float *last_prev_cell_gpu; - float *cell_gpu; - float *f_gpu; - float *i_gpu; - float *g_gpu; - float *o_gpu; - float *c_gpu; - float *stored_c_gpu; - float *dc_gpu; - - // adam - float *m_gpu; - float *v_gpu; - float *bias_m_gpu; - float *scale_m_gpu; - float *bias_v_gpu; - float *scale_v_gpu; - - float * combine_gpu; - float * combine_delta_gpu; - - float * forgot_state_gpu; - float * forgot_delta_gpu; - float * state_gpu; - float * state_delta_gpu; - float * gate_gpu; - float * gate_delta_gpu; - float * save_gpu; - float * save_delta_gpu; - float * concat_gpu; - float * concat_delta_gpu; - - float *binary_input_gpu; - float *binary_weights_gpu; - float *bin_conv_shortcut_in_gpu; - float *bin_conv_shortcut_out_gpu; - - float * mean_gpu; - float * variance_gpu; - float * m_cbn_avg_gpu; - float * v_cbn_avg_gpu; - - float * rolling_mean_gpu; - float * rolling_variance_gpu; - - float * variance_delta_gpu; - float * mean_delta_gpu; - - float * col_image_gpu; - - float * x_gpu; - float * x_norm_gpu; - float * weights_gpu; - float * weight_updates_gpu; - float * weight_deform_gpu; - float * weight_change_gpu; - - float * weights_gpu16; - float * weight_updates_gpu16; - - float * biases_gpu; - float * bias_updates_gpu; - float * bias_change_gpu; - - float * scales_gpu; - float * scale_updates_gpu; - float * scale_change_gpu; - - float * input_antialiasing_gpu; - float * output_gpu; - float * output_avg_gpu; - float * activation_input_gpu; - float * loss_gpu; - float * delta_gpu; - float * rand_gpu; - float * drop_blocks_scale; - float * drop_blocks_scale_gpu; - float * squared_gpu; - float * norms_gpu; - - float *gt_gpu; - float *a_avg_gpu; - - int *input_sizes_gpu; - float **layers_output_gpu; - float **layers_delta_gpu; -#ifdef CUDNN - cudnnTensorDescriptor_t srcTensorDesc, dstTensorDesc; - cudnnTensorDescriptor_t srcTensorDesc16, dstTensorDesc16; - cudnnTensorDescriptor_t dsrcTensorDesc, ddstTensorDesc; - cudnnTensorDescriptor_t dsrcTensorDesc16, ddstTensorDesc16; - cudnnTensorDescriptor_t normTensorDesc, normDstTensorDesc, normDstTensorDescF16; - cudnnFilterDescriptor_t weightDesc, weightDesc16; - cudnnFilterDescriptor_t dweightDesc, dweightDesc16; - cudnnConvolutionDescriptor_t convDesc; - cudnnConvolutionFwdAlgo_t fw_algo, fw_algo16; - cudnnConvolutionBwdDataAlgo_t bd_algo, bd_algo16; - cudnnConvolutionBwdFilterAlgo_t bf_algo, bf_algo16; - cudnnPoolingDescriptor_t poolingDesc; -#else // CUDNN - void* srcTensorDesc, *dstTensorDesc; - void* srcTensorDesc16, *dstTensorDesc16; - void* dsrcTensorDesc, *ddstTensorDesc; - void* dsrcTensorDesc16, *ddstTensorDesc16; - void* normTensorDesc, *normDstTensorDesc, *normDstTensorDescF16; - void* weightDesc, *weightDesc16; - void* dweightDesc, *dweightDesc16; - void* convDesc; - UNUSED_ENUM_TYPE fw_algo, fw_algo16; - UNUSED_ENUM_TYPE bd_algo, bd_algo16; - UNUSED_ENUM_TYPE bf_algo, bf_algo16; - void* poolingDesc; -#endif // CUDNN -//#endif // GPU -}; - - -// network.h -typedef enum { - CONSTANT, STEP, EXP, POLY, STEPS, SIG, RANDOM, SGDR -} learning_rate_policy; - -// network.h -typedef struct network { - int n; - int batch; - uint64_t *seen; - int *cur_iteration; - float loss_scale; - int *t; - float epoch; - int subdivisions; - layer *layers; - float *output; - learning_rate_policy policy; - int benchmark_layers; - - float learning_rate; - float learning_rate_min; - float learning_rate_max; - int batches_per_cycle; - int batches_cycle_mult; - float momentum; - float decay; - float gamma; - float scale; - float power; - int time_steps; - int step; - int max_batches; - int num_boxes; - int train_images_num; - float *seq_scales; - float *scales; - int *steps; - int num_steps; - int burn_in; - int cudnn_half; - - int adam; - float B1; - float B2; - float eps; - - int inputs; - int outputs; - int truths; - int notruth; - int h, w, c; - int max_crop; - int min_crop; - float max_ratio; - float min_ratio; - int center; - int flip; // horizontal flip 50% probability augmentaiont for classifier training (default = 1) - int gaussian_noise; - int blur; - int mixup; - float label_smooth_eps; - int resize_step; - int attention; - int adversarial; - float adversarial_lr; - int letter_box; - float angle; - float aspect; - float exposure; - float saturation; - float hue; - int random; - int track; - int augment_speed; - int sequential_subdivisions; - int init_sequential_subdivisions; - int current_subdivision; - int try_fix_nan; - - int gpu_index; - tree *hierarchy; - - float *input; - float *truth; - float *delta; - float *workspace; - int train; - int index; - float *cost; - float clip; - -//#ifdef GPU - //float *input_gpu; - //float *truth_gpu; - float *delta_gpu; - float *output_gpu; - - float *input_state_gpu; - float *input_pinned_cpu; - int input_pinned_cpu_flag; - - float **input_gpu; - float **truth_gpu; - float **input16_gpu; - float **output16_gpu; - size_t *max_input16_size; - size_t *max_output16_size; - int wait_stream; - - float *global_delta_gpu; - float *state_delta_gpu; - size_t max_delta_gpu_size; -//#endif // GPU - int optimized_memory; - int dynamic_minibatch; - size_t workspace_size_limit; -} network; - -// network.h -typedef struct network_state { - float *truth; - float *input; - float *delta; - float *workspace; - int train; - int index; - network net; -} network_state; - -//typedef struct { -// int w; -// int h; -// float scale; -// float rad; -// float dx; -// float dy; -// float aspect; -//} augment_args; - -// image.h -typedef struct image { - int w; - int h; - int c; - float *data; -} image; - -//typedef struct { -// int w; -// int h; -// int c; -// float *data; -//} image; - -// box.h -typedef struct box { - float x, y, w, h; -} box; - -// box.h -typedef struct boxabs { - float left, right, top, bot; -} boxabs; - -// box.h -typedef struct dxrep { - float dt, db, dl, dr; -} dxrep; - -// box.h -typedef struct ious { - float iou, giou, diou, ciou; - dxrep dx_iou; - dxrep dx_giou; -} ious; - - -// box.h -typedef struct detection{ - box bbox; - int classes; - float *prob; - float *mask; - float objectness; - int sort_class; - float *uc; // Gaussian_YOLOv3 - tx,ty,tw,th uncertainty - int points; // bit-0 - center, bit-1 - top-left-corner, bit-2 - bottom-right-corner -} detection; - -// network.c -batch inference -typedef struct det_num_pair { - int num; - detection *dets; -} det_num_pair, *pdet_num_pair; - -// matrix.h -typedef struct matrix { - int rows, cols; - float **vals; -} matrix; - -// data.h -typedef struct data { - int w, h; - matrix X; - matrix y; - int shallow; - int *num_boxes; - box **boxes; -} data; - -// data.h -typedef enum { - CLASSIFICATION_DATA, DETECTION_DATA, CAPTCHA_DATA, REGION_DATA, IMAGE_DATA, COMPARE_DATA, WRITING_DATA, SWAG_DATA, TAG_DATA, OLD_CLASSIFICATION_DATA, STUDY_DATA, DET_DATA, SUPER_DATA, LETTERBOX_DATA, REGRESSION_DATA, SEGMENTATION_DATA, INSTANCE_DATA, ISEG_DATA -} data_type; - -// data.h -typedef struct load_args { - int threads; - char **paths; - char *path; - int n; - int m; - char **labels; - int h; - int w; - int c; // color depth - int out_w; - int out_h; - int nh; - int nw; - int num_boxes; - int min, max, size; - int classes; - int background; - int scale; - int center; - int coords; - int mini_batch; - int track; - int augment_speed; - int letter_box; - int show_imgs; - int dontuse_opencv; - float jitter; - float resize; - int flip; - int gaussian_noise; - int blur; - int mixup; - float label_smooth_eps; - float angle; - float aspect; - float saturation; - float exposure; - float hue; - data *d; - image *im; - image *resized; - data_type type; - tree *hierarchy; -} load_args; - -// data.h -typedef struct box_label { - int id; - float x, y, w, h; - float left, right, top, bottom; -} box_label; - -// list.h -//typedef struct node { -// void *val; -// struct node *next; -// struct node *prev; -//} node; - -// list.h -//typedef struct list { -// int size; -// node *front; -// node *back; -//} list; - -// ----------------------------------------------------- - - -// parser.c -LIB_API network *load_network(char *cfg, char *weights, int clear); -LIB_API network *load_network_custom(char *cfg, char *weights, int clear, int batch); -LIB_API network *load_network(char *cfg, char *weights, int clear); -LIB_API void free_network(network net); - -// network.c -LIB_API load_args get_base_args(network *net); - -// box.h -LIB_API void do_nms_sort(detection *dets, int total, int classes, float thresh); -LIB_API void do_nms_obj(detection *dets, int total, int classes, float thresh); -LIB_API void diounms_sort(detection *dets, int total, int classes, float thresh, NMS_KIND nms_kind, float beta1); - -// network.h -LIB_API float *network_predict(network net, float *input); -LIB_API float *network_predict_ptr(network *net, float *input); -LIB_API detection *get_network_boxes(network *net, int w, int h, float thresh, float hier, int *map, int relative, int *num, int letter); -LIB_API det_num_pair* network_predict_batch(network *net, image im, int batch_size, int w, int h, float thresh, float hier, int *map, int relative, int letter); -LIB_API void free_detections(detection *dets, int n); -LIB_API void free_batch_detections(det_num_pair *det_num_pairs, int n); -LIB_API void fuse_conv_batchnorm(network net); -LIB_API void calculate_binary_weights(network net); -LIB_API char *detection_to_json(detection *dets, int nboxes, int classes, char **names, long long int frame_id, char *filename); - -LIB_API layer* get_network_layer(network* net, int i); -//LIB_API detection *get_network_boxes(network *net, int w, int h, float thresh, float hier, int *map, int relative, int *num, int letter); -LIB_API detection *make_network_boxes(network *net, float thresh, int *num); -LIB_API void reset_rnn(network *net); -LIB_API float *network_predict_image(network *net, image im); -LIB_API float *network_predict_image_letterbox(network *net, image im); -LIB_API float validate_detector_map(char *datacfg, char *cfgfile, char *weightfile, float thresh_calc_avg_iou, const float iou_thresh, const int map_points, int letter_box, network *existing_net); -LIB_API void train_detector(char *datacfg, char *cfgfile, char *weightfile, int *gpus, int ngpus, int clear, int dont_show, int calc_map, int mjpeg_port, int show_imgs, int benchmark_layers, char* chart_path); -LIB_API void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filename, float thresh, - float hier_thresh, int dont_show, int ext_output, int save_labels, char *outfile, int letter_box, int benchmark_layers); -LIB_API int network_width(network *net); -LIB_API int network_height(network *net); -LIB_API void optimize_picture(network *net, image orig, int max_layer, float scale, float rate, float thresh, int norm); - -// image.h -LIB_API void make_image_red(image im); -LIB_API image make_attention_image(int img_size, float *original_delta_cpu, float *original_input_cpu, int w, int h, int c); -LIB_API image resize_image(image im, int w, int h); -LIB_API void quantize_image(image im); -LIB_API void copy_image_from_bytes(image im, char *pdata); -LIB_API image letterbox_image(image im, int w, int h); -LIB_API void rgbgr_image(image im); -LIB_API image make_image(int w, int h, int c); -LIB_API image load_image_color(char *filename, int w, int h); -LIB_API void free_image(image m); -LIB_API image crop_image(image im, int dx, int dy, int w, int h); -LIB_API image resize_min(image im, int min); - -// layer.h -LIB_API void free_layer_custom(layer l, int keep_cudnn_desc); -LIB_API void free_layer(layer l); - -// data.c -LIB_API void free_data(data d); -LIB_API pthread_t load_data(load_args args); -LIB_API void free_load_threads(void *ptr); -LIB_API pthread_t load_data_in_thread(load_args args); -LIB_API void *load_thread(void *ptr); - -// dark_cuda.h -LIB_API void cuda_pull_array(float *x_gpu, float *x, size_t n); -LIB_API void cuda_pull_array_async(float *x_gpu, float *x, size_t n); -LIB_API void cuda_set_device(int n); -LIB_API void *cuda_get_context(); - -// utils.h -LIB_API void free_ptrs(void **ptrs, int n); -LIB_API void top_k(float *a, int n, int k, int *index); - -// tree.h -LIB_API tree *read_tree(char *filename); - -// option_list.h -LIB_API metadata get_metadata(char *file); - - -// http_stream.h -LIB_API void delete_json_sender(); -LIB_API void send_json_custom(char const* send_buf, int port, int timeout); -LIB_API double get_time_point(); -void start_timer(); -void stop_timer(); -double get_time(); -void stop_timer_and_show(); -void stop_timer_and_show_name(char *name); -void show_total_time(); - -// gemm.h -LIB_API void init_cpu(); - -#ifdef __cplusplus -} -#endif // __cplusplus -#endif // DARKNET_API +#ifndef DARKNET_API +#define DARKNET_API + +#if defined(_MSC_VER) && _MSC_VER < 1900 +#define inline __inline +#endif + +#if defined(DEBUG) && !defined(_CRTDBG_MAP_ALLOC) +#define _CRTDBG_MAP_ALLOC +#endif + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <stdint.h> +#include <assert.h> +#include <pthread.h> + +#ifndef LIB_API +#ifdef LIB_EXPORTS +#if defined(_MSC_VER) +#define LIB_API __declspec(dllexport) +#else +#define LIB_API __attribute__((visibility("default"))) +#endif +#else +#if defined(_MSC_VER) +#define LIB_API +#else +#define LIB_API +#endif +#endif +#endif + +#define SECRET_NUM -1234 + +typedef enum { UNUSED_DEF_VAL } UNUSED_ENUM_TYPE; + +#ifdef GPU + +#include <cuda_runtime.h> +#include <curand.h> +#include <cublas_v2.h> + +#ifdef CUDNN +#include <cudnn.h> +#endif // CUDNN +#endif // GPU + +#ifdef __cplusplus +extern "C" { +#endif + +struct network; +typedef struct network network; + +struct network_state; +typedef struct network_state network_state; + +struct layer; +typedef struct layer layer; + +struct image; +typedef struct image image; + +struct detection; +typedef struct detection detection; + +struct load_args; +typedef struct load_args load_args; + +struct data; +typedef struct data data; + +struct metadata; +typedef struct metadata metadata; + +struct tree; +typedef struct tree tree; + +extern int gpu_index; + +// option_list.h +typedef struct metadata { + int classes; + char **names; +} metadata; + + +// tree.h +typedef struct tree { + int *leaf; + int n; + int *parent; + int *child; + int *group; + char **name; + + int groups; + int *group_size; + int *group_offset; +} tree; + + +// activations.h +typedef enum { + LOGISTIC, RELU, RELU6, RELIE, LINEAR, RAMP, TANH, PLSE, REVLEAKY, LEAKY, ELU, LOGGY, STAIR, HARDTAN, LHTAN, SELU, GELU, SWISH, MISH, HARD_MISH, NORM_CHAN, NORM_CHAN_SOFTMAX, NORM_CHAN_SOFTMAX_MAXVAL +}ACTIVATION; + +// parser.h +typedef enum { + IOU, GIOU, MSE, DIOU, CIOU +} IOU_LOSS; + +// parser.h +typedef enum { + DEFAULT_NMS, GREEDY_NMS, DIOU_NMS, CORNERS_NMS +} NMS_KIND; + +// parser.h +typedef enum { + YOLO_CENTER = 1 << 0, YOLO_LEFT_TOP = 1 << 1, YOLO_RIGHT_BOTTOM = 1 << 2 +} YOLO_POINT; + +// parser.h +typedef enum { + NO_WEIGHTS, PER_FEATURE, PER_CHANNEL +} WEIGHTS_TYPE_T; + +// parser.h +typedef enum { + NO_NORMALIZATION, RELU_NORMALIZATION, SOFTMAX_NORMALIZATION +} WEIGHTS_NORMALIZATION_T; + +// image.h +typedef enum{ + PNG, BMP, TGA, JPG +} IMTYPE; + +// activations.h +typedef enum{ + MULT, ADD, SUB, DIV +} BINARY_ACTIVATION; + +// blas.h +typedef struct contrastive_params { + float sim; + float exp_sim; + float P; + int i, j; + int time_step_i, time_step_j; +} contrastive_params; + + +// layer.h +typedef enum { + CONVOLUTIONAL, + DECONVOLUTIONAL, + CONNECTED, + MAXPOOL, + LOCAL_AVGPOOL, + SOFTMAX, + DETECTION, + DROPOUT, + CROP, + ROUTE, + COST, + NORMALIZATION, + AVGPOOL, + LOCAL, + SHORTCUT, + SCALE_CHANNELS, + SAM, + ACTIVE, + RNN, + GRU, + LSTM, + CONV_LSTM, + HISTORY, + CRNN, + BATCHNORM, + NETWORK, + XNOR, + REGION, + YOLO, + GAUSSIAN_YOLO, + ISEG, + REORG, + REORG_OLD, + UPSAMPLE, + LOGXENT, + L2NORM, + EMPTY, + BLANK, + CONTRASTIVE, + IMPLICIT +} LAYER_TYPE; + +// layer.h +typedef enum{ + SSE, MASKED, L1, SEG, SMOOTH,WGAN +} COST_TYPE; + +// layer.h +typedef struct update_args { + int batch; + float learning_rate; + float momentum; + float decay; + int adam; + float B1; + float B2; + float eps; + int t; +} update_args; + +// layer.h +struct layer { + LAYER_TYPE type; + ACTIVATION activation; + ACTIVATION lstm_activation; + COST_TYPE cost_type; + void(*forward) (struct layer, struct network_state); + void(*backward) (struct layer, struct network_state); + void(*update) (struct layer, int, float, float, float); + void(*forward_gpu) (struct layer, struct network_state); + void(*backward_gpu) (struct layer, struct network_state); + void(*update_gpu) (struct layer, int, float, float, float, float); + layer *share_layer; + int train; + int avgpool; + int batch_normalize; + int shortcut; + int batch; + int dynamic_minibatch; + int forced; + int flipped; + int inputs; + int outputs; + float mean_alpha; + int nweights; + int nbiases; + int extra; + int truths; + int h, w, c; + int out_h, out_w, out_c; + int n; + int max_boxes; + int truth_size; + int groups; + int group_id; + int size; + int side; + int stride; + int stride_x; + int stride_y; + int dilation; + int antialiasing; + int maxpool_depth; + int maxpool_zero_nonmax; + int out_channels; + float reverse; + int coordconv; + int flatten; + int spatial; + int pad; + int sqrt; + int flip; + int index; + int scale_wh; + int binary; + int xnor; + int peephole; + int use_bin_output; + int keep_delta_gpu; + int optimized_memory; + int steps; + int history_size; + int bottleneck; + float time_normalizer; + int state_constrain; + int hidden; + int truth; + float smooth; + float dot; + int deform; + int grad_centr; + int sway; + int rotate; + int stretch; + int stretch_sway; + float angle; + float jitter; + float resize; + float saturation; + float exposure; + float shift; + float ratio; + float learning_rate_scale; + float clip; + int focal_loss; + float *classes_multipliers; + float label_smooth_eps; + int noloss; + int softmax; + int classes; + int detection; + int embedding_layer_id; + float *embedding_output; + int embedding_size; + float sim_thresh; + int track_history_size; + int dets_for_track; + int dets_for_show; + float track_ciou_norm; + int coords; + int background; + int rescore; + int objectness; + int does_cost; + int joint; + int noadjust; + int reorg; + int log; + int tanh; + int *mask; + int total; + float bflops; + + int adam; + float B1; + float B2; + float eps; + + int t; + + float alpha; + float beta; + float kappa; + + float coord_scale; + float object_scale; + float noobject_scale; + float mask_scale; + float class_scale; + int bias_match; + float random; + float ignore_thresh; + float truth_thresh; + float iou_thresh; + float thresh; + float focus; + int classfix; + int absolute; + int assisted_excitation; + + int onlyforward; + int stopbackward; + int train_only_bn; + int dont_update; + int burnin_update; + int dontload; + int dontsave; + int dontloadscales; + int numload; + + float temperature; + float probability; + float dropblock_size_rel; + int dropblock_size_abs; + int dropblock; + float scale; + + int receptive_w; + int receptive_h; + int receptive_w_scale; + int receptive_h_scale; + + char * cweights; + int * indexes; + int * input_layers; + int * input_sizes; + float **layers_output; + float **layers_delta; + WEIGHTS_TYPE_T weights_type; + WEIGHTS_NORMALIZATION_T weights_normalization; + int * map; + int * counts; + float ** sums; + float * rand; + float * cost; + int *labels; + int *class_ids; + int contrastive_neg_max; + float *cos_sim; + float *exp_cos_sim; + float *p_constrastive; + contrastive_params *contrast_p_gpu; + float * state; + float * prev_state; + float * forgot_state; + float * forgot_delta; + float * state_delta; + float * combine_cpu; + float * combine_delta_cpu; + + float *concat; + float *concat_delta; + + float *binary_weights; + + float *biases; + float *bias_updates; + + float *scales; + float *scale_updates; + + float *weights_ema; + float *biases_ema; + float *scales_ema; + + float *weights; + float *weight_updates; + + float scale_x_y; + int objectness_smooth; + int new_coords; + int show_details; + float max_delta; + float uc_normalizer; + float iou_normalizer; + float obj_normalizer; + float cls_normalizer; + float delta_normalizer; + IOU_LOSS iou_loss; + IOU_LOSS iou_thresh_kind; + NMS_KIND nms_kind; + float beta_nms; + YOLO_POINT yolo_point; + + char *align_bit_weights_gpu; + float *mean_arr_gpu; + float *align_workspace_gpu; + float *transposed_align_workspace_gpu; + int align_workspace_size; + + char *align_bit_weights; + float *mean_arr; + int align_bit_weights_size; + int lda_align; + int new_lda; + int bit_align; + + float *col_image; + float * delta; + float * output; + float * activation_input; + int delta_pinned; + int output_pinned; + float * loss; + float * squared; + float * norms; + + float * spatial_mean; + float * mean; + float * variance; + + float * mean_delta; + float * variance_delta; + + float * rolling_mean; + float * rolling_variance; + + float * x; + float * x_norm; + + float * m; + float * v; + + float * bias_m; + float * bias_v; + float * scale_m; + float * scale_v; + + + float *z_cpu; + float *r_cpu; + float *h_cpu; + float *stored_h_cpu; + float * prev_state_cpu; + + float *temp_cpu; + float *temp2_cpu; + float *temp3_cpu; + + float *dh_cpu; + float *hh_cpu; + float *prev_cell_cpu; + float *cell_cpu; + float *f_cpu; + float *i_cpu; + float *g_cpu; + float *o_cpu; + float *c_cpu; + float *stored_c_cpu; + float *dc_cpu; + + float *binary_input; + uint32_t *bin_re_packed_input; + char *t_bit_input; + + struct layer *input_layer; + struct layer *self_layer; + struct layer *output_layer; + + struct layer *reset_layer; + struct layer *update_layer; + struct layer *state_layer; + + struct layer *input_gate_layer; + struct layer *state_gate_layer; + struct layer *input_save_layer; + struct layer *state_save_layer; + struct layer *input_state_layer; + struct layer *state_state_layer; + + struct layer *input_z_layer; + struct layer *state_z_layer; + + struct layer *input_r_layer; + struct layer *state_r_layer; + + struct layer *input_h_layer; + struct layer *state_h_layer; + + struct layer *wz; + struct layer *uz; + struct layer *wr; + struct layer *ur; + struct layer *wh; + struct layer *uh; + struct layer *uo; + struct layer *wo; + struct layer *vo; + struct layer *uf; + struct layer *wf; + struct layer *vf; + struct layer *ui; + struct layer *wi; + struct layer *vi; + struct layer *ug; + struct layer *wg; + + tree *softmax_tree; + + size_t workspace_size; + +//#ifdef GPU + int *indexes_gpu; + + int stream; + int wait_stream_id; + + float *z_gpu; + float *r_gpu; + float *h_gpu; + float *stored_h_gpu; + float *bottelneck_hi_gpu; + float *bottelneck_delta_gpu; + + float *temp_gpu; + float *temp2_gpu; + float *temp3_gpu; + + float *dh_gpu; + float *hh_gpu; + float *prev_cell_gpu; + float *prev_state_gpu; + float *last_prev_state_gpu; + float *last_prev_cell_gpu; + float *cell_gpu; + float *f_gpu; + float *i_gpu; + float *g_gpu; + float *o_gpu; + float *c_gpu; + float *stored_c_gpu; + float *dc_gpu; + + // adam + float *m_gpu; + float *v_gpu; + float *bias_m_gpu; + float *scale_m_gpu; + float *bias_v_gpu; + float *scale_v_gpu; + + float * combine_gpu; + float * combine_delta_gpu; + + float * forgot_state_gpu; + float * forgot_delta_gpu; + float * state_gpu; + float * state_delta_gpu; + float * gate_gpu; + float * gate_delta_gpu; + float * save_gpu; + float * save_delta_gpu; + float * concat_gpu; + float * concat_delta_gpu; + + float *binary_input_gpu; + float *binary_weights_gpu; + float *bin_conv_shortcut_in_gpu; + float *bin_conv_shortcut_out_gpu; + + float * mean_gpu; + float * variance_gpu; + float * m_cbn_avg_gpu; + float * v_cbn_avg_gpu; + + float * rolling_mean_gpu; + float * rolling_variance_gpu; + + float * variance_delta_gpu; + float * mean_delta_gpu; + + float * col_image_gpu; + + float * x_gpu; + float * x_norm_gpu; + float * weights_gpu; + float * weight_updates_gpu; + float * weight_deform_gpu; + float * weight_change_gpu; + + float * weights_gpu16; + float * weight_updates_gpu16; + + float * biases_gpu; + float * bias_updates_gpu; + float * bias_change_gpu; + + float * scales_gpu; + float * scale_updates_gpu; + float * scale_change_gpu; + + float * input_antialiasing_gpu; + float * output_gpu; + float * output_avg_gpu; + float * activation_input_gpu; + float * loss_gpu; + float * delta_gpu; + float * cos_sim_gpu; + float * rand_gpu; + float * drop_blocks_scale; + float * drop_blocks_scale_gpu; + float * squared_gpu; + float * norms_gpu; + + float *gt_gpu; + float *a_avg_gpu; + + int *input_sizes_gpu; + float **layers_output_gpu; + float **layers_delta_gpu; +#ifdef CUDNN + cudnnTensorDescriptor_t srcTensorDesc, dstTensorDesc; + cudnnTensorDescriptor_t srcTensorDesc16, dstTensorDesc16; + cudnnTensorDescriptor_t dsrcTensorDesc, ddstTensorDesc; + cudnnTensorDescriptor_t dsrcTensorDesc16, ddstTensorDesc16; + cudnnTensorDescriptor_t normTensorDesc, normDstTensorDesc, normDstTensorDescF16; + cudnnFilterDescriptor_t weightDesc, weightDesc16; + cudnnFilterDescriptor_t dweightDesc, dweightDesc16; + cudnnConvolutionDescriptor_t convDesc; + cudnnConvolutionFwdAlgo_t fw_algo, fw_algo16; + cudnnConvolutionBwdDataAlgo_t bd_algo, bd_algo16; + cudnnConvolutionBwdFilterAlgo_t bf_algo, bf_algo16; + cudnnPoolingDescriptor_t poolingDesc; +#else // CUDNN + void* srcTensorDesc, *dstTensorDesc; + void* srcTensorDesc16, *dstTensorDesc16; + void* dsrcTensorDesc, *ddstTensorDesc; + void* dsrcTensorDesc16, *ddstTensorDesc16; + void* normTensorDesc, *normDstTensorDesc, *normDstTensorDescF16; + void* weightDesc, *weightDesc16; + void* dweightDesc, *dweightDesc16; + void* convDesc; + UNUSED_ENUM_TYPE fw_algo, fw_algo16; + UNUSED_ENUM_TYPE bd_algo, bd_algo16; + UNUSED_ENUM_TYPE bf_algo, bf_algo16; + void* poolingDesc; +#endif // CUDNN +//#endif // GPU +}; + + +// network.h +typedef enum { + CONSTANT, STEP, EXP, POLY, STEPS, SIG, RANDOM, SGDR +} learning_rate_policy; + +// network.h +typedef struct network { + int n; + int batch; + uint64_t *seen; + float *badlabels_reject_threshold; + float *delta_rolling_max; + float *delta_rolling_avg; + float *delta_rolling_std; + int weights_reject_freq; + int equidistant_point; + float badlabels_rejection_percentage; + float num_sigmas_reject_badlabels; + float ema_alpha; + int *cur_iteration; + float loss_scale; + int *t; + float epoch; + int subdivisions; + layer *layers; + float *output; + learning_rate_policy policy; + int benchmark_layers; + int *total_bbox; + int *rewritten_bbox; + + float learning_rate; + float learning_rate_min; + float learning_rate_max; + int batches_per_cycle; + int batches_cycle_mult; + float momentum; + float decay; + float gamma; + float scale; + float power; + int time_steps; + int step; + int max_batches; + int num_boxes; + int train_images_num; + float *seq_scales; + float *scales; + int *steps; + int num_steps; + int burn_in; + int cudnn_half; + + int adam; + float B1; + float B2; + float eps; + + int inputs; + int outputs; + int truths; + int notruth; + int h, w, c; + int max_crop; + int min_crop; + float max_ratio; + float min_ratio; + int center; + int flip; // horizontal flip 50% probability augmentaiont for classifier training (default = 1) + int gaussian_noise; + int blur; + int mixup; + float label_smooth_eps; + int resize_step; + int attention; + int adversarial; + float adversarial_lr; + float max_chart_loss; + int letter_box; + int mosaic_bound; + int contrastive; + int contrastive_jit_flip; + int contrastive_color; + int unsupervised; + float angle; + float aspect; + float exposure; + float saturation; + float hue; + int random; + int track; + int augment_speed; + int sequential_subdivisions; + int init_sequential_subdivisions; + int current_subdivision; + int try_fix_nan; + + int gpu_index; + tree *hierarchy; + + float *input; + float *truth; + float *delta; + float *workspace; + int train; + int index; + float *cost; + float clip; + +//#ifdef GPU + //float *input_gpu; + //float *truth_gpu; + float *delta_gpu; + float *output_gpu; + + float *input_state_gpu; + float *input_pinned_cpu; + int input_pinned_cpu_flag; + + float **input_gpu; + float **truth_gpu; + float **input16_gpu; + float **output16_gpu; + size_t *max_input16_size; + size_t *max_output16_size; + int wait_stream; + + void *cuda_graph; + void *cuda_graph_exec; + int use_cuda_graph; + int *cuda_graph_ready; + + float *global_delta_gpu; + float *state_delta_gpu; + size_t max_delta_gpu_size; +//#endif // GPU + int optimized_memory; + int dynamic_minibatch; + size_t workspace_size_limit; +} network; + +// network.h +typedef struct network_state { + float *truth; + float *input; + float *delta; + float *workspace; + int train; + int index; + network net; +} network_state; + +//typedef struct { +// int w; +// int h; +// float scale; +// float rad; +// float dx; +// float dy; +// float aspect; +//} augment_args; + +// image.h +typedef struct image { + int w; + int h; + int c; + float *data; +} image; + +//typedef struct { +// int w; +// int h; +// int c; +// float *data; +//} image; + +// box.h +typedef struct box { + float x, y, w, h; +} box; + +// box.h +typedef struct boxabs { + float left, right, top, bot; +} boxabs; + +// box.h +typedef struct dxrep { + float dt, db, dl, dr; +} dxrep; + +// box.h +typedef struct ious { + float iou, giou, diou, ciou; + dxrep dx_iou; + dxrep dx_giou; +} ious; + + +// box.h +typedef struct detection{ + box bbox; + int classes; + float *prob; + float *mask; + float objectness; + int sort_class; + float *uc; // Gaussian_YOLOv3 - tx,ty,tw,th uncertainty + int points; // bit-0 - center, bit-1 - top-left-corner, bit-2 - bottom-right-corner + float *embeddings; // embeddings for tracking + int embedding_size; + float sim; + int track_id; +} detection; + +// network.c -batch inference +typedef struct det_num_pair { + int num; + detection *dets; +} det_num_pair, *pdet_num_pair; + +// matrix.h +typedef struct matrix { + int rows, cols; + float **vals; +} matrix; + +// data.h +typedef struct data { + int w, h; + matrix X; + matrix y; + int shallow; + int *num_boxes; + box **boxes; +} data; + +// data.h +typedef enum { + CLASSIFICATION_DATA, DETECTION_DATA, CAPTCHA_DATA, REGION_DATA, IMAGE_DATA, COMPARE_DATA, WRITING_DATA, SWAG_DATA, TAG_DATA, OLD_CLASSIFICATION_DATA, STUDY_DATA, DET_DATA, SUPER_DATA, LETTERBOX_DATA, REGRESSION_DATA, SEGMENTATION_DATA, INSTANCE_DATA, ISEG_DATA +} data_type; + +// data.h +typedef struct load_args { + int threads; + char **paths; + char *path; + int n; + int m; + char **labels; + int h; + int w; + int c; // color depth + int out_w; + int out_h; + int nh; + int nw; + int num_boxes; + int truth_size; + int min, max, size; + int classes; + int background; + int scale; + int center; + int coords; + int mini_batch; + int track; + int augment_speed; + int letter_box; + int mosaic_bound; + int show_imgs; + int dontuse_opencv; + int contrastive; + int contrastive_jit_flip; + int contrastive_color; + float jitter; + float resize; + int flip; + int gaussian_noise; + int blur; + int mixup; + float label_smooth_eps; + float angle; + float aspect; + float saturation; + float exposure; + float hue; + data *d; + image *im; + image *resized; + data_type type; + tree *hierarchy; +} load_args; + +// data.h +typedef struct box_label { + int id; + int track_id; + float x, y, w, h; + float left, right, top, bottom; +} box_label; + +// list.h +//typedef struct node { +// void *val; +// struct node *next; +// struct node *prev; +//} node; + +// list.h +//typedef struct list { +// int size; +// node *front; +// node *back; +//} list; +// ----------------------------------------------------- + + +// parser.c +LIB_API network *load_network(char *cfg, char *weights, int clear); +LIB_API network *load_network_custom(char *cfg, char *weights, int clear, int batch); +LIB_API network *load_network(char *cfg, char *weights, int clear); +LIB_API void free_network(network net); +LIB_API void free_network_ptr(network* net); + +// network.c +LIB_API load_args get_base_args(network *net); + +// box.h +LIB_API void do_nms_sort(detection *dets, int total, int classes, float thresh); +LIB_API void do_nms_obj(detection *dets, int total, int classes, float thresh); +LIB_API void diounms_sort(detection *dets, int total, int classes, float thresh, NMS_KIND nms_kind, float beta1); + +// network.h +LIB_API float *network_predict(network net, float *input); +LIB_API float *network_predict_ptr(network *net, float *input); +LIB_API detection *get_network_boxes(network *net, int w, int h, float thresh, float hier, int *map, int relative, int *num, int letter); +LIB_API det_num_pair* network_predict_batch(network *net, image im, int batch_size, int w, int h, float thresh, float hier, int *map, int relative, int letter); +LIB_API void free_detections(detection *dets, int n); +LIB_API void free_batch_detections(det_num_pair *det_num_pairs, int n); +LIB_API void fuse_conv_batchnorm(network net); +LIB_API void calculate_binary_weights(network net); +LIB_API char *detection_to_json(detection *dets, int nboxes, int classes, char **names, long long int frame_id, char *filename); + +LIB_API layer* get_network_layer(network* net, int i); +//LIB_API detection *get_network_boxes(network *net, int w, int h, float thresh, float hier, int *map, int relative, int *num, int letter); +LIB_API detection *make_network_boxes(network *net, float thresh, int *num); +LIB_API void reset_rnn(network *net); +LIB_API float *network_predict_image(network *net, image im); +LIB_API float *network_predict_image_letterbox(network *net, image im); +LIB_API float validate_detector_map(char *datacfg, char *cfgfile, char *weightfile, float thresh_calc_avg_iou, const float iou_thresh, const int map_points, int letter_box, network *existing_net); +LIB_API void train_detector(char *datacfg, char *cfgfile, char *weightfile, int *gpus, int ngpus, int clear, int dont_show, int calc_map, int mjpeg_port, int show_imgs, int benchmark_layers, char* chart_path); +LIB_API void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filename, float thresh, + float hier_thresh, int dont_show, int ext_output, int save_labels, char *outfile, int letter_box, int benchmark_layers); +LIB_API int network_width(network *net); +LIB_API int network_height(network *net); +LIB_API void optimize_picture(network *net, image orig, int max_layer, float scale, float rate, float thresh, int norm); + +// image.h +LIB_API void make_image_red(image im); +LIB_API image make_attention_image(int img_size, float *original_delta_cpu, float *original_input_cpu, int w, int h, int c); +LIB_API image resize_image(image im, int w, int h); +LIB_API void quantize_image(image im); +LIB_API void copy_image_from_bytes(image im, char *pdata); +LIB_API image letterbox_image(image im, int w, int h); +LIB_API void rgbgr_image(image im); +LIB_API image make_image(int w, int h, int c); +LIB_API image load_image_color(char *filename, int w, int h); +LIB_API void free_image(image m); +LIB_API image crop_image(image im, int dx, int dy, int w, int h); +LIB_API image resize_min(image im, int min); + +// layer.h +LIB_API void free_layer_custom(layer l, int keep_cudnn_desc); +LIB_API void free_layer(layer l); + +// data.c +LIB_API void free_data(data d); +LIB_API pthread_t load_data(load_args args); +LIB_API void free_load_threads(void *ptr); +LIB_API pthread_t load_data_in_thread(load_args args); +LIB_API void *load_thread(void *ptr); + +// dark_cuda.h +LIB_API void cuda_pull_array(float *x_gpu, float *x, size_t n); +LIB_API void cuda_pull_array_async(float *x_gpu, float *x, size_t n); +LIB_API void cuda_set_device(int n); +LIB_API void *cuda_get_context(); + +// utils.h +LIB_API void free_ptrs(void **ptrs, int n); +LIB_API void top_k(float *a, int n, int k, int *index); + +// tree.h +LIB_API tree *read_tree(char *filename); + +// option_list.h +LIB_API metadata get_metadata(char *file); + + +// http_stream.h +LIB_API void delete_json_sender(); +LIB_API void send_json_custom(char const* send_buf, int port, int timeout); +LIB_API double get_time_point(); +void start_timer(); +void stop_timer(); +double get_time(); +void stop_timer_and_show(); +void stop_timer_and_show_name(char *name); +void show_total_time(); + +LIB_API void set_track_id(detection *new_dets, int new_dets_num, float thresh, float sim_thresh, float track_ciou_norm, int deque_size, int dets_for_track, int dets_for_show); +LIB_API int fill_remaining_id(detection *new_dets, int new_dets_num, int new_track_id, float thresh); + + +// gemm.h +LIB_API void init_cpu(); + +#ifdef __cplusplus +} +#endif // __cplusplus +#endif // DARKNET_API -- Gitblit v1.8.0