En aquest tema, explorarem les capes convolutionals i de pooling, que són components fonamentals de les Xarxes Neuronals Convolucionals (CNN). Aquestes capes permeten a les CNN extreure característiques rellevants de les imatges, reduir la dimensionalitat i millorar l'eficiència del model.

  1. Capa Convolutional

1.1. Què és una Capa Convolutional?

Una capa convolutional aplica un conjunt de filtres (o kernels) a una entrada per produir mapes de característiques. Cada filtre es desplaça sobre la imatge d'entrada i calcula el producte puntual entre el filtre i una regió de la imatge.

1.2. Paràmetres Clau

  • Filtres (Kernels): Matrius petites que s'apliquen a la imatge d'entrada per detectar característiques com vores, textures, etc.
  • Stride: El pas amb el qual el filtre es desplaça sobre la imatge. Un stride més gran redueix la mida del mapa de característiques resultant.
  • Padding: Afegeix píxels addicionals a les vores de la imatge per controlar la mida del mapa de característiques. Pot ser 'valid' (sense padding) o 'same' (padding per mantenir la mida).

1.3. Exemple Pràctic

import tensorflow as tf
from tensorflow.keras.layers import Conv2D

# Definim una capa convolutional amb 32 filtres, mida de filtre 3x3, stride de 1 i padding 'same'
conv_layer = Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), padding='same', activation='relu')

# Suposem una entrada de mida 28x28x1 (imatge en escala de grisos)
input_shape = (28, 28, 1)
model = tf.keras.Sequential([tf.keras.Input(shape=input_shape), conv_layer])

# Mostrem el resum del model
model.summary()

Explicació del codi:

  • Utilitzem Conv2D de Keras per crear una capa convolutional.
  • filters=32 indica que utilitzarem 32 filtres.
  • kernel_size=(3, 3) defineix la mida dels filtres.
  • strides=(1, 1) especifica que el filtre es desplaçarà un píxel a la vegada.
  • padding='same' afegeix padding per mantenir la mida de la sortida igual a la de l'entrada.
  • activation='relu' aplica la funció d'activació ReLU després de la convolució.

  1. Capa de Pooling

2.1. Què és una Capa de Pooling?

Una capa de pooling redueix la dimensionalitat del mapa de característiques agregant valors en regions petites. Això ajuda a reduir el nombre de paràmetres i la complexitat computacional, i també fa que el model sigui més robust a les translacions.

2.2. Tipus de Pooling

  • Max Pooling: Selecciona el valor màxim en cada regió.
  • Average Pooling: Calcula la mitjana dels valors en cada regió.

2.3. Paràmetres Clau

  • Pool Size: La mida de la finestra sobre la qual es realitza el pooling.
  • Stride: El pas amb el qual la finestra de pooling es desplaça sobre el mapa de característiques.

2.4. Exemple Pràctic

import tensorflow as tf
from tensorflow.keras.layers import MaxPooling2D

# Definim una capa de max pooling amb mida de finestra 2x2 i stride de 2
pooling_layer = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid')

# Suposem una entrada de mida 28x28x1 (imatge en escala de grisos)
input_shape = (28, 28, 1)
model = tf.keras.Sequential([tf.keras.Input(shape=input_shape), pooling_layer])

# Mostrem el resum del model
model.summary()

Explicació del codi:

  • Utilitzem MaxPooling2D de Keras per crear una capa de max pooling.
  • pool_size=(2, 2) defineix la mida de la finestra de pooling.
  • strides=(2, 2) especifica que la finestra es desplaçarà dos píxels a la vegada.
  • padding='valid' indica que no s'afegirà padding.

  1. Combinació de Capa Convolutional i de Pooling

3.1. Exemple Complet

import tensorflow as tf
from tensorflow.keras.layers import Conv2D, MaxPooling2D

# Definim una seqüència de capes convolutionals i de pooling
model = tf.keras.Sequential([
    tf.keras.Input(shape=(28, 28, 1)),
    Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same'),
    MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid'),
    Conv2D(filters=64, kernel_size=(3, 3), activation='relu', padding='same'),
    MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid')
])

# Mostrem el resum del model
model.summary()

Explicació del codi:

  • Primer, afegim una capa convolutional amb 32 filtres i una capa de max pooling.
  • Després, afegim una segona capa convolutional amb 64 filtres i una altra capa de max pooling.
  • Aquestes capes es combinen per extreure característiques de diferents nivells de la imatge.

  1. Exercici Pràctic

Exercici

Crea una xarxa neuronal convolucional amb les següents especificacions:

  1. Entrada de mida 64x64x3 (imatge en color).
  2. Primera capa convolutional amb 16 filtres, mida de filtre 3x3, stride de 1 i padding 'same'.
  3. Capa de max pooling amb mida de finestra 2x2 i stride de 2.
  4. Segona capa convolutional amb 32 filtres, mida de filtre 3x3, stride de 1 i padding 'same'.
  5. Capa de max pooling amb mida de finestra 2x2 i stride de 2.

Solució

import tensorflow as tf
from tensorflow.keras.layers import Conv2D, MaxPooling2D

# Definim la xarxa neuronal convolucional
model = tf.keras.Sequential([
    tf.keras.Input(shape=(64, 64, 3)),
    Conv2D(filters=16, kernel_size=(3, 3), activation='relu', padding='same'),
    MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid'),
    Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same'),
    MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid')
])

# Mostrem el resum del model
model.summary()

  1. Resum

En aquesta secció, hem après sobre les capes convolutionals i de pooling, incloent-hi els seus paràmetres clau i com es combinen per construir xarxes neuronals convolucionals. Hem vist exemples pràctics de com implementar aquestes capes utilitzant TensorFlow i Keras, i hem realitzat un exercici pràctic per reforçar els conceptes apresos.

En el següent tema, explorarem les arquitectures populars de CNN i com s'utilitzen en aplicacions reals.

© Copyright 2024. Tots els drets reservats