手把手教学基于深度学习的遥感影像倾斜框算法训练与分析

以DOTA遥感影像数据集为例,选用R3DET算法为例子

在这里插入图片描述
在这里插入图片描述

基本修改

下载源码:github:https://github.com/Thinklab-SJTU/R3Det_Tensorflow

git clone https://github.com/Thinklab-SJTU/R3Det_Tensorflow.git

根据他的readme可以很快的运行成功例如:
先下载预训练权重,推荐下载resnet101(见readme)

然后编译源码:建议在ubuntu做,若是没有环境,那就在阿里云上走,那里可以直接做,环境搭好了,见此篇文章:https://mp.weixin.qq.com/s/8AO0QeLoSmDmD8zHyMWBZQ

cd $PATH_ROOT/libs/box_utils/cython_utils
python setup.py build_ext --inplace (or make)

cd $PATH_ROOT/libs/box_utils/
python setup.py build_ext --inplace

编译成功就开始制作数据:

修改一下相对路径和配置

(1) Modify parameters (such as CLASS_NUM, DATASET_NAME, VERSION, etc.) in $PATH_ROOT/libs/configs/cfgs.py
(2) Add category information in $PATH_ROOT/libs/label_name_dict/label_dict.py     
(3) Add data_name to $PATH_ROOT/data/io/read_tfrecord_multi_gpu.py  

第一句话说修改cfg.py 中的类别数目net_name改成你的resnet_v1_101

SAVE_WEIGHTS_INTE是保存次数,改成10000,代表跑10000次就保存参数,正常需要跑10w次以上

模型需要9GB显存,不足的可以到阿里云服务器。

把那个gpu启动改一下,改成单卡:

GPU_GROUP = "0"
NUM_GPU = 0

第二句话说修改label_dict.py就是把你的label名字改掉(他原本是DOTA的数据),如果你的数据与DOTA类似,那么可以改86那一串为:

elif cfgs.DATASET_NAME.startswith('DOTA'):
    NAME_LABEL_MAP = {
    
    
        '0': 0,
        '1': 1,
        '2': 2,
        '3': 3,
        '4': 4,
        '5': 5
    }

类别(左边)+类别号(右边)

第三句话说:read_tfrecord_multi_gpu.py 中添加名字,这里如果你与DOTA一致,就不用改。

制作数据

请注意,这是一个数据集切割代码,因为原数据尺寸过大,使用这个之前:

你的数据路径,与保存结果数据路径建议写绝对路径,前三行要能找到你的数据集,最后一行是保存路径,建议后者与我一致。220多行,将你的数据路径写好(建议写绝对路径,因为源码路径有些混);

以及将需要的tif 格式是否改成jpg,需要你决定。

raw_data = r'D:\Rocket Army\Rocket_Four\R3Det_Tensorflow-master\data\yangxue\dataset\DOTA\trainval/'
raw_images_dir = os.path.join(raw_data, 'images', 'images')
raw_label_dir = os.path.join(raw_data, 'labelTxt', 'labelTxt')

save_dir = r'D:\Rocket Army\Rocket_Four\R3Det_Tensorflow-master\data\yangxue\dataset\DOTA\DOTA1.0\trainval/'

将data/io/data_crop .py 改一下:
class_list改成你的类别例如:

class_list = ['0', '1', '2', '3', '4', '5']

另外我data下的文件路径与源码一致,可能还有验证集和测试集。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tXd8KQ1P-1602248255916)(D:\CSDN\pic\天池\pic\1602247060845.png)]

cd $PATH_ROOT/data/io/DOTA
python data_crop.py

通过你数据和xml,转换成tf_record

cd $PATH_ROOT/data/io/  
python convert_data_to_tfrecord.py 

在代码中顶部修改一下:VOCdata的绝对路径。

tf.app.flags.DEFINE_string('VOC_dir', 'D:\Rocket Army\Rocket_Four\R3Det_Tensorflow-master\data/yangxue/dataset/DOTA/DOTA1.0/trainval', 'Voc dir')
tf.app.flags.DEFINE_string('xml_dir', 'labeltxt', 'xml dir')
tf.app.flags.DEFINE_string('image_dir', 'images', 'image dir')
tf.app.flags.DEFINE_string('save_name', 'train', 'save name')
tf.app.flags.DEFINE_string('save_dir', '../tfrecord/', 'save name')
tf.app.flags.DEFINE_string('img_format', '.png', 'format of image')
tf.app.flags.DEFINE_string('dataset', 'DOTA', 'dataset')

然后会生成上百mb甚至几G的tfrecord。

你有了这个,就可以不需要jpg,xml了,数据和标签已经存在了tfrecord中。

开始训练

建议在327行加个异常处理。我偶然会训练了很久报错,不过可能是我个人原因导致的。

_, global_stepnp = sess.run([train_op, global_step])

在这异常处理,包围这一行。然后建议在终端运行,我在notebook 的IDE上显示不太好,终端完美运行。

检测

cd $PATH_ROOT/tools
python test_dota_r3det_ms.py --test_dir='/PATH/TO/IMAGES/'  
                             --gpus=0,1,2,3,4,5,6,7  
                             -ms (multi-scale testing, optional)
                             -s (visualization, optional)

以DOTA数据为演示:

原图:仔细看左上角

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_46098574/article/details/108986253