Novato en python y aprendizaje automático

Hipnos

Bueno, pues os cuento mi problema a ver si me podéis dar un poco de consejo sobre cómo abordarlo y qué aprender y usar.

Básicamente tengo cientos de imágenes de este estilo:

Lo que ahora mismo hago con Matlab es corregir la distorsión radial de la imagen y me saca algo sin ese ligero efecto "ojo de pez" que veis. En resumen, tengo un montón de imágenes un poquito más realistas.

La idea de lo que quiero que haga mi programa es:

  1. Identificar los 4 extremos del marco de forma automática. Cada imagen solo tendrá un marco, pero puede estar en diferentes posiciones y perspectivas, por lo que será un cuadrilátero que puede estar tapado parcialmente por plantas.

  2. Una vez detectados los 4 puntos, haré una rectificación al plano principal, y recortaré la imagen para solo quedarme con el interior del cuadrado.

  3. Sobre esa imagen, tengo que segmentar las plantas. Tengo varias imágenes similares, por lo que finalmente superpodré las plantas segmentadas para calcular su correlación.

Actualmente estoy trabajando en Matlab, porque me facilita bastante la corrección de las imágenes. El tema es que como antes o después quería meter una red neuronal para segmentar las plantas, también voy a intentar segmentar los cuadrados utilizando otra red neuronal, ya que algunos estarán "rotos" por la superposición de alguna hoja o similar.

Puedo importar modelos de redes neuronales a Matlab, mi idea es entrenar una red con Keras o similar y luego importarla a mi programa en Matlab. Pero...

Nunca he usado una red neuronal.
Nunca he programado en python.

Ahora las preguntas:

  • ¿Qué plataforma de desarrollo y compilador utilizáis para python? Actualmente uso windows y preferiría seguir utilizándolo. Aunque tengo alguna máquina virtual donde he hecho mis pinitos con opencv, prefiero no utilizarla por el momento.

  • ¿Dónde puedo aprender sobre librerías de aprendizaje automático? Anteriormente me recomendaron https://keras.io/ , he estado viendo algún video pero me encuentro muy perdido.

Muchas gracias por vuestra ayuda :)

HeXaN
#1Hipnos:

para calcular su correlación.

¿Con esto pretendes identificar qué tipo de planta es la que se encuentra dentro del cuadro? Es decir, pasarle cientos de imágenes y decir "es una ortiga" o "no es una ortiga".

1 respuesta
NickNack

Sin tener mucha idea este es el proceso que yo seguiria:

  • Convertir imágenes con algún tipo de filtro para detectar los bordes.
  • En base a esas modificaciones buscar el cuadrado y delimitar sus ejes.
  • Con esos datos modificar la imagen original

Luego entrenar la red neuronal es otra movida distinta. Primero tendrás que darle datos para que busque la correlación...

Hipnos

#2 Por el moento quiero que me segmente todas las plantas. Sé que la planta buena es la más grande, así que me puedo quedar con la de mayor área.

La idea de todo esto es ver si una cámara multiespectral en concreto es útil en el reconocimiento de cultivos y malas hierbas. Pero hay herramientas que creo que me pueden facilitar mucho la vida pero no sé usar :(

Si me podéis recomendar un IDE para python en Windows y algún tutorial sencillito para segmentar objetos usando redes neuronales con modelos ya entrenados sería feliz.

1 respuesta
HeXaN

#4 Es que con la red neuronal podrías directamente clasificar en "cultivo"/"mala hierba" del tirón, por eso pregunto.

Respecto al IDE, usa PyCharm sin pensártelo dos veces. Además, te aconsejo que lo hagas con entornos virtuales para no guarrear la instalación original de Python y que instales tensorflow en la GPU para no morir esperando. Para esto último necesitarás CUDA, el paquete tensorflow-gpu y CuDNN. Lo más gracioso es que no se suele acertar con la versión a la primera y tendrás que ir probando diferentes versiones de CUDA + CuDNN xD

Para toquetear la imagen échale un ojo a https://www.scipy-lectures.org/packages/scikit-image/index.html

2 1 respuesta
Hipnos

#5 Muchas gracias. Me miro todo lo que has puesto y te comento dudas si hay :P

1 respuesta
HeXaN

#6 Cualquier cosa me dices.

1 respuesta
Hipnos

#7 Por lo que veo ya hay cosas para hacer directamente una segmentación con redes neuronales, que es básicamente lo que yo necesito. Le he echado un vistazo a esto:

https://github.com/divamgupta/image-segmentation-keras/blob/master/README.md

La idea sería hacer una red para detectar las 4 esquinas del marco, y posteriormente detectar todas las plantas con otra red diferente. El caso es que no sé dónde encontrar redes ya entrenadas, porque la verdad es que ahora mismo me falta nivel para hacer un entrenamiento robusto y fiable. Creo que en mi caso el problema es bastante simple y otros habrán encontrado soluciones muy buenas.

1 respuesta
HeXaN

#8 Para detectar las cuatro esquinas del marco no tienes que usar una red. Tirando de OpenCV podrías tenerlo fácilmente y usarlo como preprocesamiento.

Respecto al entrenamiento es algo muy fácil (y automático) y es más preocupante la arquitectura de la red. Puedes usar alguna de las redes que ya tiene Keras integradas y hacer transfer learning para ahorrarte tiempo.

1 mes después
hda

¿Cómo vas con esto, @hipnos ?

1 respuesta
Hipnos

#10 Por ahora estoy resolviendo el problema de segmentación del marco de forma automática mediante técnicas de visión artificial.

Una vez hecho eso me pelearé con la segmentación de las plantas.

1 respuesta
Karedel

#11 https://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/template_matching/template_matching.html

Échale un ojo a esto, no se si te servirá como punto de partida. Puedes usar una imagen del marco para que te la encuentre en las distintas imágenes. Yo lo estoy usando para otra historia, como te digo no se si te servirá. Aun así mola y es interesante para cacharrear

Unrack

#1 un grupo de mi facultad tiene eso mismo hecho (No se muy bien como lo hicieron) http://deep.ifca.es/plants/

Hipnos

Bueno sigo intentando detectar el marquito ese de forma automática...

Lo que estoy haciendo es simplificar el problema. Uso una ventana con la forma estimada que recorre la imagen y lo busca. Y luego me quedo con el trozo.

El tema es que las hough lines no me devuelven muy buenos resultados. Y no sé qué filtros meterle xd

Si queréis darme ideas voy probando.

1 respuesta
Kaiserlau

#14 xq no usais un color tipo croma para el cuadro? y antes de pasarla simplemente recortas la imagen a analizar?

1 respuesta
Hipnos

#15 Porque no son imágenes RGB, son imágenes de espectros raros como NIR, REG, y similares.

Usuarios habituales

  • Hipnos
  • Kaiserlau
  • Unrack
  • Karedel
  • hda
  • HeXaN
  • NickNack