Minor fix

This commit is contained in:
AlexeyAB
2020-03-26 02:34:01 +03:00
parent 9919612006
commit 8cb1f0c44f
3 changed files with 58 additions and 30 deletions

View File

@ -952,6 +952,8 @@ LIB_API int network_height(network *net);
LIB_API void optimize_picture(network *net, image orig, int max_layer, float scale, float rate, float thresh, int norm);
// image.h
LIB_API void make_image_red(image im);
LIB_API image make_attention_image(int img_size, float *original_delta_cpu, float *original_input_cpu, int w, int h, int c);
LIB_API image resize_image(image im, int w, int h);
LIB_API image quantize_image(image im);
LIB_API void copy_image_from_bytes(image im, char *pdata);

View File

@ -1310,6 +1310,59 @@ image quantize_image(image im)
for (i = 0; i < size; ++i) im.data[i] = (int)(im.data[i] * 255) / 255. + (0.5/255);
}
void make_image_red(image im)
{
int r, c, k;
for (r = 0; r < im.h; ++r) {
for (c = 0; c < im.w; ++c) {
float val = 0;
for (k = 0; k < im.c; ++k) {
val += get_pixel(im, c, r, k);
set_pixel(im, c, r, k, 0);
}
for (k = 0; k < im.c; ++k) {
//set_pixel(im, c, r, k, val);
}
set_pixel(im, c, r, 0, val);
}
}
}
image make_attention_image(int img_size, float *original_delta_cpu, float *original_input_cpu, int w, int h, int c)
{
image attention_img;
attention_img.w = w;
attention_img.h = h;
attention_img.c = c;
attention_img.data = original_delta_cpu;
make_image_red(attention_img);
int k;
float min_val = 999999, mean_val = 0, max_val = -999999;
for (k = 0; k < img_size; ++k) {
if (original_delta_cpu[k] < min_val) min_val = original_delta_cpu[k];
if (original_delta_cpu[k] > max_val) max_val = original_delta_cpu[k];
mean_val += original_delta_cpu[k];
}
mean_val = mean_val / img_size;
float range = max_val - min_val;
for (k = 0; k < img_size; ++k) {
float val = original_delta_cpu[k];
val = fabs(mean_val - val) / range;
original_delta_cpu[k] = val * 4;
}
image resized = resize_image(attention_img, w / 4, h / 4);
attention_img = resize_image(resized, w, h);
free_image(resized);
for (k = 0; k < img_size; ++k) attention_img.data[k] += original_input_cpu[k];
//normalize_image(attention_img);
//show_image(attention_img, "delta");
return attention_img;
}
image resize_image(image im, int w, int h)
{
if (im.w == w && im.h == h) return copy_image(im);

View File

@ -235,36 +235,9 @@ void backward_network_gpu(network net, network_state state)
cuda_pull_array(original_input, original_input_cpu, img_size);
cuda_pull_array(original_delta, original_delta_cpu, img_size);
image attention_img;
attention_img.w = net.w;
attention_img.h = net.h;
attention_img.c = net.c;
attention_img.data = original_delta_cpu;
int k;
float min_val = 999999, mean_val = 0, max_val = -999999;
for (k = 0; k < img_size; ++k) {
if (original_delta_cpu[k] < min_val) min_val = original_delta_cpu[k];
if (original_delta_cpu[k] > max_val) max_val = original_delta_cpu[k];
mean_val += original_delta_cpu[k];
}
mean_val = mean_val / img_size;
float range = max_val - min_val;
image attention_img = make_attention_image(img_size, original_delta_cpu, original_input_cpu, net.w, net.h, net.c);
show_image(attention_img, "attention_img");
for (k = 0; k < img_size; ++k) {
float val = original_delta_cpu[k];
val = fabs(mean_val - val) / range;
original_delta_cpu[k] = val * 4;
}
image resized = resize_image(attention_img, net.w/4, net.w/4);
attention_img = resize_image(resized, net.w, net.w);
for (k = 0; k < img_size; ++k) attention_img.data[k] += original_input_cpu[k];
//normalize_image(attention_img);
show_image(attention_img, "delta");
free_image(resized);
free_image(attention_img);
free(original_input_cpu);
@ -376,7 +349,7 @@ void forward_backward_network_gpu(network net, float *x, float *y)
float train_network_datum_gpu(network net, float *x, float *y)
{
*net.seen += net.batch;
if (net.adversarial_lr && rand_int(0, 1) == 1) {// && get_current_iteration(net) > net.burn_in) {
if (net.adversarial_lr && rand_int(0, 1) == 1 && get_current_iteration(net) > net.burn_in) {
net.adversarial = 1;
float lr_old = net.learning_rate;
net.learning_rate = net.adversarial_lr;