当FAIR1M遇上PaddleDetection 2.0

时间:2025-08-08 16:54:51

本文展示了将FAIR数据集与PaddleDetection 合的实践过程。首先,我们从FAIR的数据集中解压数据,并移除测试图像以简化处理;然后,安装了PaddleDetection及相关工具包,并导入了旋转框算子,选择了SNet模型进行训练。配置yml文件后,开始了训练过程。然而,在训练过程中出现了警告和预测角度偏差的问题,需要进一步修复这些问题。

当FAIR1M遇上PaddleDetection 2.0

FAIR 本包含超过分辨率优于、从上千到上万像素不等的图像,其中包含了万精细标注且覆盖了各种角度实例。场景覆盖全球上百个典型城市、乡镇以及常用机场和港口等。FAIR数据集特别针对遥感应用的实际需求进行类型细分。例如,飞机被细分为波音式(包括)和空客式(包括),以及国产式飞机(如CARJ。目前发布的FAIR 本包含了精细划分的类别。此数据集得到了国家高分辨率对地观测系统重大科技专项的支持,并于被选为ISPRS科学创新项目的一部分,成为该协会高分辨率卫星图像目标识别研究的公开标准数据集。

数据地址:http://gaofen-challenge.com/

飞桨目标检测开发套件PaddleDetection,旨在助力开发者在短时间内完成从数据预处理到部署的全过程。它通过模块化设计实现多种主流目标检测算法,提供了丰富的数据增强策略、网络组件和损失函数等,并集成了模型压缩和跨平台高性能部署功能。最新推出的本新增了倾斜框检测能力,优化了PPYOLO并推出了Anchor Free SOTA模型PAFNet。这使得PaddleDetection成为开发者提升效率的有力工具。

github:https://github.com/PaddlePaddle/PaddleDetection

gitee:https://gitee.com/paddlepaddle/PaddleDetection

0. 数据处理

0.1 解压数据集

将解压的数据集移动到另一个位置以方便管理文件是常见的做法。目前访问的FAIR只包含部分张图片,我仔细查找后发现只有四张图像尚未使用,因此决定不将其纳入训练数据。这是为了确保实验结果的准确性并进行有效的测试和验证。

! unzip -oq /home/aistudio/data/data77871/FAIR1M.zip! mkdir -p datasets ! mv train/part1/images datasets ! mv train/part1/labelXmls datasets ! rm -rf train登录后复制 In []

# 移除用来测试的4张import os img_path = 'datasets/images'xml_path = 'datasets/labelXmls'names = ['1054.tif', '1066.tif', '1131.tif', '1442.tif']for name in names: _img = os.path.join(img_path, name) _xml = os.path.join(xml_path, name.replace('.tif', '.xml')) if os.path.exists(_img): os.remove(_img) if os.path.exists(_xml): os.remove(_xml)print('ok')登录后复制

0.2 转换为COCO数据集

由于这个数据集不是标准的VOC格式,因此PaddleDetection的旋转框需要转为COCO格式的数据集。平时对这种类型的任务不太熟悉,所以卡了一下。后来想到一个曲线救国的方法,就是DOTA数据提供了转为COCO的代码,而我们的数据集和DOTA的内容有些像(虽然格式啥的完全不一样)。于是我写了一个fairota脚本,先把数据集转为DOTA的数据,然后修改DOTAOCO得到我们需要的COCO数据格式。在这个过程中,我将实例按照四边形标注转换为[xc, yc, bow_w, bow_h, angle]的格式。

! pip -q install shapely# 转化为cocofrom fair1m2coco import func2 func2('datasets', 'datasets/train.json')登录后复制

1. 安装所需

由于旋转框需要额外的算子,所以这里需要安装旋转框的额外算子。 In []

# 克隆paddleDetection# ! git clone https://gitee.com/PaddlePaddle/PaddleDetection.git%cd PaddleDetection# 安装所需要的包! python setup.py install# 安装检测框所需要的算子%cd /home/aistudio/PaddleDetection/ppdet/ext_op ! python setup.py install# ! python test.py # 测试算子登录后复制

2. S2ANet

当前官方所应用的模型是基于SNet的架构设计,尽管论文中详细介绍了其理论基础和应用场景,但实际操作中的理解并不深入。在图像识别领域,我对这一技术的掌握程度有限,因此不打算提供过多的技术细节分析。

3. 开始训练

完成配置文件并开始运行在`configs`目录下新建一个自己任务的YML文件。参考DotaYML文件,确保设置了正确的数据路径、轮数等参数,然后可以开始训练。 snet_fair.yml: 这是基本的YML配置文件。 snet_reader.yml: 在base目录下,保持默认设置,因为这里的Batchsize大于报错。继续修复中,暂不作改动。 snet.yml: 也位于base目录下,只设置了网络权重和类别数量的参数,这些信息不太清楚也没怎么改变。 snet_optimizer_.yml: 这是学习率与轮数等配置设置的位置。在上一级`runtime.yml`中,可以设置保存间隔和路径等相关参数。最后,在`datasets`子目录下设置Dota的数据路径,并确保test的anno_path对应训练的json文件,否则会使用COCO默认标签。这些步骤完成后,就可以开始你的训练了。

然后根据大佬的说法,使用eval会引发错误,因此未进行验证,并通过损失值监控训练进度。

%cd /home/aistudio ! mkdir -p /home/aistudio/log %cd PaddleDetection ! python tools/train.py -c configs/dota/s2anet_fair1m.yml -o use_gpu=true --use_vdl=True --vdl_log_dir=/home/aistudio/log登录后复制

有很多这样的警告,我感到莫名其妙,明明都跑起来了,还说框有问题。

ppdet.data.source.coco WARNING: Found an invalid bbox in annotations: im_id: 1318, area: 0.0 x1: -0.5, y1: 96.5, x2: 0.5, y2: 97.5.登录后复制

训练结果如下:

ppdet.engine INFO: Epoch: [29] [1700/1728] learning_rate: 0.000001 fam_cls_loss: 0.082565 fam_reg_loss: 0.036638 odm_cls_loss: 0.090113 odm_reg_loss: 0.111688 loss: 0.352884 eta: 0:00:06 batch_cost: 0.2364 data_cost: 0.0001 ips: 4.2298 images/s登录后复制

4. 图像预测

然而,由于预测的图像并非.tiff格式,因此只能将.jpg文件置于test_img目录中进行预测,并保存结果在output文件夹内。

%cd /home/aistudio/PaddleDetection ! python tools/infer.py -c configs/dota/s2anet_fair1m.yml \ -o weights=output/s2anet_fair1m/model_last.pdparams \ --infer_dir=test_img \ --draw_threshold=0.5 \ --output_dir=output登录后复制

观看以下示例效果,此图过大难以直接查看,请在输出文件夹处获取原始图像。

import matplotlib.pyplot as pltimport cv2 %matplotlib inline names = ['1054.jpg', '1066.jpg', '1131.jpg', '1442.jpg'] plt.figure(figsize=(20,20))for i, name in enumerate(names): img_path = '/home/aistudio/PaddleDetection/output/' + name img = cv2.cvtColor(cv2.imread(img_path), cv2.COLOR_BGR2RGB) plt.subplot(2, 2, (i + 1));plt.imshow(img) plt.show()登录后复制

<Figure size 1440x1440 with 4 Axes>登录后复制

总结说明

总的来说效果还可以,总算转起来了!但是旋转的角度感觉有点偏差,可能是在转换过程中精度有所损失。目前PaddleDetection中的一些旋转框问题正在修正中,预计会越来越好用。关于警告数据集的问题,实在搞不懂,请教JavaRoom的大佬们,如果有知道的朋友欢迎在评论区指导一下。由于发布新版本时PPDet超过了文件,所以把其中的docs、demo、静态的contrib和静态的configs都删除了。

以上就是当FAIR1M遇上PaddleDetection 2.0的详细内容,更多请关注其它相关文章!

相关下载

相关资讯

猜你喜欢

最新资讯

相关合集