Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FasterRCNN 训练错误 #111

Closed
Kyfafyd opened this issue Dec 25, 2020 · 14 comments
Closed

FasterRCNN 训练错误 #111

Kyfafyd opened this issue Dec 25, 2020 · 14 comments

Comments

@Kyfafyd
Copy link

Kyfafyd commented Dec 25, 2020

System information

  • Have I written custom code: no
  • OS Platform(e.g., window10 or Linux Ubuntu 16.04): linux
  • Python version: 3.8
  • Deep learning framework and version(e.g., Tensorflow2.1 or Pytorch1.3): torch1.6
  • Use GPU or not: yes
  • CUDA/cuDNN version(if you use GPU):
  • The network you trained(e.g., Resnet34 network): resnet50fpn

Describe the current behavior
您好,用faster_rcnn训练自己的数据集,一共六种物体,create model设置的num_classes=7,但是还是出现了这个错误。其他没有改过,求教该怎么解决呀?

Error info / logs

Namespace(batch_size=8, data_path='/research/dept8/qdou/zwang/data/robo/final', device='cuda:0', epochs=50, output_dir='./save_weights', resume='', start_epoch=0)
Using cuda device training.
Using 8 dataloader workers
/pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:84: operator(): block: [3,0,0], thread: [82,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.
/pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:84: operator(): block: [3,0,0], thread: [83,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.
/pytorch/aten/src/ATen/native/cuda/IndexKernel.cu:84: operator(): block: [3,0,0], thread: [84,0,0] Assertion `index >= -sizes[i] && index < sizes[i] && "index out of bounds"` failed.
Traceback (most recent call last):
  File "train_res50_fpn.py", line 167, in <module>
    main(args)
  File "train_res50_fpn.py", line 99, in main
    utils.train_one_epoch(model, optimizer, train_data_loader,
  File "/research/dept8/qdou/zwang/faster_rcnn/train_utils/train_eval_utils.py", line 34, in train_one_epoch
    loss_dict = model(images, targets)
  File "/research/dept8/qdou/zwang/anaconda3/lib/python3.8/site-packages/torch/nn/modules/module.py", line 722, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/research/dept8/qdou/zwang/faster_rcnn/network_files/faster_rcnn_framework.py", line 93, in forward
    detections, detector_losses = self.roi_heads(features, proposals, images.image_sizes, targets)
  File "/research/dept8/qdou/zwang/anaconda3/lib/python3.8/site-packages/torch/nn/modules/module.py", line 722, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/research/dept8/qdou/zwang/faster_rcnn/network_files/roi_head.py", line 367, in forward
    proposals, matched_idxs, labels, regression_targets = self.select_training_samples(proposals, targets)
  File "/research/dept8/qdou/zwang/faster_rcnn/network_files/roi_head.py", line 222, in select_training_samples
    matched_idxs, labels = self.assign_targets_to_proposals(proposals, gt_boxes, gt_labels)
  File "/research/dept8/qdou/zwang/faster_rcnn/network_files/roi_head.py", line 144, in assign_targets_to_proposals
    labels_in_image[bg_inds] = 0
RuntimeError: copy_if failed to synchronize: cudaErrorAssert: device-side assert triggered
@WZMIAOMIAO
Copy link
Owner

你这是GPU环境没有配置好,应该是cuda的问题

@Kyfafyd
Copy link
Author

Kyfafyd commented Dec 26, 2020

你这是GPU环境没有配置好,应该是cuda的问题

我用的是系里服务器,cuda是conda装的匹配pytorch的版本,一般会有什么问题呢?

@WZMIAOMIAO
Copy link
Owner

GPU,GPU驱动、CUDA以及Pytorch版本都是有对应关系的,你自己可以在Nvidia官网查下,看下你的GPU的驱动是否支持你下载的CUDA版本

@Kyfafyd
Copy link
Author

Kyfafyd commented Dec 26, 2020 via email

@WZMIAOMIAO
Copy link
Owner

但我测试是没问题的哦,你用我视频中提供的pascal voc数据集跑过吗?

@jacklee-scau
Copy link

您好,我改进了网络结构,但是不能用官方预训练的权重了,我是要自己做一个预权重吗?还是直接不管直接跑数据集呢?

@Kyfafyd
Copy link
Author

Kyfafyd commented Dec 26, 2020 via email

@jacklee-scau
Copy link

jacklee-scau commented Dec 26, 2020 via email

@WZMIAOMIAO
Copy link
Owner

@jacklee-scau 如果改了网络结构,还要看你改了哪里,如果你改了backbone部分,那一般是要在imagenet上预训练一下,然后最好在coco数据集上进行预训练,最后在自己的数据集上做迁移学习。如果你数据量很大可以尝试直接在自己数据集上训练。但一般而言基于在coco上的预训练权重进行迁移学习效果会更好。

@WZMIAOMIAO
Copy link
Owner

@Kyfafyd 那应该是你数据集的问题了,是否有漏标或者空的标注文件。还有标注文件是否符合pascal voc格式。

@jacklee-scau
Copy link

@jacklee-scau 如果改了网络结构,还要看你改了哪里,如果你改了backbone部分,那一般是要在imagenet上预训练一下,然后最好在coco数据集上进行预训练,最后在自己的数据集上做迁移学习。如果你数据量很大可以尝试直接在自己数据集上训练。但一般而言基于在coco上的预训练权重进行迁移学习效果会更好。

我现在是在up主你的yolov3_spp上增加了两个spp层 (原则上没有改动backbone部分即darknet53)所以我不需要去imagenet上预训练对吗?但是我的数据集很小,我需要基于coco上的预训练对吗?(由于coco数据集太大,我用voc数据集预训练)但是我预训练之后的权重明显不对,一应用在自己的小数据集上就报错,报错为size不一样,或者类别不一样。请问在coco或voc上做预训练的时候还需要官方原来的权重吗(yolov3-spp-ultralytics-512.pt)?刚接触这个,可能表达不好。请见谅!

@WZMIAOMIAO
Copy link
Owner

@jacklee-scau 如果改了网络结构,还要看你改了哪里,如果你改了backbone部分,那一般是要在imagenet上预训练一下,然后最好在coco数据集上进行预训练,最后在自己的数据集上做迁移学习。如果你数据量很大可以尝试直接在自己数据集上训练。但一般而言基于在coco上的预训练权重进行迁移学习效果会更好。

我现在是在up主你的yolov3_spp上增加了两个spp层 (原则上没有改动backbone部分即darknet53)所以我不需要去imagenet上预训练对吗?但是我的数据集很小,我需要基于coco上的预训练对吗?(由于coco数据集太大,我用voc数据集预训练)但是我预训练之后的权重明显不对,一应用在自己的小数据集上就报错,报错为size不一样,或者类别不一样。请问在coco或voc上做预训练的时候还需要官方原来的权重吗(yolov3-spp-ultralytics-512.pt)?刚接触这个,可能表达不好。请见谅!

1)那你可以只载入darknet53的部分权重,数据集小的话,如果想达到更好的效果,在coco数据集上预训练是很有帮助的。
2)只是增加两个spp结构,效果其实没明显提升的,还不如直接使用原结构。
3)你预训练没问题,迁移自己数据集有问题,那就是你自己哪个参数设置有误了。

@jacklee-scau
Copy link

@jacklee-scau 如果改了网络结构,还要看你改了哪里,如果你改了backbone部分,那一般是要在imagenet上预训练一下,然后最好在coco数据集上进行预训练,最后在自己的数据集上做迁移学习。如果你数据量很大可以尝试直接在自己数据集上训练。但一般而言基于在coco上的预训练权重进行迁移学习效果会更好。

我现在是在up主你的yolov3_spp上增加了两个spp层 (原则上没有改动backbone部分即darknet53)所以我不需要去imagenet上预训练对吗?但是我的数据集很小,我需要基于coco上的预训练对吗?(由于coco数据集太大,我用voc数据集预训练)但是我预训练之后的权重明显不对,一应用在自己的小数据集上就报错,报错为size不一样,或者类别不一样。请问在coco或voc上做预训练的时候还需要官方原来的权重吗(yolov3-spp-ultralytics-512.pt)?刚接触这个,可能表达不好。请见谅!

1)那你可以只载入darknet53的部分权重,数据集小的话,如果想达到更好的效果,在coco数据集上预训练是很有帮助的。
2)只是增加两个spp结构,效果其实没明显提升的,还不如直接使用原结构。
3)你预训练没问题,迁移自己数据集有问题,那就是你自己哪个参数设置有误了。

我改了网络(这次仅仅在最后一个预测特征层的前面加了两个卷积层)加载官方模型预训练的时候就报错了,因为模型的网络参数接受到我改动的部分 提示建值不对,不知道该如何修改,报错信息如下:

Traceback (most recent call last):
File "/Users/lsx/PycharmProjects/GitProjects/yolov3_spp/train.py", line 100, in train
ckpt["model"] = {k: v for k, v in ckpt["model"].items() if model.state_dict()[k].numel() == v.numel()}
File "/Users/lsx/PycharmProjects/GitProjects/yolov3_spp/train.py", line 100, in
ckpt["model"] = {k: v for k, v in ckpt["model"].items() if model.state_dict()[k].numel() == v.numel()}
KeyError: 'module_list.112.Conv2d.weight'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/Users/lsx/PycharmProjects/GitProjects/yolov3_spp/train.py", line 288, in
train(hyp)
File "/Users/lsx/PycharmProjects/GitProjects/yolov3_spp/train.py", line 105, in train
raise KeyError(s) from e
KeyError: "weights/yolov3-spp-ultralytics-512.pt is not compatible with cfg/my_yolov3.cfg. Specify --weights '' or specify a --cfg compatible with weights/yolov3-spp-ultralytics-512.pt. See ultralytics/yolov3#657"

@jacklee-scau
Copy link

@jacklee-scau 如果改了网络结构,还要看你改了哪里,如果你改了backbone部分,那一般是要在imagenet上预训练一下,然后最好在coco数据集上进行预训练,最后在自己的数据集上做迁移学习。如果你数据量很大可以尝试直接在自己数据集上训练。但一般而言基于在coco上的预训练权重进行迁移学习效果会更好。

我现在是在up主你的yolov3_spp上增加了两个spp层 (原则上没有改动backbone部分即darknet53)所以我不需要去imagenet上预训练对吗?但是我的数据集很小,我需要基于coco上的预训练对吗?(由于coco数据集太大,我用voc数据集预训练)但是我预训练之后的权重明显不对,一应用在自己的小数据集上就报错,报错为size不一样,或者类别不一样。请问在coco或voc上做预训练的时候还需要官方原来的权重吗(yolov3-spp-ultralytics-512.pt)?刚接触这个,可能表达不好。请见谅!

1)那你可以只载入darknet53的部分权重,数据集小的话,如果想达到更好的效果,在coco数据集上预训练是很有帮助的。
2)只是增加两个spp结构,效果其实没明显提升的,还不如直接使用原结构。
3)你预训练没问题,迁移自己数据集有问题,那就是你自己哪个参数设置有误了。

由于这个问题比较涉及细节, up主我可以添加一下您的联系方式吗(931118435@qq.com),把详细的截图发您看一下,谢谢您!

@Kyfafyd Kyfafyd closed this as completed Jan 4, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants