问题描述:简化yolov4的程序原来输出的head部分是13x13和52x52两个,现在去掉一个下采样,改为26x26和52x52两个,修改yolo4.py之后,运行train.py报错:
Epoch 1/50: 0%| | 0/209 [00:00<?, ?it/s<class 'dict'>]Start Train
Epoch 1/50: 0%| | 0/209 [00:05<?, ?it/s<class 'dict'>]
Traceback (most recent call last):
File "/home/PycharmProjects/yolov4/3-PA-tiny/train.py", line 372, in <module>
Val_Loss = fit_one_epoch(net, yolo_loss, epoch, epoch_size, epoch_size_val, gen, gen_val, Freeze_Epoch, Cuda)
File "/home/PycharmProjects/yolov4/3-PA-tiny/train.py", line 73, in fit_one_epoch
loss_item, num_pos = yolo_loss(outputs[i], targets)
File "/home/.conda/envs/ultralytics_yolov3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 722, in _call_impl
result = self.forward(*input, **kwargs)
File "/home/PycharmProjects/yolov4/3-PA-tiny/nets/yolo_training.py", line 188, in forward
mask, noobj_mask, t_box, tconf, tcls, box_loss_scale_x, box_loss_scale_y = self.get_target(targets, scaled_anchors,in_w, in_h,self.ignore_threshold)
File "/home/PycharmProjects/yolov4/3-PA-tiny/nets/yolo_training.py", line 238, in get_target
anchor_index = [[0,1,2],[3,4,5]][self.feature_length.index(in_w)]
ValueError: 26 is not in list
问题解决:
定位到yolo_training.py中,117行需要修改head对应的特征图尺寸,原来是:
self.feature_length = [img_size[0]//32,img_size[0]//8]
修改为:
self.feature_length = [img_size[0]//16, img_size[0]//8]
问题解决。