From ced198e9390195875d743d77eadece99c7fd5b38 Mon Sep 17 00:00:00 2001
From: AlexeyAB <alexeyab84@gmail.com>
Date: Mon, 19 Mar 2018 23:17:26 +0000
Subject: [PATCH] Fixed gpu_id for DLL/SO
---
src/data.c | 48 ++++++++++++++++++++++--------------------------
1 files changed, 22 insertions(+), 26 deletions(-)
diff --git a/src/data.c b/src/data.c
index f3fa04f..379756a 100644
--- a/src/data.c
+++ b/src/data.c
@@ -39,17 +39,6 @@
}
*/
-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*));
@@ -280,7 +269,7 @@
h = boxes[i].h;
id = boxes[i].id;
- if (w < .01 || h < .01) continue;
+ if (w < .001 || h < .001) continue;
int col = (int)(x*num_boxes);
int row = (int)(y*num_boxes);
@@ -303,7 +292,7 @@
free(boxes);
}
-void fill_truth_detection(char *path, int num_boxes, float *truth, int classes, int flip, float dx, float dy, float sx, float sy)
+void fill_truth_detection(char *path, int num_boxes, float *truth, int classes, int flip, float dx, float dy, float sx, float sy, int small_object)
{
char labelpath[4096];
find_replace(path, "images", "labels", labelpath);
@@ -315,13 +304,19 @@
find_replace(labelpath, ".JPG", ".txt", labelpath);
find_replace(labelpath, ".JPEG", ".txt", labelpath);
int count = 0;
+ int i;
box_label *boxes = read_boxes(labelpath, &count);
+ if (small_object == 1) {
+ for (i = 0; i < count; ++i) {
+ if (boxes[i].w < 0.01) boxes[i].w = 0.01;
+ if (boxes[i].h < 0.01) boxes[i].h = 0.01;
+ }
+ }
randomize_boxes(boxes, count);
correct_boxes(boxes, count, dx, dy, sx, sy, flip);
if(count > num_boxes) count = num_boxes;
float x,y,w,h;
int id;
- int i;
for (i = 0; i < count; ++i) {
x = boxes[i].x;
@@ -330,7 +325,8 @@
h = boxes[i].h;
id = boxes[i].id;
- if ((w < .01 || h < .01)) continue;
+ // not detect small objects
+ if ((w < 0.001 || h < 0.001)) continue;
truth[i*5+0] = x;
truth[i*5+1] = y;
@@ -672,7 +668,7 @@
return d;
}
-data load_data_detection(int n, char **paths, int m, int w, int h, int boxes, int classes, float jitter, float hue, float saturation, float exposure)
+data load_data_detection(int n, char **paths, int m, int w, int h, int boxes, int classes, float jitter, float hue, float saturation, float exposure, int small_object)
{
char **random_paths = get_random_paths(paths, n, m);
int i;
@@ -693,10 +689,10 @@
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;
@@ -715,7 +711,7 @@
random_distort_image(sized, hue, saturation, exposure);
d.X.vals[i] = sized.data;
- fill_truth_detection(random_paths[i], boxes, d.y.vals[i], classes, flip, dx, dy, 1./sx, 1./sy);
+ fill_truth_detection(random_paths[i], boxes, d.y.vals[i], classes, flip, dx, dy, 1./sx, 1./sy, small_object);
free_image(orig);
free_image(cropped);
@@ -745,7 +741,7 @@
} else if (a.type == REGION_DATA){
*a.d = load_data_region(a.n, a.paths, a.m, a.w, a.h, a.num_boxes, a.classes, a.jitter, a.hue, a.saturation, a.exposure);
} else if (a.type == DETECTION_DATA){
- *a.d = load_data_detection(a.n, a.paths, a.m, a.w, a.h, a.num_boxes, a.classes, a.jitter, a.hue, a.saturation, a.exposure);
+ *a.d = load_data_detection(a.n, a.paths, a.m, a.w, a.h, a.num_boxes, a.classes, a.jitter, a.hue, a.saturation, a.exposure, a.small_object);
} else if (a.type == SWAG_DATA){
*a.d = load_data_swag(a.paths, a.n, a.classes, a.jitter);
} else if (a.type == COMPARE_DATA){
@@ -971,8 +967,8 @@
for(i = 0; i < 10000; ++i){
unsigned char bytes[3073];
fread(bytes, 1, 3073, fp);
- int class = bytes[0];
- y.vals[i][class] = 1;
+ int class_id = bytes[0];
+ y.vals[i][class_id] = 1;
for(j = 0; j < X.cols; ++j){
X.vals[i][j] = (double)bytes[j+1];
}
@@ -1035,8 +1031,8 @@
for(i = 0; i < 10000; ++i){
unsigned char bytes[3073];
fread(bytes, 1, 3073, fp);
- int class = bytes[0];
- y.vals[i+b*10000][class] = 1;
+ int class_id = bytes[0];
+ y.vals[i+b*10000][class_id] = 1;
for(j = 0; j < X.cols; ++j){
X.vals[i+b*10000][j] = (double)bytes[j+1];
}
--
Gitblit v1.10.0