pytorch-YOLOv4 icon indicating copy to clipboard operation
pytorch-YOLOv4 copied to clipboard

have a problem when evaluate

Open miT-Tim opened this issue 4 years ago • 16 comments

Epoch 1/200: 0%| | 0/660 [00:00<?, ?img/s]/home/ht/anaconda3/envs/dl/lib/python3.7/site-packages/torch/nn/_reduction.py:43: UserWarning: size_average and reduce args will be deprecated, please use reduction='sum' instead. warnings.warn(warning.format(ret)) Epoch 1/200: 100%|█| 660/660 [02:34<00:00, 4.38imin function convert_to_coco_api... creating index... index created! when run the function evaluate(model, data_loader, cfg, device, logger=None, **kwargs) in train.py, my code stop at this status above. how can i fix it?

miT-Tim avatar Aug 19 '20 03:08 miT-Tim

Your message doesn't show any errors, you should post a detailed error message

onmywei avatar Aug 19 '20 08:08 onmywei

程序停止在了这里,没有报错,但是就一直卡在这里无法接着执行。

miT-Tim avatar Aug 19 '20 09:08 miT-Tim

在通过evaluate()进行评估的时候,根据output创建coco_dt的时候,没有对结果进行NMS,因此会将所有结果跟coco_gt进行评估。导致COCOeval在进行evaluate的时候产生大量运算。举个例子,如果输入input的尺寸大小为1×3×608×608,输出outputs中boxes的大小为1×22743×1×4,一张图片要22743次计算,其中大部分box的置信度要低于阈值的,可能只有一两个box是我们实际想要的。因此,如果你设置的input尺寸偏大,并且你的验证集数量较多的时候,会进行长时间的运算。 只是个人理解和推测,有什么不对的可以指正。

onmywei avatar Aug 19 '20 11:08 onmywei

非常感谢你的回复,另外我用很小的数据量测试时(例如少于200张),opencv会报错,数据量增加后(大于600张)就没有问题 cv2.error: OpenCV(4.4.0) /tmp/pip-req-build-nzyrw1vf/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor' 这个算法对训练集和测试集有最小数据量要求吗?

miT-Tim avatar Aug 19 '20 13:08 miT-Tim

在train.py的418行模型加载的权重始终是cfg.pretrained,而不是最新训练的结果,此处代码是否有问题呢? eval_model = Yolov4(cfg.pretrained, n_classes=cfg.classes, inference=True) 例如mAP始终为0的问题。

miT-Tim avatar Aug 19 '20 13:08 miT-Tim

非常感谢你的回复,另外我用很小的数据量测试时(例如,至少200张),opencv会报错,数据量增加后(大于600张)就没有问题 cv2.error: OpenCV(4.4.0) /tmp/pip-req-build-nzyrw1vf/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor' 这个算法对训练集和测试集有最小数据量要求吗?

你的这个错误看起来可能是图片或者路径的问题,opencv的imread如果路径错误是不会报错的只会返回一个None,建议使用dataloader加载一下测试集,检查是否有空数据。

onmywei avatar Aug 20 '20 02:08 onmywei

在train.py的418行模型加载的权重始终是cfg.pretrained,而不是最新训练的结果,此处代码是否有问题呢? eval_model = Yolov4(cfg.pretrained, n_classes=cfg.classes, inference=True) 例如mAP始终为0的问题。

这个加载的只是模型结构,下边的eval_model.load_state_dict(model.state_dict())是将正在训练中的model的参数变量加载进来,所以这段代码没问题。至于AP为0的问题,猜测可能也是因为NMS的问题,但是没有验证只是个猜测。

onmywei avatar Aug 20 '20 02:08 onmywei

在通过evaluate()进行评估的时候,根据output创建coco_dt的时候,没有对结果进行NMS,因此会将所有结果跟coco_gt进行评估。导致COCOeval在进行evaluate的时候产生大量运算。举个例子,如果输入input的尺寸大小为1×3×608×608,输出outputs中boxes的大小为1×22743×1×4,一张图片要22743次计算,其中大部分box的置信度要低于阈值的,可能只有一两个box是我们实际想要的。因此,如果你设置的input尺寸偏大,并且你的验证集数量较多的时候,会进行长时间的运算。 只是个人理解和推测,有什么不对的可以指正。

你好,我想问一下这种情况怎么解决呢?在前面加一个NMS吗还是?

OYLH avatar Sep 03 '20 14:09 OYLH

程序停止在了这里,没有报错,但是就一直卡在这里无法接着执行。

请问你解决了吗?我也碰到了这样的问题。

wllkk avatar Sep 08 '20 10:09 wllkk

程序停止在了这里,没有报错,但是就一直卡在这里无法接着执行。

请问你解决了吗?我也碰到了这样的问题。

解决了同@onmywei所说验证的时后会花费较长时间,我在训练的时候关闭了验证的功能。

miT-Tim avatar Sep 08 '20 10:09 miT-Tim

程序停止在了这里,没有报错,但是就一直卡在这里无法接着执行。

请问你解决了吗?我也碰到了这样的问题。

解决了同@onmywei所说验证的时后会花费较长时间,我在训练的时候关闭了验证的功能。

好的,谢谢你。不过我的看起来没有在计算,虽然显存还在占用,但gpu没有运算。

wllkk avatar Sep 08 '20 11:09 wllkk

在train.py的418行模型加载的权重始终是cfg.pretrained,而不是最新训练的结果,此处代码是否有问题呢? eval_model = Yolov4(cfg.pretrained, n_classes=cfg.classes, inference=True) 例如mAP始终为0的问题。

我在训练的过程中map一直是0,不知道啥问题啊

shaojiestar avatar Oct 01 '20 06:10 shaojiestar

Commenting out the eval part of train.py solves the training error, is this correct?

431 ### if torch.cuda.device_count() > 1: 432 ### eval_model.load_state_dict(model.module.state_dict()) 433 ### else: 434 ### eval_model.load_state_dict(model.state_dict()) 435 436 ### eval_model.to(device) 437 ### evaluator = evaluate(eval_model, val_loader, config, device) 438 ### del eval_model 439 440 ### stats = evaluator.coco_eval['bbox'].stats 441 ### writer.add_scalar('train/AP', stats[0], global_step) 442 ### writer.add_scalar('train/AP50', stats[1], global_step) 443 ### writer.add_scalar('train/AP75', stats[2], global_step) 444 ### writer.add_scalar('train/AP_small', stats[3], global_step) 445 ### writer.add_scalar('train/AP_medium', stats[4], global_step) 446 ### writer.add_scalar('train/AP_large', stats[5], global_step) 447 ### writer.add_scalar('train/AR1', stats[6], global_step) 448 ### writer.add_scalar('train/AR10', stats[7], global_step) 449 ### writer.add_scalar('train/AR100', stats[8], global_step) 450 ### writer.add_scalar('train/AR_small', stats[9], global_step) 451 ### writer.add_scalar('train/AR_medium', stats[10], global_step) 452 ### writer.add_scalar('train/AR_large', stats[11], global_step)

teraoka-hiroshi avatar Oct 02 '20 22:10 teraoka-hiroshi

I have the same problem too!

jjw12345 avatar Oct 08 '20 11:10 jjw12345

#247 Here's the solution. Thank you.

teraoka-hiroshi avatar Nov 01 '20 11:11 teraoka-hiroshi

程序停止在了这里,没有报错,但是就一直卡在这里无法接着执行。

请问你解决了吗?我也碰到了这样的问题。

解决了同@onmywei所说验证的时后会花费较长时间,我在训练的时候关闭了验证的功能。

好的,谢谢你。不过我的看起来没有在计算,虽然显存还在占用,但gpu没有运算。

请问这个问题您的解决方案是什么,我也遇见了

Wang-Zhenxing avatar Mar 15 '22 02:03 Wang-Zhenxing