Skip to content

Spatial and Spectral joined classification for hyperspectra image

Notifications You must be signed in to change notification settings

ConleyKong/ssh_hsi

Repository files navigation

#TODO  二维化的方式可以考虑一下其他尺寸,是固定宽度为4xC1好还是固定为20好,分别用不同的卷积核进行测试
#TODO  如何提取像元的位置信息用于辅助判断 ==》 使用近邻信息来扩充输入数据
#TODO  尝试测试四近邻情况下的精确度,此时就涉及到数据的分布方式甚至是权重问题:
        为数据处理增加近邻策略,近邻策略其实是在扩充数据的输入的信息量
        多种数据组织方式:
        1.将每个方位的信息视为一个通道,分别表示了一个通道的信息  ☑
            中中中
            上上上
            左左左
            右右右
            下下下

        2.拉成一个向量后再平铺成一个二维平面
            上左中右下 上左中右下  上左中右下
#TODO   更换二维化的位置,首先使用N个1x1的卷积核对原始波段信息进行卷积,由于是1维卷积,可以使用这一操作来丰富原始频段信息,
        从而得到N个对于brand_length的特征,然后将这N个特征向量简单拼接成一个Nxbrand_length的二维“图像”,接下来对这个“图像”进行通用的卷积操作
#TODO   @DatasetKits 为数据预处理增加留一交叉验证接口,整体数据10等分,留取某一部分作为测试集,若能取十个不同的数据部分作为测试集则能够有效说明模型的效果

5.0:
    去除统计功能,只保留必要的磁盘写入操作,增加时间记录功能
    数据换用1%,10%,20%进行对比
    数据增加四近邻、八近邻进行对比,精确度取50轮的均值
    -----------对比参照--------------
    数据集 训练集比例  单像元  四近邻    八近邻
            1%      81.92   84.61   85.03
     KSC    10%     91.03   93.20   94.50
            20%     93.68   95.48   96.78
    结果分析:
        10%训练集在学习率为0.0029时的识别精确度能达到90.22%==》本程序对于ksc样本量为10%的数据表现不错


4.2:
    二维化方式固定为20xN的形式,然后测试10种不同卷积核下的精确度
            1)3x3,3x3,3x3
            2)3x2,3x2,3x2
            3)2x3,2x3,2x3
            4)2x2,2x2,2x2
            5)3x2,2x3,3x2
            6) 2x3,3x3,2x3
            7)3x3,2x2,1x1
            8) 1x1,2x2,3x3
            9)3x3,1x1,3x3
            10)3x3,2x2,3x3
    在3x3,3x3,3x3,学习率为0.0012时准确率为97.78
4.1:
    为inference函数增加卷积核尺寸参数,从外部传入各层卷积核尺寸,从而可以测试不同卷积核配置下的精确度变化
    测试滤波核为3x3,3x3,3x3下的精确度,发现学习率为0.0009时达到相当好的学习率96.9142%,但是最优精确率在学习率为0.0016时取得,高达97.107%

4.0:
    引入冰哥处理的数据格式,他已经将数据按类别进行了划分,我们只需要在其上做一些修改就可以
    引入的数据格式为mat,其中将数据按8:2分为了训练集和测试集,训练集个数为4174,测试集个数为1037,其中数据为DataTr(4174x176),DataTe(1037x176);标签为CIdTr(1x4174),CIdTe(1x1037);位置信息在PositionsTr(char,4174,x|y|label),PositionsTe(char,1037,x|y|label)
    使用以上数据的划分后精确度提升明显,在学习率为0.0016时单像元精确度能达到96.8177%

3.2:
    尝试继续修改卷积核尺寸,将第三层卷积核修改为2x2,学习率在0.0012时为93.4866%,与末层是3x2的卷积核的结果不尽相同
    发现测试结果的偶发性太大,因此修改测试数据与训练数据的比例为2:8,也就是增加了测试数据所占的比例,从而尽量减少数据的随机性带来的测量误差
    结论:
        有一个大胆的想法:是不是卷积核不规则时对预测的准确度有影响?
        首先确保当前模型下最优学习率是多少,以相同的数据集划分方法进行不同学习率下精确度的对比,选出最优学习率
        然后在不同卷积核下使用最优学习率分别运行20组独立的数据划分下的精确度测试实验,分别求平均值
        接下来的实验想要验证这一观点,分别使用5组不同的卷积核搭配进行多次实验,计算预测误差,学习率使用统一的0.0012
        1)3x3,3x3,3x3
        2)3x2,3x2,3x2
        3)2x3,2x3,2x3
        4)2x2,2x2,2x2
        5)3x2,2x3,3x2
        6) 2x3,3x3,2x3
        7)3x3,2x2,1x1
        8) 1x1,2x2,3x3
        9)3x3,1x1,3x3
        10)3x3,2x2,3x3

3.1:
    修改卷积层的特征映射的深度为32,128
    在学习率为0.0009和0.0012时分别达到最优精度93.6782%(ps。与数据的选取有关系,可能此次随机数据的测试集比较简单)
	不过有的时候的确是能给出相当棒的答案,比如第二次测试0.0012的时候甚至给出了94.636%的准确率答案

3.0:
    修改图片二维化方式,观察不同地形的频段数据分布看,很多地形的波普特征的波峰波谷都有一定规律,
    二维化方式尝试改用4xCONV1_SIZExN的方式
    存在问题:无法动态获取数据集的拓展后的长度
    结果:在0.0012时最优识别率为91.3793%


2.3.3:
    去除对于输入数据的标准化操作
    结果:
    学习率在0.0012时达到最优精度92.91%

2.3.2:
    修改第一层全连接层尺寸为512,增加一层全连接层,尺寸为120
    结果:在学习率为0.0008的时候精确度最优,也才88.8889%
    结论:
        根据2.3.1以及2.3的正确率的表现,推荐放弃标准化,标准化带来的是准确率的巨大损失

2.3.1:
	尝试替换2.3中的StandardScaler为MinMaxScalar,因为前者会有负数,后者的数据范围控制在1~100,此数可以用来后期的不同权重的控制
	结论:
	    根据2.3以及2.3.1中精确度的表现,感觉我们的全连接层的数量过小,下一版本恢复120或者变得更大一些,或者加深全连接层的层数

2.3:
    根据1.2.1中的经验,修改第一层全连接层尺寸为60
	在输入层的预处理中将数据进行标准化,使频段的数据分布在-1~1之间,均值为0,方差为1
	结果:学习率为0.0009时可以取得较高精确度,仅为86.59%
		 学习率为0.0013和0.0014的时候也可以获得类似较高精确度,但是随后精确度剧降到20%左右
		 貌似0.0015是学习率的上限
2.2:
    增加第三层卷积层,卷积核大小为3x2,深度为512
    结果:当学习率为0.0008的时候精确度能达到92.1456%,而且其周围的准确度都能稳定在91%左右,且在0.0001-0.0008的过程中精确度都在增长
    与1.2.1中0.0008时的精确度相同,但是却要比1.2.1稳定

2.1:
    改变网络卷积层结构:
    1.卷积层的过滤深度分别调整为16和128
    2.卷积层的卷积核大小分别调整为5x5与3x3
    3.修改第一层全连接层尺寸为120
    4.最后一层全连接层不再使用激活函数
    5.精简不必要的统计过程
    结果:学习率为0.0008的时候精确度能达到91.1877%

About

Spatial and Spectral joined classification for hyperspectra image

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages