Fixed training with rand_s()

pull/72/head
AlexeyAB 8 years ago
parent ac2f54af5e
commit a71bdd7a83
  1. 36
      src/data.c

@ -29,7 +29,7 @@ char **get_random_paths_indexes(char **paths, int n, int m, int *indexes)
int i; int i;
pthread_mutex_lock(&mutex); pthread_mutex_lock(&mutex);
for(i = 0; i < n; ++i){ for(i = 0; i < n; ++i){
int index = rand()%m; int index = random_gen()%m;
indexes[i] = index; indexes[i] = index;
random_paths[i] = paths[index]; random_paths[i] = paths[index];
if(i == 0) printf("%s\n", 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 **get_random_paths(char **paths, int n, int m)
{ {
char **random_paths = calloc(n, sizeof(char*)); char **random_paths = calloc(n, sizeof(char*));
int i; int i;
pthread_mutex_lock(&mutex); pthread_mutex_lock(&mutex);
if (mt_seed == 0) mt_seed = time(0);
srand(mt_seed);
//printf("n = %d \n", n); //printf("n = %d \n", n);
for(i = 0; i < n; ++i){ for(i = 0; i < n; ++i){
int index = rand()%m; int index = random_gen() % m;
random_paths[i] = paths[index]; random_paths[i] = paths[index];
//if(i == 0) printf("%s\n", paths[index]); //if(i == 0) printf("%s\n", paths[index]);
//printf("grp: %s\n", paths[index]); //printf("grp: %s\n", paths[index]);
} }
mt_seed = rand();
pthread_mutex_unlock(&mutex); pthread_mutex_unlock(&mutex);
return random_paths; 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){ for(i = 0; i < n; ++i){
image im = load_image_color(paths[i], 0, 0); image im = load_image_color(paths[i], 0, 0);
image crop = random_augment_image(im, angle, aspect, min, max, size); 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); if (flip) flip_image(crop);
random_distort_image(crop, hue, saturation, exposure); random_distort_image(crop, hue, saturation, exposure);
@ -168,7 +170,7 @@ void randomize_boxes(box_label *b, int n)
int i; int i;
for(i = 0; i < n; ++i){ for(i = 0; i < n; ++i){
box_label swap = b[i]; box_label swap = b[i];
int index = rand()%n; int index = random_gen()%n;
b[i] = b[index]; b[i] = b[index];
b[index] = swap; 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 sx = (float)swidth / ow;
float sy = (float)sheight / oh; float sy = (float)sheight / oh;
int flip = rand()%2; int flip = random_gen()%2;
image cropped = crop_image(orig, pleft, ptop, swidth, sheight); image cropped = crop_image(orig, pleft, ptop, swidth, sheight);
float dx = ((float)pleft/ow)/sx; 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) 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]; char *random_path = paths[index];
image orig = load_image_color(random_path, 0, 0); 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 sx = (float)swidth / w;
float sy = (float)sheight / h; float sy = (float)sheight / h;
int flip = rand()%2; int flip = random_gen()%2;
image cropped = crop_image(orig, pleft, ptop, swidth, sheight); image cropped = crop_image(orig, pleft, ptop, swidth, sheight);
float dx = ((float)pleft/w)/sx; 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 sx = (float)swidth / ow;
float sy = (float)sheight / oh; float sy = (float)sheight / oh;
int flip = rand()%2; int flip = random_gen()%2;
image cropped = crop_image(orig, pleft, ptop, swidth, sheight); image cropped = crop_image(orig, pleft, ptop, swidth, sheight);
float dx = ((float)pleft/ow)/sx; 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) void *load_thread(void *ptr)
{ {
srand(time(0)); srand(time(0));
//printf("Loading data: %d\n", rand()); //printf("Loading data: %d\n", random_gen());
load_args a = *(struct load_args*)ptr; load_args a = *(struct load_args*)ptr;
if(a.exposure == 0) a.exposure = 1; if(a.exposure == 0) a.exposure = 1;
if(a.saturation == 0) a.saturation = 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){ for(i = 0; i < n; ++i){
image im = load_image_color(paths[i], 0, 0); image im = load_image_color(paths[i], 0, 0);
image crop = random_crop_image(im, w*scale, h*scale); image crop = random_crop_image(im, w*scale, h*scale);
int flip = rand()%2; int flip = random_gen()%2;
if (flip) flip_image(crop); if (flip) flip_image(crop);
image resize = resize_image(crop, w, h); image resize = resize_image(crop, w, h);
d.X.vals[i] = resize.data; d.X.vals[i] = resize.data;
@ -982,7 +984,7 @@ void get_random_batch(data d, int n, float *X, float *y)
{ {
int j; int j;
for(j = 0; j < n; ++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(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)); 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; int i;
for(i = d.X.rows-1; i > 0; --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]; float *swap = d.X.vals[index];
d.X.vals[index] = d.X.vals[i]; d.X.vals[index] = d.X.vals[i];
d.X.vals[i] = swap; d.X.vals[i] = swap;
@ -1159,7 +1161,7 @@ data get_random_data(data d, int num)
int i; int i;
for(i = 0; i < num; ++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.X.vals[i] = d.X.vals[index];
r.y.vals[i] = d.y.vals[index]; r.y.vals[i] = d.y.vals[index];
} }

Loading…
Cancel
Save