Implementação simples de InceptionV3 para classificação de imagens usando Tensorflow e Keras

Mar 12 2023
InceptionV3 é uma arquitetura de rede neural convolucional desenvolvida por pesquisadores do Google. Foi introduzido em 2015 e é o sucessor da arquitetura original Inception (InceptionV1) e InceptionV2.

InceptionV3 é uma arquitetura de rede neural convolucional desenvolvida por pesquisadores do Google. Foi introduzido em 2015 e é o sucessor da arquitetura original Inception (InceptionV1) e InceptionV2. O InceptionV3 foi projetado para ser computacionalmente eficiente, mantendo alta precisão nas tarefas de classificação de imagens.

A arquitetura InceptionV3 usa uma série de módulos de convolução, pooling e inception para extrair recursos de imagens. Os módulos de iniciação são blocos de camadas que permitem que a rede aprenda uma variedade de recursos em diferentes escalas e resoluções usando filtros de diferentes tamanhos.

O InceptionV3 alcançou resultados de ponta em uma variedade de tarefas de visão computacional, incluindo classificação de imagens, detecção de objetos e resposta a perguntas visuais. Ele é frequentemente usado como um modelo base para aprendizado de transferência, onde os pesos pré-treinados são ajustados em um novo conjunto de dados para melhorar o desempenho em uma tarefa específica.

import os
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.inception_v3 import InceptionV3, preprocess_input
import tensorflow_datasets as tfds

IMG_SIZE = (299, 299)
NUM_CLASSES = 10
BATCH_SIZE = 32
EPOCHS = 10

model = InceptionV3(weights='imagenet', include_top=False, input_shape=IMG_SIZE + (3,))

for layer in model.layers:
    layer.trainable = False

x = keras.layers.GlobalAveragePooling2D()(model.output)
x = keras.layers.Dense(1024, activation='relu')(x)
x = keras.layers.Dropout(0.5)(x)
output = keras.layers.Dense(NUM_CLASSES, activation='softmax')(x)

model = keras.models.Model(inputs=model.input, outputs=output)

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

train_data, test_data = tfds.load('cifar10', split=['train', 'test'], as_supervised=True)

def preprocess(image, label):
    image = tf.image.resize(image, IMG_SIZE)
    image = tf.cast(image, tf.float32)
    image = preprocess_input(image)
    label = tf.one_hot(label, NUM_CLASSES)
    return image, label

train_data = train_data.map(preprocess).batch(BATCH_SIZE).prefetch(tf.data.AUTOTUNE)
test_data = test_data.map(preprocess).batch(BATCH_SIZE).prefetch(tf.data.AUTOTUNE)

Em conclusão, vimos como usar a arquitetura InceptionV3 para tarefas de classificação de imagens. Primeiro, carregamos o modelo InceptionV3 pré-treinado, congelamos suas camadas e adicionamos um cabeçalho de classificação. Em seguida, compilamos o modelo e carregamos o conjunto de dados CIFAR-10 usando conjuntos de dados do TensorFlow. Pré-processamos os dados, treinamos o modelo e avaliamos seu desempenho.

A arquitetura InceptionV3 demonstrou ser altamente eficaz em uma variedade de tarefas de visão computacional devido à sua capacidade de extrair recursos em diferentes escalas e resoluções. Seu design permite o uso eficiente de recursos de computação, tornando-o adequado para aplicativos em dispositivos com recursos limitados. Além disso, os pesos pré-treinados do InceptionV3 podem ser ajustados em novos conjuntos de dados, o que pode melhorar muito o desempenho em tarefas específicas. No geral, o InceptionV3 é uma ferramenta poderosa e versátil no campo da visão computacional.