Análisis detallado del modelo AlexNet

El modelo de estructura de red Alexnet propuesto por Alex en 2012 detonó la aplicación de redes neuronales y ganó el campeonato de la Competencia de reconocimiento de imágenes de 2012, lo que convirtió a CNN en el modelo de algoritmo central para la clasificación de imágenes.
Inserte la descripción de la imagen aquí
La imagen de arriba es la estructura de red de AlexNet

Los aspectos más destacados del cambio de red son:
(1) La GPU se utiliza para el entrenamiento de aceleración de red por primera vez.
(2) La función de activación ReLU se utiliza en lugar de la función de activación Sigmoide tradicional y la función de activación Tanh.
(3) Se utiliza la normalización de respuesta parcial de LRN.
(4) La operación de neuronas de inactivación aleatoria Droupout se utiliza en las dos primeras capas de la capa completamente conectada para reducir el sobreajuste.

Para AlexNet, hay 5 capas convolucionales y tres capas completamente conectadas.

Capa convolucional C1
El flujo de procesamiento de esta capa es: Convolución -> ReLU -> Agrupación -> Normalización.

Convolución, la entrada es 227 × 227, usando 96 núcleos de convolución 11 × 11 × 3, el FeatureMap obtenido es 55 × 55 × 96.
ReLU, ingrese la salida FeatureMap de la capa convolucional en la función ReLU.
Agrupación, utilizando una unidad de agrupación de 3 × 3 con un tamaño de paso de 2 (agrupación superpuesta, el tamaño de paso es menor que el ancho de la unidad de agrupación), y la salida es 27 × 27 × 96 ((55−3) / 2 + 1 = 27)
Normalización de la respuesta local, utilice k = 2, n = 5, α = 10−4, β = 0,75 para la normalización local, la salida sigue siendo 27 × 27 × 96, la salida se divide en dos grupos, la tamaño de cada grupo 27 × 27 × 48

Capa convolucional C2
El flujo de procesamiento de esta capa es: convolución -> ReLU -> agrupación -> normalización

Convolución, la entrada es 2 conjuntos de 27 × 27 × 48. Use 2 grupos, cada uno con 128 núcleos de convolución de tamaño 5 × 5 × 48, y haga un relleno de borde = 2, y el tamaño de paso de convolución es 1. Entonces el FeatureMap de salida es 2 grupos, y el tamaño de cada grupo es 27 × 27 veces 128. ((27 + 2 ∗ 2−5) / 1 + 1 = 27)
ReLU, ingrese la salida FeatureMap por la capa convolucional en la función ReLU.
El tamaño de la operación de agrupación es 3 × 3, y el tamaño del paso es 2., el tamaño de la imagen agrupada es (27−3) / 2 + 1 = 13, y la salida es 13 × 13 × 256
normalización de respuesta local, usando k = 2, n = 5, α = 10−4 , β = 0,75 para la normalización local, la salida sigue siendo 13 × 13 × 256, la salida se divide en 2 grupos, el tamaño de cada grupo es 13 × 13 × 128

Capa convolucional C3
El flujo de procesamiento de esta capa es: Convolución -> ReLU

Convolución, la entrada es 13 × 13 × 256, utilizando 2 conjuntos de 384 núcleos de convolución con un tamaño de 3 × 3 × 256, relleno de borde de relleno = 1, y el tamaño de paso de la convolución es 1. Entonces la salida FeatureMap es 13 × 13 veces 384
ReLU, ingrese la salida FeatureMap por la capa convolucional en la función ReLU

Capa convolucional C4
El flujo de procesamiento de esta capa es: Convolución -> ReLU
Esta capa es similar a C3.

Convolución, la entrada es 13 × 13 × 384, dividida en dos grupos, cada grupo es 13 × 13 × 192. Se utilizan dos grupos, cada grupo de 192 núcleos de convolución con un tamaño de 3 × 3 × 192, y el relleno de bordes es done = 1, el tamaño del paso de la convolución es 1. La salida FeatureMap es 13 × 13 veces384, dividida en dos grupos, cada grupo es 13 × 13 × 192
ReLU, y la salida FeatureMap de la capa de convolución se ingresa en ReLU función

Capa convolucional C5
El flujo de procesamiento de esta capa es: Convolución -> ReLU -> Pooling

Convolución, la entrada es 13 × 13 × 384, dividida en dos grupos, cada grupo es 13 × 13 × 192. Utilice 2 grupos, cada uno de los cuales es un núcleo de convolución de 128 con un tamaño de 3 × 3 × 192, con borde de relleno = 1, y el tamaño de paso de la convolución es 1. Entonces el FeatureMap de salida es 13 × 13 × 256
ReLU, y el volumen La salida FeatureMap de la capa de producto se ingresa en la función ReLU para la
agrupación. El tamaño de la operación de agrupación es 3 × 3, el tamaño del paso es 2 y el tamaño de la imagen agrupada es (13−3) / 2 + 1 = 6, es decir, agrupación Después de que la salida sea 6 × 6 × 256

Capa completamente conectada FC6
El proceso de esta capa es: (convolución) completamente conectada -> ReLU -> Abandono

Convolución -> Totalmente conectado: la entrada es 6 × 6 × 256, esta capa tiene 4096 núcleos de convolución y el tamaño de cada núcleo de convolución es 6 × 6 × 256. Dado que el tamaño del kernel de convolución es exactamente el mismo que el tamaño del mapa de características (entrada) que se va a procesar, es decir, cada coeficiente en el kernel de convolución solo se multiplica por un valor de píxel del tamaño del mapa de características (entrada), y tiene una correspondencia uno a uno. Por lo tanto, la capa se denomina capa completamente conectada. Dado que el tamaño del núcleo de convolución y el mapa de características son iguales, solo hay un valor después de la operación de convolución. Por lo tanto, el tamaño de la capa de píxeles después de la convolución es 4096 × 1 × 1, es decir, hay 4096 neuronas.
ReLU, estos 4096 resultados de cálculo generan 4096 valores Abandono mediante la función de activación de ReLU
, que inhibe el sobreajuste, desconecta aleatoriamente algunas neuronas o no activa algunas neuronas

El proceso FC7 de la capa completamente conectada
es: completamente conectado -> ReLU -> Abandono

Completamente conectado, la entrada es 4096 vector
ReLU, los 4096 resultados de la operación se generan a través de la función de activación ReLU para generar 4096 valores
Dropout, que inhibe el sobreajuste, desconecta aleatoriamente algunas neuronas o no activa algunas neuronas.
Capa de salida
La salida de datos 4096 por el La séptima capa está completamente conectada con las 1000 neuronas de la octava capa, y después del entrenamiento se emiten 1000 valores de tipo flotante. Este es el resultado de la predicción.

Inserte la descripción de la imagen aquí

from tensorflow.keras import layers, models, Model, Sequential

def AlexNet_v1(im_height=224, im_width=224, class_num=1000):
    #num 是分类的类别
    # tensorflow中的tensor通道排序是NHWC
    input_image = layers.Input(shape=(im_height, im_width, 3), dtype="float32")  # output(None, 224, 224, 3)
    x = layers.ZeroPadding2D(((1, 2), (1, 2)))(input_image)                      # output(None, 227, 227, 3)
    x = layers.Conv2D(48, kernel_size=11, strides=4, activation="relu")(x)       # output(None, 55, 55, 48)
    x = layers.MaxPool2D(pool_size=3, strides=2)(x)                              # output(None, 27, 27, 48)
    x = layers.Conv2D(128, kernel_size=5, padding="same", activation="relu")(x)  # output(None, 27, 27, 128)
    x = layers.MaxPool2D(pool_size=3, strides=2)(x)                              # output(None, 13, 13, 128)
    x = layers.Conv2D(192, kernel_size=3, padding="same", activation="relu")(x)  # output(None, 13, 13, 192)
    x = layers.Conv2D(192, kernel_size=3, padding="same", activation="relu")(x)  # output(None, 13, 13, 192)
    x = layers.Conv2D(128, kernel_size=3, padding="same", activation="relu")(x)  # output(None, 13, 13, 128)
    x = layers.MaxPool2D(pool_size=3, strides=2)(x)                              # output(None, 6, 6, 128)

    x = layers.Flatten()(x)                         # output(None, 6*6*128)
    x = layers.Dropout(0.2)(x)
    x = layers.Dense(2048, activation="relu")(x)    # output(None, 2048)
    x = layers.Dropout(0.2)(x)
    x = layers.Dense(2048, activation="relu")(x)    # output(None, 2048)
    x = layers.Dense(class_num)(x)                  # output(None, 5)
    predict = layers.Softmax()(x)

    model = models.Model(inputs=input_image, outputs=predict)
    return model

Supongo que te gusta

Origin blog.csdn.net/qq_43811879/article/details/109639473
Recomendado
Clasificación