DeeplabV3+ 训练自己的遥感数据
一、预处理数据部分
1、创建 tfrecord(修改 deeplab\ dateasets\ build_data.py)
模型本身是把一张张 jpg 和 png 格式图片读到一个 Example 里,写入 tfrecord。但我是一个大的 tif 文件,需要把几万像素的图片分割成小块写入到一个 tfrecord 文件里,而 tf 没有对 tif 格式的图片的解码,因此不能直接使用原来的 build_data.py。
先用 osgeo 里的 gdal 读取 tif 文件,得到大 tif 的 np.array,再设置步长一块块读取,调用 tobytes() 转成二进制字符串,保存到 tfrecord 中,不过需要把图片 shape 都设置好,大小还有维度,这点有待改进。
最后的 tfrecord 里就只有两个数组:原图片和标签值
加入高度和宽度信息后会报错,不知道怎么 debug,只能从头到尾固定好大小 321 了
2、data_generator读数据(修改 deeplab\ dateasets\ data_generator.py)
加入自己的数据集,只需模仿它已经创建的数据就好,训练验证测试大小,以及忽略值等
解码时用 tf.decode_raw() 解码,不用再根据后缀判断调用哪个。
二、训练部分
1、训练(修改 deeplab\ train.py)
参数设置里需要指定自己的数据集 dataset
由于类别数不同,设置 initialize_last_layer=False,last_layers_contain_logits_only=True
crop_size缩小为321(由于内存不够,将其改小,但是crop_size至少要大于300,遵循的公式是(crop_size-1)/4为整数)
2、修改 deeplab\ utils\ train_utils.py
159 行改成 exclude_list = ['global_step','logits'],即把 logits 层加到不恢复的列表中,这样才能训练自己的数据,改类别数
训练的一些问题可以参考:https://github.com/tensorflow/models/issues/3730
logits
is the last feature maps before softmax. logits 层是在 softmax 前的最后一层特征图,是没有经过归一化的预测值,如果面对分类问题再经过一层 softmax 就可以得到每类的概率
Maybe this can help you.
The vector of raw (non-normalized) predictions that a classification model generates, which is ordinarily then passed to a normalization function. If the model is solving a multi-class classification problem, logits typically become an input to the softmax function. The softmax function then generates a vector of (normalized) probabilities with one value for each possible class.
三、验证部分
1、验证(修改 deeplab\ eval.py)
eval.py 不会出现 miou 分数,在 summary 里加入一个 tf.Print 的 op,就可以显示了
四、可视化部分
1、可视化(修改 deeplab\ vis.py)
由于没有每个文件的文件名,需要把 vis.py 里有关文件名的地方做相应的修改,sample.HEIGHT,WIDTH 也没有要注释掉。_process_batch 的参数对应修改
需要在 get_dataset_colormap.py 中加入自己的数据集
2、可视化标签(再修改 deeplab\ vis.py)
原来的 vis 只可视化了图片和预测值,为了方便比较,把真值也显示,把 tfrecord 里的真值读出来就可以
3、可视化预测图像(修改 deeplab\ utils\ get_dataset_colormap.py)
加入自己的数据集,根据类别设置颜色个数
可视化真值时报错 label[255] 超出索引,把忽略值直接赋值为0解决
五、预测部分
1、修改deeplab\ datasets\ build_data_test.py
预测数据没有真值,需要重写一个 build_data
2、修改 deeplab\ input_preprocess.py
预测时 label 为 None,但原始影像还是要裁剪,去适配我的 data_generator,原始的不需要因为大小信息都在 tfrecord 里,会自动处理,我指定了大小
3、修改 deeplab\ datasets\ data_generator_test.py
不解析 label
参考:https://blog.csdn.net/weixin_38385446/article/details/82781109
DeeplabV3+ 训练自己的遥感数据的更多相关文章
- 通过整合遥感数据和社交媒体数据来进行城市土地利用的分类( Classifying urban land use by integrating remote sensing and social media data)DOI: 10.1080/13658816.2017.1324976 20.0204
Classifying urban land use by integrating remote sensing and social media data Xiaoping Liu, Jialv ...
- Aster及其它遥感数据下载地址
免费下载TM,ETM的网址,速度还行,本人下载过, http://glcfapp.umiacs.umd.edu 还有一个是下载其他数据的,也可以去看看免费下载·遥感数据http://daac.gsfc ...
- caffe简易上手指南(二)—— 训练我们自己的数据
训练我们自己的数据 本篇继续之前的教程,下面我们尝试使用别人定义好的网络,来训练我们自己的网络. 1.准备数据 首先很重要的一点,我们需要准备若干种不同类型的图片进行分类.这里我选择从ImageNet ...
- 利用 keras_proprecessing.image 扩增自己的遥感数据(多波段)
1.keras 自带的 keras_proprecessing.image 只支持三种模式图片(color_mode in ['grey', 'RGB', 'RGBA'])的随机扩增. 2.遥感数据除 ...
- 实践详细篇-Windows下使用Caffe训练自己的Caffemodel数据集并进行图像分类
三:使用Caffe训练Caffemodel并进行图像分类 上一篇记录的是如何使用别人训练好的MNIST数据做训练测试.上手操作一边后大致了解了配置文件属性.这一篇记录如何使用自己准备的图片素材做图像分 ...
- python+caffe训练自己的图片数据流程
1. 准备自己的图片数据 选用部分的Caltech数据库作为训练和测试样本.Caltech是加州理工学院的图像数据库,包含Caltech101和Caltech256两个数据集.该数据集是由Fei-Fe ...
- 美国NOAA/AVHRR遥感数据
1.美国国家海洋和大气管理局(National Oceanic and Atmospheric Administration,NOAA) 美国国家海洋和大气管理局隶属于美国商业部下属的科技部门,主要关 ...
- 使用deeplabv3+训练自己数据集(迁移学习)
概述 在前边一篇文章,我们讲了如何复现论文代码,使用pascal voc 2012数据集进行训练和验证,具体内容可以参考<deeplab v3+在pascal_voc 2012数据集上进行训练& ...
- Caffe初试(三)使用caffe的cifar10网络模型训练自己的图片数据
由于我涉及一个车牌识别系统的项目,计划使用深度学习库caffe对车牌字符进行识别.刚开始接触caffe,打算先将示例中的每个网络模型都拿出来用用,当然这样暴力的使用是不会有好结果的- -||| ,所以 ...
随机推荐
- 【c#】RabbitMQ学习文档(六)RPC(远程调用)
远程过程调用(Remote Proceddure call[RPC]) (本实例都是使用的Net的客户端,使用C#编写) 在第二个教程中,我们学习了如何使用工作队列在多个工作实例之间分配耗时的任务. ...
- 【Java基础】【07面向对象-构造方法&静态static】
07.01_面向对象(构造方法Constructor概述和格式)(掌握) A:构造方法概述和作用 给对象的数据(属性)进行初始化 B:构造方法格式特点 a:方法名与类名相同(大小也要与类名一致) b: ...
- github访问很慢解决方案
首先要解决的就是这个访问速度的问题: 获取Github相关网站的ip 访问https://www.ipaddress.com,拉下来,找到页面中下方的“IP Address Tools – Quick ...
- leetcode — binary-tree-level-order-traversal
import org.lep.leetcode.binarytreeinordertraversal.BinaryTreeInOrderTraversal; import java.util.Arra ...
- 补习系列(2)-springboot mime类型处理
目标 了解http常见的mime类型定义: 如何使用springboot 处理json请求及响应: 如何使用springboot 处理 xml请求及响应: http参数的获取及文件上传下载: 如何获得 ...
- 批处理启动vm虚拟机服务 vm12启动无界面启动vm虚拟机系统 windows上如何操作服务 sc net启动关闭服务
windows(win10)批处理脚本 打开vm虚拟机的服务,并且开启无界面虚拟机 @echo off net start "vds" net start "VMAuth ...
- shell编程练习(二): 笔试11-20
笔试练习(二): 11.写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录. [root@VM_0_5_centos test]# vi 11.sh [root@VM_0_5_cento ...
- Smobiler 4.0 正式发布
l Smobiler4.0提供了三大技术亮点:第三方插件.JS.自定义控件等: 强大的插件移动应用引擎 Smobiler支持分插件打包功能和插件扩展机制,让应用开发更加灵活. 分插件打包是指Smo ...
- 【苹果通知APNs】不知道大家用过PushSharp没?
好久没写东西了,近期在研究Jenkins,大家有兴趣可以一起来玩玩交流,学习DevOps还是蛮重要. 近期我负责的项目里需要APNs的通知,这个自己单独开发还是蛮费功夫,故用了第三方开源的PushSh ...
- CentOS 7下用firewall-cmd
一 .控制端口/服务 可以通过两种方式控制端口的开放,一种是指定端口号另一种是指定服务名.虽然开放http服务就是开放了80端口,但是还是不能通过端口号来关闭,也就是说通过指定服务名开放的就要通过指定 ...