R2CNN_Faster-RCNN_Tensorflow数据准备详解:DOTA数据集裁剪与TFRecord转换全流程教程

发布时间:2026/8/22 15:30:37
R2CNN_Faster-RCNN_Tensorflow数据准备详解:DOTA数据集裁剪与TFRecord转换全流程教程 R2CNN_Faster-RCNN_Tensorflow数据准备详解DOTA数据集裁剪与TFRecord转换全流程教程【免费下载链接】R2CNN_Faster-RCNN_TensorflowDetectionTeamUCAS/R2CNN_Faster-RCNN_Tensorflow: 是一个基于TensorFlow实现的Faster R-CNN变体适用于遥感图像处理。适合用于需要针对遥感图像进行目标检测的项目。特点是可以提供针对遥感图像优化的模型结构和训练流程。项目地址: https://gitcode.com/gh_mirrors/r2/R2CNN_Faster-RCNN_TensorflowR2CNN_Faster-RCNN_Tensorflow 是一个基于 TensorFlow 实现的 Faster R-CNN 变体目标检测项目专为遥感图像处理优化支持任意方向目标检测。本文带你完整走通它的数据准备流程从 DOTA 遥感数据集裁剪、VOC 格式整理到 TFRecord 数据集转换让你快速准备好训练所需的自定义数据 为什么遥感数据准备和普通目标检测不一样遥感图像如卫星图、航拍图有两个典型特点分辨率极高一张图可能有 2000×2000 甚至更大远超模型的输入尺寸目标方向任意飞机、车辆、船只可能朝任意角度出现需要用旋转框Rotated Box标注。因此DOTA 数据集的裁剪与转换是训练前最关键的环节。R2CNN_Faster-RCNN_Tensorflow 项目把整套流程封装在data/io/目录下核心文件如下文件作用data/io/DOTA/train_crop.py裁剪 DOTA 训练集大图生成 800×800 小图与对应标注data/io/DOTA/val_crop.py裁剪 DOTA 验证集逻辑与训练集一致data/io/convert_data_to_tfrecord.py将 VOC 格式数据打包成 TFRecord 文件data/io/read_tfrecord.py训练时读取 TFRecord 并做数据增广整个数据准备流程可以概括为一条流水线DOTA 原始数据png 大图 labelTxt │ ① train_crop.py / val_crop.py 裁剪 ▼ 裁剪后的小图images 旋转框标注labeltxt XML │ ② 整理为 VOCdevkit 目录结构 ▼ Annotation/ JPEGImages/ 标准目录 │ ③ convert_data_to_tfrecord.py 打包 ▼ DOTA_train.tfrecord / DOTA_val.tfrecord → 送入 train.py 训练第一步获取项目与环境准备在项目目录执行以下命令克隆代码git clone https://gitcode.com/gh_mirrors/r2/R2CNN_Faster-RCNN_Tensorflow根据项目说明运行环境要求TensorFlow ≥ 1.2注意这是 TF1.x 时代的代码CUDA 8.0Python 2.7推荐 Anaconda2OpenCV同时需要下载 ResNet 预训练权重放入data/pretrained_weights/目录详见data/pretrained_weights/README.md这一步与数据准备并列是启动训练前的必备条件。第二步DOTA 数据集裁剪详解2.1 输入数据要求裁剪脚本读取的是 DOTA 原始数据的目录结构dataset/DOTA/ ├── train/ │ ├── images/ # 原始大图.png │ └── labelTxt/ # 对应的文本标注.txt └── val/ ├── images/ └── labelTxt/labelTxt 中标注的是旋转框的四个角点坐标加类别名例如x1 y1 x2 y2 x3 y3 x4 y4 类别 难度。DOTA 数据集共包含 15 类遥感目标train_crop.py中的class_list定义了类别顺序涵盖飞机plane、直升机helicopter、船舶ship、小汽车/大卡车small-vehicle / large-vehicle、桥梁bridge、机场停机坪、运动场地、港口harbor、蓄水池storage-tank、游泳池swimming-pool等典型遥感地物。2.2 裁剪逻辑800×800 滑窗train_crop.py的核心是clip_image函数它的策略非常清晰滑窗切割以 800×800 为窗口按 256 像素步长横向纵向滑动把大图切成若干小块坐标平移每个目标的四个角点减去裁剪窗口的左上角偏移得到小图内的局部坐标中心点判定只保留旋转框中心落在当前窗口内的目标避免同一目标在多张切片中重复训练成对保存只有当窗口内存在目标时才保存原图名_行_列.png图片和同名.xml标注文件存于labeltxt/目录。裁剪结果输出到save_dir脚本中默认为/dataset/DOTA_clip/train/可按自己的磁盘位置修改结构如下DOTA_clip/train/ ├── images/ # 800×800 裁剪小图 └── labeltxt/ # 每张图对应的旋转框 XML 标注 小提示train_crop.py与val_crop.py代码几乎一致区别在于读取的源目录train/val和滑窗步长训练集步长 256验证集步长 512。运行前记得把脚本顶部的raw_data和save_dir改成你的实际路径。运行命令cd $PATH_ROOT/data/io/DOTA python train_crop.py python val_crop.py第三步整理成 VOCdevkit 标准目录裁剪完成后需要把数据整理成项目约定的目录格式参考项目 README 中的 Data Prepare 一节├── VOCdevkit │ ├── VOCdevkit_train │ │ ├── Annotation/ # 所有 .xml 标注文件 │ │ └── JPEGImages/ # 所有裁剪图片 │ └── VOCdevkit_val │ ├── Annotation/ │ └── └── JPEGImages/注意两点XML 标注文件名必须与图片名一一对应后缀不同如P1524_0256_0000.xml对应P1524_0256_0000.png图片扩展名不一定是.jpgDOTA 裁剪结果是.png后面转换时需要用--img_format参数指明。第四步TFRecord 转换全流程4.1 转换原理convert_data_to_tfrecord.py会遍历所有 XML 文件读取每个目标的旋转框坐标和类别标签连同图片二进制数据一起打包成 TFRecord。每条记录包含 6 个字段字段类型说明img_namebytes图片文件名img_height/img_widthint64图片尺寸imgbytes图片原始像素cv2 读取的 BGR 格式gtboxes_and_labelbytes形状为 [N, 9] 的数组每行[x1,y1,x2,y2,x3,y3,x4,y4,label]num_objectsint64目标数量训练时read_tfrecord.py会以镜像方式解码这些字段并做短边缩放到 800IMG_SHORT_SIDE_LEN和随机左右翻转增广。4.2 关键参数说明运行命令示例以 DOTA 训练集为例cd $PATH_ROOT/data/io python convert_data_to_tfrecord.py --VOC_dir/PATH/TO/VOCdevkit/VOCdevkit_train/ --xml_dirAnnotation --image_dirJPEGImages --save_nametrain --img_format.png --datasetDOTA参数含义常用值--VOC_dirVOCdevkit 根目录你的数据根路径--xml_dir标注子目录名Annotation--image_dir图片子目录名JPEGImages--save_name输出文件名的一部分train/val--img_format图片扩展名.png/.jpg--dataset数据集名称DOTA需在读取脚本支持列表中转换完成后会在data/tfrecord/下生成DOTA_train.tfrecord和DOTA_val.tfrecord文件训练时通过tools/train.py自动读取。第五步换成自己的数据集要改什么如果不用 DOTA 而用自定义遥感数据除了完成同样的裁剪 → VOC 整理 → TFRecord流程外还需修改 3 处配置项目 README Train 一节有说明libs/configs/cfgs.py修改CLASS_NUM、DATASET_NAME、VERSION等参数可参考libs/configs/cfgs_DOTA_v3.pylibs/label_name_dict/label_dict.py添加你的类别名到标签编号的映射NAME_LABEL_MAP0 号固定为背景back_grounddata/io/read_tfrecord.py在第 75 行的数据集名称列表中加入你的data_name否则训练会抛出ValueError。⚠️ 注意DOTA 数据集 15 个类别在label_dict.py中的编号顺序与train_crop.py中class_list的顺序并不一致两者以各自文件为准。如果你的自定义标注是裁剪脚本生成的 XML只需保证 XML 中的类别名能映射到NAME_LABEL_MAP即可。常见问题排查img is not exist!提示XML 文件名与图片名不匹配检查--img_format是否与实际扩展名一致warning found a new label报错labelTxt 中出现了class_list之外的类别名需先扩充类别列表TFRecord 生成后训练报数据集错误确认--dataset名称已加入read_tfrecord.py的支持列表且输出文件在data/tfrecord/目录下图片通道问题项目数据处理中读写模块使用的色彩通道方式不同详见data/io/DOTA/README.md的说明作者提供的权重是在翻转通道后训练的测试时请注意输入格式保持一致。总结R2CNN_Faster-RCNN_Tensorflow 的数据准备流程可以归纳为四步✅裁剪用data/io/DOTA/train_crop.py/val_crop.py把 DOTA 大图切成 800×800 小图保留中心点落在窗口内的旋转框目标✅整理按Annotation/JPEGImages/的 VOCdevkit 结构组织文件✅转换用data/io/convert_data_to_tfrecord.py一键打包成 TFRecord✅配置自定义数据集时修改cfgs.py、label_dict.py和read_tfrecord.py三处。按照这套流程你就能为遥感目标检测训练准备好格式正确、标注完整的数据集顺利跑通 R2CNN_Faster-RCNN_Tensorflow 的训练、推理与评估 【免费下载链接】R2CNN_Faster-RCNN_TensorflowDetectionTeamUCAS/R2CNN_Faster-RCNN_Tensorflow: 是一个基于TensorFlow实现的Faster R-CNN变体适用于遥感图像处理。适合用于需要针对遥感图像进行目标检测的项目。特点是可以提供针对遥感图像优化的模型结构和训练流程。项目地址: https://gitcode.com/gh_mirrors/r2/R2CNN_Faster-RCNN_Tensorflow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考