¿Cómo detectan los automóviles los letreros mediante el aprendizaje automático?

Los siguientes son los pasos necesarios:

a) Toma una foto

b) corregir la distorsión de la cámara

c) transformar la imagen a una perspectiva conocida.

Después de estos pasos, las cosas se vuelven interesantes. Tomemos el ejemplo más simple.

Conoce el país donde está presente su automóvil y, por lo tanto, conoce el conjunto de señales de tráfico. Desde aquí puede adoptar el enfoque basado en la visión por computadora o el enfoque basado en el aprendizaje profundo.

Para el enfoque CV,

a) Convertir a escala de grises. El color no es importante ya que la mayoría de los signos utilizan un conjunto de colores estandarizado.

b) Ejecute el operador Sobel o cualquier otro algoritmo de degradado. También puede ejecutar la detección de bordes de Canny.

c) el paso 2 le dará bordes en la imagen. Puede dar sentido al tipo de imagen mirando los bordes.

Para DL,

a) Tome suficientes fotos del conjunto estándar de imágenes a través de la cámara del automóvil.

b) Repita el paso A bajo diversas condiciones de iluminación.

c) Normalizar los valores de píxeles de la imagen

d) Alimentar a la red profunda. ResNet, VGG, GoogLeNet son algunos ejemplos de excelentes redes DL de clasificación de imágenes que puede ver.

e) Una vez completada la capacitación, la red podrá detectar señales de tráfico de una imagen determinada.

Sorprendentemente, incluso el Lenet básico implementado en el siguiente fragmento de código en aproximadamente 20 líneas de código sería 90% preciso al clasificar las señales de tráfico:
modelo = secuencial ()
model.add (Conv2D (32, kernel_size = (3, 3),
activación = ‘relu’,
input_shape = input_shape))
model.add (Conv2D (64, (3, 3), activación = ‘relu’))
model.add (MaxPooling2D (pool_size = (2, 2)))
model.add (Dropout (0.25))
model.add (Flatten ())
model.add (Denso (128, activación = ‘relu’))
model.add (Dropout (0.5))
model.add (Denso (num_classes, activación = ‘softmax’))

model.compile (loss = keras.losses.categorical_crossentropy,
optimizador = keras.optimizers.Adadelta (),
métricas = [‘precisión’])

model.fit (x_train, y_train,
batch_size = batch_size,
épocas = épocas,
detallado = 1,
validation_data = (x_test, y_test))

Código de crédito: Github