DOTA数据格式mAP计算工具:DOTA_devkit。
注:
(1)mmdetection和mmrotate评价指标只关注coco与voc两种格式,对于DOTA格式单独给出一个计算工具。
(2)鉴于项目保密,照片均采用网上图片,请谅解!!!

基本信息

下载地址:https://github.com/978326187/DOTA_devkit
使用功能:每一个文件可单独使用:

  1. For read and visualize data, you can use DOTA.py
  2. For evaluation the result, you can refer to the “dota_evaluation_task1.py” and “dota_evaluation_task2.py”
  3. For split the large image, you can refer to the “ImgSplit”
  4. For merge the results detected on the patches, you can refer to the ResultMerge.py
  • ** DOTA.py 加载图片并绘制目标边框**
  • **dota_×_evaluation_task×.py 评估模型性能 **
  • ImgSplit.py 分割数据集
  • ResultMerge.py 将被分割数据集的检测结果合并,便于后续评估模型性能

本次我使用第二个功能,dota_evaluation_task1.py文件计算mAP值。
DOTA格式

.
├── images
└── labelTxt

安装教程:(建议在Linux系统中进行环境安装,Windows问题重重)
1、首先安装swig;

pip isntall swig -i https://pypi.doubanio.com/simple
或者sudo apt-get install swig

2、为python创建c++扩展模块。
注意:必须在DOTA_devkit-master文件夹下运行以下命令进行编译:

swig -c++ -python polyiou.i
python setup.py build_ext --inplace

数据准备

detpath = r'/home/zhangxiao/DOTA_devkit-master/map_test/predict_rusult/Task1_ship.txt'  # Path to detectionsdetpath.format(classname) should produce the detection results file.
annopath = r'/home/zhangxiao/DOTA_devkit-master/map_test/gt/SSDD_orient_annotation/{:s}.txt'  # change the directory to the path of val/labelTxt, if you want to do evaluation on the valset
imagesetfile = r'/home/zhangxiao/DOTA_devkit-master/map_test/test_img_name.txt'

注意:文件夹需要修改的部分要特别注意:只要改前面文件夹的部分,后面/{:S}.txt或者/Task1_{:S}.txt不用动。
1、detpath:mmrotate模型推理得到的结果文件的路径,运行test.py后由指令:

--eval-options submission_dir=runs/work_dirs/Task1_results
python ./tools/test.py configs/s2anet/s2anet_r50_fpn_fp16_1x_dota_le135.py tools/output_0/latest.pth --format-only --eval-options submission_dir=runs/work_dirs/Task1_results

输出的每个类别的结果文件如下:
每个类有一个txt文件,在txt文件内,一行对应一个目标,第一个参数是图片名称,第二个是置信度,后面八个是旋转框四个点坐标。
注意:所有的置信度都会被列出来,在评估的时候,P-R曲线是置信度由大到小计算的。另外,可以通过ovthresh设置预测框和标签iou的阈值,在上面提到的评估脚本里,很容易找到,这个值越大,说明需要越大的iou才能被列为TP。
20201021173305680.JPG
2、annopath:测试集标注文件的路径,包含每张图片的txt格式的标注文件,注意:标注文件名称必须与图片名称相同,且不能是数据集裁剪后的图片,具体解释见3、imagesetfile;
前两行是遥感数据的名称,不用管,可以去掉;
第三行shelvehicle是标注框的类别,0表示是否是困难样本标志;
20201021164113977.JPG
名词解释:
imagesource:图像数据来源;
gsd:地面采样距离(一个图像像素的物理尺寸,单位为m),缺少该注释则为null;
poly:四边形边框的四点坐标,其中(x1,y1)用于表示OBB的顶点起点的位置,四个顶点按照顺时针进行排列(顶点顺序对于部分需要检测目标具体方位的场景非常重要)。如下图所示是OBB label的可视化形式,黄点代表四边形边框的起点,它指的是**(a)飞机的左上角、(b)扇形棒球区域的中心、(c)**大型车辆的左上角;
image.png
category:目标所属类别;
diffcult:该目标实例的检测难度,1为高,0为低。

3、imagesetfile:测试集图片名称的路径,通过data_tools下的name2list.py文件提取图像名称,存入test_image_list.txt;(图中为namefile.txt)
是一个txt,列出了所有图片的名称,一行一个,没有后缀。
注意:数据集裁剪后的图片名称不能用,因为发生了变化,如下图:
654b75fd6a394aea896ec2b910006ebe.png不不能用这种,必须用为裁剪之前的数据集图片名称,如下图:

因此,测试集图片和标注都要用裁剪之前的,除非名称不会发生变化。

输出展示

4ce6d25c267d4d93945b33b8f9e73eaf.png
参考链接:
https://blog.csdn.net/qq_42948594/article/details/124681405
https://blog.csdn.net/qq_36563273/article/details/109205798

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐