From 003183d3fdda98a94844c1395ab626e120f07fbe Mon Sep 17 00:00:00 2001 From: julienChemillier Date: Sun, 14 May 2023 19:00:40 +0200 Subject: [PATCH] Add VGG16 architecture --- src/cnn/creation.c | 32 ++++++++++++++++++++++++++++++++ src/cnn/include/creation.h | 10 ++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/cnn/creation.c b/src/cnn/creation.c index 112ce7b..53728aa 100644 --- a/src/cnn/creation.c +++ b/src/cnn/creation.c @@ -62,6 +62,38 @@ Network* create_network_alexnet(float learning_rate, int dropout, int activation return network; } +Network* create_network_VGG16(float learning_rate, int dropout, int activation, int initialisation, int size_output) { + Network* network = create_network(23, learning_rate, dropout, initialisation, 256, 3); + add_convolution(network, 3, 64, 1, 0, activation); // Conv3-64 + add_convolution(network, 3, 64, 1, 0, activation); // Conv3-64 + add_average_pooling(network, 2, 2, 0); // Max Pool + + add_convolution(network, 3, 128, 1, 0, activation); // Conv3-128 + add_convolution(network, 1, 128, 1, 0, activation); // Conv1-128 + add_average_pooling(network, 2, 2, 0); // Max Pool + + add_convolution(network, 3, 256, 1, 0, activation); // Conv3-256 + add_convolution(network, 3, 256, 1, 0, activation); // Conv3-256 + add_convolution(network, 1, 256, 1, 0, activation); // Conv1-256 + add_average_pooling(network, 2, 2, 0); // Max Pool + + add_convolution(network, 3, 512, 1, 0, activation); // Conv3-512 + add_convolution(network, 3, 512, 1, 0, activation); // Conv3-512 + add_convolution(network, 1, 512, 1, 0, activation); // Conv1-512 + add_average_pooling(network, 2, 2, 0); // Max Pool + + add_convolution(network, 3, 512, 1, 0, activation); // Conv3-512 + add_convolution(network, 3, 512, 1, 0, activation); // Conv3-512 + add_convolution(network, 1, 512, 1, 0, activation); // Conv1-512 + add_average_pooling(network, 2, 2, 0); // Max Pool + + add_dense_linearisation(network, 2048, activation); + add_dense(network, 2048, activation); + add_dense(network, 256, activation); + add_dense(network, size_output, SOFTMAX); + return network; +} + Network* create_simple_one(float learning_rate, int dropout, int activation, int initialisation, int input_width, int input_depth) { Network* network = create_network(3, learning_rate, dropout, initialisation, input_width, input_depth); add_dense_linearisation(network, 80, activation); diff --git a/src/cnn/include/creation.h b/src/cnn/include/creation.h index e55f6d0..0c1bca1 100644 --- a/src/cnn/include/creation.h +++ b/src/cnn/include/creation.h @@ -15,11 +15,17 @@ Network* create_network(int max_size, float learning_rate, int dropout, int init Network* create_network_lenet5(float learning_rate, int dropout, int activation, int initialisation, int input_width, int input_depth); /* -* Renvoie un réseau suivante l'architecture AlexNet -* C'est à dire une entrée de 3x227x227 et une sortie de taille 'size_output' +* Renvoie un réseau suivant l'architecture AlexNet +* C'est à dire en entrée 3x227x227 et une sortie de taille 'size_output' */ Network* create_network_alexnet(float learning_rate, int dropout, int activation, int initialisation, int size_output); +/* +* Renvoie un réseau suivant l'architecture VGG16 modifiée pour prendre en entrée 3x256x256 +* et une sortie de taille 'size_output' +*/ +Network* create_network_VGG16(float learning_rate, int dropout, int activation, int initialisation, int size_output); + /* * Renvoie un réseau sans convolution, similaire à celui utilisé dans src/dense */