写点什么

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

用户头像
cv君
关注
发布于: 2021 年 03 月 22 日
手把手教学基于深度学习的遥感影像倾斜框算法训练与分析

以 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 $PATHROOT/libs/boxutils/cython_utils

python setup.py build_ext --inplace (or make)


cd $PATHROOT/libs/boxutils/

python setup.py build_ext --inplace


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


修改一下相对路径和配置


(1) Modify parameters (such as CLASSNUM, DATASETNAME, VERSION, etc.) in $PATH_ROOT/libs/configs/cfgs.py

(2) Add category information in $PATHROOT/libs/labelname_dict/label_dict.py

(3) Add dataname to $PATHROOT/data/io/readtfrecordmulti_gpu.py


第一句话说,修改 cfg.py 中的类别数目,netname 改成你的 resnetv1_101


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


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


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


GPU_GROUP = "0"

NUM_GPU = 0


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


elif cfgs.DATASET_NAME.startswith('DOTA'):

NAMELABELMAP = {

'0': 0,

'1': 1,

'2': 2,

'3': 3,

'4': 4,

'5': 5

}


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


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

制作数据


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


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


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


rawdata = r'D:\Rocket Army\RocketFour\R3Det_Tensorflow-master\data\yangxue\dataset\DOTA\trainval/'

rawimagesdir = os.path.join(raw_data, 'images', 'images')

rawlabeldir = os.path.join(raw_data, 'labelTxt', 'labelTxt')


savedir = r'D:\Rocket Army\RocketFour\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 下的文件路径与源码一致,可能还有验证集和测试集。



cd $PATH_ROOT/data/io/DOTA

python data_crop.py


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


cd $PATH_ROOT/data/io/

python convertdatato_tfrecord.py


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


tf.app.flags.DEFINEstring('VOCdir', 'D:\Rocket Army\RocketFour\R3DetTensorflow-master\data/yangxue/dataset/DOTA/DOTA1.0/trainval', 'Voc dir')

tf.app.flags.DEFINEstring('xmldir', 'labeltxt', 'xml dir')

tf.app.flags.DEFINEstring('imagedir', 'images', 'image dir')

tf.app.flags.DEFINEstring('savename', 'train', 'save name')

tf.app.flags.DEFINEstring('savedir', '../tfrecord/', 'save name')

tf.app.flags.DEFINEstring('imgformat', '.png', 'format of image')

tf.app.flags.DEFINE_string('dataset', 'DOTA', 'dataset')


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


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

开始训练


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


, globalstepnp = sess.run([trainop, globalstep])


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

检测


cd $PATH_ROOT/tools

python testdotar3detms.py --testdir='/PATH/TO/IMAGES/'

--gpus=0,1,2,3,4,5,6,7

-ms (multi-scale testing, optional)

-s (visualization, optional)


以 DOTA 数据为演示:


原图:仔细看左上角





发布于: 2021 年 03 月 22 日阅读数: 14
用户头像

cv君

关注

还未添加个人签名 2021.03.22 加入

还未添加个人简介

评论

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