bubbliiiing / yolov4-pytorch

这是一个YoloV4-pytorch的源码,可以用于训练自己的模型。
MIT License
2.08k stars 612 forks source link

loss计算太慢 #368

Open ZGJY95 opened 1 year ago

ZGJY95 commented 1 year ago

训练用的COCO数据集,设置的batchsize是96,用的unfreeze training,开启fp16,单GPU。 训练的时候大概5s左右一个batch,但是loss运算就需要4s左右。CPU只用了大概30%。 image

有什么办法可以优化一下吗?

ZGJY95 commented 1 year ago

我还想问下,get_target里是计算了9个anchor 和真实框的iou, 然后取最大。 为什么不是只计算当前特征图的三个anchor然后取最大?计算9个的话,y_true里少了bbox,会影响iou loss的吧? 非常感谢! image

bubbliiiing commented 1 year ago

训练用的COCO数据集,设置的batchsize是96,用的unfreeze training,开启fp16,单GPU。 训练的时候大概5s左右一个batch,但是loss运算就需要4s左右。CPU只用了大概30%。 image

有什么办法可以优化一下吗?

额……你是怎么知道loss的时间的,loss已经都在gpu上了

bubbliiiing commented 1 year ago

我还想问下,get_target里是计算了9个anchor 和真实框的iou, 然后取最大。 为什么不是只计算当前特征图的三个anchor然后取最大?计算9个的话,y_true里少了bbox,会影响iou loss的吧? 非常感谢! image

还要确定哪个特征图呀

ZGJY95 commented 1 year ago

训练用的COCO数据集,设置的batchsize是96,用的unfreeze training,开启fp16,单GPU。 训练的时候大概5s左右一个batch,但是loss运算就需要4s左右。CPU只用了大概30%。 image 有什么办法可以优化一下吗?

额……你是怎么知道loss的时间的,loss已经都在gpu上了

直接在outputs = model_train(images)前后加t = time.time(),算了个差值放在进度条里了

ZGJY95 commented 1 year ago

我还想问下,get_target里是计算了9个anchor 和真实框的iou, 然后取最大。 为什么不是只计算当前特征图的三个anchor然后取最大?计算9个的话,y_true里少了bbox,会影响iou loss的吧? 非常感谢! image

还要确定哪个特征图呀

特征图不是用输入的l确定的嘛? image

bubbliiiing commented 1 year ago

这个l指的是现在在算第几个特征层 但是我们没法知道真实框匹配的是哪个特征层,所以需要把真实框与三个特征层计算,先判断真实框属于哪个特征层 因为这里对bs循环了,所以比较慢,你可以看看我的yolov5的代码,匹配的过程发生在data加载

ZGJY95 commented 1 year ago

这个l指的是现在在算第几个特征层 但是我们没法知道真实框匹配的是哪个特征层,所以需要把真实框与三个特征层计算,先判断真实框属于哪个特征层 因为这里对bs循环了,所以比较慢,你可以看看我的yolov5的代码,匹配的过程发生在data加载

懂了!非常感谢!