在跑ELSA代码时
python tools/train.py ./configs/elsa_swin/cascade_elsa_small_1x.py
具体报错如下:
2022-01-27 11:33:01,274 - mmdet - INFO - workflow: [(‘train’, 1)],
max: 12 epochs 2022-01-27 11:33:01,289 - mmdet - INFO - Checkpoints
will be saved to
/home/gong/pycharm/ELSA/det/work_dirs/cascade_elsa_small_1x by
HardDiskBackend. Traceback (most recent call last): File
“tools/train.py”, line 188, in
main() File “tools/train.py”, line 184, in main
meta=meta) File “/home/gong/pycharm/ELSA/det/mmdet/apis/train.py”, line 185, in
train_detector
runner.run(data_loaders, cfg.workflow) File “/home/gong/anaconda3/envs/elsa/lib/python3.7/site-packages/mmcv/runner/epoch_based_runner.py”,
line 127, in run
epoch_runner(data_loaders[i], **kwargs) File “/home/gong/anaconda3/envs/elsa/lib/python3.7/site-packages/mmcv/runner/epoch_based_runner.py”,
line 50, in train
self.run_iter(data_batch, train_mode=True, **kwargs) File “/home/gong/anaconda3/envs/elsa/lib/python3.7/site-packages/mmcv/runner/epoch_based_runner.py”,
line 30, in run_iter
**kwargs) File “/home/gong/anaconda3/envs/elsa/lib/python3.7/site-packages/mmcv/parallel/data_parallel.py”,
line 75, in train_step
return self.module.train_step(*inputs[0], **kwargs[0]) File “/home/gong/pycharm/ELSA/det/mmdet/models/detectors/base.py”, line
247, in train_step
losses = self(**data) File “/home/gong/anaconda3/envs/elsa/lib/python3.7/site-packages/torch/nn/modules/module.py”,
line 889, in _call_impl
result = self.forward(*input, **kwargs) File “/home/gong/anaconda3/envs/elsa/lib/python3.7/site-packages/mmcv/runner/fp16_utils.py”,
line 128, in new_func
output = old_func(*new_args, **new_kwargs) File “/home/gong/pycharm/ELSA/det/mmdet/models/detectors/base.py”, line
181, in forward
return self.forward_train(img, img_metas, **kwargs) File “/home/gong/pycharm/ELSA/det/mmdet/models/detectors/two_stage.py”,
line 164, in forward_train
**kwargs) File “/home/gong/pycharm/ELSA/det/mmdet/models/roi_heads/cascade_roi_head.py”,
line 269, in forward_train
bbox_results[‘bbox_feats’]) File “/home/gong/pycharm/ELSA/det/mmdet/models/roi_heads/cascade_roi_head.py”,
line 193, in _mask_forward_train
sampling_results, gt_masks, rcnn_train_cfg) File “/home/gong/pycharm/ELSA/det/mmdet/models/roi_heads/mask_heads/fcn_mask_head.py”,
line 134, in get_targets
gt_masks, rcnn_train_cfg) File “/home/gong/pycharm/ELSA/det/mmdet/core/mask/mask_target.py”, line
59, in mask_target
pos_assigned_gt_inds_list, gt_masks_list, cfg_list) TypeError: ‘NoneType’ object is not iterable
pos_assigned_gt_inds_list, gt_masks_list, cfg_list) TypeError: ‘NoneType’ object is not iterable
我的数据集中没有mask,所以原先是将cascade_elsa_small_1x.py中的with_mask=True注释掉
# augmentation strategy originates from DETR / Sparse RCNN
train_pipeline = [
dict(type='LoadImageFromFile'),
# dict(type='LoadAnnotations', with_bbox=True, with_mask=True),
dict(type='LoadAnnotations', with_bbox=True), # 把with_mask=True注释掉)
dict(type='RandomFlip', flip_ratio=0.5),
还是报错,没记录具体的报错信息,大意是调用到mask-rcnn时还是需要mask。
于是,把主框架cascade网络换成了faster_rcnn
(即copy一份fast_rcnn下的fast_rcnn_r50_fpn_1x_coco.py,重命名为faster_rcnn_elsa_small_1x.py)
1. 把_base_的内容copy到这一份faster_rcnn_elsa的config文件中来,注释掉_base_内容
2. 修改backbone为ELSASwin的配置
3. 换一下neck的in_channels
# 主要三将backbone 和 neck的in_channels换一下
backbone=dict(
type='ELSASwin',
embed_dim=96,
depths=[2, 2, 18, 2],
num_heads=[3, 6, 12, 24],
window_size=7,
mlp_ratio=4.,
qkv_bias=True,
qk_scale=None,
drop_rate=0.,
attn_drop_rate=0.,
drop_path_rate=0.2,
ape=False,
patch_norm=True,
out_indices=(0, 1, 2, 3),
use_checkpoint=False),
neck=dict(
type='FPN',
# in_channels=[96, 512, 1024, 1024],
in_channels=[96, 192, 384, 768],
out_channels=256,
num_outs=5),
即可成功运行!
python tools/train.py ./configs/faster_rcnn/faster_rcnn_elsa_small_1x.py
'''
2022-01-27 15:57:38,667 - mmdet - INFO - workflow: [('train', 1)], max: 50 epochs
2022-01-27 15:57:38,668 - mmdet - INFO - Checkpoints will be saved to /home/gong/pycharm/ELSA/det/work_dirs/faster_rcnn_duanmian_dataAgu_v1_0907_3k by HardDiskBackend.
/home/gong/pycharm/ELSA/det/mmdet/models/dense_heads/rpn_head.py:192: UserWarning: In rpn_proposal or test_cfg, nms_thr has been moved to a dict named nms as iou_threshold, max_num has been renamed as max_per_img, name of original arguments and the way to specify iou_threshold of NMS will be deprecated.
'In rpn_proposal or test_cfg, '
2022-01-27 15:58:58,647 - mmdet - INFO - Epoch [1][50/179] lr: 9.890e-06, eta: 3:57:15, time: 1.600, data_time: 0.048, memory: 5911, loss_rpn_cls: 0.5789, loss_rpn_bbox: 0.0089, loss_cls: 0.2588, acc: 96.3984, loss_bbox: 0.0046, loss: 0.8513
2022-01-27 16:00:15,545 - mmdet - INFO - Epoch [1][100/179] lr: 1.988e-05, eta: 3:51:23, time: 1.538, data_time: 0.002, memory: 5911, loss_rpn_cls: 0.1377, loss_rpn_bbox: 0.0102, loss_cls: 0.0613, acc: 99.0508, loss_bbox: 0.0272, loss: 0.2364
2022-01-27 16:01:32,466 - mmdet - INFO - Epoch [1][150/179] lr: 2.987e-05, eta: 3:48:35, time: 1.538, data_time: 0.002, memory: 5911, loss_rpn_cls: 0.0592, loss_rpn_bbox: 0.0093, loss_cls: 0.0796, acc: 98.4688, loss_bbox: 0.0553, loss: 0.2035
2022-01-27 16:02:17,208 - mmdet - INFO - Saving checkpoint at 1 epochs
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 2/2, 0.2 task/s, elapsed: 11s, ETA: 0s2022-01-27 16:02:33,372 - mmdet - INFO - Evaluating bbox...
Loading and preparing results...
DONE (t=0.02s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=0.08s).
Accumulating evaluation results...
DONE (t=0.02s).
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.422
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.851
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.500
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = -1.000
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = -1.000
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.422
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.550
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.550
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.550
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = -1.000
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = -1.000
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.550
'''