reconocimiento - redes neuronales python
OpenCV combinando SURF con red neuronal (3)
Mi sugerencia es observar el arco en lugar de la red neuronal. Vea aquí un ejemplo del uso del modelo SURF con Bag Of Words para la clasificación de objetos ( primera parte , segunda parte ). Para mejorar el rendimiento de la clasificación, puedes intentar reemplazar Naive Bayes Classifier con SVM. Además, el autor proporcionó un buen ejemplo de código fuente . Creo que es un buen punto para comenzar.
Quiero reconocer vehículos (automóviles, bicicletas, etc.) a partir de una imagen estática. Estaba pensando en utilizar SURF para obtener claves y descripciones útiles y luego entrenar una red neuronal MLP (perceptrón multicapa). Sin embargo, no sé cuál será la entrada a la red neuronal y cuál será su salida para poder identificar qué parte de la imagen se encuentra en un vehículo (probablemente un rectángulo dibujado alrededor de ella). Sé que SURF puede devolver puntos clave útiles en la imagen junto con sus descriptores (lo he hecho). Los puntos clave tienen ángulos y cada punto clave corresponde a un Vector largo de 64 o 128 como Descriptor. Lo que no sé es exactamente cuáles son estos puntos clave y cómo podrían usarse como una entrada a la red neuronal.
Estoy usando OpenCV con Python .
Soy nuevo en el uso de SURF y otros métodos de extracción de características. Cualquier ayuda relacionada con esto será muy buena.
Si usas funciones de navegación, eso significa que un flotador configura el vector [128] o [64] dependiendo de tu configuración de navegación, se establecerá la red neural de la siguiente manera
-Crear una base de datos con modelos:
-bikes
-cars
-autobus
-truck
-Toca diferentes fotos de cada tipo de objetos como 10 fotos de diferentes modelos de autos, 10 fotos de diferentes modelos de bicicletas 10 fotos de diferentes modelos de camiones ... etc., para cada foto de cada clase de objetos, extrae sus vectores de características de surf.
- Cada tipo de objeto representará una clase de objeto fuera de la red neural como esta;
-car ;object class 1 =binary representaation in 4 bits= 0 0 0 1
-bikes ;obejct class 2 =binary representaation in 4 bits= 0 0 1 0
-truck ;obejct class 3 =binary representaation in 4 bits= 0 0 1 1
-ball ;obejct class 4 =binary representaation in 4 bits= 0 1 0 0
-Cada bit en repesentacion binaria corresponderá a una neurona en la capa de salida de la red y representará una clase de objeto a reconocer
Ahora la configuración de la red neuronal se basará en el tamaño del vector de características y la cantidad de tipos de objetos que quiera reconocer de esta manera;
El número de nuerons en la capa de entrada; 64 o 128 según el tamaño del vector de características de navegación que usted configuró y usó
El número de nuerons en la capa de salida en la red neuronal será la cantidad de clases de objetos que quieras reconocer en este ejemplo 4
La función de activación necesaria para cada neurona es la función sigmoide o tanh ( http://www.learnartificialneuralnetworks.com/ ), ya que las funciones de navegación se representan mediante números flotantes, si utiliza fetaures anormales u otro descriptor binario de características locales (Brisk, ORB, BRief) entonces se usará una función de activación binaria para cada neurona, como la función de paso o la función sigm
El algoritmo utilizado para entrenar la red es la retropropagación
antes de continuar necesita configurar y preparar el conjunto de datos para entrenar la red neuronal
ejemplo
-all feature vector extracted from picture belong a car will be label or asociated to class 1
-all feature vector extracted from picture belong a bike will be label or asociated to class 2
-all feature vector extracted from picture belong a truk will be label or asociated to class 3
-all feature vector extracted from picture belong a ball will be label or asociated to class 4
para este ejemplo, tendrá 4 neuronas en la capa de salida y 128 0r 64 neuronas en la capa de entrada.
-La salida de la red neuronal en modo de reconocimiento será la neurona que tenga el mayor valor de estos 4 nuerons.
es necesario utilizar la normalización en el intervalo [0,1] para todas las características del conjunto de datos, antes de comenzar la fase de entrenamiento, porque la salida de la red neuronal es la probabilidad de que el vector de entrada pertenezca a una clase de objeto en el conjunto de datos.
el conjunto de datos para entrenar la red debe dividirse de la siguiente manera:
-70% off the data used to train
-15% off the data used to validate the network arquitecture (number of neurons in the hidden layyer)
-15% off the data used to test the final network
al entrenar la red neuronal, el criterio de parada es la tasa de reconocimiento, cuando está cerca del 85-90%
¿Por qué usar net neural y no máquinas svm? Las máquinas svm funcionan bien, pero no se puede hacer el mejor mapa de clases de separación sin problemas de clasificación lineal como este o cuando se tienen muchas clases de objetos diferentes o tipos de objetos, esta falta es aprecciate en los resultados de la fase de reconocimiento
Te recomendé que leyeras algo sobre la teoría de redes neuronales para entender cómo funcionan
http://link.springer.com/chapter/10.1007%2F11578079_10
opencv tiene una clase de aprendizaje automático para redes neuronales módulo mlp
Espero que esto le pueda ayudar
Una manera fácil de separar el objeto detectado es ejecutar un detector de contorno en la imagen de entrada de esa manera .
Después de esto, puede usar los coords x, y de cada punto clave asociado a cada vector de característica reconocido por la red neuronal, y verificar cuántos de estos puntos clave están en el costado de cada contorno de cada objeto,
Al mismo tiempo, le permite establecer un umbral para validar la detección correcta de un automóvil, por ejemplo, si tiene 2 taxis, 2 contornos pertenecen a cada automóvil y luego verificar cuántos ponits clave hay en cada contorno;
- contorno pertenece taxi 1 tiene 20 ponits clave dentro
- contorno pertenece taxi 1 tiene 5 ponits clave dentro
puedes dar como taxi 1 o carro 1 como objeto reconocido
A tiempo tienes el objeto validar reconocido y su contorno, puedes calcular el cuadro de bouding que cerró el objeto
Otra forma de hacerlo es con cada extracto de imagen de entrenamiento, sus contornos pertenecen a cada objeto, calcule su cuadro delimitador, utilícelo como imagen pura para extraer las características y hágalo en un conjunto de ilustraciones.