Skip to content

Commit

Permalink
Conclusiones
Browse files Browse the repository at this point in the history
  • Loading branch information
pabloggarc committed Jun 12, 2024
1 parent 2c50019 commit 80c52f6
Show file tree
Hide file tree
Showing 20 changed files with 265 additions and 228 deletions.
426 changes: 217 additions & 209 deletions Código/transformers.ipynb

Large diffs are not rendered by default.

26 changes: 26 additions & 0 deletions Memoria/conclusiones.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
\chapter{Conclusiones y trabajo futuro}

En este trabajo se había planteado como objetivo general el estudio de diferentes técnicas de \gls{nlp}, visión, e inteligencia artificial, con el fin de investigar la posibilidad de automatizar un proceso de valoración de puntos de interés en el mundo real. Esto implicaba tareas con objetivos específicos, como el reconocimiento de objetos en imágenes, y de textos asociados, surgiendo la necesidad de investigar diferentes aproximaciones para resolver estos tipos de problemas, y encontrar la más adecuada. \\

La primera tarea abordada fue la clasificación de imágenes en un conjunto cerrado de clases. Para ello, se decidió utilizar una de las herramientas más populares en problemas de visión artificial que implican tareas como la clasificación o detección de objetos: las redes neuronales convolucionales. Inicialmente, se intentó realizar un entrenamiento desde cero de una \gls{cnn}, lo que resultó en un claro caso de sobreajuste, pues los valores de la función de pérdida sobre el conjunto de validación se disparaban, mientras que los de la función de pérdida sobre el conjunto de entrenamiento tendían a cero. De aquí se obtuvo la conclusión de que se disponía de un número muy reducido de datos de entrenamiento para la cantidad de parámetros a optimizar. A pesar de aplicar técnicas como el aumento de datos, variando parámetros de la imagen como la rotación o el zoom, tampoco se obtuvieron resultados positivos debidos a la insuficiencia datos y persistir el problema del sobreajuste. \\

Ante esta situación, se decidió aplicar la técnica conocida como transfer learning, basada en tomar parámetros de un modelo ya entrenado para un propósito general, de manera que durante el entrenamiento, el resto de parámetros se centren en la tarea específica. En concreto, se tomaron las capas convolucionales del modelo MobileNet de Google, para después añadir capas densas que lograran la clasificación. Gracias a esta técnica, se consiguió eliminar el sobreajuste y clasificar las imágenes en cuatro clases distintas de manera exitosa, obteniendo métricas como un $F_1-$score de $0.97$ o un AuC de $0.99$ sobre un conjunto de imágenes no vistas anteriormente por el modelo. \\

Habiendo conseguido clasificar las imágenes en las cuatro clases originales, se presentó la problemática de poder detectar si una imagen no pertenecía a ninguna de estas. Para ello se plantearon dos soluciones basadas en la anterior. La primera de ellas consistía en añadir una nueva clase a la arquitectura, mientras que la segunda estaba formada por dos \gls{cnn}: una de ellas era capaz de distinguir si una imagen pertenecía a alguna de las clases originales o no, mientras que la otra era capaz de distinguir entre las clases originales. Con el cálculo de probabilidades condicionadas era posible calcular a cuál de las cinco clases (las cuatro originales y una de desconocidos) pertenecía la imagen. Con ambas arquitecturas se obtuvieron resultados muy similares, por lo que se concluyó que era preferible utilizar la primera de ellas, siendo menor el tiempo de cálculo de las predicciones al ser más simple. \\

En este punto se había demostrado que era posible lograr la clasificación de imágenes de un conjunto abierto o cerrado de clases mediante redes convolucionales, pero se presentaban una serie de problemáticas. Si en el futuro se deseaba añadir nuevas clases a las originales, se necesitaba modificar el conjunto de datos, la arquitectura del modelo y reentrenarlo. Además, con la aproximación de \gls{cnn} no se había resulto el problema de trabajar con textos asociados a las imágenes. Tras varias investigaciones surge la idea de trabajar con un tipo de modelos que están a la orden del día, los transformers, específicamente los multimodales, que combinándolos con técnicas de clasificación no supervisada podían solucionar los problemas planteados. \\

Con motivo de añadir un componente de cloud al trabajo, se decidió utilizar un transformer multimodal que es parte de Vertex (\gls{gcp}). Con ayuda de este, se generaron los embeddings de cada imagen, para posteriormente utilizar un algoritmo de clasificación no supervisada como $k-$means o \gls{cja}. Aprovechando que se conocían las clases originales, se utilizaron algunas métricas que proporcionaron valores adecuados, como un ARI de $0.95$ o una $V-$measure de $0.95$. Mediante métricas como el coeficiente de silueta, no se obtuvieron valores óptimos en cuanto a la separación entre clusters, pero las anteriores verificaban la corrección del procedimiento. Gracias a este método, no hacía falta modificar el modelo en caso de desear variar el número de clases, tan solo se debía volver a lanzar el clustering. Además, tampoco era necesario conocer el número de clases, pues mediante el método del codo se podía calcular el óptimo. \\

Con esta arquitectura compuesta por un transformer multimodal y un algoritmo de clasificación no supervisada, se concluyó que era mucho más flexible a cambios futuros en comparación a una basada en \gls{cnn}. Además, permitía resolver el problema de trabajar con textos asociados a las imágenes. La multimodalidad del transformer, permitía generar embeddings de textos en un mismo espacio que los de las imágenes, posibilitando la búsqueda de imágenes mediante descripciones, y la selección del texto que mejor describía una imagen. En general, con ayuda del transformer se consiguió extraer de las imágenes detalles más precisos, textos, e incluso agruparlas por conceptos más abstractos. \\

En cuanto a la clasificación de imágenes, se puede afirmar que, independientemente de las tareas relacionadas con texto u otras modalidades de información, la arquitectura formada por un transformer codificador y un algoritmo de clasificación no supervisada es preferible a una basada en \gls{cnn}. Esta combinación ofrece resultados más precisos y es más flexible ante cambios futuros en el dominio del problema, sin la necesidad de reservar datos de entrenamiento. Para finalizar, se propone como trabajo futuro la automatización de las dos tareas con las que se completaría la automatización del proceso de valoración, pues lo relativo a detección de objetos y textos se ha logrado durante este trabajo. \\

La primera de ellas sería detectar los elementos duplicados, es decir, imágenes del mismo objeto en el mismo lugar con diferentes perspectivas. La segunda de ellas sería la verificación de la ubicación proporcionada, por ejemplo con ayuda de Street View, verificar si el objeto aparece, si el entorno es similar, etc. Para abordar la primera de ellas, se sugiere comenzar utilizando una técnica similar a la empleada para la búsqueda semántica o selección de descripciones. Se puede calcular el coseno del ángulo formado por el embedding de la imagen propuesta y el de cada una de las candidatas a duplicados, tratando de observar los valores de estos. Para el caso de la \Cref{fig:duplicados} se obtienen los valores de $0.89, 0.75, 0.44$, y $0.49$, notándose un valor mayor para la misma imagen tomada desde otra perspectiva, pudiendo ser este el punto de partida de una futura investigación. La segunda de las tareas es bastante más compleja, lo que requeriría el estudio de técnicas más avanzadas de visión artificial, aunque una posible ayuda podría ser recuperar la ubicación de la imagen mediante alguna herramienta como ExifTool, siempre que el usuario no hubiera desactivado los metadatos, para poder calcular la distancia entre las coordenadas.

\begin{figure}[!h]
\centering
\includegraphics[width = .85\textwidth]{duplicados}
\caption{Imágenes entre las que detectar duplicados}
\label{fig:duplicados}
\end{figure}
Binary file modified Memoria/img/busqueda_agua.pdf
Binary file not shown.
Binary file modified Memoria/img/busqueda_arte.pdf
Binary file not shown.
Binary file modified Memoria/img/busqueda_carteles.pdf
Binary file not shown.
Binary file modified Memoria/img/busqueda_marcadores.pdf
Binary file not shown.
Binary file modified Memoria/img/busqueda_parque.pdf
Binary file not shown.
Binary file added Memoria/img/duplicados.pdf
Binary file not shown.
Binary file modified Memoria/img/elbow_kmeans.pdf
Binary file not shown.
Binary file modified Memoria/img/elbow_sil_kmeans.pdf
Binary file not shown.
20 changes: 10 additions & 10 deletions Memoria/img/embeddings1.tex
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
\toprule
& imagen & embedding & clase\_original \\
\midrule
81 & camino\_santiago\_78.jpeg & [-0.02991905 0.03894238 -0.02696881 ... 0.00071168 0.00297942
-0.00404266] & 0 \\
180 & cartel\_166.jpg & [-0.00693742 0.04308061 0.01148914 ... -0.00418098 -0.00202758
-0.0305046 ] & 1 \\
169 & cartel\_156.jpg & [-0.0334006 0.04922587 -0.0119014 ... -0.02283066 -0.02089625
-0.01102509] & 1 \\
348 & cartel\_40.jpg & [-0.00722917 0.03612035 0.01165118 ... -0.01601593 -0.01054173
-0.05080034] & 1 \\
58 & camino\_santiago\_57.jpeg & [-0.02074145 0.03697478 -0.03265985 ... -0.00950625 0.0339389
-0.00161083] & 0 \\
881 & resto\_94.jpeg & [-0.0245287 0.00734601 -0.00277115 ... 0.02352717 -0.00223376
-0.04853704] & 4 \\
636 & parque\_225.jpeg & [-0.01905878 0.03490769 0.01058458 ... 0.00661488 -0.00187008
-0.03709773] & 3 \\
794 & resto\_15.jpeg & [-0.00578278 0.00692933 0.02846462 ... 0.01482884 0.00323637
-0.02625873] & 4 \\
597 & parque\_187.jpg & [ 0.01390353 0.03908983 -0.00682968 ... 0.00811929 0.01599698
0.00128211] & 3 \\
801 & resto\_21.jpeg & [ 0.00850163 0.0482449 0.00908805 ... 0.02546985 -0.00986749
0.02111989] & 4 \\
\bottomrule
\end{tabular}
19 changes: 10 additions & 9 deletions Memoria/img/embeddings2.tex
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@
\toprule
& imagen & embedding & clase\_original & cluster\_kmeans & cluster\_ac \\
\midrule
10 & camino\_santiago\_13.jpeg & [-0.02232462 0.05146378 -0.03216566 ... 0.00111553 0.01103749
-0.01471165] & 0 & 2 & 2 \\
447 & marcador\_4.jpeg & [ 0.01137386 0.04624871 -0.0066354 ... -0.01498985 0.02460321
-0.01014824] & 2 & 0 & 4 \\
821 & resto\_4.jpeg & [-0.02202036 0.06839106 -0.00444437 ... -0.01725521 0.01158767
-0.05511022] & 4 & 4 & 0 \\
783 & resto\_132.jpg & [ 0.00072823 0.00100317 -0.01555067 ... -0.04994827 -0.04368659
0.01219591] & 4 & 4 & 0 \\
211 & cartel\_195.jpeg & [0.02073547 0.03421853 0.00191044 ... 0.01309193 0.00961536 0.01201134] & 1 & 3 & 1 \\
795 & resto\_16.jpeg & [ 0.01921178 0.00318283 0.02698298 ... 0.01128249 -0.00270117
-0.01627838] & 4 & 1 & 0 \\
245 & cartel\_226.jpeg & [-0.00836907 0.01197547 -0.01518746 ... 0.01305618 -0.02229511
-0.02697285] & 1 & 3 & 1 \\
214 & cartel\_198.jpeg & [ 0.00107355 0.03070441 -0.03554471 ... 0.01912205 0.00730545
-0.01435002] & 1 & 3 & 1 \\
355 & cartel\_47.jpeg & [-0.01280363 0.03873988 -0.02910446 ... -0.00263042 0.01006253
-0.02157135] & 1 & 3 & 1 \\
358 & cartel\_5.jpeg & [-0.04059445 0.03865337 -0.02675016 ... -0.02303682 -0.0079793
-0.02591318] & 1 & 3 & 1 \\
\bottomrule
\end{tabular}
Binary file modified Memoria/img/matrices_confusion_transf.pdf
Binary file not shown.
Binary file modified Memoria/img/matrices_contingencia.pdf
Binary file not shown.
Binary file modified Memoria/img/reduced_embeddings.pdf
Binary file not shown.
Binary file not shown.
Binary file modified Memoria/img/reduced_embeddings_k-means.pdf
Binary file not shown.
Binary file modified Memoria/img/silhouette_kmeans.pdf
Binary file not shown.
Binary file modified Memoria/memoria_tfg.pdf
Binary file not shown.
2 changes: 2 additions & 0 deletions Memoria/memoria_tfg.tex
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
\input{machine_learning}
\paginavacia
\input{parte_practica}
\paginavacia\pagestyle{plain}
\input{conclusiones}

\paginavacia
\addcontentsline{toc}{chapter}{Bibliografía}
Expand Down

0 comments on commit 80c52f6

Please sign in to comment.