Logotipo de Zephyrnet

El poder de los codificadores y decodificadores avanzados en la IA generativa

Fecha:

Introducción

En el dinámico ámbito de la Inteligencia Artificial, la fusión de tecnología y creatividad ha dado lugar a herramientas innovadoras que traspasan los límites de la imaginación humana. Entre estos avances pioneros se encuentra el sofisticado mundo de los codificadores y decodificadores en IA generativa. Esta evolución revoluciona la forma en que creamos, interpretamos e interactuamos con el arte, el lenguaje e incluso la realidad.

Codificadores y decodificadores en IA generativa
Fuente - IMerit

OBJETIVOS DE APRENDIZAJE

  • Comprender el papel de los codificadores y decodificadores en la IA generativa y su importancia en las aplicaciones creativas.
  • Conozca los modelos avanzados de IA como BERT, GPT, VAE, LSTM y CNN y su uso práctico para codificar y decodificar datos.
  • Explore aplicaciones en tiempo real de codificadores y decodificadores en diversos dominios.
  • Obtenga información sobre las consideraciones éticas y el uso responsable del contenido generado por IA.
  • Reconozca el potencial de innovación y colaboración creativa mediante la aplicación de codificadores y decodificadores avanzados.

Este artículo fue publicado como parte del Blogatón de ciencia de datos.

Tabla de contenidos.

El auge de los codificadores y decodificadores

En el mundo de la tecnología en constante evolución, los codificadores y decodificadores se han convertido en héroes anónimos, aportando un giro creativo a la inteligencia artificial (IA) y la IA generativa. Son como las varitas mágicas que utiliza la IA para comprender, interpretar y crear cosas como arte, texto, sonidos y muchos más de maneras que nos deslumbran a todos.

Este es el trato: los codificadores son como los detectives súper observadores. Examinan de cerca las cosas, ya sean imágenes, oraciones o sonidos. Captan todos los pequeños detalles y patrones como un detective juntando pistas.

Fuente - Autor

Ahora, los Decoders son los magos creativos. Toman lo que encontraron los codificadores y lo transforman en algo nuevo y emocionante. Es como un mago que convierte pistas en hechizos mágicos que crean arte, poemas o incluso idiomas. Esta combinación de codificadores y decodificadores abre la puerta a un mundo de posibilidades creativas.

En términos más simples, los codificadores y decodificadores en IA son como detectives y magos trabajando juntos. Los detectives comprenden el mundo y los magos convierten esa comprensión en creaciones asombrosas. Así es como están cambiando el juego en el arte, el lenguaje y mucho más, haciendo que la tecnología no sólo sea innovadora sino también brillantemente creativa.

Los componentes básicos: codificadores y decodificadores

En el corazón de IA generativa son codificadores y decodificadores, componentes fundamentales que transforman los datos de una forma a otra, convirtiéndolos en un pilar central de la IA creativa. Comprender sus roles ayuda a aprovechar el inmenso potencial creativo que desbloquean.

Bloques de construcción: codificador y decodificador | Codificadores y decodificadores en IA generativa
  • El codificador: Este componente tiene que ver con la comprensión. Descompone los datos de entrada (una imagen, texto o sonido) en sus componentes principales, capturando su esencia y extrayendo patrones intrincados. Imagínelo como un artista atento que observa atentamente los detalles, colores y formas de una escena.
  • El decodificador: Aquí es donde ocurre la magia. El Decodificador traduce la información extraída a algo nuevo: una obra de arte, un verso poético o incluso un idioma completamente diferente. El genio creativo transforma la esencia del Encoder en una obra maestra.

Ejemplo de código en tiempo real

Para comprender mejor los conceptos de codificadores y decodificadores en la IA generativa, consideremos un ejemplo de código en tiempo real para la generación de texto a imagen. Usaremos la biblioteca Hugging Face Transformers, que ofrece modelos previamente entrenados para diversas tareas generativas. En este ejemplo, usaremos un codificador para interpretar una descripción de texto y un decodificador para crear una imagen basada en esa descripción.

Explicación

  • Comenzamos importando la clase de canalización de la biblioteca Hugging Face Transformers. La clase de canalización simplifica el uso de modelos previamente entrenados para diversas tareas generativas y de PNL.
  • Inicializamos una canalización text_to_image_generator, especificando que queremos realizar la generación de texto a imagen. También especificamos el modelo previamente entrenado que se utilizará, en este caso, "EleutherAI/gpt-neo-2.7B".
  • A continuación, definimos una descripción de texto. Esta descripción de texto será la entrada para nuestro codificador. En este ejemplo, es "Un lago sereno al anochecer".
  • Usamos text_to_image_generator para generar una imagen basada en la descripción proporcionada. El parámetro max_length controla la longitud máxima de la descripción de la imagen generada y do_sample=True permite el muestreo para producir diversas imágenes.
  • Puede mostrar o guardar la imagen generada. La función show() muestra la imagen en el fragmento de código anterior.

En este fragmento de código, el codificador procesa la descripción del texto mientras el decodificador genera una imagen basada en el contenido de la descripción del texto mencionada. Esto nos muestra cómo los codificadores y decodificadores trabajan juntos para transformar datos de una forma (texto) a otra (imagen), liberando el potencial creativo.

El ejemplo simplifica el proceso para ilustrar el concepto, pero las aplicaciones del mundo real pueden implicar modelos y preprocesamiento de datos más complejos.

Capacidades avanzadas

El encanto natural de estos AI sistemas radica en sus capacidades avanzadas. Pueden trabajar con varios tipos de datos, lo que los convierte en herramientas versátiles para iniciativas creativas. Profundicemos en algunas aplicaciones interesantes:

  • Idioma y Traducción: Los codificadores avanzados pueden tomar una oración en un idioma, comprender su significado y luego hacer que los decodificadores produzcan la misma oración en otro idioma. Es como tener un poeta multilingüe a tu disposición.
  • Arte y Estilo: Los codificadores pueden descifrar la esencia de diferentes estilos artísticos, desde el Renacimiento clásico hasta el abstracto moderno, y luego los decodificadores pueden aplicar estos estilos a nuevas obras de arte. Es como si un artista pudiera pintar en cualquier estilo que desee.
  • Texto a imagen: Un codificador puede comprender una descripción textual y un decodificador puede darle vida creando una imagen basada en esa descripción. Piense en ello como un ilustrador impulsado por IA.
  • Voz y Sonido: Estos componentes avanzados no se limitan al dominio visual o textual. Los codificadores pueden comprender las emociones de una voz y los decodificadores pueden generar música o discurso que transmita esas emociones. Es como tener un compositor que entiende los sentimientos.

Habilitando la colaboración creativa

Uno de los aspectos más interesantes de los codificadores y decodificadores en la IA generativa es su potencial para facilitar la colaboración creativa. Estos sistemas de inteligencia artificial pueden comprender, traducir y transformar obras creativas en diversos medios, cerrando brechas entre artistas, escritores, músicos y más.

Consideremos la pintura de un artista convertida en poesía o la melodía de un músico transformada en arte visual. Estos ya no son sueños inverosímiles sino posibilidades tangibles con codificadores y decodificadores avanzados. Colaboraciones que antes parecían improbables ahora encuentran un camino a través del lenguaje de la IA.

Aplicación en tiempo real de codificadores y decodificadores en IA generativa

Las aplicaciones en tiempo real de codificadores y decodificadores en IA generativa tienen un inmenso potencial en diversos dominios. Estos componentes avanzados de IA no se limitan a conceptos teóricos, sino que están transformando activamente la forma en que interactuamos con la tecnología. Profundicemos en algunos casos de uso del mundo real:

Aplicaciones en tiempo real | Codificadores y decodificadores en IA generativa

Traducción de idiomas y chatbots

Los codificadores decodifican y codifican un idioma en otro, haciendo posible la traducción de idiomas en tiempo real. Esta tecnología sustenta los chatbots que pueden conversar sin problemas en varios idiomas, facilitando la comunicación global y el servicio al cliente.

Este código utiliza la biblioteca Hugging Face Transformers para crear un modelo de traducción de idiomas. Un codificador procesa el texto de entrada (inglés) y un decodificador genera el texto traducido (francés) en tiempo real.

Creación artística

Los artistas utilizan codificadores para extraer la esencia de un estilo o género, y los decodificadores recrean obras de arte en ese estilo. Esta transformación en tiempo real permite una rápida producción de arte en diversas formas, desde pinturas renacentistas hasta piezas abstractas modernas.

Este código aprovecha un modelo de generación de texto a imagen de la biblioteca Hugging Face Transformers. Un codificador descifra la descripción del texto y un decodificador genera una imagen que corresponde a la descripción, lo que permite la creación artística en tiempo real.

Generación de contenido

Los codificadores analizan descripciones de texto y los decodificadores les dan vida a través de imágenes, ofreciendo aplicaciones prácticas en publicidad, comercio electrónico y generación de contenido. Transforme los listados de bienes raíces en experiencias visuales inmersivas y las descripciones de los productos pueden generar las imágenes correspondientes.

Este código utiliza un modelo de generación de texto a texto de Hugging Face Transformers. El codificador procesa una descripción de texto y el decodificador genera múltiples descripciones alternativas para la generación de contenido en tiempo real.

Generación de Audio y Música

Los codificadores capturan señales emocionales en la voz y los decodificadores generan voz o música expresiva en tiempo real. Esto encuentra aplicaciones en asistentes de voz, creación de contenido de audio e incluso apoyo a la salud mental, donde la IA puede brindar conversaciones reconfortantes.

Este código utiliza un modelo de texto a voz para convertir texto en voz (audio). Si bien la generación de audio en tiempo real es más compleja, este ejemplo simplificado demuestra el uso de un codificador para interpretar el texto de entrada y un decodificador para generar audio.

Aprendizaje Personalizado

En educación, los codificadores y decodificadores ayudan a crear materiales de aprendizaje personalizados. Los libros de texto se pueden convertir en lecciones interactivas con imágenes, y las aplicaciones de aprendizaje de idiomas pueden brindar asistencia de traducción y pronunciación en tiempo real.

En el aprendizaje personalizado, un codificador puede reducir la dimensionalidad de los datos de los estudiantes y un decodificador, en este caso, un modelo de regresión logística, puede predecir el desempeño de los estudiantes basándose en los datos reducidos. Si bien este es un ejemplo simplificado, los sistemas de aprendizaje personalizados suelen ser mucho más complejos.

Imagenes medicas

Los codificadores pueden analizar imágenes médicas y los decodificadores ayudan a mejorar las imágenes o proporcionan comentarios en tiempo real. Esto ayuda a los médicos en el diagnóstico y los procedimientos quirúrgicos, ofreciendo información rápida y precisa.

Este código muestra un ejemplo simple de mejora de imágenes médicas, donde un codificador procesa y preprocesa la imagen, y un decodificador (filtro de nitidez) mejora la calidad de la imagen. Las aplicaciones reales de imágenes médicas implican modelos especializados y un cumplimiento exhaustivo de los estándares sanitarios.

Juegos y Simulaciones

La interacción en tiempo real con personajes controlados por IA es posible gracias a los codificadores y decodificadores. Estos personajes pueden adaptarse, responder e involucrar a los jugadores de manera realista en videojuegos y simulaciones de entrenamiento.

Si bien este es un ejemplo muy simplificado, en juegos y simulaciones, las interacciones en tiempo real con personajes a menudo involucran sistemas de inteligencia artificial complejos y es posible que no utilicen codificadores y decodificadores directamente como componentes independientes.

Agentes conversacionales

Los codificadores ayudan a las máquinas a comprender las emociones y el contexto humanos, mientras que los decodificadores les permiten responder con empatía. Esto es invaluable en sistemas virtuales de apoyo a la salud mental y acompañantes de inteligencia artificial para personas mayores.

Se trata de un chatbot basado en reglas y, si bien implica codificar las entradas del usuario y decodificar las respuestas, los agentes conversacionales complejos suelen utilizar modelos sofisticados de comprensión del lenguaje natural para generar empatía y respuestas conscientes del contexto.

Estas aplicaciones en tiempo real resaltan el impacto transformador de los codificadores y decodificadores en la IA generativa, trascendiendo la mera teoría para enriquecer nuestra vida diaria de maneras notables.

Explorando codificadores y decodificadores avanzados

Codificadores y decodificadores en IA generativa

BERT (representaciones de codificador bidireccional de transformadores)

BERT es un modelo de codificador que se utiliza para comprender el lenguaje. Es bidireccional, lo que significa que considera tanto el contexto izquierdo como el derecho de las palabras de una oración. Este profundo entrenamiento bidireccional le permite a BERT comprender el contexto de las palabras. Por ejemplo, se puede deducir que "banco" se refiere a una institución financiera en la oración "Fui al banco" y a la orilla de un río en "Me senté junto al banco". Está entrenado con una gran cantidad de datos de texto y aprende a predecir las palabras que faltan en las oraciones.

  • Codificador: el codificador de BERT es bidireccional, lo que significa que considera el contexto izquierdo y derecho de una palabra en una oración. Este profundo entrenamiento bidireccional le permite comprender el contexto de las palabras, lo que lo hace excepcionalmente hábil en diversas tareas de comprensión del lenguaje natural.
  • Decodificador: si bien BERT es principalmente un codificador, a menudo se combina con otros decodificadores en tareas como generación de texto y traducción de idiomas. Los decodificadores para modelos basados ​​en BERT pueden ser autorregresivos o, en algunos casos, otro decodificador transformador.

Este código utiliza la biblioteca de transformadores Hugging Face para cargar un modelo BERT previamente entrenado para codificar texto. Tokeniza el texto de entrada, lo convierte en ID de entrada y luego lo pasa a través del modelo BERT. Encoder_output contiene las representaciones codificadas del texto de entrada.

GPT (Transformador preentrenado generativo)

Los modelos GPT son decodificadores que generan texto similar a un humano. Funcionan prediciendo la siguiente palabra en una secuencia basándose en el contexto de las palabras anteriores. Por ejemplo, si las palabras anteriores son "El cielo es", GPT puede predecir que la siguiente palabra podría ser "azul". Están capacitados en grandes corpus de texto para aprender gramática, estilo y contexto.

  • Codificador: los modelos GPT se centran en el aspecto del decodificador, generando texto similar al humano. Sin embargo, el decodificador de GPT también puede servir como codificador al invertir su modelo de lenguaje, lo que le permite extraer información del texto de manera efectiva.
  • Decodificador: el aspecto decodificador de GPT es lo que lo hace fascinante. Genera texto autorregresivamente, prediciendo la siguiente palabra en función del contexto de las palabras anteriores. El resultado es un texto coherente y contextualmente relevante.

Este código utiliza la biblioteca de transformadores de Hugging Face para cargar un modelo GPT-2 previamente entrenado para la generación de texto. Toma un texto de entrada, lo tokeniza y genera texto de forma autorregresiva utilizando el modelo GPT-2.

VAE (autocodificador variacional)

Los VAE se utilizan para la generación de imágenes y texto. El codificador asigna datos de entrada a un espacio latente continuo, una representación de dimensiones inferiores. Por ejemplo, puede asignar imágenes de gatos a puntos de este espacio. Luego, el decodificador genera imágenes a partir de estos puntos. Durante el entrenamiento, los VAE tienen como objetivo hacer que este espacio latente sea fluido y continuo para generar imágenes diversas y realistas.

  • codificador: Los VAE se utilizan comúnmente en la generación de imágenes y texto. El codificador asigna datos de entrada a un espacio latente continuo, especialmente útil para generar imágenes y textos diversos y realistas.
  • Descifrador: El decodificador mapea puntos en el espacio latente nuevamente al espacio de datos. Genera imágenes o texto a partir de puntos muestreados en el espacio latente.

Este código define un codificador automático variacional (VAE) en TensorFlow/Keras. El codificador toma una imagen de entrada, la aplana y la asigna a un espacio latente con media y varianza logarítmica. El decodificador toma un punto del espacio latente y reconstruye la imagen.

LSTM (memoria a corto plazo)

Los LSTM son redes neuronales recurrentes que se utilizan para datos secuenciales. Codifican datos secuenciales como oraciones considerando el contexto de elementos anteriores de la secuencia. Aprenden patrones en secuencias, lo que los hace adecuados para tareas como el procesamiento del lenguaje natural. En los codificadores automáticos, los LSTM reducen secuencias a representaciones de dimensiones inferiores y las decodifican.

  • codificador: LSTM es un tipo de red neuronal recurrente (RNN) ampliamente utilizado para diversas tareas de datos secuenciales, como el procesamiento del lenguaje natural. La celda LSTM codifica datos secuenciales considerando el contexto de elementos anteriores de la secuencia.
  • Descifrador: Si bien los LSTM se usan con mayor frecuencia como codificadores, también se pueden combinar con otro LSTM o capas completamente conectadas para que funcionen como un decodificador para generar secuencias.

Este código configura un codificador automático LSTM simple. El codificador procesa secuencias y las reduce a una representación de dimensiones inferiores mientras que el decodificador reconstruye secuencias a partir de la representación codificada.

CNN (red neuronal convolucional)

Las CNN se utilizan principalmente para el análisis de imágenes. Funcionan como codificadores analizando imágenes a través de capas convolucionales, capturando características como bordes, formas y texturas. Estas funciones se pueden enviar a un decodificador, como una GAN, para generar nuevas imágenes. Las CNN están entrenadas para reconocer patrones y características en imágenes.

  • codificador: Las CNN se utilizan principalmente en tareas de visión por computadora como codificadores. Analizan imágenes mediante filtros convolucionantes sobre la entrada, capturando características a diferentes escalas. Las funciones extraídas se pueden enviar a un decodificador para tareas como la generación de imágenes.
  • Descifrador: En la generación de imágenes, las CNN pueden ir seguidas de un decodificador, como un decodificador de red generativa adversaria (GAN), para sintetizar imágenes en función de las características aprendidas.

Estos modelos avanzados de codificador y decodificador representan la columna vertebral de muchas aplicaciones de IA generativa. Su flexibilidad y adaptabilidad han permitido a los investigadores y desarrolladores traspasar los límites de lo que se puede lograr en el procesamiento del lenguaje natural, la visión por computadora y varios otros campos. A medida que la IA siga evolucionando, estos modelos seguirán a la vanguardia de la innovación.

Estos modelos se someten a una capacitación exhaustiva en grandes conjuntos de datos para aprender los matices de sus respectivas tareas. Están ajustados para realizar funciones específicas y están a la vanguardia de la innovación en IA.

Estudios de casos de codificadores y decodificadores avanzados

BERT en motores de búsqueda

  • Google utiliza BERT para mejorar los resultados de su motor de búsqueda. BERT ayuda a comprender mejor el contexto y la intención detrás de las consultas de búsqueda. Por ejemplo, si busca “el viajero de Brasil a EE. UU. en 2019 necesita una visa”, los motores de búsqueda tradicionales podrían haberse centrado en la palabra clave “visa”. Pero con BERT, Google entiende que el usuario busca información sobre un brasileño que viaja a Estados Unidos y sus requisitos de visa.
  • El modelo de búsqueda basado en BERT de Google se puede demostrar utilizando la biblioteca Hugging Face Transformers. Este código muestra cómo utilizar un modelo basado en BERT para mejorar la comprensión de las consultas de búsqueda:

Este código utiliza BERT para mejorar los resultados de búsqueda al comprender las consultas de los usuarios y el contexto del documento, lo que genera respuestas más precisas.

GPT-3 en generación de contenidos

  • Utilice GPT-3 de OpenAI para generar contenido para diversas aplicaciones. Puede escribir artículos, responder preguntas e incluso crear agentes conversacionales. Las empresas utilizan GPT-3 para automatizar la generación de contenido, la atención al cliente y los asistentes virtuales.
  • GPT-3 de OpenAI puede generar texto para varias aplicaciones. A continuación se muestra un ejemplo del uso de la API OpenAI GPT-3 para la generación de contenido:

Con GPT-3, puede generar texto similar a un humano para tareas como la creación de contenido o chatbots mediante la API OpenAI.

VAE en generación de imágenes

  • Los VAE tienen aplicaciones en la generación de imágenes para la moda. Empresas como Stitch Fix utilizan VAE para crear recomendaciones de ropa personalizadas para los usuarios. Al conocer las preferencias de estilo de los usuarios, pueden generar imágenes de prendas que probablemente sean de su interés.
  • El uso de VAE para la generación de imágenes se puede mostrar con código que genera nuevas imágenes según las preferencias del usuario, similar a lo que hace Stitch Fix.

Este fragmento de código ilustra cómo los codificadores automáticos variacionales (VAE) pueden crear imágenes según las preferencias del usuario, de forma similar a cómo Stitch Fix sugiere ropa según las preferencias de estilo.

LSTM en reconocimiento de voz

  • Los sistemas de reconocimiento de voz, como los utilizados por Alexa de Amazon o Siri de Apple, a menudo utilizan LSTM. Procesan datos de audio y los convierten en texto. Estos modelos deben considerar el contexto de los sonidos anteriores para transcribir el habla con precisión.
  • Los LSTM se utilizan comúnmente en el reconocimiento de voz. A continuación se muestra un ejemplo simplificado del uso de un modelo basado en LSTM para el reconocimiento de voz:

Este código configura un modelo de reconocimiento de voz basado en LSTM, una tecnología fundamental de asistentes de voz y servicios de transcripción.

CNN en vehículos autónomos

  • Los vehículos autónomos dependen de las CNN para el análisis de imágenes en tiempo real. Pueden identificar objetos como peatones, otros vehículos y señales de tráfico. Esto es esencial para tomar decisiones en fracciones de segundo al conducir.
  • Los vehículos autónomos dependen de las CNN para la detección de objetos. A continuación se muestra un ejemplo simplificado del uso de un modelo CNN previamente entrenado para la detección de objetos:

En el contexto de los vehículos autónomos, las CNN, como MobileNetV2, pueden detectar objetos en imágenes para ayudar a los vehículos autónomos a tomar decisiones en la carretera.

Estos fragmentos de código proporcionan una demostración práctica de cómo aplicar estas técnicas de IA en varios escenarios del mundo real. Tenga en cuenta que las implementaciones del mundo real suelen ser más complejas y utilizan conjuntos de datos extensos, pero estos ejemplos ofrecen una vista simplificada de su aplicación.

Uso ético y responsable

Como ocurre con cualquier herramienta poderosa, el uso ético de codificadores y decodificadores avanzados es primordial. Es vital garantizar que el contenido generado por IA respete los derechos de autor, mantenga la privacidad y no propague material dañino u ofensivo. Además, la rendición de cuentas y la transparencia en el proceso creativo son clave, sobre todo cuando la IA desempeña un papel importante.

Conclusión

La fusión de codificadores y decodificadores avanzados en IA generativa marca una nueva era de creatividad, donde los límites entre las diferentes formas de arte y comunicación se difuminan. Ya sea traduciendo idiomas, recreando estilos artísticos o convirtiendo texto en imágenes, estos componentes de IA son la clave para desbloquear una creatividad innovadora, colaborativa y éticamente responsable. Con un uso responsable, pueden remodelar la forma en que percibimos y expresamos nuestro mundo.

Codificadores y decodificadores en IA generativa

Puntos clave

  • Los codificadores y decodificadores de la IA generativa están transformando la forma en que creamos, interpretamos e interactuamos con el arte, el lenguaje y los datos.
  • Estos componentes de IA desempeñan funciones esenciales en la comprensión y generación de diversas formas de datos, incluidos texto, imágenes y audio.
  • Las aplicaciones en tiempo real de codificadores y decodificadores abarcan traducción de idiomas, generación de arte, creación de contenido, generación de audio, aprendizaje personalizado, imágenes médicas, juegos y agentes conversacionales.
  • El uso ético y responsable del contenido generado por IA es crucial, centrándose en la privacidad, la transparencia y la responsabilidad.

Preguntas frecuentes

P1. ¿Qué son los codificadores y decodificadores en la IA generativa?

R. Los codificadores son componentes de IA que comprenden y extraen información esencial de los datos, mientras que los decodificadores generan resultados creativos basados ​​en esta información.

P2. ¿Cómo benefician los codificadores y decodificadores al proceso creativo?

R. Permiten la traducción de idiomas en tiempo real, la creación de arte, la generación de contenido, la generación de audio y música, el aprendizaje personalizado y más.

P3. ¿Cuáles son algunas aplicaciones en tiempo real de codificadores y decodificadores en IA?

R. Estas aplicaciones incluyen traducción de idiomas, generación de arte, creación de contenido, generación de audio, mejora de imágenes médicas, juegos interactivos y agentes conversacionales empáticos.

P4. ¿Cómo promueven los codificadores y decodificadores la colaboración creativa?

R. Cierran brechas entre diversos medios creativos, permitiendo a artistas, escritores y músicos colaborar en proyectos que involucran múltiples formas de expresión.

Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

punto_img

Información más reciente

punto_img