• 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

    ---------------- 坚持每天学习一点点
  • 相关阅读:
    html上传图片后,在页面显示上传的图片
    arcgis 将日期字段赋值为当前日期
    一些使用文件夹重定向的系统中,运行ArcToolbox中的GP工具报IE脚本错误
    Gps中的 gpx文件和excel文件互相转换方法
    ARCMAP 本文将描述如何利用识别工具显示一幅与要素相关的图片。
    arcgis 正确显示标注的大小写
    在一些系统中,运行ArcToolbox中的任何GP工具报Microsoft脚本错误,并且工具对话框显示为空白
    arcgis Howto: 用空格作为分隔符提取字符串中的字符并赋值到另一个新字段
    使用.Net开发ArcGIS9扩展组件的注册到ArcMAP中
    arcgis 利用DEM寻找最小阻力路径 来自http://support.esrichinabj.cn/2008/0325/1189.html
  • 原文地址:https://www.cnblogs.com/tccbj/p/10628938.html
Copyright © 2020-2023  润新知