Training Yolov3 Custom Dataset en Google Colab
Вставка
- Опубліковано 18 лис 2024
- En este video encontrarás el PASO a PASO para entrenar una red neuronal YOLOv3 usando tu propio dataset y con procesamiento en la nube (pytorch y google colab).
Enlace al repositorio (código e instrucciones):
github.com/Dav...
Instalador de Git para Windows:
git-scm.com/do...
Tutoriales de interés:
Yolov3 en video
• YOLOv3 Detección de ob...
Etiquetado de imágenes y configuración de dataset para detección de objetos Retinanet:
• Detección de objetos (...
Entrenamiento de la red neuronal convolucional detección de objetos Retinanet:
• Detección de objetos (...
Prueba dedetección de objetos en video Retinanet:
• Detección de objetos (...
Data augmentation parte 1:
• Data Augmentation para...
Data augmentation parte 2: (Entrenamiento Clasificador de imágenes de aves)
• Data Augmentation para...
Cómo calcular e interpretar la matriz de confusión:
• Cómo interpretar y cal...
Transfer learning Resnet50, VGG16, VGG19, Mobilenet
• Clasificación de imáge...
el mejor hp video de la historiaaa, llevaba como 2 semanas traton de entrenar la red en maquina virtual y ya casi llorabaaaa
También estaría de lujo un tutorial del mismo video pero probado en modo local con windows, saludos!!
Excelente video! Disculpa cómo puedo hacer para sacar gráficas del entrenamiento y validación?
Hola Juan, muchas gracias por escribir
Claro que sí, solamente crea una celda en colab después de tu entrenamiento y ejecuta la siguiente línea:
%load_ext tensorboard
%tensorboard --logdir logs
Saludos!!! y gracias nuevamente por comentar
Hola. Muchas gracias por este video, por fin lo logro después de varios días de intentar diferentes cosas. Una pregunta, puedo hacer la detección con videos ya grabados? Es decir, .mp4 por ejemplo.
¡Muchas gracias!
Hola Daniel, muchas gracias por comentar.
Claro que sí. Solo debes ir a la línea donde accedemos a la cámara (si estas corriendo detect_cam.py, vas a la línea 63):
camera = cv2.VideoCapture(0)
Y vas a cambiar el número 0, para poner el path del video que quieres cargar, algo así:
camera = cv2.VideoCapture('Mi_video.avi')
Excelente video, agradecido, habrá alguna forma de guardar los pesos con el entrenamiento custom?
Hola mi estimado, excelente video. Tengo una pregunta, si quisiera graficar las curvas de aprendizaje y perdida, es posible con esta implementación? Saludos!!
Ojalá alguien responda esta pregunta. Saludos!
Hola david, soy jorge un nuevo suscriptor, buen video he seguido cada paso y todo bien, solo que tuve problemas al entrenar en colab en modo GPU, cuando entrene en modo none hasta 150 etapas, me corrio perfecto. tal vez sea por que no tengo un procesador gráfico actual. Seguire viendo tus videos
Hola, muchas gracias por escribir.
Si continuas con problemas al entrenar en Colab, compártenos el error y podemos ver si lo podemos solucionar. Saludos!!!
Saludos excelente video, me podrias indicar como puedo obtener el bounding box de cada objeto detectado en cada imagen.
Hola, muchas gracias por escribir
En el archivo detectC.py encuentras los bouding box en las líneas 117 y 118. En el código tenemos un bucle for que recorre cada una de las detecciones y guarda en las variables x1, x2, y1 y y2, las coordenadas de cada región.
Espero que esta información sea de ayuda.
@sistemas Inteligente hola amigo tengo un problema con la ultima con el ultimo comando para ya abrir la cámara y luego se queda asi cargando, espero me puedas ayudar por favor
(YoloCustom) C:\Users\jorge\Yolov3Custom-master>python detect_cam.py --model_def config/yolov3-custom3C.cfg --weights_path checkpoints/yolov3_ckpt_199.pth --class_path data/custom/classes.names --conf_thres 0.6
Namespace(batch_size=1, checkpoint_model=None, class_path='data/custom/classes.names', conf_thres=0.6, image_folder='data/samples', img_size=416, model_def='config/yolov3-custom3C.cfg', n_cpu=0, nms_thres=0.4, weights_path='checkpoints/yolov3_ckpt_199.pth')
Traceback (most recent call last):
File "detect_cam.py", line 99, in
frame_ = cv2.rectangle(frame, (x1, y1 + box_h), (x2, y1), color, 5)
cv2.error: OpenCV(4.5.2) :-1: error: (-5:Bad argument) in function 'rectangle'
> Overload resolution failed:
> - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
> - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
> - Can't parse 'rec'. Expected sequence length 4, got 2
> - Can't parse 'rec'. Expected sequence length 4, got 2
[ WARN:0] global C:\Users
unneradmin\AppData\Local\Temp\pip-req-build-1bq9o88m\opencv\modules\videoio\src\cap_msmf.cpp (438) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback
Hola David.
Una consulta, cuando intento ejecutar la prueba con imagenes me sale este error:
(YoloCustom) D:\Desarrollos\Yolov3_handgun_detect>python detectC.py --image_folder data/samplesC/ --model_def config/yolov3-custom3C.cfg --weights_path checkpoints/yolov3_ckpt_9.pth --class_path data/custom/classes.names
Traceback (most recent call last):
File "detectC.py", line 3, in
from models import *
ModuleNotFoundError: No module named 'models'
NO tendrás un video de Faster RCNN?
Hola David. Gracias por tu vídeo me sirvió bastante, sin embargo una pregunta ¿Cómo logras que tu vídeo streaming desde tu webcam se vea tan fluido cuando detecta? en mi caso cuando ejecuto el comando para detectar con la webcam va bastante lento, con un retraso aproximado de 4s. y he notado que al ejecutarlo corre en la CPU mientras no en la GPU dedicada que tengo.
Gracias por los vídeos, son de bastante aprendizaje!
Nuevo Suscriptor!
Hola Felipe, gracias por escribir.
Dependerá la rapidez, entre otras cosas, de la GPU que tengas. Fíjate con el administrador de tareas de windows, en la pestaña de rendimiento, si la gráfica que muestra la memoria de la GPU aumenta en su ocupación. Si no es así, el sistema no la está usando y debes verificar que el entorno tenga correctamente instalado el toolkit de cuda.
Hola David, muchas gracias por tu ayuda, ya mejoro el retraso en el streaming con la instalación de tensorflow-gpu y cuda.
Disculpa otra pregunta, ¿Sabes de algún módelo para implementar transfer learning que utilice CNN para regresión?
Gracia.
Hola Felipe
Me alegra que hayas logrado mejorar el sistema usando el procesamiento en GPU. Respecto a tu pregunta, me he enfocado en sistemas de clasificación más que en sistemas de regresión. Si encuentro algo útil que te pueda servir, con mucho gusto te lo compartiré.
Buen día, excelente explicación y vídeo. Gracias por compartir. Estoy probando el tutorial como indicas, sin embargo me he encontrado con un error al momento de realizar la Prueba loca en imagen, al ingresar python detectC.py --image_folder data/samplesC/ --model_def config/yolov3-custom3C.cfg --weights_path checkpoints/yolov3_ckpt_252.pth --class_path data/custom/classes.names en ANACONDA...
OBTENGO EL SIGUIENTE ERROR EN CONSOLA:
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location='cpu' to map your storages to the CPU.
Me sería de gran ayudar que por favor me indicarás como solucionarlo. Saludos
Que tal amigo, a mi también me dio ese error y encontré la solución en esta pagina stackoverflow.com/questions/56369030/runtimeerror-attempting-to-deserialize-object-on-a-cuda-device
la primera respuesta es la que me funciono
Para solucionar esto, puede cambiar los parámetros de la función nombrada load()en el serialization.pyarchivo. Esto se almacena en:./site-package/torch/serialization.py
Escribir:
def load(f, map_location='cpu', pickle_module=pickle, **pickle_load_args):
en vez de:
def load(f, map_location=None, pickle_module=pickle, **pickle_load_args):
o si tienes en "none" cambiar a "cpu"
Muchas gracias David por tu aporte!!!
@ hola es que soy nueva utilizando esto, no entiendo bien en que archivo debo modificar para corregir ese error y como hacerlo
@@alivalentinameragiraldo5756 muchas gracias por escribir.
Bueno te cuento que volví a correr todo y no obtengo ese error, estoy corriendo un entorno como se muestra en el repositorio:
github.com/DavidReveloLuna/Yolov3Custom
Es decir con python=3.6, pytorch==1.1.0, torchvision==0.3.0 y cudatoolkit=10.0
Pero si aún con ese entorno sigues con el error, los foros reportan la solución cambiando ésta línea
def load(f, map_location='cpu', pickle_module=pickle, **pickle_load_args):
por esta
def load(f, map_location=None, pickle_module=pickle, **pickle_load_args):
En el archivo serialization.py que lo encuentras en la carpeta de miniconda3 (donde hayas hecho la instalación), luego lib/site-packages/torch.
Espero que puedas avanzar!
Después de modificarlo obtuve un nuevo error, ¿a alguien le ocurrió algo similar? Traceback (most recent call last):
File "detectC.py", line 51, in
model.load_state_dict(torch.load(opt.weights_path))
File "C:\Users\Casa\anaconda3\envs\YoloCustom\lib\site-packages\torch\serialization.py", line 549, in load
_check_seekable(f)
File "C:\Users\Casa\anaconda3\envs\YoloCustom\lib\site-packages\torch\serialization.py", line 194, in _check_seekable
raise_err_msg(["seek", "tell"], e)
File "C:\Users\Casa\anaconda3\envs\YoloCustom\lib\site-packages\torch\serialization.py", line 187, in raise_err_msg
raise type(e)(msg)
AttributeError: 'str' object has no attribute 'seek'. You can only torch.load from a file that is seekable. Please pre-load the data into a buffer like io.BytesIO and try to load from it instead.
Hola, excelente aporte. ¿Como podria probar otro modelo preentrenado ( Darknet19, Resnet 18 ...... y otros )para el entreamiento?
Hola Santiago, gracias por comentar.
Si son pesos preentrenados de arquitectura Darknet puedes cargarlos con --pretrained_weights. Si lo que buscas es una modificación de yolo para que la extracción de características se haga con otra arquitectura de red, tendrías que buscar los desarrollos específicos con esas variaciones, como en este repositorio que te comparto:
github.com/makatx/YOLO_ResNet
Tienes algún vídeo con Yolo implementandolo en jupyter, o me podrías indicar que se le modificaría, tengo entendido que sería las rutas, es que deseo realizar un entrenamiento local con mi GPU, gracias
Hola David , muchas gracias por el video me sirvió batante. Una consulta hice la prueba con un imagenes propias para crear el modelo todo bien pero al momento de que muestra las imagenes resultantes con los BoundingBox la imagen original se reduce de tamaño , como podría hacer para que se mantenga su tamaño original o en que parte del código es que realiza esa reducción de temaño de la imagen original, creo que es esta linea pero no estoy seguro : detections = rescale_boxes(detections, opt.img_size, img.shape[:2]) en el detectC.py. Si me podrías ayudar muchas gracias. Saludos
Hola Junior, gracias por escribir.
Dentro de los argumentos al llamar a detectC.py existe la posibilidad de configurar el tamaño de la imagen. Por defecto el valor que toma, si no se especifica otro es de 416 y conserva la proporción. Si quieres modificar ese parámetro lo puedes hacer usando --img_size.
@ Buen día, te agradezco mucho por el video, me a sido de gran utilidad. Estoy trabajando en una aplicación muy particular en donde quiero que el tamaño de la imagen de entrada se conserve, he intentado conservar esa proporción por medio de img_size lo cual ayuda bastante en la detección pero la imagen resultante sigue reduciéndose de tamaño, te agradecería mucho si me puedes orientar en este asunto (y)
Excelente video uno de los mejores en UA-cam, tengo un problema en la carpeta dist-packages no me aparece ningun archivo cuya ruta es usr/local/lib/python3.6/dist-packages. he seguido cada uno de los paso. ayuda por favor. gracias
Gracias!
Colab está ahora en la versión de Python 3.7. Busca por favor la ruta para esa versión. Debería ser usr/local/lib/python3.7/dist-packages.
@ muchas gracias me sirvió eres el mejor
Y para detección en videos es posible entrenar el modelo también?
Hola Nestor, muchas gracias por comentar
Claro que si, solamente se debe cambiar la instrucción de la línea 63 del archivo detect_cam.py como te muestro enseguida:
La línea ahora mismo es:
camera = cv2.VideoCapture(0)
Y la debes cambiar por:
camera = cv2.VideoCapture("Nombre_del_video.extensión")
Donde "Nombre_del_video.extensión" debe ser el nombre del video que quieres procesar. Si está el video en la misma carpeta, puedes poner únicamente el nombre y la extensión del video. Si está en otra carpeta, debes incluir el path.
@ muchas gracias por responder también, gracias por tu explicación
@ Muy buen video pero intento de hacerlo con un mp4 cambiando lo que refieres arriba, pero da el siguiente error, uso ubuntu 20.03
(YoloCustom) paco@paco-ESPRIMO-E710:~/Documentos/Yolov3Custom$ python detect_cam.py --model_def config/yolov3-custom3C.cfg --weights_path checkpoints/yolov3_ckpt_141.pth --class_path data/custom/classes.names --conf_thres 0.6
Namespace(batch_size=1, checkpoint_model=None, class_path='data/custom/classes.names', conf_thres=0.6, image_folder='data/samples', img_size=416, model_def='config/yolov3-custom3C.cfg', n_cpu=0, nms_thres=0.4, weights_path='checkpoints/yolov3_ckpt_141.pth')
Traceback (most recent call last):
File "detect_cam.py", line 52, in
model.load_state_dict(torch.load(opt.weights_path))
File "/home/paco/anaconda3/envs/YoloCustom/lib/python3.6/site-packages/torch/serialization.py", line 387, in load
return _load(f, map_location, pickle_module, **pickle_load_args)
File "/home/paco/anaconda3/envs/YoloCustom/lib/python3.6/site-packages/torch/serialization.py", line 574, in _load
result = unpickler.load()
File "/home/paco/anaconda3/envs/YoloCustom/lib/python3.6/site-packages/torch/serialization.py", line 537, in persistent_load
deserialized_objects[root_key] = restore_location(obj, location)
File "/home/paco/anaconda3/envs/YoloCustom/lib/python3.6/site-packages/torch/serialization.py", line 119, in default_restore_location
result = fn(storage, location)
File "/home/paco/anaconda3/envs/YoloCustom/lib/python3.6/site-packages/torch/serialization.py", line 95, in _cuda_deserialize
device = validate_cuda_device(location)
File "/home/paco/anaconda3/envs/YoloCustom/lib/python3.6/site-packages/torch/serialization.py", line 79, in validate_cuda_device
raise RuntimeError('Attempting to deserialize object on a CUDA '
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location='cpu' to map your storages to the CPU.
Desde ya muchas gracias por el canal
la carpeta data e images, ya no aparece en la carpeta labelImg, alguna sugerencia?
Hola Angel, muchas gracias por escribir.
La carpeta images puedes crearla manualmente, y en ella poner las imágenes que quieres etiquetar, luego seleccionas la carpeta desde LabelImg (OpenDir). La carpeta data también puedes crearla manualmente y seleccionarla desde LabelImg (Chage Save Dir)
@ No me muestra nada en la carpeta de python3.6. que puedo hacer?
Hola Angel, gracias por escribir.
Es posible que la versión de colab sea la 3.7. Busca la carpeta python 3.7.
Hola como se llama el software para poder para seleccionar los lugares de las imágenes?
hola @
Sistemas Inteligentes David, que tal, nuevo suscriptor. Acabo de descubrir tu canal y quería saber si hay alguna forma de poder contactarte?.
Es para un proyecto de mentoría. Saludos
Hola Harry, claro escríbeme al mail david.luna.1986@gmail.com. Saludos!
@ Te respondí a tu correo. Saludos.
@ Bro, te eh dejado mensajes, por fa si podrías revisarlos
¿Cómo puedo aumentar la velocidad del modelo?
Hola Enrique
Puedes usar la versión tiny de yolo, que tiene una arquitectura más pequeña y la inferencia toma menos tiempo. La otra opción es mejorar el hardware con una GPU más potente. Espero te ayude, saludos!!!.
en la carpeta dist-packages no abre, solo se queda con la flechita abajo que prodría ser disculpa?
mira la versión de python que usas, a mi me estaba tomando la 3.7
@@musica-lofi verdad es muchas gracias
se lleno el disco de google colab :( no alcanzó hacer las 200 épocas. Estoy usando tus imágenes... podría probar en local sin usar google?
Me pasó lo mismo
Hola, gracias por tu comentario
Podrías probar local siempre y cuando tengas una tarjeta gpu dedicada, de otra forma no será posible. Ahora, respecto a colab, tiene la limitación que cada 12 horas se reinician los servidores y se cancela el trabajo que lleves al momento del reinicio. Es posible que haya pasado eso y no necesariamente la ocupación de la memoria. Te invitaría a que pruebes nuevamente. Saludos!
Rubén, muchas gracias por escribir.
Otra opción para disminuir la carga de recursos es disminuir el batch-size. Espero que eso pueda ayudar.
@ hola también tengo el mismo problema, de las 100 épocas no paso, con disminuir te refieres a colocar 2 en lugar de 4? porque al disminuir el batch-size tarda mas en ejecutar y las épocas también tardan mas en ejecutar, alcanzando mas rápido el limite que da colab :c
@@erikayanethlarijollanos2781 muchas gracias por comentar
Bueno tenemos que diferenciar las dos limitantes de colab, por una parte tenemos una limitación en capacidad de GPU (eso depende de la GPU que nos asignen en la nube), y esa limitación puede manejarse en cierto modo modificando el batch-size (disminuyéndolo), normalmente ocurre que cuando tenemos un dataset muy grande el sistema se ve limitado y no puede procesar batch grandes. Si el problema que tienes es limitación de tiempo (colab tiene de forma gratuita sesiones de hasta 12 horas), si pasas las 12 horas de colab se reinician los servidores y pierdes el trabajo de entrenamiento que llevas hasta el momento. Si ese es el caso, lo que puedes intentar es aumentar el batch-size para procesar un poco más rápido, pero puedes quedarte corta por las limitaciones en las GB de la GPU asignadas. Si modificando esos parámetros no logras terminar tu entrenamiento solo existen dos opciones. Entrenar local con un equipo de buenas prestaciones, o pagar un servicio en la nube. Colab cobra aprox 9USD por mes para mejorar el tiempo de procesamiento (hasta 24 horas) y te asigna mejores prestaciones en el servicio (mejores GPU).
Espero aclarar un poco tus dudas, gracias nuevamente por comentar!!!
buen dia te felicito por el video, te comento que me ha dado el error siguiente: raise RuntimeError('Attempting to deserialize object on a CUDA '
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location='cpu' to map your storages to the CPU.
hola yo tengo el mismo problema
Muy buen vídeo, pero y si quisiera recortar lo que me sale seleccionado y crear una imagen nueva solo con eso recortado? Por ejemplo, si detecto un gato en una imagen en un parque, cortar el gato y tener una imagen nueva con el gato solamente, ¿Cómo podría hacer eso? Muchas gracias y muy buen video
Hola Hector, gracias por escribir
Usando PIL puedes recortar la sección de la imagen con algo como:
imagen_recortada = imagen.crop(area) # donde área tiene los vértices de la región que vas a recortar (x1,y1,x2,y2) que corresponderían con los datos del boundingbox que usamos para graficar el rectángulo en las detecciones (Esos bounding boxes los encuentras en la parte del código que tiene como comentario "# Draw bounding boxes and labels of detections")
También podrias recortar la imagen usando opencv, tendrías algo como:
#Recortar una imagen
image_recortada = image[f1:f2,c1:c2]
donde f1,f2,c1 y c2 corresponden también con la información del boundingbox, solo debes tener cuidado de escribir los datos correctamente. En este caso f1:f2 quiere decir: desde la fila f1 hasta la fila f2, y c1:c2 quiere decir: desde la columna c1 hasta columna c2.
Espero que esta información sea de ayuda.
@ entrene mi propio detector, pero aun no puedo recortar el objeto detectado... donde estan los valores del bounding box que debo poner ese comando? saludos
Alguien me puede ayudar con el siguiente error, es cuando empiezo a colocar el objeto se cierra y me manda ese error :c
Traceback (most recent call last):
File "detect_cam.py", line 99, in
frame_ = cv2.rectangle(frame, (x1, y1 + box_h), (x2, y1), color, 5)
cv2.error: OpenCV(4.5.3) :-1: error: (-5:Bad argument) in function 'rectangle'
> Overload resolution failed:
> - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
> - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
> - Can't parse 'rec'. Expected sequence length 4, got 2
> - Can't parse 'rec'. Expected sequence length 4, got 2
[ WARN:1] global C:\Users
unneradmin\AppData\Local\Temp\pip-req-build-uzca7qz1\opencv\modules\videoio\src\cap_msmf.cpp (438) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback
Hola, buen dia. Estoy intentando entrenar una sola clase con 200 imagenes utilizo epochs 200 y batch_size 4 y tengo este error
THCudaCheck FAIL file=/pytorch/aten/src/THC/THCGeneral.cpp line=383 error=11 : invalid argument
/pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:53: lambda [](int)->auto::operator()(int)->auto: block: [0,0,0], thread: [0,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.
/pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:53: lambda [](int)->auto::operator()(int)->auto: block: [0,0,0], thread: [1,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.
/pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:53: lambda [](int)->auto::operator()(int)->auto: block: [0,0,0], thread: [2,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.
/pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:53: lambda [](int)->auto::operator()(int)->auto: block: [0,0,0], thread: [3,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.
/pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:53: lambda [](int)->auto::operator()(int)->auto: block: [0,0,0], thread: [4,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.
/pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:53: lambda [](int)->auto::operator()(int)->auto: block: [0,0,0], thread: [5,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.
Traceback (most recent call last):
File "train.py", line 105, in
loss, outputs = model(imgs, targets)
File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 493, in __call__
result = self.forward(*input, **kwargs)
File "/content/Yolov3Custom/models.py", line 259, in forward
x, layer_loss = module[0](x, targets, img_dim)
File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 493, in __call__
result = self.forward(*input, **kwargs)
File "/content/Yolov3Custom/models.py", line 188, in forward
ignore_thres=self.ignore_thres,
File "/content/Yolov3Custom/utils/utils.py", line 317, in build_targets
class_mask[b, best_n, gj, gi] = (pred_cls[b, best_n, gj, gi].argmax(-1) == target_labels).float()
RuntimeError: CUDA error: device-side assert triggered
Hola Andrés, gracias por escribir
Ese error suele ocurrir cuando no están bien los labels de las imágenes de tu dataset. Te recomendaría que pruebes primero con el dataset que está en el repositorio del tutorial, y si funciona, definitivamente el problema es tu dataset. Tendrías que revisar el formato del etiquetado de las imágenes.
@ Hola, gracias por responder, tenia razon sobre el mal label de mis imagenes, lo pude corregir y funciona a la perfeccion he trabajado con 6 clases. Tengo la duda si este archivo .pth lo puedo subir a una tarjeta de desarrollo como maix duino he visto que usan archivos .h5 y .tflite pero no se como generarlos aqui, Gracias!
Mil disculpas, suelo arreglármelas para solucionar codigo pero este error me esta superando, pq encontre que es un error de etiquetamiento pero ya reetiquetado mis datos 3 o 4 veces controlando paso a paso seria de mucha ayudar una respuesta, lei en los comentarios que ya le paso a otras personas
File "train.py", line 99, in
for batch_i, (_, imgs, targets) in enumerate(dataloader):
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataloader.py", line 582, in _next_
return self._process_next_batch(batch)
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataloader.py", line 608, in _process_next_batch
raise batch.exc_type(batch.exc_msg)
TypeError: Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/worker.py", line 99, in _worker_loop
samples = collate_fn([dataset[i] for i in batch_indices])
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/worker.py", line 99, in
samples = collate_fn([dataset[i] for i in batch_indices])
File "/content/Yolov3Custom/utils/datasets.py", line 130, in _getitem_
img, targets = horisontal_flip(img, targets)
File "/content/Yolov3Custom/utils/augmentations.py", line 8, in horisontal_flip
targets[:, 2] = 1 - targets[:, 2]
TypeError: 'NoneType' object is not subscriptable
Hola Cristian, gracias por comentar
Efectivamente, he visto ese error por problemas en el dataset y las etiquetas. Si me compartes tu dataset puedo revisarlo, e intentar solucionar el problema para que puedas avanzar.
@ Muy amable no me gustaría quitarte tempo con eso, retire la nueva parte de datos que tenia y volvio a funcionar pero con una performance baja, cual seria el numero de fotos para un dataset para reconocimiento de gestos de manos
Hola gracias por el video, cuando ejecuto con mi carpeta custom y config tengo este error.
Traceback (most recent call last):
File "train.py", line 160, in
batch_size=opt.batch_size
File "/content/drive/My Drive/Yolov3Custom-master/test.py", line 53, in evaluate
true_positives, pred_scores, pred_labels = [np.concatenate(x, 0) for x in list(zip(*sample_metrics))]
ValueError: not enough values to unpack (expected 3, got 0)
Hola Carlo, gracias por escribir
Ese error es muy común. Sucede cuando en el inicio del entrenamiento el sistema no tiene detecciones positivas con los datos de validación. Una forma de solucionarlo es incrementar el tamaño del dataset, o demorar la evaluación con el parámetro evaluation_interval.
@ Gracias ya se soluciono
Genial!
@ Hola soy Maribel, me surgio el mismo error que Carlo, como puedo demorar la evaluación; donde se debe poner el parametro evaluation_interval?
Buenas tardes, buen video muy explicativo. yo tuve el error al intentar entrenarlo con un epoch de 50 y un batch de 80.
Seguí todo paso a paso y no sé cual sea el problema. este es el mensaje de error:
Traceback (most recent call last):
File "train.py", line 99, in
for batch_i, (_, imgs, targets) in enumerate(dataloader):
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataloader.py", line 568, in __next__
return self._process_next_batch(batch)
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/dataloader.py", line 608, in _process_next_batch
raise batch.exc_type(batch.exc_msg)
TypeError: Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/worker.py", line 99, in _worker_loop
samples = collate_fn([dataset[i] for i in batch_indices])
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/worker.py", line 99, in
samples = collate_fn([dataset[i] for i in batch_indices])
File "/content/Yolov3Custom/utils/datasets.py", line 130, in __getitem__
img, targets = horisontal_flip(img, targets)
File "/content/Yolov3Custom/utils/augmentations.py", line 8, in horisontal_flip
targets[:, 2] = 1 - targets[:, 2]
TypeError: 'NoneType' object is not subscriptable
Hola Aurelio, gracias por escribir
He visto antes ese error cuando hay errores en el dataset o en los archivos de anotaciones. Te recomendaría revisar con detalle que el dataset y las anotaciones estén cargadas correctamente.
pudiste solucionarlo?