PROSAIL模型参数详解与敏感性分析

最近一直在学习PROSAIL模型的相关内容,觉得还是要做个总结。

1 PROSAIL的简单介绍

虽然但是,使用PROSAIL做敏感性分析,并不需要去了解这个模型的详细原理,因此这部分其实可以跳过。

PROSAIL是两种模型耦合得到的,I have a PROSPECT, I have a SAIL, Dah! PROSAIL! SAIL是冠层尺度的辐射传输模型,把冠层假设成是连续的且具有给定几何形状和密度的水平均匀分布的介质层,从而模拟入射辐射与均匀介质之间的相互作用,具体还是挺复杂的。而PROSPECT就是叶片尺度的辐射传输模型,把叶片假设为1到n个具有粗糙表面的吸收板,且这些吸收板被n-1层空气隔开,从而计算叶片结构的各向同性散射,当然叶片内的各种生化参数是这个模型的重要参数。PROSAIL就把两者结合起来,PROSPECT作为SAIL的基本单元,就得到了PROSAIL,能够用来计算植被的冠层光谱以及叶片各种重要的生化参数。

没有拜读过相关论文,只是看了一篇综述,具体机理肯定不是我这样两三句就能概括的。

如果是直接用PROSAIL的话有两种方法,迭代优化和查找表,查找表是物理模型的老朋友了。一般也使用PROSAIL会和机器学习模型等经验方法结合起来,做混合反演,怎么混合我也只懂一些些,不在这里误人子弟。PROSAIL衍生的一个非常重要的副产品就是敏感性分析,我理解就是改变一些重要参数的变化范围,然后观察这些参数对光谱的影响,比如最经典的,叶绿素含量的改变不会影响近红外,我看有不少人通过敏感性分析波段变化而后构建新的植被指数(某种程度也算是混合模型?)。

不管怎么用吧,说到底PROSAIL也只是科(灌)研(水)的一种工具,怎么研(水)得看各位的本事,还是看一下Python怎么用。

2 PROSAIL的Python接口

当我对PROSAIL原理完全不了解的时候,一开始在github上找到了这个项目:pyprosail,在linux上装了Fortran(windows我也装过,完全OK的),但是装上之后依然无法import,我猜测应该还是缺少了什么支持库之类的东西,但是这个项目作者已经不再更新了,我也就没再继续死磕,怕遇上神仙bug,而是改用了这个项目:prosail,非常好用,效率很高,底层没有使用Fortran语言,而是改用了numba加速,是一份非常优秀的代码。

项目首页都有介绍安装方法,没有wheel文件,而是下载包之后,运行setup.py,此外值得注意的是,这个项目还贴出了参考代码以及文献:prosail

关于这个模型所需的所有参数,在read me.md都有详细介绍,这里对于prosail.run_prosail()接口参数做了个完整归纳,贴出两张表格:

3. 敏感性分析与LUT生成

讲道理,做敏感性分析还是要有一定先验知识的,首先,上一节的所有参数含义烂熟于心,然后,找两篇不错的敏感性分析论文看一看,看看别人如何设置参数范围,以及哪些参数对哪些波段会有影响,还有了解必要的植被先验知识,这方面还是得认真学习一下。

这里主要讲使用Python的实操。

1)Configspace

要做敏感性分析或者生成LUT肯定涉及到参数空间,我使用的是一个叫Configspace的包来管理参数并生成网格,这个包原本是依附一个叫smac的用来做贝叶斯优化的包,主要用来管理机器学习模型的超参数,被我拿来套在PROSAIL上了,因为比较熟悉这个包所以用起来顺手。

说实在话,这个包并不是特别友好,安装比较麻烦,windows基本不要想了,linux可以装,这里贴出项目地址:Configspace,根据上面的步骤安装就好,api介绍看这里:Configspace。自己写一个也可以,其实不复杂,只不过这种涉及网格的循环,Python效率比较差,可以用itertools,或者sklearn也有管理超参数的方法,就是使用Dict,说实在话,不够方便,但也可以用。

2)参数空间采样

就是简单粗暴地网格采样,我一直在思考这样做的正确性,毕竟自然界大多数分布都是正态的,比如植被的叶倾角,究竟该如何采样,我思考了三个方案:

    a. 均匀网格采样,每个参数有步长的采样,然后所有参数笛卡尔积。

     b. 正态随机分布网格采样,每个参数根据先验知识的均值和方差进行正态分布随机采样,然后所有参数笛卡尔积。

    c. 正态分布采样,不做笛卡尔积,每个参数根据先验知识,确定均值和方差,以及参数之间的协方差,然后在整个参数空间内进行正态分布随机采样。

这里面的c听起来感觉很科学,但实现基本不可能,因为参数之间的协方差基本不可能提前得到;b编程比较麻烦,主要是每个参数随机采样可能出现超出范围的值,这不方便控制;最后纠结了一番还是选择了均匀网格采样。

3)代码


4)效率

跑万行光谱就需要分钟级别的时间了,不是prosail的锅,而是Python的循环效率太慢,要提效率可以考虑cython或者开多线程。其实破万行还是挺轻松的,毕竟这么多参数,随便四个参数笛卡尔积一下,就是指数级别的灾难。另外在生成查找表的时候肯定需要用pandas,pandas我用的不好,感觉每次读万行以上的数据就要几十秒,以后会深入了解一下这个问题(flag)。




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容