AgroFieldDetect fue uno de los proyectos seleccionados en la convocatoria de los Premios Cátedra Telefónica de la UEx en 2020 para Proyectos IoT, BigData, Machine Learning y Blockchain para el Sector Agroganadero.
En el proyecto estamos abordando el desarrollo de un sistema basado en un robot móvil para identificar elementos de interés en viñedos sobre el terrero utilizando Inteligencia Artificial. El proyecto lo hemos planteado como un primer paso hacia un sistema de poda automática.
En esta entrada nos vamos a centrar en la parte del proyecto correspondiente al procesamiento de imágenes con Inteligencia Artificial (concretamente con Deep-Learning) necesario para intentar detectar el lugar de corte de los sarmientos presentes en las imágenes. Hemos enfocado el problema como un proceso de detección de objetos en el que intentamos detectar la parte inicial de cada uno de los sarmientos. Para resolver un problema de estas características es necesario tomar un conjunto de imágenes que constituirá el conjunto de prototipos y posteriormente marcar en cada una de ellas con lo que se conoce como el “Ground Truth” (GT), es decir, seleccionar todos los objetos presentes en la imagen susceptibles de ser detectados por nuestro detector de objetos. Este conjunto de imágenes junto con su GT serán utilizados para entrenar el detector de objetos.
Nuestro conjunto de prototipos esta formado por un conjunto de 140 imágenes de las que 125 se han utilizado para en entrenamiento y 15 para test. Para la selección del GT en cada una de las imágenes hemos utilizado la aplicación online VGG Image Annotator (VIA) (https://www.robots.ox.ac.uk/~vgg/software/via/via-2.0.10.html). Además de seleccionar las máscaras para cada uno de los objetos, tenemos que asociar cada objeto a una de las categorías y subcategorías definidas. En nuestro caso esta tarea es sencilla ya que de momento solo estamos tratando de identificar un único tipo de objetos que como dijimos anteriormente es la parte inicial de cada uno de los sarmientos. Por ello tan sólo hemos definido una categoría ‘objeto’ con un único identificador o clase ‘sarmiento’. En la siguiente figura podemos observar un ejemplo de imagen del conjunto de prototipos junto con su GT.
Una vez seleccionado el “Ground Truth” de cada una de las imágenes hemos entrenado algunos modelos de detectores de objetos y obtenido los primeros resultados. De todos los algoritmos de detección de objetos propuestos en la última década Faster RCNN se considera el modelo de referencia gracias a la precisión y la robustez de sus predicciones. Nosotros hemos utilizado Mask_RCNN, una evolución de Faster RCNN, que es capaz de realizar una segmentación de la imagen proporcionando una máscara para cada uno de los objetos, es decir, el conjunto de pixeles que pertenecen al objeto buscado.
Concretamente, hemos utilizado un implementación de Mask R-CNN en Python3, keras y TensorFlow (https://github.com/matterport/Mask_RCNN). Los parámetros por defecto del modelo se encuentran en un fichero de configuración y para encontrar un modelo que nos de los primeros resultados hemos variado los parámetros expuestos a continuación, mientras que para medir la eficiencia de nuestros detectores utilizaremos el mAP (mean Average Precision).
BACKBONE: Modelo de la red troncal de DeepLearning.
RPN_ANCHOR_RATIOS: Relaciones de aspecto de los anchors.
RPN_ANCHOR_SCALES: Tamaños de los anchors.
NUM_CLASSES: Número de clases.
IMAGE_MIN_DIM y IMAGE_MAX_DIM; Tamaños mínimo y máximo del reescalado de las imágenes.
Hasta ahora hemos entrenado distintos modelos de detectores de objetos con los siguientes parámetros de configuración:
BACKBONE = “resnet50”
RPN_ANCHOR_RATIOS = [0,25,0.3,0.5,1,2,3,4]
RPN_ANCHORS_SCALES = [8,16,32,64,128]
NUM_CLASSES = 1 + 1 # Ground truth + sarmiento
IMAGE_MIN_DIM = 768
IMAGE_MAX_DIM = 832
En las siguientes figuras, podemos ver los objetos detectados de una de las imágenes del conjunto de test con sus correspondientes “Bounding Box”, así como las máscaras de los mismos.
A partir de la extracción de cada una de las máscaras de los objetos podríamos predecir el punto de corte del sarmiento.
En cuanto a los valores del mAP obtenidos sobre el conjunto de test estamos en valores muy bajos con un total de 50 objetos encontrados de los 194 que conforman todas las imágenes del conjunto de test, por lo que debemos seguir trabajando aumentando principalmente el número de prototipos de entrenamiento y ajustando los parámetros de la red.