From a71bdd7a83e33f28d91b88551b291627728ee3e7 Mon Sep 17 00:00:00 2001 From: AlexeyAB Date: Tue, 14 Mar 2017 19:11:34 +0300 Subject: [PATCH] Fixed training with rand_s() --- src/data.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/data.c b/src/data.c index 311f882c..c64bbcee 100644 --- a/src/data.c +++ b/src/data.c @@ -29,7 +29,7 @@ char **get_random_paths_indexes(char **paths, int n, int m, int *indexes) int i; pthread_mutex_lock(&mutex); for(i = 0; i < n; ++i){ - int index = rand()%m; + int index = random_gen()%m; indexes[i] = index; random_paths[i] = paths[index]; if(i == 0) printf("%s\n", paths[index]); @@ -39,23 +39,25 @@ char **get_random_paths_indexes(char **paths, int n, int m, int *indexes) } */ -int mt_seed = 0; +inline unsigned int random_gen() +{ + unsigned int Num = 0; + rand_s(&Num); + return Num; +} char **get_random_paths(char **paths, int n, int m) { char **random_paths = calloc(n, sizeof(char*)); int i; pthread_mutex_lock(&mutex); - if (mt_seed == 0) mt_seed = time(0); - srand(mt_seed); //printf("n = %d \n", n); for(i = 0; i < n; ++i){ - int index = rand()%m; + int index = random_gen() % m; random_paths[i] = paths[index]; //if(i == 0) printf("%s\n", paths[index]); //printf("grp: %s\n", paths[index]); } - mt_seed = rand(); pthread_mutex_unlock(&mutex); return random_paths; } @@ -120,7 +122,7 @@ matrix load_image_augment_paths(char **paths, int n, int min, int max, int size, for(i = 0; i < n; ++i){ image im = load_image_color(paths[i], 0, 0); image crop = random_augment_image(im, angle, aspect, min, max, size); - int flip = rand()%2; + int flip = random_gen()%2; if (flip) flip_image(crop); random_distort_image(crop, hue, saturation, exposure); @@ -168,7 +170,7 @@ void randomize_boxes(box_label *b, int n) int i; for(i = 0; i < n; ++i){ box_label swap = b[i]; - int index = rand()%n; + int index = random_gen()%n; b[i] = b[index]; b[index] = swap; } @@ -529,7 +531,7 @@ data load_data_region(int n, char **paths, int m, int w, int h, int size, int cl float sx = (float)swidth / ow; float sy = (float)sheight / oh; - int flip = rand()%2; + int flip = random_gen()%2; image cropped = crop_image(orig, pleft, ptop, swidth, sheight); float dx = ((float)pleft/ow)/sx; @@ -615,7 +617,7 @@ data load_data_compare(int n, char **paths, int m, int classes, int w, int h) data load_data_swag(char **paths, int n, int classes, float jitter) { - int index = rand()%n; + int index = random_gen()%n; char *random_path = paths[index]; image orig = load_image_color(random_path, 0, 0); @@ -648,7 +650,7 @@ data load_data_swag(char **paths, int n, int classes, float jitter) float sx = (float)swidth / w; float sy = (float)sheight / h; - int flip = rand()%2; + int flip = random_gen()%2; image cropped = crop_image(orig, pleft, ptop, swidth, sheight); float dx = ((float)pleft/w)/sx; @@ -698,7 +700,7 @@ data load_data_detection(int n, char **paths, int m, int w, int h, int boxes, in float sx = (float)swidth / ow; float sy = (float)sheight / oh; - int flip = rand()%2; + int flip = random_gen()%2; image cropped = crop_image(orig, pleft, ptop, swidth, sheight); float dx = ((float)pleft/ow)/sx; @@ -722,7 +724,7 @@ data load_data_detection(int n, char **paths, int m, int w, int h, int boxes, in void *load_thread(void *ptr) { srand(time(0)); - //printf("Loading data: %d\n", rand()); + //printf("Loading data: %d\n", random_gen()); load_args a = *(struct load_args*)ptr; if(a.exposure == 0) a.exposure = 1; if(a.saturation == 0) a.saturation = 1; @@ -860,7 +862,7 @@ data load_data_super(char **paths, int n, int m, int w, int h, int scale) for(i = 0; i < n; ++i){ image im = load_image_color(paths[i], 0, 0); image crop = random_crop_image(im, w*scale, h*scale); - int flip = rand()%2; + int flip = random_gen()%2; if (flip) flip_image(crop); image resize = resize_image(crop, w, h); d.X.vals[i] = resize.data; @@ -982,7 +984,7 @@ void get_random_batch(data d, int n, float *X, float *y) { int j; for(j = 0; j < n; ++j){ - int index = rand()%d.X.rows; + int index = random_gen()%d.X.rows; memcpy(X+j*d.X.cols, d.X.vals[index], d.X.cols*sizeof(float)); memcpy(y+j*d.y.cols, d.y.vals[index], d.y.cols*sizeof(float)); } @@ -1095,7 +1097,7 @@ void randomize_data(data d) { int i; for(i = d.X.rows-1; i > 0; --i){ - int index = rand()%i; + int index = random_gen()%i; float *swap = d.X.vals[index]; d.X.vals[index] = d.X.vals[i]; d.X.vals[i] = swap; @@ -1159,7 +1161,7 @@ data get_random_data(data d, int num) int i; for(i = 0; i < num; ++i){ - int index = rand()%d.X.rows; + int index = random_gen()%d.X.rows; r.X.vals[i] = d.X.vals[index]; r.y.vals[i] = d.y.vals[index]; }