Detector de imágenes hechas por IA
Detector de imágenes hechas por IA
oleh plarrip @plarrip
- 598
- 6
- 0
"Modelo de Machine Learning para diferenciar imágenes hechas por un humano de imágenes generadas con IA."
Contexto
Usando los conceptos aprendidos en este cursillo, crearemos un modelo de Machine Learning que clasificará cualquier imagen entre "AI-generated" y "Human-generated".
No solo se trata de un ejercicio ideal para practicar las nuevas técnicas adquiridas, sinó que además es un ejemplo de mucha relevancia dado el contexto de impacto social que están teniendo los modelos generativos como DALL-E y Midjourney, capaces de representar imágenes a partir de texto. Estos modelos han expandido las capacidades de crear arte de los humanos de la noche a la mañana, pero también suponen un riesgo para la sociedad dada la creciente existencia de fake news como herramienta ideológica que llevamos observando desde hace un par de décadas con la irrupción de las redes sociales.
Además, concretamente los artistas pronto se verán muy afectados por el intrusismo de la IA en su profesión, siendo necesario para estos reservarse un nicho de "producto 100% humano" diferenciándose del contenido de IA. Mezclar ambos productos sería perjudicial para los artistas, y a la larga dismunuiría la calidad del arte para toda la sociedad.
Por lo tanto, herramientas que ayuden a etiquetar con claridad cuándo un contenido (una imagen en este caso) proviene de una IA y cuándo de un humano ayudarán sin duda a que el desarrollo de IAs generativas sólo aporten beneficios, minimizando su impacto negativo en la sociedad.
Cómo entrenaremos el modelo
Para entrenar el modelo importaremos dos carpetas con aproximadamente 435 imágenes cada una de dos tipos: arte creado por IA; y arte creado por humanos. Por arte entendemos pinturas, dibujos, fotografías, etc.
El origen de este dataset de entrenamiento es Kaggle, y se puede encontrar en este link: https://www.kaggle.com/datasets/cashbowman/ai-generated-images-vs-real-images
Tipo de modelo escogido
Siguiendo la línea del curso, le sacaremos partido a las redes neuronales convolucionales (CNNs) para detectar patrones en las imágenes y entrenar el modelo. Haremos 3 ejercicios en paralelo con distintas metodologías aprendidas en el curso:
a) Datasets originales: importaremos los datasets de imágenes tal y como vienen dados, aplicaremos un mínimo de pre-processing y entrenaremos el modelo desde 0.
b) Enhanced data preprocessing: importaremos los datasets igual, pero antes de entrenar el modelo aplicaremos Data Augmentation para incrementar los datasets. A su vez, aplicaremos Dropout al modelo para que sea más versátil.
c) Transfer learning: finalmente usaremos Transfer Learning para sacarle provecho a algùn modelo potente de Internet ya entrenado, adaptándolo a nuestro dataset y objetivos.
Al final compararemos los resultados de los 3 caminos y sacaremos conclusiones.
Al turrón!!
+++++++++++++++++++++++++++++
1- Importando datasets
Tenemos dos carpetas guardadas en Drive que vamos a cargar para entrenar el modelo. Lo primero será descomprimir las carpetas:

a) MÉTODO 1: DATASETS ORIGINALES
2- Preprocesamiento del dataset
Para optimizar el procesamiento y resultado del modelo haremos el siguiente ejercicio de formateo de las imágenes:
Normalizar valores de píxeles de 0 a 1.
Ajustar tamaño a 224x224.
Cambiar color a blanco y negro.









b) MÉTODO 2: ENHANCED DATA PREPROCESSING
Volveremos atrás y retomaremos el proyecto justo después de haber importado los datasets. Justo cuando usamos el módulo ImageDataGenerator para hacer la normalización de las imágenes, incluiremos los parámetros de Data Augmentation:








c) MÉTODO 3: TRANSFER LEARNING
2- Preprocesamiento del dataset
Para optimizar el procesamiento y resultado del modelo haremos el siguiente ejercicio de formateo de las imágenes:
Normalizar valores de píxeles de 0 a 1.
Ajustar tamaño a 224x224.
Esta vez mantendremos 3 canales de color (RGB) para adaptarnos al modelo pre-entrenado.





Conclusiones
En general parece que haber escogido un modelo CNN ha sido un acierto; para tareas de Computer Vision sigue siendo la mejor opción.
Tras probar 3 métodos de entrenamiento (datasets originales; data augmentation+dropout; transfer learning), no hay duda de que el más efectivo es Transfer Learning. No es sorprendente, teniendo en cuenta que hemos aprovechado el poder del modelo de Keras EfficientNetV2, el cual tiene más de 5 millones de parámetros entrenados. La capa que le hemos puesto por encima apenas tiene 2000.
Los resultados que hemos obtenido con el modelo (versión 3) no defraudan: ha clasificado correctamente 9 imágenes de 12. De hecho, en el grupo de imágenes AIArt del test dataset sólo ha fallado una. El modelo podría ser optimizado mucho más aún si invirtiéramos tiempo en probar cambios en los hiperparámetros, funciones de activaciones, optimizadores, etc.
Sin embargo, tal y como está el modelo, ya lo podríamos usar para detectar arte hecho por IA, por ejemplo como filtro de imágenes generadas por IA en concursos de fotografía/arte. No sería tan fiable como para descalificar propuestas, pero sí para hacer una primera clasificación automática para luego estudiar cada detección manualmente por un humano.
Bibliography:
EfficientNetV2 official site: https://keras.io/guides/transfer_learning/
Wonderful use case of Sking Cancer Classification: https://www.kaggle.com/code/matthewjansen/transfer-learning-skin-cancer-classification#4-|-Transfer-Learning-Model:-EfficientNet-V2-B0


1 komentar
Masuk atau bergabung Gratis untuk berkomentar