diff --git a/src/data.c b/src/data.c index b11ffff3..ad9ef8bf 100644 --- a/src/data.c +++ b/src/data.c @@ -39,17 +39,6 @@ char **get_random_paths_indexes(char **paths, int n, int m, int *indexes) } */ -inline unsigned int random_gen() -{ - unsigned int Num = 0; -#ifdef WIN32 - rand_s(&Num); -#else - Num = rand(); -#endif - return Num; -} - char **get_random_paths(char **paths, int n, int m) { char **random_paths = calloc(n, sizeof(char*)); @@ -693,10 +682,10 @@ data load_data_detection(int n, char **paths, int m, int w, int h, int boxes, in int dw = (ow*jitter); int dh = (oh*jitter); - int pleft = rand_uniform(-dw, dw); - int pright = rand_uniform(-dw, dw); - int ptop = rand_uniform(-dh, dh); - int pbot = rand_uniform(-dh, dh); + int pleft = rand_uniform_strong(-dw, dw); + int pright = rand_uniform_strong(-dw, dw); + int ptop = rand_uniform_strong(-dh, dh); + int pbot = rand_uniform_strong(-dh, dh); int swidth = ow - pleft - pright; int sheight = oh - ptop - pbot; @@ -727,7 +716,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)); + //srand(time(0)); //printf("Loading data: %d\n", random_gen()); load_args a = *(struct load_args*)ptr; if(a.exposure == 0) a.exposure = 1; @@ -771,7 +760,7 @@ pthread_t load_data_in_thread(load_args args) void *load_threads(void *ptr) { - srand(time(0)); + //srand(time(0)); int i; load_args args = *(load_args *)ptr; if (args.threads == 0) args.threads = 1; diff --git a/src/image.c b/src/image.c index 5835b4b5..9efe2f65 100644 --- a/src/image.c +++ b/src/image.c @@ -1153,7 +1153,7 @@ void distort_image(image im, float hue, float sat, float val) void random_distort_image(image im, float hue, float saturation, float exposure) { - float dhue = rand_uniform(-hue, hue); + float dhue = rand_uniform_strong(-hue, hue); float dsat = rand_scale(saturation); float dexp = rand_scale(exposure); distort_image(im, dhue, dsat, dexp); diff --git a/src/utils.c b/src/utils.c index ec4f8ac3..05ad885f 100644 --- a/src/utils.c +++ b/src/utils.c @@ -607,12 +607,13 @@ float rand_uniform(float min, float max) max = swap; } return ((float)rand()/RAND_MAX * (max - min)) + min; + //return (random_float() * (max - min)) + min; } float rand_scale(float s) { - float scale = rand_uniform(1, s); - if(rand()%2) return scale; + float scale = rand_uniform_strong(1, s); + if(random_gen()%2) return scale; return 1./scale; } @@ -628,3 +629,32 @@ float **one_hot_encode(float *a, int n, int k) return t; } +unsigned int random_gen() +{ + unsigned int rnd = 0; +#ifdef WIN32 + rand_s(&rnd); +#else + rnd = rand(); +#endif + return rnd; +} + +float random_float() +{ +#ifdef WIN32 + return ((float)random_gen() / (float)UINT_MAX); +#else + return ((float)random_gen() / (float)RAND_MAX); +#endif +} + +float rand_uniform_strong(float min, float max) +{ + if (max < min) { + float swap = min; + min = max; + max = swap; + } + return (random_float() * (max - min)) + min; +} \ No newline at end of file diff --git a/src/utils.h b/src/utils.h index f569d77c..9949d6d0 100644 --- a/src/utils.h +++ b/src/utils.h @@ -63,6 +63,9 @@ int find_arg(int argc, char* argv[], char *arg); char *find_char_arg(int argc, char **argv, char *arg, char *def); int sample_array(float *a, int n); void print_statistics(float *a, int n); +unsigned int random_gen(); +float random_float(); +float rand_uniform_strong(float min, float max); #endif