puigalex / deteccion-objetos-video

Deteccion de objetos sobre video usando PyTorch
57 stars 50 forks source link

Runtime Error #5

Closed NachoBosch closed 3 years ago

NachoBosch commented 4 years ago

Arme mi data set con 150 imágenes de gente con máscaras. Tengo dos clases: mask y no-mask. Seguí todos los pasos pero me salta este error. Estoy corriendo el entrenamiento en Windows 10 con cpu en en un ambiente de conda con python=3.5

Traceback (most recent call last): File "train.py", line 105, in loss, outputs = model(imgs, targets) File "C:\Users\Nacho\AppData\Roaming\Python\Python35\site-packages\torch\nn\modules\module.py", line 489, in call result = self.forward(*input, *kwargs) File "C:\Users\Nacho\Code\deteccion-objetos-video-2\models.py", line 259, in forward x, layer_loss = module[0](x, targets, img_dim) File "C:\Users\Nacho\AppData\Roaming\Python\Python35\site-packages\torch\nn\modules\module.py", line 489, in call result = self.forward(input, **kwargs) File "C:\Users\Nacho\Code\deteccion-objetos-video-2\models.py", line 188, in forward ignore_thres=self.ignore_thres, File "C:\Users\Nacho\Code\deteccion-objetos-video-2\utils\utils.py", line 315, in build_targets tcls[b, best_n, gj, gi, target_labels] = 2 RuntimeError: index 15 is out of bounds for dim with size 2

newtonPascal commented 4 years ago

el mismo error del mensaje anterior pero lo estoy entrenando con una sola clase File "/home/dementes/Descargas/deteccion-objetos-video-yolo/models.py", line 188, in forward ignore_thres=self.ignore_thres, File "/home/dementes/Descargas/deteccion-objetos-video-yolo/utils/utils.py", line 315, in build_targets tcls[b, best_n, gj, gi, target_labels] = 1 IndexError: index 15 is out of bounds for dimension 4 with size 1

NachoBosch commented 4 years ago

@newtonPascal Yo lo solucioné así: El problema era que LabelImg tiene sus clases ya asignadas [0,1,2...,14] , entonces cuando etiquetas tu data set la etiqueta nueva se guarda con la posición 15 (o eso es lo que me pasó a mi). Solución: revisa tus Labels de que digan "0" (ya que tu tienes una sola clase). Seguramente en tus labels diga "15" borralo y escribe 0 en su lugar. Suerte

GIRIME262 commented 4 years ago

hola cuando ejecuto este comando: python train.py --model_def config/yolov3-custom.cfg --data_config config/custom.data --pretrained_weights weights/darknet53.conv.74 --batch_size 2

me sale este error: File "train.py", line 99, in for batchi, (, imgs, targets) in enumerate(dataloader): File "/home/oem/anaconda3/envs/yolo-nubes/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 345, in next data = self._next_data() File "/home/oem/anaconda3/envs/yolo-nubes/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 856, in _next_data return self._process_data(data) File "/home/oem/anaconda3/envs/yolo-nubes/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 881, in _process_data data.reraise() File "/home/oem/anaconda3/envs/yolo-nubes/lib/python3.6/site-packages/torch/_utils.py", line 395, in reraise raise self.exc_type(msg) TypeError: Caught TypeError in DataLoader worker process 0. Original Traceback (most recent call last): File "/home/oem/anaconda3/envs/yolo-nubes/lib/python3.6/site-packages/torch/utils/data/_utils/worker.py", line 178, in _worker_loop data = fetcher.fetch(index) File "/home/oem/anaconda3/envs/yolo-nubes/lib/python3.6/site-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch data = [self.dataset[idx] for idx in possibly_batched_index] File "/home/oem/anaconda3/envs/yolo-nubes/lib/python3.6/site-packages/torch/utils/data/_utils/fetch.py", line 44, in data = [self.dataset[idx] for idx in possibly_batched_index] File "/home/oem/Documentos/yolo-nubes/utils/datasets.py", line 130, in getitem img, targets = horisontal_flip(img, targets) File "/home/oem/Documentos/yolo-nubes/utils/augmentations.py", line 8, in horisontal_flip targets[:, 2] = 1 - targets[:, 2] TypeError: 'NoneType' object is not subscriptable

luisete2 commented 3 years ago

hola cuando ejecuto este comando: python train.py --model_def config/yolov3-custom.cfg --data_config config/custom.data --pretrained_weights weights/darknet53.conv.74 --batch_size 2

me sale este error: File "train.py", line 99, in for batchi, (, imgs, targets) in enumerate(dataloader): File "/home/oem/anaconda3/envs/yolo-nubes/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 345, in next data = self._next_data() File "/home/oem/anaconda3/envs/yolo-nubes/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 856, in _next_data return self._process_data(data) File "/home/oem/anaconda3/envs/yolo-nubes/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 881, in _process_data data.reraise() File "/home/oem/anaconda3/envs/yolo-nubes/lib/python3.6/site-packages/torch/_utils.py", line 395, in reraise raise self.exc_type(msg) TypeError: Caught TypeError in DataLoader worker process 0. Original Traceback (most recent call last): File "/home/oem/anaconda3/envs/yolo-nubes/lib/python3.6/site-packages/torch/utils/data/_utils/worker.py", line 178, in _worker_loop data = fetcher.fetch(index) File "/home/oem/anaconda3/envs/yolo-nubes/lib/python3.6/site-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch data = [self.dataset[idx] for idx in possibly_batched_index] File "/home/oem/anaconda3/envs/yolo-nubes/lib/python3.6/site-packages/torch/utils/data/_utils/fetch.py", line 44, in data = [self.dataset[idx] for idx in possibly_batched_index] File "/home/oem/Documentos/yolo-nubes/utils/datasets.py", line 130, in getitem img, targets = horisontal_flip(img, targets) File "/home/oem/Documentos/yolo-nubes/utils/augmentations.py", line 8, in horisontal_flip targets[:, 2] = 1 - targets[:, 2] TypeError: 'NoneType' object is not subscriptable

Yo estoy teniendo exactamente este mismo error. Voy cambiando el batch-size entre 1 2 y 3 y a veces alterna y me da este otro error:

RuntimeError: There were no tensor arguments to this function (e.g., you passed an empty list of Tensors), but no fallback function is registered for schema aten::_cat. This usually means that this function requires a non-empty list of Tensors. Available functions are [CPUTensorId, CUDATensorId, QuantizedCPUTensorId, VariableTensorId]

Por qué podria ser?

NachoBosch commented 3 years ago

@GIRIME262 eso puede ser o problemas de formatos de las imágenes o bien alguna no tenga anotaciones. Yo tengo el mismo error y ya revise el data set y no se que puede ser... targets[:, 2] = 1 - targets[:, 2] TypeError: 'NoneType' object is not subscriptable

Alguna idea @puigalex :) ?

Otra idea que se me ocurre es ponerl el augment=False en el train.py en la linea: dataset = ListDataset(train_path, augment=False, multiscale=opt.multiscale_training)

GIRIME262 commented 3 years ago

@GIRIME262 eso puede ser o problemas de formatos de las imágenes o bien alguna no tenga anotaciones. Yo tengo el mismo error y ya revise el data set y no se que puede ser... targets[:, 2] = 1 - targets[:, 2] TypeError: 'NoneType' object is not subscriptable

Alguna idea @puigalex :) ?

Otra idea que se me ocurre es ponerl el augment=False en el train.py en la linea: dataset = ListDataset(train_path, augment=False, multiscale=opt.multiscale_training)

hola, si me volví loco buscando el error y era un sola imagen de 5800 jajajajajaj gracias

puigalex commented 3 years ago

@GIRIME262 eso puede ser o problemas de formatos de las imágenes o bien alguna no tenga anotaciones. Yo tengo el mismo error y ya revise el data set y no se que puede ser... targets[:, 2] = 1 - targets[:, 2] TypeError: 'NoneType' object is not subscriptable

Alguna idea @puigalex :) ?

Otra idea que se me ocurre es ponerl el augment=False en el train.py en la linea: dataset = ListDataset(train_path, augment=False, multiscale=opt.multiscale_training)

@NachoBosch Tienes un poco mas sobre el error que te esta arrojando? Esta entrenando al menos un paso o todo esto sucede desde antes de empezar a entrenar?

augment=False lo solucionó? Esto lo que hace es evita hacer algunas transformaciones sobre las imagenes que normalmente se lleva a cabo para "incrementar" de manera artificial tu set de datos entonces se me haría raro que eso lo solucione

NachoBosch commented 3 years ago

Hola @puigalex , si, empezaba el entrenamiento y un paso random siempre se cortaba. Hice el seguimiento del problema y al parecer era cuando realizaba la augmentation, por eso es que lo solucioné sacandolo. Se que la augmentation es una forma de mejorar el set de datos haciendole transformaciones, pero sacandolo pude entrenar finalmente el modelo. Y funciona bastante bien en video y en imagenes! Muchas gracias!