En aquest tema, explorarem algunes de les arquitectures més avançades de xarxes neuronals convolucionals (CNNs) que han demostrat ser molt efectives en diverses tasques de visió per computador. Aquestes arquitectures han estat desenvolupades per abordar diferents problemes com la profunditat de la xarxa, la capacitat de generalització i l'eficiència computacional.

Contingut

  1. Introducció a les arquitectures avançades de CNN
  2. VGGNet
  3. Inception (GoogLeNet)
  4. ResNet
  5. DenseNet
  6. Exercicis pràctics
  7. Conclusió

  1. Introducció a les arquitectures avançades de CNN

Les arquitectures avançades de CNN han estat dissenyades per millorar el rendiment en tasques de classificació d'imatges, detecció d'objectes i segmentació d'imatges. Aquestes arquitectures sovint inclouen innovacions en la manera com es construeixen les capes convolucionals i com es connecten entre elles.

  1. VGGNet

Descripció

VGGNet, proposada per Simonyan i Zisserman en 2014, és coneguda per la seva simplicitat i profunditat. Utilitza capes convolucionals de 3x3 píxels amb un pas de 1 i padding de 1 píxel, seguides de capes de max-pooling de 2x2 amb un pas de 2.

Arquitectura

Capa Tipus Dimensions
1 Conv 3x3 64 filtres
2 Conv 3x3 64 filtres
3 Max-Pooling 2x2
4 Conv 3x3 128 filtres
5 Conv 3x3 128 filtres
6 Max-Pooling 2x2
... ... ...
16 FC 4096 neurones
17 FC 4096 neurones
18 FC 1000 neurones (sortida)

Implementació en TensorFlow

import tensorflow as tf
from tensorflow.keras import layers, models

def VGGNet(input_shape=(224, 224, 3), num_classes=1000):
    model = models.Sequential()
    model.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same', input_shape=input_shape))
    model.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same'))
    model.add(layers.MaxPooling2D((2, 2), strides=(2, 2)))
    
    model.add(layers.Conv2D(128, (3, 3), activation='relu', padding='same'))
    model.add(layers.Conv2D(128, (3, 3), activation='relu', padding='same'))
    model.add(layers.MaxPooling2D((2, 2), strides=(2, 2)))
    
    # Add more layers as needed...
    
    model.add(layers.Flatten())
    model.add(layers.Dense(4096, activation='relu'))
    model.add(layers.Dense(4096, activation='relu'))
    model.add(layers.Dense(num_classes, activation='softmax'))
    
    return model

model = VGGNet()
model.summary()

  1. Inception (GoogLeNet)

Descripció

Inception, també coneguda com GoogLeNet, va ser proposada per Szegedy et al. en 2014. La seva innovació principal és l'ús de mòduls Inception, que permeten a la xarxa decidir quines convolucions (1x1, 3x3, 5x5) són més adequades per a cada part de l'entrada.

Arquitectura

Capa Tipus Dimensions
1 Conv 7x7 64 filtres
2 Max-Pooling 3x3
3 Conv 1x1 64 filtres
4 Conv 3x3 192 filtres
5 Max-Pooling 3x3
6 Inception 256 filtres
... ... ...
22 FC 1000 neurones (sortida)

Implementació en TensorFlow

def inception_module(x, filters):
    f1, f3_r, f3, f5_r, f5, proj = filters
    
    conv1 = layers.Conv2D(f1, (1, 1), padding='same', activation='relu')(x)
    
    conv3 = layers.Conv2D(f3_r, (1, 1), padding='same', activation='relu')(x)
    conv3 = layers.Conv2D(f3, (3, 3), padding='same', activation='relu')(conv3)
    
    conv5 = layers.Conv2D(f5_r, (1, 1), padding='same', activation='relu')(x)
    conv5 = layers.Conv2D(f5, (5, 5), padding='same', activation='relu')(conv5)
    
    pool_proj = layers.MaxPooling2D((3, 3), strides=(1, 1), padding='same')(x)
    pool_proj = layers.Conv2D(proj, (1, 1), padding='same', activation='relu')(pool_proj)
    
    output = layers.concatenate([conv1, conv3, conv5, pool_proj], axis=-1)
    return output

input_layer = layers.Input(shape=(224, 224, 3))
x = inception_module(input_layer, [64, 96, 128, 16, 32, 32])
# Add more inception modules as needed...
model = models.Model(input_layer, x)
model.summary()

  1. ResNet

Descripció

ResNet, proposada per He et al. en 2015, introdueix el concepte de "residual learning" per permetre la construcció de xarxes molt profundes. Utilitza connexions residuals per evitar el problema de la degradació en xarxes profundes.

Arquitectura

Capa Tipus Dimensions
1 Conv 7x7 64 filtres
2 Max-Pooling 3x3
3 Residual Block 64 filtres
4 Residual Block 128 filtres
... ... ...
50 FC 1000 neurones (sortida)

Implementació en TensorFlow

def residual_block(x, filters, kernel_size=3, stride=1):
    shortcut = x
    x = layers.Conv2D(filters, kernel_size, strides=stride, padding='same', activation='relu')(x)
    x = layers.Conv2D(filters, kernel_size, strides=1, padding='same')(x)
    x = layers.add([x, shortcut])
    x = layers.Activation('relu')(x)
    return x

input_layer = layers.Input(shape=(224, 224, 3))
x = layers.Conv2D(64, (7, 7), strides=(2, 2), padding='same', activation='relu')(input_layer)
x = layers.MaxPooling2D((3, 3), strides=(2, 2), padding='same')(x)
x = residual_block(x, 64)
# Add more residual blocks as needed...
model = models.Model(input_layer, x)
model.summary()

  1. DenseNet

Descripció

DenseNet, proposada per Huang et al. en 2017, connecta cada capa amb totes les capes anteriors. Això millora la propagació de la informació i els gradients a través de la xarxa.

Arquitectura

Capa Tipus Dimensions
1 Conv 7x7 64 filtres
2 Max-Pooling 3x3
3 Dense Block 32 filtres
4 Transition Layer 128 filtres
... ... ...
121 FC 1000 neurones (sortida)

Implementació en TensorFlow

def dense_block(x, num_layers, growth_rate):
    for _ in range(num_layers):
        cb = layers.BatchNormalization()(x)
        cb = layers.Activation('relu')(cb)
        cb = layers.Conv2D(growth_rate, (3, 3), padding='same')(cb)
        x = layers.concatenate([x, cb])
    return x

input_layer = layers.Input(shape=(224, 224, 3))
x = layers.Conv2D(64, (7, 7), strides=(2, 2), padding='same', activation='relu')(input_layer)
x = layers.MaxPooling2D((3, 3), strides=(2, 2), padding='same')(x)
x = dense_block(x, 6, 32)
# Add more dense blocks and transition layers as needed...
model = models.Model(input_layer, x)
model.summary()

  1. Exercicis pràctics

Exercici 1: Implementar una VGGNet

Implementa una VGGNet amb les especificacions donades i entrena-la amb el dataset CIFAR-10.

Exercici 2: Construir un mòdul Inception

Construeix un mòdul Inception i afegeix-lo a una xarxa existent. Entrena la xarxa amb el dataset MNIST.

Exercici 3: Crear una ResNet

Implementa una ResNet amb 20 capes i entrena-la amb el dataset CIFAR-100.

Exercici 4: Desenvolupar una DenseNet

Implementa una DenseNet amb 3 blocs densos i entrena-la amb el dataset Fashion MNIST.

  1. Conclusió

En aquest tema, hem explorat algunes de les arquitectures avançades de CNN més influents i efectives. Hem vist com aquestes arquitectures aborden diferents problemes i milloren el rendiment en tasques de visió per computador. Amb els exercicis pràctics, tindràs l'oportunitat d'implementar i entrenar aquestes xarxes per comprendre millor el seu funcionament i aplicació.

En el següent mòdul, ens endinsarem en les xarxes neuronals recurrents (RNNs) i veurem com es poden utilitzar per a tasques seqüencials com el processament de llenguatge natural i la predicció de sèries temporals.

© Copyright 2024. Tots els drets reservats