我正在尝试使用来自这篇论文的数据集来训练MaskRCNN,以便检测和分割苹果,
我只是按照ReadMe文件中提供的说明进行操作..
这是控制台上的输出
(venv) PS > python train_rcnn.py --data_path 'D:\Research Report\tensorflow\Mask_RCNN-TRIALS\Mask_RCNN-master\datasets\apples-minneapple' --model mrcnn --epochs 50 --output-dir 'D:\Research Report\tensorflow\Mask_RCNN-TRIALS\Mask_RCNN-master\samples\apples'mrcnnNamespace(batch_size=2, data_path='D:\\Research Report\\tensorflow\\Mask_RCNN-TRIALS\\Mask_RCNN-master\\datasets\\apples-minneapple', dataset='AppleDataset', device='cuda', epochs=50, lr=0.02, lr_gamma=0.1, lr_step_size=8, lr_steps=[8, 11], model='mrcnn', momentum=0.9, output_dir='D:\\Research Report\\tensorflow\\Mask_RCNN-TRIALS\\Mask_RCNN-master\\samples\\apples', print_freq=20, resume='', weight_decay=0.0001, workers=4)Loading dataCreating data loadersCreating modelStart trainingEpoch: [0] [ 0/335] eta: 1:00:28 lr: 0.000080 loss: 2.4100 (2.4100) loss_classifier: 0.8481 (0.8481) loss_box_reg: 0.4164 (0.4164) loss_objectness: 0.9299 (0.9299) loss_rpn_box_reg: 0.2157 (0.2157) time: 10.8327 data: 7.9925 max mem: 2733Epoch: [0] [ 20/335] eta: 0:06:18 lr: 0.001276 loss: 1.4465 (1.4728) loss_classifier: 0.5526 (0.5496) loss_box_reg: 0.3586 (0.3572) loss_objectness: 0.2666 (0.3418) loss_rpn_box_reg: 0.2233 (0.2242) time: 0.7204 data: 0.0132 max mem: 3247Epoch: [0] [ 40/335] eta: 0:04:48 lr: 0.002473 loss: 0.9622 (1.2287) loss_classifier: 0.2927 (0.4276) loss_box_reg: 0.3188 (0.3314) loss_objectness: 0.1422 (0.2491) loss_rpn_box_reg: 0.2168 (0.2207) time: 0.7408 data: 0.0210 max mem: 3282Epoch: [0] [ 60/335] eta: 0:04:05 lr: 0.003669 loss: 0.7924 (1.0887) loss_classifier: 0.2435 (0.3654) loss_box_reg: 0.2361 (0.2983) loss_objectness: 0.1289 (0.2105) loss_rpn_box_reg: 0.1898 (0.2144) time: 0.7244 data: 0.0127 max mem: 3432Epoch: [0] [ 80/335] eta: 0:03:37 lr: 0.004865 loss: 0.7438 (1.0117) loss_classifier: 0.2565 (0.3376) loss_box_reg: 0.2193 (0.2799) loss_objectness: 0.0776 (0.1835) loss_rpn_box_reg: 0.1983 (0.2108) time: 0.7217 data: 0.0127 max mem: 3432Epoch: [0] [100/335] eta: 0:03:14 lr: 0.006062 loss: 0.7373 (0.9490) loss_classifier: 0.2274 (0.3156) loss_box_reg: 0.2193 (0.2654) loss_objectness: 0.0757 (0.1643) loss_rpn_box_reg: 0.1867 (0.2037) time: 0.7291 data: 0.0132 max mem: 3432Epoch: [0] [120/335] eta: 0:02:54 lr: 0.007258 loss: 0.8275 (0.9243) loss_classifier: 0.2689 (0.3094) loss_box_reg: 0.2315 (0.2602) loss_objectness: 0.0867 (0.1539) loss_rpn_box_reg: 0.1883 (0.2008) time: 0.7270 data: 0.0134 max mem: 3432Epoch: [0] [140/335] eta: 0:02:35 lr: 0.008455 loss: 0.7886 (0.9057) loss_classifier: 0.2573 (0.3029) loss_box_reg: 0.2246 (0.2539) loss_objectness: 0.0724 (0.1455) loss_rpn_box_reg: 0.2459 (0.2035) time: 0.7170 data: 0.0124 max mem: 3432Epoch: [0] [160/335] eta: 0:02:17 lr: 0.009651 loss: 0.7588 (0.8878) loss_classifier: 0.2341 (0.2948) loss_box_reg: 0.2226 (0.2486) loss_objectness: 0.1032 (0.1427) loss_rpn_box_reg: 0.2020 (0.2016) time: 0.7139 data: 0.0118 max mem: 3432Epoch: [0] [180/335] eta: 0:02:01 lr: 0.010847 loss: 0.7340 (0.8744) loss_classifier: 0.2331 (0.2898) loss_box_reg: 0.2120 (0.2441) loss_objectness: 0.1086 (0.1392) loss_rpn_box_reg: 0.1993 (0.2012) time: 0.7800 data: 0.0584 max mem: 3432Epoch: [0] [200/335] eta: 0:01:45 lr: 0.012044 loss: 0.8106 (0.8694) loss_classifier: 0.2616 (0.2873) loss_box_reg: 0.2208 (0.2411) loss_objectness: 0.1117 (0.1397) loss_rpn_box_reg: 0.1927 (0.2014) time: 0.7344 data: 0.0143 max mem: 3432Epoch: [0] [220/335] eta: 0:01:29 lr: 0.013240 loss: 0.8191 (0.8610) loss_classifier: 0.2581 (0.2848) loss_box_reg: 0.2140 (0.2382) loss_objectness: 0.0860 (0.1362) loss_rpn_box_reg: 0.2177 (0.2018) time: 0.7213 data: 0.0126 max mem: 3432Epoch: [0] [240/335] eta: 0:01:13 lr: 0.014437 loss: 0.7890 (0.8590) loss_classifier: 0.2671 (0.2842) loss_box_reg: 0.2094 (0.2357) loss_objectness: 0.1175 (0.1360) loss_rpn_box_reg: 0.2256 (0.2030) time: 0.7576 data: 0.0564 max mem: 3432Epoch: [0] [260/335] eta: 0:00:57 lr: 0.015633 loss: 0.8631 (0.8587) loss_classifier: 0.2900 (0.2849) loss_box_reg: 0.2089 (0.2337) loss_objectness: 0.0925 (0.1350) loss_rpn_box_reg: 0.2271 (0.2050) time: 0.7371 data: 0.0220 max mem: 3432Epoch: [0] [280/335] eta: 0:00:42 lr: 0.016830 loss: 0.8464 (0.8580) loss_classifier: 0.2679 (0.2840) loss_box_reg: 0.2156 (0.2321) loss_objectness: 0.0940 (0.1346) loss_rpn_box_reg: 0.2345 (0.2073) time: 0.7379 data: 0.0143 max mem: 3432Epoch: [0] [300/335] eta: 0:00:27 lr: 0.018026 loss: 0.7991 (0.8519) loss_classifier: 0.2485 (0.2819) loss_box_reg: 0.2125 (0.2305) loss_objectness: 0.0819 (0.1315) loss_rpn_box_reg: 0.2217 (0.2080) time: 0.8549 data: 0.1419 max mem: 3450Epoch: [0] [320/335] eta: 0:00:11 lr: 0.019222 loss: 0.6906 (0.8432) loss_classifier: 0.2362 (0.2791) loss_box_reg: 0.2036 (0.2285) loss_objectness: 0.0662 (0.1285) loss_rpn_box_reg: 0.1801 (0.2070) time: 0.7257 data: 0.0238 max mem: 3450Epoch: [0] [334/335] eta: 0:00:00 lr: 0.020000 loss: 0.7822 (0.8441) loss_classifier: 0.2501 (0.2785) loss_box_reg: 0.2224 (0.2285) loss_objectness: 0.1135 (0.1296) loss_rpn_box_reg: 0.1948 (0.2075) time: 0.7249 data: 0.0139 max mem: 3450Epoch: [0] Total time: 0:04:18 (0.7707 s / it)Traceback (most recent call last): File "train_rcnn.py", line 143, in <module> main(args) File "train_rcnn.py", line 109, in main evaluate(model, data_loader_test, device=device) File "C:\Users\___\AppData\Local\Programs\Python\Python36\lib\site-packages\torch\autograd\grad_mode.py", line 49, in decorate_no_grad return func(*args, **kwargs) File "D:\Research Report\tensorflow\Mask_RCNN-TRIALS\Mask_RCNN-master\samples\apples\utility\engine.py", line 78, in evaluate coco = get_coco_api_from_dataset(data_loader.dataset) File "D:\Research Report\tensorflow\Mask_RCNN-TRIALS\Mask_RCNN-master\samples\apples\utility\coco_utils.py", line 205, in get_coco_api_from_dataset return convert_to_coco_api(dataset) File "D:\Research Report\tensorflow\Mask_RCNN-TRIALS\Mask_RCNN-master\samples\apples\utility\coco_utils.py", line 154, in convert_to_coco_api img, targets = ds[img_idx] File "D:\Research Report\tensorflow\Mask_RCNN-TRIALS\Mask_RCNN-master\samples\apples\data\apple_dataset.py", line 22, in __getitem__ mask_path = os.path.join(self.root_dir, "masks", self.masks[idx])IndexError: list index out of range
这是用于训练网络的文件
...
Apple_dataset.py 如下
...
如何修复索引超出范围的问题?或者这里需要解决的根本问题是什么?
EDIT1: 好的… 所以这里发生的事情是我有两个文件夹 “train” 和 “test”.. 训练文件夹包含图像和掩码,而测试文件夹只有图像.. apple_dataset.py 是这样写的,它在训练和测试文件夹中都寻找掩码文件夹.. 我想我需要更改代码,使其只在训练文件夹中寻找掩码,而不在测试集中寻找
回答:
通过在 “test” 文件夹中创建一个名为 ‘masks’ 的虚拟文件夹来解决这个问题.. 只需从 ‘train’ 文件夹中复制粘贴所有掩码.. 训练和预测脚本实际上不会使用它,所以这里应该不会有任何问题..
另请查看这个问题以了解需要进行的更多更改