Clasificación de imágenes con REDES CONVOLUCIONALES en Python (tutorial)

แชร์
ฝัง
  • เผยแพร่เมื่อ 19 ก.ย. 2024
  • 🔥🔥Academia Online🔥🔥: cursos.codific...
    🔥🔥Asesorías y formación personalizada🔥🔥: www.codificand...
    En este cuarto video de la serie "Redes Convolucionales" veremos un tutorial para la clasificación de imágenes usando la Red Convolucional LeNet.
    La Red Convolucional será capaz de determinar a qué número corresponde cada imagen, todo esto con muy pocas líneas de código y logrando una precisión cercana al 100%.
    Descarga el código fuente en este enlace: www.codificand...
    🔴 ** VISITA WWW.CODIFICANDOBITS.COM **
    En el sitio web encontrarán artículos y podrán descargar material útil para el desarrollo de aplicaciones de Machine Learning y Ciencia de Datos. También podrán ponerse en contacto conmigo si están interesados en servicios de formación, charlas o asesorías... Y muy pronto podrán acceder a los cursos online que estoy preparando.
    🔴 ** LOS DEMÁS VIDEOS DE LA SERIE **
    🎥 ¿Qué son las Redes Convolucionales?: • ¿Qué son las REDES CON...
    🎥 La Convolución en las Redes Convolucionales: • La CONVOLUCIÓN en las ...
    🎥 Padding, strides, max pooling y stacking en las REDES CONVOLUCIONALES: • Padding, strides, max ...
    🔴 ** ÚNETE A CODIFICANDO BITS Y SÍGUEME EN MIS REDES SOCIALES **
    ✅ Sitio web: www.codificand...
    ✅ Suscríbete: www.youtube.co...
    ✅ Facebook: / codificandobits
    ✅ Instagram: / codificandobits
    ✅ Twitter: / codificandobits
    🔴 ** ACERCA DE MÍ **
    Soy Miguel Sotaquirá, el creador de Codificando Bits. Tengo formación como Ingeniero Electrónico, y un Doctorado en Bioingeniería, y desde el año 2017 me he convertido en un apasionado por el Machine Learning y el Data Science, y en la actualidad me dedico por completo a divulgar contenido y a brindar asesoría a personas y empresas sobre estos temas.
    🔴 ** ACERCA DE CODIFICANDO BITS **
    El objetivo de Codificando Bits es inspirar y difundir el conocimiento en las áreas de Machine Learning y Data Science.
    #machinelearning
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 81

  • @codificandobits
    @codificandobits  3 ปีที่แล้ว

    🔥🔥Academia Online🔥🔥: cursos.codificandobits.com/
    🔥🔥Asesorías y formación personalizada🔥🔥: www.codificandobits.com/servicios/

  • @jlnomo10
    @jlnomo10 5 ปีที่แล้ว +2

    Excelente explicación. Recien veo tus videos y me han servido mucho para comprender los temas.

  • @alexissegovia2006
    @alexissegovia2006 4 ปีที่แล้ว +1

    Excelente amigo, muy buena tu explicación.... gracias

  • @manuelgilsitio
    @manuelgilsitio 5 ปีที่แล้ว +3

    Excelente explicación, muy bueno!

  • @lucasklein1443
    @lucasklein1443 4 ปีที่แล้ว +2

    Muy buen vídeo, gracias!

  • @wilmersaavmend8749
    @wilmersaavmend8749 4 ปีที่แล้ว

    Dios te siga dando exitos y esa facilidad que tienes para enseñar saludos y muchas gracias por tus enseñanzas

    • @codificandobits
      @codificandobits  3 ปีที่แล้ว

      Muchas gracias por tu comentario Wilmer. Un saludo!

  • @nicolaswolyniec1354
    @nicolaswolyniec1354 5 ปีที่แล้ว +1

    muchas gracias! explicación más que clara!

  • @pablogiri812
    @pablogiri812 4 ปีที่แล้ว

    Excelente trabajo, tus vídeos me ayudan en un diplomatura, muchas gracias!!!!!!!!

    • @codificandobits
      @codificandobits  4 ปีที่แล้ว

      Qué bueno que te resulten útiles Pablo. Gracias por seguir el canal y un saludo!

  • @oscarriojas
    @oscarriojas 5 ปีที่แล้ว +1

    Muchas gracias por compartir muy buena tu explicación

  • @guillermoleal682
    @guillermoleal682 3 ปีที่แล้ว +1

    Voy conociendo tu canal, muy buena la forma en que explicas entendí bien, gracias, ya me subscribi

  • @objetosdeculto
    @objetosdeculto 3 ปีที่แล้ว

    Nuevo suscriptor.

  • @walteradw2352
    @walteradw2352 4 ปีที่แล้ว

    Gracias por tan buena explicación.

  • @javiersuarez8415
    @javiersuarez8415 5 ปีที่แล้ว +1

    Excelente trabajo 👍

  • @josemanuelmanesridaura8874
    @josemanuelmanesridaura8874 4 ปีที่แล้ว

    Gracias por Compartir. Excelente.Explicación.

    • @codificandobits
      @codificandobits  4 ปีที่แล้ว

      Como siempre gracias a ti José Manuel por seguir el contenido del canal. Un saludo!

  • @veracru7471
    @veracru7471 3 ปีที่แล้ว

    Genial explicación

  • @nerdofilo
    @nerdofilo 5 ปีที่แล้ว +2

    Bueno tu video, una sugerencia, el codigo que vas escribiendo mientras hablas, esta en la parte de abajo y los controles de youtube a veces lo tapan

    • @codificandobits
      @codificandobits  5 ปีที่แล้ว

      Gracias por tu sugerencia, no me había dado cuenta!

  • @juremu82
    @juremu82 5 ปีที่แล้ว +1

    Gracias

  • @fernandosanchezvillanueva4762
    @fernandosanchezvillanueva4762 4 ปีที่แล้ว

    Lo maximo, super explicado!!!!

  • @objetosdeculto
    @objetosdeculto 3 ปีที่แล้ว +1

    Para implementar una LeNet es forzoso que las dimensiones de la imágenes de entrada sean de 28 x 28 o 32 x 32? He visto que esta Red requiere inputs de 32 x 32.

  • @joaohiga2665
    @joaohiga2665 4 ปีที่แล้ว +1

    Hola! Muy buen vídeo, pero solo tengo una duda, cómo realizas la gráfica de matriz de confusión? Si me pudieras responder estaría encantado :)

  • @juanpavlo5649
    @juanpavlo5649 3 ปีที่แล้ว

    Muy buen video. Podrias apoyar explicando en un video que es image captioning

    • @codificandobits
      @codificandobits  3 ปีที่แล้ว +1

      Gracias por tu comentario Juan Pablo. Tomaré nota de tu sugerencia para un próximo video sobre image captioning. Un saludo!

  • @fabriciot4166
    @fabriciot4166 3 ปีที่แล้ว

    Buen video, gracias! Podrías poner un link a un notebook de Colab o compartir el código?

  • @gilbertofontecha9044
    @gilbertofontecha9044 3 ปีที่แล้ว

    Además de la excelente explicación, el plus es que el acento es colombiano

  • @victormaclaum8074
    @victormaclaum8074 2 ปีที่แล้ว

    Excelente video. Felicitaciones. Soy suscriptor hace un tiempo. Una pregunta: si quisiera una red neuronal para reconocer números de más de 2 dígitos y decimales se usaría la misma lógica pero con diferente data de entrenamiento??

    • @codificandobits
      @codificandobits  2 ปีที่แล้ว

      Hola Víctor, qué buena pregunta. La respuesta es: depende.
      Si los números de dos dígitos y decimales pertenecen a un número fijo de categorías, puedes usar la misma lógica: un clasificador.
      Pero si tienes combinaciones arbitrarias de números en este caso debes construir un sistema que haga la transcripción: que tome la imagen y la convierta en texto representando los diferentes números. En este caso deberías usar una combinación de redes convolucionales con redes recurrentes (tipo LSTM). Puedes buscar algo relacionado con "image captioning".
      Un saludo!

    • @victormaclaum8074
      @victormaclaum8074 2 ปีที่แล้ว +1

      @@codificandobits uhhhh excelente explicación. Gracias. Díos lo bendiga

  • @mlaiqcangellagrana5247
    @mlaiqcangellagrana5247 2 ปีที่แล้ว

    Muy bueno miguel. Solo me queda la duda del módulo de matriz de confusión que lo pones en español. ¿Está en español el título del módulo?

    • @codificandobits
      @codificandobits  2 ปีที่แล้ว

      Sí, está en español (matriz_confusion.py), aunque está basado en el módulo confusion_matrix de Scikit-learn.

  • @luisgerardocholoquingacoch4025
    @luisgerardocholoquingacoch4025 5 ปีที่แล้ว +1

    Excelente aporte ... pero si quisiera ya trabajar con imagenes propias que estan en un computador cual seria el proceso?

    • @codificandobits
      @codificandobits  5 ปีที่แล้ว

      Hola Luis Gerardo. El set MNIST de este tutorial es limitado: imágenes en escala de gris, fondo de color blanco, y únicamente dígitos.
      Si quieres una red convolucional más robusta (capaz de procesar imágenes a color con diferentes contenidos) te recomiendo las arquitecturas AlexNet, VGGNet, GoogleNet o ResNet, por ejemplo.
      Más adelante publicaré tutoriales de estas redes en el canal.
      Gracias por tu comentario. Un saludo!

  • @ivancueva8446
    @ivancueva8446 3 ปีที่แล้ว

    Muy buen video. Tengo una pregunta: ¿Como determinar las dimensiones y cantidad de filtros a aplicar?

    • @codificandobits
      @codificandobits  3 ปีที่แล้ว +1

      Hola Iván. Esta es una de las preguntas más usuales en Deep Learning, pues dada la variedad de los datos (sonidos, imágenes, videos, texto) no resulta posible predecir con antelación el tamaño que deberá tener la red (y esto aplica no sólo para redes convolucionales, sino para todas las demás redes: neuronales, recurrentes, LSTM, transformer).
      Usualmente lo que sugiero es:
      1) Partir de una arquitectura conocida, previamente publicada en artículos científicos, y para la cual se tenga certeza de que funciona para un set de datos similar.
      2) Entrenarla y validarla con nuestro set de datos.
      3) Si el comportamiento en 2) no resulta adecuado, modificarla ligeramente, agregando por ejemplo capas ocultas o filtros/neuronas en cada capa. Entrenar y validar. Y repetir este punto hasta que estemos satisfechos.
      En todo caso estoy pensando un próximo video con algunas sugerencias prácticas para abordar este problema.
      Un saludo!

  • @julianrenemunozburbano717
    @julianrenemunozburbano717 5 ปีที่แล้ว

    Un muy buen aporte. Una pregunta. Trabajo con luz y sombra para clasificación de objetos, conoces de un dataset que contenga imágenes de objetos en escala de grises o a color?. Gracias

    • @codificandobits
      @codificandobits  5 ปีที่แล้ว

      Hola Julián. "Kaggle datasets" es un lugar en donde puedes encontrar diferentes tipos de datasets, muy probablemente uno similar al que estás buscando.
      Acá te dejo el enlace: www.kaggle.com/datasets
      Un saludo!

  • @Ariel-kh1kq
    @Ariel-kh1kq 3 ปีที่แล้ว

    8:35

  • @juanandreslopezcubides5626
    @juanandreslopezcubides5626 2 ปีที่แล้ว +1

    Como se escogen los tamaños de kernel en cada filtro?

    • @codificandobits
      @codificandobits  2 ปีที่แล้ว +1

      El tamaño del kernel es un hiperparámetro del modelo. Esto quiere decir que debes entrenarlo 7 validarlo simultáneamente con diferentes tamaños. El tamaño más adecuado será el que te entregue un mejor desempeño en entrenamiento/validación bien sea evaluando la pérdida o el desempeño del modelo en términos de precisión.

    • @juanandreslopezcubides5626
      @juanandreslopezcubides5626 2 ปีที่แล้ว

      @@codificandobits Disculpa tienes algun video hablando sobre funciones de activación como leaky relu, pre relu etc con sus mejores inicializadores en los pesos?

  • @Otonium
    @Otonium 4 ปีที่แล้ว

    Jola, muchas gracias por tus videos. Son muy buenos. Volvera tu website?

    • @codificandobits
      @codificandobits  4 ปีที่แล้ว +1

      Hola Otonium, gracias por tu comentario!
      Con respecto al website: no, realmente ahora estoy dedicado únicamente al canal. Un saludo!

  • @julianrenemunozburbano717
    @julianrenemunozburbano717 5 ปีที่แล้ว

    Buenas noches Miguel, quiero preguntarte lo siguiente: estoy trabajando con luz y con sombras de objetos o formas para entrenar una red neuronal convolucional, y no tengo el dataset, conoces un dataset diferente al que me habías recomendado?. La red es LeNet o que sugerencias me puedes dar?. Dada tu experiencia sabes si en matlab es posible utlizar LeNet?. Muchas gracias

    • @javiersuarez8415
      @javiersuarez8415 5 ปีที่แล้ว

      Hola, pienso que si sabes programar matlab y entiendes la matemática detras de Lenet, la respuesta sería si.

  • @MemoxCid
    @MemoxCid 4 ปีที่แล้ว +1

    Hola una duda que son los paddings y los strikes,gracias

    • @codificandobits
      @codificandobits  4 ปีที่แล้ว

      ¡Hola Guillermo y gracias por tu comentario!
      El "padding" consiste en "rellenar" la imagen con ceros. Esto hace que al aplicar la convolución la imagen resultante tenga un tamaño igual al de la imagen de entrada.
      Los "strides" son los "saltos" que da el filtro (kernel) durante la convolución. Así, un "stride" igual a 1 implica que el filtro se desplaza sólo 1 pixel (a la derecha o hacia abajo) en cada iteración, un "stride" de 2 equivale a 2 pixeles de desplazamiento, y así sucesivamente.
      ¡Un saludo!

  • @jorgeluismadridgomez1643
    @jorgeluismadridgomez1643 2 ปีที่แล้ว

    Hola que tal. Tengo una duda ¿Hay manera de utilizar el modelo entrenado para clasificar números desde la webcam? Y si es así ¿Cómo se puede hacer?

    • @codificandobits
      @codificandobits  2 ปีที่แล้ว +2

      Hola Jorge Luis. Claro que sí, el modelo entrenado podría ser usado desde la webcam. En este caso deberías combinarlo con OpenCV (librería que te permite acceder a la webcam desde Python). Te sugiero complementar este video de clasificación con el video del canal sobre "reconocimiento facial en python" (en este último explico cómo usar open cv para capturar imágenes de la webcam). Un saludo!

  • @ericl.32
    @ericl.32 4 ปีที่แล้ว

    Hola, soy nuevo en el mundo de machine learning y deep learning, al ver el video me nacieron algunas dudas sobre la validación, agradecería sus respuestas. Mi duda va con la usabilidad de cross-validation, al realizar la división de los conjuntos de datos en test, train y validation , no sé sabe si la división es correcta o acertada, entonces se suele usar cross-validation, ya sea Leave-one-out, K-fold, entre otros. Pero por qué acá no se utiliza algún método de cross-validation? Se hace internamente? O no es necesario?
    Agradecería su respuesta.

    • @codificandobits
      @codificandobits  4 ปีที่แล้ว +2

      Hola Eric. Los métodos de cross-validation que mencionas se usan convencionalmente al implementar modelos de Machine Learning, dado que la cantidad de datos disponible es limitada.
      Sin embargo en Deep Learning, en donde la cantidad de datos usados para desarrollar el modelo es muy muy grande, no resulta necesario el uso de cross-validation. Por eso simplemente se toma el set de datos completo y se subdivide en train, test y validation.
      Un saludo!

    • @ericl.32
      @ericl.32 4 ปีที่แล้ว

      @@codificandobits muchas gracias por la respuesta.
      Saludos

  • @soundapps
    @soundapps 3 ปีที่แล้ว

    buenas noches una consulta para acceder a los videos del curso se debe cancelar alguna cantidad de dinero, ya me registré en su página web pero no puedo ver los videos muchas gracias

    • @codificandobits
      @codificandobits  3 ปีที่แล้ว +1

      Hola. Sí, el acceso a los cursos tiene un costo mensual de 10 dólares. Un saludo!

  • @sebastiannietor9724
    @sebastiannietor9724 4 ปีที่แล้ว

    Cuando ingreso una imagen, De que forma podría ver la salida de cada neurona? Para ver qué características está extrayendo

  • @cesarmejia7766
    @cesarmejia7766 3 หลายเดือนก่อน

    En las capas dense con 120 y 84 neuronas, por que usaste esos numeros? Esto es prueba y error? O como determino la cantidad de neuronas y capas ocultas de tipo Dense?

  • @haresjetic4754
    @haresjetic4754 5 ปีที่แล้ว

    me abarerce un error en la ultima linea de codigo en la parte de la matriz.
    ---------------------------------------------------------------------------
    ModuleNotFoundError Traceback (most recent call last)
    in
    ----> 1 from matriz_confusion import graficar_matriz_de_confusion
    2
    3 y_pred = modelo.predict_classes(x_test)
    4 y_ref = np.argmax(y_test,axis=1)
    5 etiquetas = ['0','1','2','3','4','5','6','7','8','9']
    ModuleNotFoundError: No module named 'matriz_confusion'

  • @moisesdiaz9852
    @moisesdiaz9852 4 ปีที่แล้ว

    Excelente explicacion, lo unico que lamento es que no puedo darle "Me gusta" mas de 1 una vez

    • @codificandobits
      @codificandobits  4 ปีที่แล้ว

      😀😂 con suscribirte es suficiente Moisés! Un saludo!

  • @johnlopezsalas5680
    @johnlopezsalas5680 5 ปีที่แล้ว

    Buen dia, tengo unas consultas y quisiera ver si me podrías ayudar. Al momento de entrenar una imagen por ejemplo un elefante, al pasar por la primera capa este pasa por un kernel entonces, hay la posibilidad de ver la imagen a la salida de ese kernel?
    yo se que la primera capa me detecta bordes, si tengo digamos 4 capas las demás que me detectan me podrías ayudar?? para entender
    agradeceria tu ayuda

    • @codificandobits
      @codificandobits  5 ปีที่แล้ว

      Hola John. Claro que es posible visualizar la salida del kernel. Esta salida se conoce como "activación" o "feature map".
      La idea es crear un modelo sólo con la capa que te interesa analizar. Por ejemplo:
      model = Model(inputs=model.inputs, outputs=model.layers[1].output)
      Donde "layers[1]" hace referencia a la segunda capa convolucional.
      Después debes cargar tu imagen en la variable "img" y usas model.predict(img) para obtener la salida deseada.
      Me cuentas cómo te va con esto. Un saludo!

    • @johnlopezsalas5680
      @johnlopezsalas5680 5 ปีที่แล้ว

      @@codificandobits muchas gracias, ya te comento

    • @johnlopezsalas5680
      @johnlopezsalas5680 5 ปีที่แล้ว

      Muchas gracias me sirvió, otra cunsulta
      Estoy intentando hacer un Biometrico para tener más detalles cuantas Capas me recomiendas

    • @codificandobits
      @codificandobits  5 ปีที่แล้ว

      @@johnlopezsalas5680 te refieres a detección de rostros, o a huellas dactilares?

    • @johnlopezsalas5680
      @johnlopezsalas5680 5 ปีที่แล้ว

      Si, estoy intentando con pliegues palmares

  • @lobitgamer3459
    @lobitgamer3459 4 ปีที่แล้ว

    9:30 comentas que utilizas precisión y lo relacionas como el accuracy, eso es la exactitud

  • @victormazul
    @victormazul 3 ปีที่แล้ว

    Lo único que no me quedo claro fue:
    La entrada de la primera convolución es una imagen, dentro de la convolucón se aplican 6 filtros, y la salida se podría decir que son 6 imagenes mas chicas
    ¿Pero cual es la entrada de la siguiente convolución?
    Primero pensaba que serían las 6 imagenes anteriores, pero como son 16 filtros, entonces el resultado hubiera sido de 96 imagenes, pero el resultado fue de 16 como si la entrada hubiera sido una sola imagen
    ¿Alguien me podría ayudar con eso?

    • @codificandobits
      @codificandobits  3 ปีที่แล้ว +1

      Hola Víctor y gracias por tu comentario.
      Te resumo lo que ocurre:
      - Primer bloque: Imagen original -> convolución con 6 filtros -> 6 imágenes más chicas (tal como lo mencionas)
      - Segundo bloque: 6 imágenes chicas del bloque anterior, pero apiladas -> convolución con 16 filtros -> 16 imágenes más chicas que las de entrada
      Lo que ocurre es que en el segundo bloque cada uno de los 16 filtros convolucionales genera una imagen 2D. Al tener 16 filtros se tendrán 16 imágenes de salida. Este procedimiento, de convolucionar un filtro con un volumen, lo explico desde el minuto 4:00 en este video: th-cam.com/video/ySbmdeqR0-4/w-d-xo.html.

    • @victormazul
      @victormazul 3 ปีที่แล้ว

      @@codificandobits Perfecto,!!, entonces básicamente se sigue el mismo proceso como cuando se aplica el filtro a una imagen RGB
      Muchas gracias, exxcelentes videos y explicaciones

    • @codificandobits
      @codificandobits  3 ปีที่แล้ว +1

      @@victormazul Si, exactamente. Se hace lo mismo que con las imágenes RGB. Saludos!

  • @blion3d
    @blion3d 4 ปีที่แล้ว +1

    Pareces Freddy Vega