From 0f645836f193e75c4c3b718369e6fab15b5d19c5 Mon Sep 17 00:00:00 2001
From: Joseph Redmon <pjreddie@gmail.com>
Date: Wed, 11 Feb 2015 03:41:03 +0000
Subject: [PATCH] Detection is back, baby\!
---
src/network.c | 61 +++++++++++++++++++++++++-----
1 files changed, 50 insertions(+), 11 deletions(-)
diff --git a/src/network.c b/src/network.c
index 2ec0881..bf0d63f 100644
--- a/src/network.c
+++ b/src/network.c
@@ -8,6 +8,7 @@
#include "crop_layer.h"
#include "connected_layer.h"
#include "convolutional_layer.h"
+#include "deconvolutional_layer.h"
#include "maxpool_layer.h"
#include "cost_layer.h"
#include "normalization_layer.h"
@@ -20,6 +21,8 @@
switch(a){
case CONVOLUTIONAL:
return "convolutional";
+ case DECONVOLUTIONAL:
+ return "deconvolutional";
case CONNECTED:
return "connected";
case MAXPOOL:
@@ -68,6 +71,11 @@
forward_convolutional_layer(layer, input);
input = layer.output;
}
+ else if(net.types[i] == DECONVOLUTIONAL){
+ deconvolutional_layer layer = *(deconvolutional_layer *)net.layers[i];
+ forward_deconvolutional_layer(layer, input);
+ input = layer.output;
+ }
else if(net.types[i] == CONNECTED){
connected_layer layer = *(connected_layer *)net.layers[i];
forward_connected_layer(layer, input);
@@ -122,14 +130,9 @@
convolutional_layer layer = *(convolutional_layer *)net.layers[i];
update_convolutional_layer(layer);
}
- else if(net.types[i] == MAXPOOL){
- //maxpool_layer layer = *(maxpool_layer *)net.layers[i];
- }
- else if(net.types[i] == SOFTMAX){
- //maxpool_layer layer = *(maxpool_layer *)net.layers[i];
- }
- else if(net.types[i] == NORMALIZATION){
- //maxpool_layer layer = *(maxpool_layer *)net.layers[i];
+ else if(net.types[i] == DECONVOLUTIONAL){
+ deconvolutional_layer layer = *(deconvolutional_layer *)net.layers[i];
+ update_deconvolutional_layer(layer);
}
else if(net.types[i] == CONNECTED){
connected_layer layer = *(connected_layer *)net.layers[i];
@@ -143,6 +146,9 @@
if(net.types[i] == CONVOLUTIONAL){
convolutional_layer layer = *(convolutional_layer *)net.layers[i];
return layer.output;
+ } else if(net.types[i] == DECONVOLUTIONAL){
+ deconvolutional_layer layer = *(deconvolutional_layer *)net.layers[i];
+ return layer.output;
} else if(net.types[i] == MAXPOOL){
maxpool_layer layer = *(maxpool_layer *)net.layers[i];
return layer.output;
@@ -178,6 +184,9 @@
if(net.types[i] == CONVOLUTIONAL){
convolutional_layer layer = *(convolutional_layer *)net.layers[i];
return layer.delta;
+ } else if(net.types[i] == DECONVOLUTIONAL){
+ deconvolutional_layer layer = *(deconvolutional_layer *)net.layers[i];
+ return layer.delta;
} else if(net.types[i] == MAXPOOL){
maxpool_layer layer = *(maxpool_layer *)net.layers[i];
return layer.delta;
@@ -247,9 +256,13 @@
prev_input = get_network_output_layer(net, i-1);
prev_delta = get_network_delta_layer(net, i-1);
}
+
if(net.types[i] == CONVOLUTIONAL){
convolutional_layer layer = *(convolutional_layer *)net.layers[i];
backward_convolutional_layer(layer, prev_input, prev_delta);
+ } else if(net.types[i] == DECONVOLUTIONAL){
+ deconvolutional_layer layer = *(deconvolutional_layer *)net.layers[i];
+ backward_deconvolutional_layer(layer, prev_input, prev_delta);
}
else if(net.types[i] == MAXPOOL){
maxpool_layer layer = *(maxpool_layer *)net.layers[i];
@@ -377,6 +390,9 @@
if(net->types[i] == CONVOLUTIONAL){
convolutional_layer *layer = (convolutional_layer *)net->layers[i];
layer->batch = b;
+ }else if(net->types[i] == DECONVOLUTIONAL){
+ deconvolutional_layer *layer = (deconvolutional_layer *)net->layers[i];
+ layer->batch = b;
}
else if(net->types[i] == MAXPOOL){
maxpool_layer *layer = (maxpool_layer *)net->layers[i];
@@ -415,6 +431,10 @@
convolutional_layer layer = *(convolutional_layer *)net.layers[i];
return layer.h*layer.w*layer.c;
}
+ if(net.types[i] == DECONVOLUTIONAL){
+ deconvolutional_layer layer = *(deconvolutional_layer *)net.layers[i];
+ return layer.h*layer.w*layer.c;
+ }
else if(net.types[i] == MAXPOOL){
maxpool_layer layer = *(maxpool_layer *)net.layers[i];
return layer.h*layer.w*layer.c;
@@ -448,6 +468,11 @@
image output = get_convolutional_image(layer);
return output.h*output.w*output.c;
}
+ else if(net.types[i] == DECONVOLUTIONAL){
+ deconvolutional_layer layer = *(deconvolutional_layer *)net.layers[i];
+ image output = get_deconvolutional_image(layer);
+ return output.h*output.w*output.c;
+ }
else if(net.types[i] == MAXPOOL){
maxpool_layer layer = *(maxpool_layer *)net.layers[i];
image output = get_maxpool_image(layer);
@@ -483,21 +508,31 @@
for (i = 0; i < net.n; ++i){
if(net.types[i] == CONVOLUTIONAL){
convolutional_layer *layer = (convolutional_layer *)net.layers[i];
- resize_convolutional_layer(layer, h, w, c);
+ resize_convolutional_layer(layer, h, w);
image output = get_convolutional_image(*layer);
h = output.h;
w = output.w;
c = output.c;
+ } else if(net.types[i] == DECONVOLUTIONAL){
+ deconvolutional_layer *layer = (deconvolutional_layer *)net.layers[i];
+ resize_deconvolutional_layer(layer, h, w);
+ image output = get_deconvolutional_image(*layer);
+ h = output.h;
+ w = output.w;
+ c = output.c;
}else if(net.types[i] == MAXPOOL){
maxpool_layer *layer = (maxpool_layer *)net.layers[i];
- resize_maxpool_layer(layer, h, w, c);
+ resize_maxpool_layer(layer, h, w);
image output = get_maxpool_image(*layer);
h = output.h;
w = output.w;
c = output.c;
+ }else if(net.types[i] == DROPOUT){
+ dropout_layer *layer = (dropout_layer *)net.layers[i];
+ resize_dropout_layer(layer, h*w*c);
}else if(net.types[i] == NORMALIZATION){
normalization_layer *layer = (normalization_layer *)net.layers[i];
- resize_normalization_layer(layer, h, w, c);
+ resize_normalization_layer(layer, h, w);
image output = get_normalization_image(*layer);
h = output.h;
w = output.w;
@@ -527,6 +562,10 @@
convolutional_layer layer = *(convolutional_layer *)net.layers[i];
return get_convolutional_image(layer);
}
+ else if(net.types[i] == DECONVOLUTIONAL){
+ deconvolutional_layer layer = *(deconvolutional_layer *)net.layers[i];
+ return get_deconvolutional_image(layer);
+ }
else if(net.types[i] == MAXPOOL){
maxpool_layer layer = *(maxpool_layer *)net.layers[i];
return get_maxpool_image(layer);
--
Gitblit v1.10.0