PaddlePaddle / PaddleRS

Awesome Remote Sensing Toolkit based on PaddlePaddle.
Apache License 2.0
365 stars 88 forks source link

update batch evaluate #154

Closed huilin16 closed 11 months ago

huilin16 commented 1 year ago

PR types

New features

PR changes

Others

Description

update batch evaluate

huilin16 commented 1 year ago

添加了批量预测的功能,在aistudio上在单卡和4卡环境上,每个任务都跑了一个模型,打印的输出结果显示batch_size与train_batch_size相同

Bobholamovic commented 1 year ago

赞!这个功能如果能够实现的话,PaddleRS的用户体验应该会有很大提升。

不过目前CI好像有点儿问题: image

另外其实我们不止需要batch_size符合预期,精度是更重要的,辛苦测试一下看看使用目前的实现,各个任务batch_size=1以及batch_size大于1的精度指标是否一致(需考虑单卡batch_size=1、单卡batch_size>1、多卡batch_size=1、多卡batch_size>1四种情况)。在测试的同时,建议也可以观察一下显存占用和测试耗时,看看目前的实现在性能上是否也是符合我们预期的(设置大于1的batch_size通常能够加速,显存占用与batch_size基本上呈线性关系)。

huilin16 commented 1 year ago

好的,我再测试下

------------------ 原始邮件 ------------------ 发件人: "Lin @.>; 发送时间: 2023年5月30日(星期二) 中午11:55 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [PaddlePaddle/PaddleRS] update batch evaluate (PR #154)

赞!这个功能如果能够实现的话,PaddleRS的用户体验应该会有很大提升。

不过目前CI好像有点儿问题:

另外其实我们不止需要batch_size符合预期,精度是更重要的,辛苦测试一下看看使用目前的实现,各个任务batch_size=1以及batch_size大于1的精度指标是否一致(需考虑单卡batch_size=1、单卡batch_size>1、多卡batch_size=1、多卡batch_size>1四种情况)。在测试的同时,建议也可以观察一下显存占用和测试耗时,看看目前的实现在性能上是否也是符合我们预期的(设置大于1的batch_size通常能够加速,显存占用与batch_size基本上呈线性关系)。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

huilin16 commented 1 year ago

修复了批量预测以及图像修复推理部分的问题,在aistudio单卡与多卡环境测试了不同batchsize, image 测试项目地址:https://aistudio.baidu.com/aistudio/projectdetail/6037351?contributionType=1

Bobholamovic commented 1 year ago

辛苦啦,非常详尽的实验结果!

从结果上来看,目标检测任务的多卡精度好像和正确值差的有点儿多,可能是有代码层面的问题……另外从显存占用和速度来看,好像也有些不太符合直觉,例如前两个任务单卡的bs=1和bs=8显存占用差距不是很大,目标检测任务使用bs>1的速度反而变慢了。我建议通过断点调试确认单卡情况下evaluate过程各步骤模型的输入输出是否符合预期,以及排查目标检测任务多卡精度误差问题。

huilin16 commented 1 year ago

好的,我再看下

------------------ 原始邮件 ------------------ 发件人: "Lin @.>; 发送时间: 2023年6月6日(星期二) 晚上7:46 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [PaddlePaddle/PaddleRS] update batch evaluate (PR #154)

辛苦啦,非常详尽的实验结果!

从结果上来看,目标检测任务的多卡精度好像和正确值差的有点儿多,可能是有代码层面的问题……另外从显存占用和速度来看,好像也有些不太符合直觉,例如前两个任务单卡的bs=1和bs=8显存占用差距不是很大,目标检测任务使用bs>1的速度反而变慢了。我建议通过断点调试确认单卡情况下evaluate过程各步骤模型的输入输出是否符合预期,以及排查目标检测任务多卡精度误差问题。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

huilin16 commented 11 months ago

抱歉,晚了一些。 目标检测和图像分类的eval确实有问题,两个任务的结果在多卡环境中,没有从各显卡中收集输出结果。语义分割和变化检测在evaluate中都收集,图像修复是在PSNR的accumulate中收集结果。 此外图像分类有点小问题,没有考虑最后1个batch数据少于batchsize的情况,也已经修复。

image

在单卡和多卡中输入、输出的batch维度显示都正常,关于显存问题,我试了下,paddle中会占用一部分额外显存,这部分显存大概几百MB,输入、输出的数据,以及前向传播的中间变量这部分显存才会根据batchsize倍增https://aistudio.baidu.com/aistudio/projectdetail/6545652

huilin16 commented 11 months ago

赞!这个功能如果能够实现的话,PaddleRS的用户体验应该会有很大提升。

不过目前CI好像有点儿问题: image

另外其实我们不止需要batch_size符合预期,精度是更重要的,辛苦测试一下看看使用目前的实现,各个任务batch_size=1以及batch_size大于1的精度指标是否一致(需考虑单卡batch_size=1、单卡batch_size>1、多卡batch_size=1、多卡batch_size>1四种情况)。在测试的同时,建议也可以观察一下显存占用和测试耗时,看看目前的实现在性能上是否也是符合我们预期的(设置大于1的batch_size通常能够加速,显存占用与batch_size基本上呈线性关系)。

原本的滑动预测处理的是单个样本,所以才会出现这个图片里的问题。所以对slider_predict这里做了个判断,处理batch结果

Bobholamovic commented 11 months ago

LGTM.

Bobholamovic commented 11 months ago

代码风格可能需要修复一下,CI没有通过: image

huilin16 commented 11 months ago

已更新

代码风格可能需要修复一下,CI没有通过: image

Bobholamovic commented 11 months ago

再次感谢贡献!

Bobholamovic commented 10 months ago

这个PR可能还需要再修改~ 发现合入后PaddleRS的seg和cd模型的推理功能崩了(batch_size>1的情况下),考虑是对postprocess部分的改动导致的。临时先revert了一下~