Open Wanghe1997 opened 3 years ago
可以分析下这个错误吗?谢谢
跳转到最后一行错误提示的代码: def forward(self, x, outputs): a = outputs[self.layers[0]] return a.expand_as(x) * x
https://github.com/WongKinYiu/yolor/blob/main/cfg/yolor_p6.cfg#L1571-L1581 要跟著改成39
还想再问下作者您,您在论文中不同的模型实验数据表格,每种模型是训练了多少epoch?
作者您好,每次训练到最后一个epoch都会出现这样的错误,您知道怎么解决吗?
Epoch gpu_mem box obj cls total targets img_size
299/299 19.8G 0.0144 0.007881 0.003497 0.02578 23 1280: 100%|██████████| 1734/1734 [12:41<00:00, 2.28it/s]
Class Images Targets P R mAP@.5 mAP@.5:.95: 0%| | 0/97 [00:00<?, ?it/s]
Traceback (most recent call last):
File "G:/wanghe/yolor/train.py", line 570, in
Process finished with exit code 1
然后跳转到最后一个错误所在处,代码如下: def array(self, dtype=None): if has_torch_function_unary(self): return handle_torch_function(Tensor.array, (self,), self, dtype=dtype) if dtype is None: return self.numpy() <--- Line 621 else: return self.numpy().astype(dtype, copy=False)
感覺是環境和版本問題. 把 return np.array(targets) 改成 return np.array(targets.cpu()) 看看.
Hi, I'm also using a non-COCO dataset with 11 classes. I tried changing multiple things in the configuration but I can't make it work.
Could you please report all changes that needs to be done in order to train with different number of classes?
For the record, I eventually could make it work with the following config for yolor w6: This is a combination of what I wrote previously.
感覺是環境和版本問題. 把 return np.array(targets) 改成 return np.array(targets.cpu()) 看看.
Excuse me, I tried on your way, but another question occurs: AttributeError: 'list' object has no attribute 'cpu'
If you read the code snippet in models/models.py as below
# p.view(bs, 255, 13, 13) -- > (bs, 3, 13, 13, 85) # (bs, anchors, grid, grid, classes + xywh)
p = p.view(bs, self.na, self.no, self.ny, self.nx).permute(0, 1, 3, 4, 2).contiguous() # prediction
You will find out that a tensor in size (bs, 255, 13, 13) is converted to one in (bs, 3, 13, 13, 85) # (bs, anchors, grid, grid, classes + xywh), where 255 can be decomposed as 3 (number of anchors) 85 (80 classes + 5), so the keypoint is to modify 255 to a desired number. In my case, I am doing single class task, therefore 18 (3 anchors (1 class + 5)) is fit. Then I have some modifications in cfg file, e.g. searching keyword "by_wiekern", 8 modifications in total,
[implicit_add]
filters=384
# 205
[implicit_add]
filters=512
# 206
[implicit_add]
filters=640
# 207
[implicit_mul]
#filters=255 by_wiekern
filters=18
# 208
[implicit_mul]
#filters=255 by_wiekern
filters=18
# 209
[implicit_mul]
#filters=255 by_wiekern
filters=18
# 210
[implicit_mul]
#filters=255 by_wiekern
filters=18
# ============ Head ============ #
# YOLO-3
[route]
layers = 163
[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=256
activation=silu
[shift_channels]
from=203
[convolutional]
size=1
stride=1
pad=1
#filters=255 by_wiekern
filters=18
activation=linear
[control_channels]
from=207
[yolo]
mask = 0,1,2
anchors = 19,27, 44,40, 38,94, 96,68, 86,152, 180,137, 140,301, 303,264, 238,542, 436,615, 739,380, 925,792
classes=1
num=12
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1
scale_x_y = 1.05
iou_thresh=0.213
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
nms_kind=greedynms
beta_nms=0.6
# YOLO-4
[route]
layers = 176
[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=384
activation=silu
[shift_channels]
from=204
[convolutional]
size=1
stride=1
pad=1
#filters=255 by_wiekern
filters=18
activation=linear
[control_channels]
from=208
[yolo]
mask = 3,4,5
anchors = 19,27, 44,40, 38,94, 96,68, 86,152, 180,137, 140,301, 303,264, 238,542, 436,615, 739,380, 925,792
classes=1
num=12
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1
scale_x_y = 1.05
iou_thresh=0.213
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
nms_kind=greedynms
beta_nms=0.6
# YOLO-5
[route]
layers = 189
[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=512
activation=silu
[shift_channels]
from=205
[convolutional]
size=1
stride=1
pad=1
#filters=255 by_wiekern
filters=18
activation=linear
[control_channels]
from=209
[yolo]
mask = 6,7,8
anchors = 19,27, 44,40, 38,94, 96,68, 86,152, 180,137, 140,301, 303,264, 238,542, 436,615, 739,380, 925,792
classes=1
num=12
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1
scale_x_y = 1.05
iou_thresh=0.213
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
nms_kind=greedynms
beta_nms=0.6
# YOLO-6
[route]
layers = 202
[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=640
activation=silu
[shift_channels]
from=206
[convolutional]
size=1
stride=1
pad=1
#filters=255 by_wiekern
filters=18
activation=linear
[control_channels]
from=210
[yolo]
mask = 9,10,11
anchors = 19,27, 44,40, 38,94, 96,68, 86,152, 180,137, 140,301, 303,264, 238,542, 436,615, 739,380, 925,792
classes=1
num=12
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1
scale_x_y = 1.05
iou_thresh=0.213
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
nms_kind=greedynms
beta_nms=0.6
# ============ End of Head ============ #```
@JonathanSamelson who also guides you making it.
anchors = 19,27, 44,40, 38,94, 96,68, 86,152, 180,137, 140,301, 303,264, 238,542, 436,615, 739,380, 925,792
Your image size is 640, but your anchors are for image size 1280 or some image size close 1000. YoloR finds the anchor boxes automatically, still are you able to get proper detection when you initialize anchors with this value
Traceback (most recent call last): File "train.py", line 540, in
train(hyp, opt, device, tb_writer, wandb)
File "train.py", line 287, in train
pred = model(imgs) # forward
File "D:\Software\Anaconda3\envs\YOLOR\lib\site-packages\torch\nn\modules\module.py", line 889, in _call_impl
result = self.forward(*input, *kwargs)
File "G:\datasets_models\obj_models\yolor\models\models.py", line 543, in forward
return self.forward_once(x)
File "G:\datasets_models\obj_models\yolor\models\models.py", line 594, in forward_once
x = module(x, out) # WeightedFeatureFusion(), FeatureConcat()
File "D:\Software\Anaconda3\envs\YOLOR\lib\site-packages\torch\nn\modules\module.py", line 889, in _call_impl
result = self.forward(input, *kwargs)
File "G:\datasets_models\obj_models\yolor\utils\layers.py", line 404, in forward
return a.expand_as(x) x
RuntimeError: The expanded size of the tensor (39) must match the existing size (255) at non-singleton dimension 1. Target sizes: [1, 39, 160, 160]. Tensor sizes: [1, 255, 1, 1]