From 2baa7bde542ed490f8ab35c82dd3174fddea63f3 Mon Sep 17 00:00:00 2001
From: AlexeyAB <alexeyab84@gmail.com>
Date: Fri, 15 Sep 2017 17:31:48 +0000
Subject: [PATCH] Fixed classifier for AlexNet and Resnet50
---
src/network.c | 1 +
src/image.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
src/classifier.c | 5 +++--
src/image.h | 3 +++
4 files changed, 53 insertions(+), 2 deletions(-)
diff --git a/src/classifier.c b/src/classifier.c
index 5e718c5..37f02d5 100644
--- a/src/classifier.c
+++ b/src/classifier.c
@@ -706,8 +706,9 @@
strtok(input, "\n");
}
image im = load_image_color(input, 0, 0);
- image r = resize_min(im, size);
- resize_network(&net, r.w, r.h);
+ image r = letterbox_image(im, net.w, net.h);
+ //image r = resize_min(im, size);
+ //resize_network(&net, r.w, r.h);
printf("%d %d\n", r.w, r.h);
float *X = r.data;
diff --git a/src/image.c b/src/image.c
index d44bb77..75364e1 100644
--- a/src/image.c
+++ b/src/image.c
@@ -883,6 +883,51 @@
#endif
}
+void fill_image(image m, float s)
+{
+ int i;
+ for (i = 0; i < m.h*m.w*m.c; ++i) m.data[i] = s;
+}
+
+void letterbox_image_into(image im, int w, int h, image boxed)
+{
+ int new_w = im.w;
+ int new_h = im.h;
+ if (((float)w / im.w) < ((float)h / im.h)) {
+ new_w = w;
+ new_h = (im.h * w) / im.w;
+ }
+ else {
+ new_h = h;
+ new_w = (im.w * h) / im.h;
+ }
+ image resized = resize_image(im, new_w, new_h);
+ embed_image(resized, boxed, (w - new_w) / 2, (h - new_h) / 2);
+ free_image(resized);
+}
+
+image letterbox_image(image im, int w, int h)
+{
+ int new_w = im.w;
+ int new_h = im.h;
+ if (((float)w / im.w) < ((float)h / im.h)) {
+ new_w = w;
+ new_h = (im.h * w) / im.w;
+ }
+ else {
+ new_h = h;
+ new_w = (im.w * h) / im.h;
+ }
+ image resized = resize_image(im, new_w, new_h);
+ image boxed = make_image(w, h, im.c);
+ fill_image(boxed, .5);
+ //int i;
+ //for(i = 0; i < boxed.w*boxed.h*boxed.c; ++i) boxed.data[i] = 0;
+ embed_image(resized, boxed, (w - new_w) / 2, (h - new_h) / 2);
+ free_image(resized);
+ return boxed;
+}
+
image resize_max(image im, int max)
{
int w = im.w;
@@ -1312,6 +1357,7 @@
#ifndef CV_VERSION_EPOCH
image out = load_image_stb(filename, c); // OpenCV 3.x
+ //image out = load_image_cv(filename, c);
#else
image out = load_image_cv(filename, c); // OpenCV 2.4.x
#endif
diff --git a/src/image.h b/src/image.h
index 39c3962..165a624 100644
--- a/src/image.h
+++ b/src/image.h
@@ -30,6 +30,9 @@
image random_augment_image(image im, float angle, float aspect, int low, int high, int size);
void random_distort_image(image im, float hue, float saturation, float exposure);
image resize_image(image im, int w, int h);
+void fill_image(image m, float s);
+void letterbox_image_into(image im, int w, int h, image boxed);
+image letterbox_image(image im, int w, int h);
image resize_min(image im, int min);
image resize_max(image im, int max);
void translate_image(image m, float s);
diff --git a/src/network.c b/src/network.c
index 79940e6..2d755ae 100644
--- a/src/network.c
+++ b/src/network.c
@@ -356,6 +356,7 @@
}else if(l.type == COST){
resize_cost_layer(&l, inputs);
}else{
+ fprintf(stderr, "Resizing type %d \n", (int)l.type);
error("Cannot resize this type of layer");
}
if(l.workspace_size > workspace_size) workspace_size = l.workspace_size;
--
Gitblit v1.10.0