Closed HeuristicLU closed 2 years ago
这个是在dataloader的pipline中,旋转增强会寻找相应类别进行直角旋转,可以将这里的vert_cls=[]
非常感谢,确实改了这里就可以,排查了大半天
在之后的commit中,我也会在这个进行修改,使不同类别的数据集级也不会报错。
我现在可以正常训练,但是精度评估的时候都是0,还有哪里需要注意的么? (Beta) root@asus-System-Product-Name:/media/asus/299D817A2D97AD94/ok_PROJs/OBBDetection# python tools/test.py configs/obb/oriented_rcnn/faster_rcnn_orpn_r50_fpn_1x_dota10.py work_dirs/faster_rcnn_orpn_r50_fpn_1x_dota10/latest.pth --out=work_dirs/faster_rcnn_orpn_r50_fpn_1x_dota10/results.pkl --eval mAP [>>>>>>>>>>>>>>>>>>>>>>>>>>] 2241/2241, 16.7 task/s, elapsed: 135s, ETA: 0s writing results to work_dirs/faster_rcnn_orpn_r50_fpn_1x_dota10/results.pkl
Merging patch bboxes into full image!!! [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 9/9, 3.2 task/s, elapsed: 3s, ETA: 0s Used time: 3.3 s
Start calculate mAP!!! Result is Only for reference, final result is subject to DOTA_devkit
+------------+-----+------+--------+--------+ | class | gts | dets | recall | ap | +------------+-----+------+--------+--------+ | ore-oil | 64 | 912 | 0.0000 | 0.0000 | | Container | 997 | 8631 | 0.0000 | 0.0000 | | Fishing | 202 | 910 | 0.0000 | 0.0000 | | yacht | 106 | 954 | 0.0000 | 0.0000 | | LawEnforce | 15 | 823 | 0.0000 | 0.0000 | | Small | 29 | 850 | 0.0000 | 0.0000 | | Passenger | 22 | 876 | 0.0000 | 0.0000 | +------------+-----+------+--------+--------+ | mAP | | | | 0.0000 | +------------+-----+------+--------+--------+
可以检查一下数据集的格式是否正确,OBBDetection的dota数据集接受的数据需要时BboxToolkit中裁图出来的,不知道这是数据集是否也用BboxToolkit进行裁图了。
其次如果数据集图片比较少的话,需要适当的增加epoch数量,不然网络会训练不充分。
我仔细分析了一下,可能是因为我的大图中目标较少,不想DOTA那样比较多,所以用BboxToolkit切分的话会出现很多没有样本的图像,会导致样本过于不平衡。我之前改过DOATtoolkit的切分,读入xml目标坐标,然后只在目标附件切分,这样不会产生很多空的图,你的代码写的比较好,看了好一会不太会改,就没改成那种。我epoch增加到36,效果还是不好,推理了下看,检测出来的很少,看样子不是map计算的错,是模型训的不好。
训练网络的时候程序会自动过滤没有目标的图像块的,所以应该不会出现太大的样本不平衡。
有可能还是超参的问题,可以检查一下学习率是否遵循线性法则。
我用faster_rcnn_orpn_r50_fpn_1x_dota10.py这个模型是可以正常评估map的,但是用faster_rcnn_orpn_r50_fpn_1x_ms_rr_dota10.py会报错。 我的指令是:python tools/test.py configs/obb/oriented_rcnn/faster_rcnn_orpn_r50_fpn_1x_ms_rr_dota10.py work_dirs/faster_rcnn_orpn_r50_fpn_1x_ms_rr_dota10/latest.pth --out=work_dirs/faster_rcnn_orpn_r50_fpn_1x_ms_rr_dota10/results.pkl --eval mAP --show-dir=work_dirs/faster_rcnn_orpn_r50_fpn_1x_ms_rr_dota10/result/
报错信息为:
[>> ] 373/3942, 6.4 task/s, elapsed: 58s, ETA: 553sTraceback (most recent call last):
File "tools/test.py", line 153, in
报cuda的错误,请问你有什么建议排查的地方吗?
这种情况我也没怎么碰见过,可以先尝试用--show看网络输出是否正常
1修改类别为我自己数据集的类别,但继续用dota1格式。 'DOTA1_0': ('ore-oil', 'Container', 'Fishing', 'yacht', 'LawEnforce', 'Small', 'Passenger'),
'DOTA1_0': ('large-vehicle', 'swimming-pool', 'helicopter', 'bridge',
2配置文件里面修改类别数目 num_classes=7,
3运行报错:2021-08-31 20:17:55,895 - mmdet - INFO - workflow: [('train', 1)], max: 12 epochs Traceback (most recent call last): File "tools/train.py", line 153, in
main()
File "tools/train.py", line 142, in main
train_detector(
File "/media/asus/299D817A2D97AD94/ok_PROJs/OBBDetection/mmdet/apis/train.py", line 129, in train_detector
runner.run(data_loaders, cfg.workflow, cfg.total_epochs)
File "/home/asus/anaconda3/envs/Beta/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 122, in run
epoch_runner(data_loaders[i], **kwargs)
File "/home/asus/anaconda3/envs/Beta/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 27, in train
for i, data_batch in enumerate(data_loader):
File "/home/asus/anaconda3/envs/Beta/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 435, in next
data = self._next_data()
File "/home/asus/anaconda3/envs/Beta/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 1085, in _next_data
return self._process_data(data)
File "/home/asus/anaconda3/envs/Beta/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 1111, in _process_data
data.reraise()
File "/home/asus/anaconda3/envs/Beta/lib/python3.8/site-packages/torch/_utils.py", line 428, in reraise
raise self.exc_type(msg)
ValueError: Caught ValueError in DataLoader worker process 0.
Original Traceback (most recent call last):
File "/home/asus/anaconda3/envs/Beta/lib/python3.8/site-packages/torch/utils/data/_utils/worker.py", line 198, in _worker_loop
data = fetcher.fetch(index)
File "/home/asus/anaconda3/envs/Beta/lib/python3.8/site-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/home/asus/anaconda3/envs/Beta/lib/python3.8/site-packages/torch/utils/data/_utils/fetch.py", line 44, in
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/media/asus/299D817A2D97AD94/ok_PROJs/OBBDetection/mmdet/datasets/custom.py", line 187, in getitem
data = self.prepare_train_img(idx)
File "/media/asus/299D817A2D97AD94/ok_PROJs/OBBDetection/mmdet/datasets/custom.py", line 210, in prepare_train_img
return self.pipeline(results)
File "/media/asus/299D817A2D97AD94/ok_PROJs/OBBDetection/mmdet/datasets/pipelines/compose.py", line 40, in call
data = t(data)
File "/media/asus/299D817A2D97AD94/ok_PROJs/OBBDetection/mmdet/datasets/pipelines/obb/base.py", line 393, in call
results['angle'] = self.get_random_angle(results)
File "/media/asus/299D817A2D97AD94/ok_PROJs/OBBDetection/mmdet/datasets/pipelines/obb/base.py", line 303, in get_random_angle
vert_lbls = [results['cls'].index(c) for c in self.vert_cls]
File "/media/asus/299D817A2D97AD94/ok_PROJs/OBBDetection/mmdet/datasets/pipelines/obb/base.py", line 303, in
vert_lbls = [results['cls'].index(c) for c in self.vert_cls]
ValueError: tuple.index(x): x not in tuple
仿佛是类别哪里还需要修改,想问下,你有什么好的建议或者知道修改哪里么