jbwang1997 / OBBDetection

OBBDetection is an oriented object detection library, which is based on MMdetection.
Apache License 2.0
525 stars 112 forks source link

test阶段使用多GPU #19

Closed hust-lidelong closed 2 years ago

hust-lidelong commented 2 years ago

尊敬的作者,您好! 我在https://github.com/jbwang1997/OBBDetection/blob/master/tools/test.py 看到您标注为TODO,请问什么时候可以完善这个功能呢,谢谢!

jbwang1997 commented 2 years ago

这个是在MMdetection v2.2中增加的TODO,在高版本的MMdetection应该已经实现了,如果之后有时间升级更高版本的MMdetection应该能支持这个功能。

hust-lidelong commented 2 years ago

这个是在MMdetection v2.2中增加的TODO,在高版本的MMdetection应该已经实现了,如果之后有时间升级更高版本的MMdetection应该能支持这个功能。

那请问使用您现在这个版本的obbdetection代码做test的时候,只能使用单GPU吗

jbwang1997 commented 2 years ago

可以使用多GPU,要用tools/dist_test.sh

hust-lidelong commented 2 years ago

当我在单GPU使用

--show-dir visual_results/faster_rcnn_orpn_r50_fpn_1x_dota10_epoch_12

输出为空

jbwang1997 commented 2 years ago

--show-dir 可能需要先创建文件夹,不知道visual_results/faster_rcnn_orpn_r50_fpn_1x_dota10_epoch_12这个文件夹是否已经存在

hust-lidelong commented 2 years ago

--show-dir 可能需要先创建文件夹,不知道visual_results/faster_rcnn_orpn_r50_fpn_1x_dota10_epoch_12这个文件夹是否已经存在

新建该文件夹以后,可以保存了。感谢 还有一个问题想请教作者, https://github.com/jbwang1997/OBBDetection/blob/master/docs/oriented_model_starting.md 中写的

python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} --format-only --options save_dir=${SAVE_DIR}

该命令行的作用,是把split的图片结果合并,并生成txt以提交给测试服务器时使用吗?如果我需要把split图片合并为完整图,并保存可视化检测结果,可以用这行命令吗?

hust-lidelong commented 2 years ago

当我使用

CUDA_VISIBLE_DEVICES=1 python tools/test.py \
    configs/obb/oriented_rcnn/faster_rcnn_orpn_r50_fpn_1x_dota10.py \
    work_dirs/faster_rcnn_orpn_r50_fpn_1x_dota10/epoch_12.pth \
    --eval mAP \
    --show-dir visual_results/faster_rcnn_orpn_r50_fpn_1x_dota10_epoch_12

可视化结果正常,但是计算的mAP = 0 :

Snipaste_2021-09-07_21-55-10

请问哪里出问题了呢

jbwang1997 commented 2 years ago

--show-dir 可能需要先创建文件夹,不知道visual_results/faster_rcnn_orpn_r50_fpn_1x_dota10_epoch_12这个文件夹是否已经存在

新建该文件夹以后,可以保存了。感谢 还有一个问题想请教作者, https://github.com/jbwang1997/OBBDetection/blob/master/docs/oriented_model_starting.md 中写的

python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} --format-only --options save_dir=${SAVE_DIR}

该命令行的作用,是把split的图片结果合并,并生成txt以提交给测试服务器时使用吗?如果我需要把split图片合并为完整图,并保存可视化检测结果,可以用这行命令吗?

是的,这是对DOTA数据集的优化,可以直接生成用于提交到DOTA测试的.zip文件格式。

如果要可视化全图结果,可以使用BboxToolkit/tools/visualize.py --load_type选择dota_submission, 加载的--img_dir 为原始的DOTA图像目录,--ann_dir 选择{SAVE_DIR}。具体的用法可以参考这里

jbwang1997 commented 2 years ago

当我使用

CUDA_VISIBLE_DEVICES=1 python tools/test.py \
    configs/obb/oriented_rcnn/faster_rcnn_orpn_r50_fpn_1x_dota10.py \
    work_dirs/faster_rcnn_orpn_r50_fpn_1x_dota10/epoch_12.pth \
    --eval mAP \
    --show-dir visual_results/faster_rcnn_orpn_r50_fpn_1x_dota10_epoch_12

可视化结果正常,但是计算的mAP = 0 :

Snipaste_2021-09-07_21-55-10

请问哪里出问题了呢

这里DOTA test数据集没有提供标签,所以ground truth数量为0,mAP最后的结果也为0

hust-lidelong commented 2 years ago

--show-dir 可能需要先创建文件夹,不知道visual_results/faster_rcnn_orpn_r50_fpn_1x_dota10_epoch_12这个文件夹是否已经存在

新建该文件夹以后,可以保存了。感谢 还有一个问题想请教作者, https://github.com/jbwang1997/OBBDetection/blob/master/docs/oriented_model_starting.md 中写的

python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} --format-only --options save_dir=${SAVE_DIR}

该命令行的作用,是把split的图片结果合并,并生成txt以提交给测试服务器时使用吗?如果我需要把split图片合并为完整图,并保存可视化检测结果,可以用这行命令吗?

是的,这是对DOTA数据集的优化,可以直接生成用于提交到DOTA测试的.zip文件格式。

如果要可视化全图结果,可以使用BboxToolkit/tools/visualize.py --load_type选择dota_submission, 加载的--img_dir 为原始的DOTA图像目录,--ann_dir 选择{SAVE_DIR}。具体的用法可以参考这里

好的,非常感谢,我尝试一下

hust-lidelong commented 2 years ago

当我使用

CUDA_VISIBLE_DEVICES=1 python tools/test.py \
    configs/obb/oriented_rcnn/faster_rcnn_orpn_r50_fpn_1x_dota10.py \
    work_dirs/faster_rcnn_orpn_r50_fpn_1x_dota10/epoch_12.pth \
    --eval mAP \
    --show-dir visual_results/faster_rcnn_orpn_r50_fpn_1x_dota10_epoch_12

可视化结果正常,但是计算的mAP = 0 :

Snipaste_2021-09-07_21-55-10

请问哪里出问题了呢

这里DOTA test数据集没有提供标签,所以ground truth数量为0,mAP最后的结果也为0

因为我刚入门,还有几个问题想请问: (1)我能否理解为,DOTA数据集中:training set 和validation set 有label, test set 没有label?在训练阶段,使用training set 和validation set 一起做训练,在test阶段,使用 test set 做测试呢? (2)我如何提交并计算DOTA test数据集的mAP呢? https://github.com/jbwang1997/OBBDetection/tree/master/configs/obb/oriented_rcnn 这里面的mAP是在什么数据集计算?也是上传到服务器计算得到的吗?是上传txt 还是pkl文件进行计算呢? (3)您论文里的Table 1: Recall results on the DOTA validation set.是如何得到的啊 (4)训练完一个模型以后,我能否在本地就得到一些评价指标,以及时知道训练模型是否work,而不用上传服务器才知道呢?能否在DOTA validation set,本地计算相关的评价指标呢?

希望能得到您的指点

jbwang1997 commented 2 years ago

当我使用

CUDA_VISIBLE_DEVICES=1 python tools/test.py \
    configs/obb/oriented_rcnn/faster_rcnn_orpn_r50_fpn_1x_dota10.py \
    work_dirs/faster_rcnn_orpn_r50_fpn_1x_dota10/epoch_12.pth \
    --eval mAP \
    --show-dir visual_results/faster_rcnn_orpn_r50_fpn_1x_dota10_epoch_12

可视化结果正常,但是计算的mAP = 0 :

Snipaste_2021-09-07_21-55-10

请问哪里出问题了呢

这里DOTA test数据集没有提供标签,所以ground truth数量为0,mAP最后的结果也为0

因为我刚入门,还有几个问题想请问: (1)我能否理解为,DOTA数据集中:training set 和validation set 有label, test set 没有label?在训练阶段,使用training set 和validation set 一起做训练,在test阶段,使用 test set 做测试呢? (2)我如何提交并计算DOTA test数据集的mAP呢? https://github.com/jbwang1997/OBBDetection/tree/master/configs/obb/oriented_rcnn 这里面的mAP是在什么数据集计算?也是上传到服务器计算得到的吗?是上传txt 还是pkl文件进行计算呢? (3)您论文里的Table 1: Recall results on the DOTA validation set.是如何得到的啊 (4)训练完一个模型以后,我能否在本地就得到一些评价指标,以及时知道训练模型是否work,而不用上传服务器才知道呢?能否在DOTA validation set,本地计算相关的评价指标呢?

希望能得到您的指点

hust-lidelong commented 2 years ago

当我使用

CUDA_VISIBLE_DEVICES=1 python tools/test.py \
    configs/obb/oriented_rcnn/faster_rcnn_orpn_r50_fpn_1x_dota10.py \
    work_dirs/faster_rcnn_orpn_r50_fpn_1x_dota10/epoch_12.pth \
    --eval mAP \
    --show-dir visual_results/faster_rcnn_orpn_r50_fpn_1x_dota10_epoch_12

可视化结果正常,但是计算的mAP = 0 :

Snipaste_2021-09-07_21-55-10

请问哪里出问题了呢

这里DOTA test数据集没有提供标签,所以ground truth数量为0,mAP最后的结果也为0

因为我刚入门,还有几个问题想请问: (1)我能否理解为,DOTA数据集中:training set 和validation set 有label, test set 没有label?在训练阶段,使用training set 和validation set 一起做训练,在test阶段,使用 test set 做测试呢? (2)我如何提交并计算DOTA test数据集的mAP呢? https://github.com/jbwang1997/OBBDetection/tree/master/configs/obb/oriented_rcnn 这里面的mAP是在什么数据集计算?也是上传到服务器计算得到的吗?是上传txt 还是pkl文件进行计算呢? (3)您论文里的Table 1: Recall results on the DOTA validation set.是如何得到的啊 (4)训练完一个模型以后,我能否在本地就得到一些评价指标,以及时知道训练模型是否work,而不用上传服务器才知道呢?能否在DOTA validation set,本地计算相关的评价指标呢? 希望能得到您的指点

  • DOTA数据集只给了train与val的标签,test只有图片,如果是自己快速比较模型是否有效果或是要使用到label去验证一些想法的正确性时用train训练val测试。但最终模型的结果是以test数据集上在DOTA官网上评价的结果为准。
  • 提交方式可以参考这里
  • 这里mAP都是提交的结果,上传格式参考这里
  • Recall是在Validate上计算出来的,模型需要使用orpn_*.py,并且需要将数据集换成train训练 val测试,在测试时候增加--eval recall
  • 可以参考第一条

讲解的太全面了,非常感谢!给您点赞

hust-lidelong commented 2 years ago

作者,您好。 我想要快速比较模型是否有效果,因此当我把

configs\obb\_base_\datasets\dota.py

disable evluation, only need train and test uncomments it when use trainval as train注释,并使用does evaluation while training uncomments it when you need evaluate every epoch。即:

Snipaste_2021-09-08_11-51-30

开始测试后(tools/test.py),会报错:

Snipaste_2021-09-08_11-53-40

但是我使用BboxToolkit/tools/img_split.py切割以后,得到的split_ss_dota1_0文件夹中只有:

Snipaste_2021-09-08_11-54-57

请问该如何修改呢?谢谢

jbwang1997 commented 2 years ago

这里需要把val数据集也切割一下。在split_config中应该有val数据集的分割config,是这个

hust-lidelong commented 2 years ago

这里需要把val数据集也切割一下。在split_config中应该有val数据集的分割config,是这个

可以了,感谢! 但是在validation set 做测试,使用--eval recall 以后,会报以下错误:

Snipaste_2021-09-08_16-57-14

请问问题出在哪里呢

jbwang1997 commented 2 years ago

--eval recall是RPN的评价指标,需要使用orpn_*.py的模型

hust-lidelong commented 2 years ago

--eval recall是RPN的评价指标,需要使用orpn_*.py的模型

您好,当我输入一下代码以后:

CUDA_VISIBLE_DEVICES=0 python tools/test.py \
    configs/obb/oriented_rcnn/orpn_r50_fpn_1x_dota10.py \
    work_dirs/faster_rcnn_orpn_r50_fpn_1x_dota10/epoch_12.pth
    --eval recall
Snipaste_2021-09-09_10-46-12

没有显示recall的值,请问在哪里查看呢

jbwang1997 commented 2 years ago

recall的计算时间会比较长一些

czy341181 commented 2 years ago

@jbwang1997 请问在您的test.py中,只能实现batchsize为1的吗? 如果要多batchsize的话,应该如何改呢?

1.我把samples_per_gpu=1改为samples_per_gpu=10 2.去掉base中的 assert samples_per_gpu == 1

不过好像还是不太行,还有哪里需要改呢?

jbwang1997 commented 2 years ago

现在在一个GPU上test只能batchsize为1,如果要改成多batch需要修改模型的后处理方式,比较复杂。