找回密码
 立即注册
搜索
查看: 2828|回复: 34

[专业画图] Pix2Pix深度学习模型生成夜间可见光图像(AI-VIS)开发日志

[复制链接]
发表于 2024-5-20 21:14 | 显示全部楼层 |阅读模式
本帖最后由 我不是Carl2 于 2024-5-21 19:43 编辑

去年9月在风吧开了个AI-VIS的贴子(https://tieba.baidu.com/p/8618092234)同时作为技术记录和云图存档。王站长建议我在论坛也留一帖,以防贴吧吞贴,所以我就打算把其中技术记录的部分搬过来同步更新,各位对于AI-VIS项目有任何疑问和建议也欢迎在本帖提出。


AI-VIS项目概况(截止2024/5/21)

主模型
模型框架:Pix2Pix
损失函数:GANLoss+SSIMLoss
分辨率:2km
渲染范围:500*500px,1000*1000km
输入波段(12):AHI Band08,09,10,11,13,15,16,太阳天顶角,方位角,卫星天顶角,方位角,陆地底图
输出波段(1):AHI Band03
数据集:H8/9南北半球全部机动观测数据,部分圆盘数据切片,约24万组图
训练步数:600epoch

验证集表现:SSIM 0.923 PSNR 31.4 RMSE 0.299 CC 0.991 Bias 0.0003

超分模型
模型框架:Real-ESRGAN
输入波段:AHI Band03(2km)
输出波段:AHI Band03(0.5km)
数据集:H8/9北半球全部机动观测数据,约4.7万组图

开发团队:我不是Carl2,xiaoqianWX,大水台6,HCl

评分

参与人数 1威望 +10 好评度 +10 收起 理由
renzhetegong + 10 + 10 科研前沿

查看全部评分

 楼主| 发表于 2024-5-20 21:41 | 显示全部楼层
本帖最后由 我不是Carl2 于 2024-5-22 22:04 编辑

目录楼

3楼  2023/09/25  前言&文献整理

4楼  2023/09/26  单波段模型

5楼  2023/09/27  双波段模型

6楼  2023/09/28  三波段模型(错位差分)

7楼  2023/09/30  修改错位差分范围

8楼  2023/10/04  SSIM损失函数

9楼  2023/10/10  三波段模型(太阳方位角)

10楼  2023/10/21  修改验证集筛选

11楼  2023/10/30  扩大图片面积

12楼  2023/11/20  8波段模型(更多红外波段)

13楼  2023/11/24  9波段模型(太阳高度角)

14楼  2023/12/14  功能展示:调节虚拟太阳方位

15楼  2023/12/21  夜间模型验证

16楼  2023/12/29  阶段性展望

17楼  2023/12/31  圆盘图尝试

18楼  2024/01/05  超分辨率模型

19楼  2024/01/17  论文投稿

20楼  2024/01/26  AI-VIS实时预览页面

21楼  2024/01/28  数据集/输入波段扩充

22楼  2024/02/12  AMP自动混精训练

23楼  2024/02/17  视频demo

24楼  2024/02/21  模型训练记录

25楼  2024/02/29  模型与数据集改进

26楼  2024/03/26  阳光直接反射区/圆盘测试

27楼  2024/05/04  阶段性总结与展望

28楼  2024/05/11  600epoch模型
 楼主| 发表于 2024-5-21 12:00 | 显示全部楼层
本帖最后由 我不是Carl2 于 2024-5-21 12:06 编辑

2023/09/25

夜间可见光图像的生成这个话题其实有点老生常谈了
简而言之,除了VIIRS等极轨仪器的月光VIS,夜间由于缺乏阳光是没有台风的VIS图像看的,夜间可见光就是通过夜间其他IR波段的信息把本没有的VIS图像模拟出来。
楼主从20年开始就对这方面开始感兴趣了,一直以来在尝试用写定的,非深度学习的算法生成夜间可见光图像并不断改进,称之为伪VIS或者PVIS(Pseudo-VIS),感兴趣也可以看看以下两个贴子,Dapiya现在使用的PVIS也是用的同类算法:
https://tieba.baidu.com/p/6748642409 伪VIS贴
https://tieba.baidu.com/p/8224526980 伪VIS算法原理与教程
大概是2021年下半年的时候,楼主开始对于深度学习生成夜间可见光的方案有所耳闻(以下简称AI-VIS)。最开始看到的AI-VIS是韩国那边KMA开发的,对于积雨云比较容易过曝,但是高温区和陆地区域效果很好,这版AI-VIS可以在这里看:
http://nmsc.kma.go.kr/homepage/h ... do?dataType=operSat
当时网上找论文的话大概能找到一两篇,但能看出和上面这个不是同一版。
今年以来楼主明显感觉到传统的伪VIS改进空间没以前那么大了一直有尝试深度学习方法的想法,暑假里重新搜了一遍论文发现相关论文满打满算能有6篇,虽然不是什么研究重点但也足够参考了,刚好电脑也换新的了,于是这个月开始自学一点深度学习的教程,准备数据,并自己训练一个AI-VIS模型。目前这个小项目还是在很初期的阶段,刚刚训练出勉强能看的图像就来开贴了,请大家多多包涵。

同类型研究:
https://doi.org/10.3390/rs11182087 最早的模型之一,单波段AI-VIS
https://doi.org/10.3390/rs11222713 用来模拟MWIR的模型
https://ieeexplore.ieee.org/abstract/document/9154540 用了IR和WV俩波段增加模型准确度
https://ieeexplore.ieee.org/abstract/document/9904830 用了很多波段组合模拟真彩色,和上面kma网站这版比较相似
https://doi.org/10.1080/2150704X.2022.2079016 用FY4A数据训练的,甚至加了ERA5数据进去
https://arxiv.org/abs/2011.07017 一场hackathon的结果
https://doi.org/10.1175/WAF-D-23-0038.1 Cira做的ProxyVis,NRL上有提供实时图像

先介绍一下所使用的Pix2Pix模型:
Pix2Pix属于CGAN(Conditional Generative Adversarial Networks,条件生成对抗网络)中的一类,而CGAN则是上一代主流图像生成模型GAN的一大分支。关于这些模型的具体内容大家可以上网搜索,很可能会比我在这里尝试写介绍写的更清楚。我没系统性学过AI,遇到相关问题都是一边训练模型一边了解的,这方面的知识储备恐怕只能足够我能训练、运用模型而不足以把原理完全讲清楚。
Pix2Pix这个模型做的事情主要就是将一类图片转化为另一类图片,比如线稿转为实物图像,黑白转为彩色,白天转为夜景等等。在本贴的运用场景下就是把(各种波段的)IR转化为VIS图像。7楼那边贴的一堆论文中,大部分论文使用的模型也是Pix2Pix模型。第六篇和第七篇用的不是该方法,第六篇的结果认为Unet++在白天的拟真效果更好,但能看出模型在泛化到夜晚时表现不佳,第七篇用了DNN代替Pix2Pix(CGAN),但能看到训练结果中低空积云线的表现和VIS图像还有明显差距。可以说,Pix2Pix是目前做AI-VIS最主流的模型,因此我们也从这个模型开始尝试并寻求模拟效果上的提升。
问题来了,未来是否可能会有比Pix2Pix更好,更适合AI-VIS模拟的模型呢?是有这个可能的。前面提到过GAN是“上一代主流图像生成模型”,说是上一代是因为GAN正在被Diffusion Model所取代。并且,Diffusion Model也有一些用于Image Translation(一类图片转化为另一类图片)的衍生模型。在发掘完Pix2Pix的潜能后,我们也有可能去尝试用Diffusion Model的衍生模型训练AI-VIS,虽然还没有论文这样做过。(标题和内容不符的事情咱不是第一次干了,伪VIS贴就是挂着Band11-13的标题用Band13-15)

然后是训练集的数据来源:
目前使用的训练集是H8/H9的机动观测区白天的Band3(VIS)Band13,Band15(IR),相比几篇论文使用的圆盘图/东亚区训练集的优势是算力和存储空间方面的要求较小(虽然DAT文件还是占了我硬盘200G),且对于台风和热带地区云系更有针对性。劣势是对于台风与热带地区之外的区域模拟效果应会较差,比如内陆区域和寒带区域,另外这种“白天对白天”的训练方法忽略了昼夜温差的效应,具体可以看下面的截图。(文档是六月份那会看了几篇论文有感而发写的)这次的训练集全部裁成了机动观测的一半多一点大小(256像素 512km)整个机动观测区塞进去显存容易不够。

这方面我们照样画个饼,等搞完H8机动观测就去试试VIIRS

数据分类:
上周花了三天时间把NICT网站上2015年以来从15灿鸿到23鸳鸯全部的机动观测区Band3/13/15的数据每十分钟一张地下完了,剔除掉任何一个波段缺数据的时间段,一共153003个DAT文件,也就是51001个时刻。顺便提一下,日食月影覆盖期间的台风是没有下载的。
当然我们不可能把所有时段的数据全丢到单一训练集里面训练,不然VIS图像日出/正午/日落时的内部差异就能比VIS和IR的差异看起来还大,难以训练出有效结果。目前我们按照太阳天顶角以及太阳时角进行分类,天顶角代表太阳高度,时角判断该时段属于当地真太阳时上午还是下午。区分上午和下午的原因是上下午VIS的光影方向是不同的,如果混在一起很可能导致AI模拟出错乱的光影细节,看不出阳光是哪来的。
*不过控制天顶角的情况下,阳光角度还是可能有细微差别,比如冬季台风太阳天顶角最低可能也有30度,在同样控制天顶角的情况下可能更倾向于从南向北照而不是东西方向的光影。这个问题暂时只能想到一个解决方案,就是通过太阳方位角分类,并适当按照天顶角补光,但我对于天顶角补光算法非常不信任(
具体的分组规则是天顶角0°~90°中每5°分一组,再加上上下午的区分,一共将数据分为36组。当然并不是所有每组都能塞足够数据,有些冬季台风就算是正午太阳距离天顶还是有30度以上,大部分的数据应该集中在30~75度左右(75度以上的差不多就是日出日落了)天顶角过小的组别到时候可能会去合并处理。

数据输入:
目前打算分三步,第一步是以Band13单波段作为输入,这部分今天刚刚训练完毕;接下来设想中会加入Band13-15差分作为另一个波段,提供相应物理信息改善积云线和卷云等云相的识别(虽然厚卷云穿透不过去,得靠AI自己猜),第三个波段可能会是Band13的错位差分图像,就是制作伪VIS云顶螺纹的那种虽然本质上没有提供多余信息,但或许可以通过信息的强调使AI更易于提取信息将模拟螺纹和VIS螺纹对应起来,补充高频信息,如果这俩波段效果好会予以保留,如果要增加更多输入波段得换一个开源模型用用,并且我的电脑也有可能跑不动,得租借算力平台了。

差分与错位差分图像的示例
其实可以看到不少经验和假设其实还是和伪VIS一脉相承的,对不对另说()
最后就是数据检验
每次训练会分10%的数据作为验证集,比如下午30~35度天顶角一共2000整数据(真的刚好2000哦),就有200个数据被归为验证集,除了Pix2Pix自带的loss函数之外,训练结束后会使用RMSE(均方根误差)和SSIM(结构相似指数,不是那个旧旧的微波扫描仪器)衡量模型的效果。SSIM的窗口大小为11像素。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
 楼主| 发表于 2024-5-21 19:45 | 显示全部楼层
本帖最后由 我不是Carl2 于 2024-5-22 11:48 编辑

2023/09/26

单波段模型:

训练集loss的图像,batchsize是32,一开始学习率给的是默认值2*10^-4,后来一路慢慢调低到2*10^-5,250epoch的时候好奇调回5*10^-5试了三十几个epoch,发现不对劲就调回来了,最后睡觉/上课的时候在1*10^-5挂了两百epoch看看会不会过拟合,结果发现虽然验证集表现总是比训练集差一点但是也是在缓慢下降或者持平的,没啥过拟合现象。

这里前三张是训练集最后几个epoch的图像,第四张是验证集的图像


关于SSIM和RMSE检验,楼主今天刚看完SSIM相关内容,还没把所有数据都检验过,只塞了训练集第一张图(15灿鸿)进去试了试,算出来的结果是SSIM=0.885,RMSE=0.019。说实话这个结果好对于单波段来说的有点令人意外
全体数据应该不至于有这么好的检验结果,验证集也应该会比训练集差一点

虽然检验数据很好看,但从中也能看出高频信息的丢失比较严重,也就是相邻像素亮度快速变化的云顶光影、低空积云线等区域,这些问题在增加波段后希望能一定程度上解决

全体数据(训练集+验证集共2000张)
平均SSIM:0.8162175675538293
平均RMSE:0.03591463835528434

验证集表现(共200张):
平均SSIM:0.7254644919197607
平均RMSE:0.060722495625358135
验证集果然比全体数据略差一点,之前从验证集的loss也能看出来。不过毕竟是单波段,还有很多提升的空间,现在这个SSIM从数据上超过用FY4A+ERA5数据的那篇论文了(0.48),也接近Hackathon那边专门加入SSIM的CGAN的了(0.77),RMSE则是比这俩都更好。
(不过说实话我们模拟的是Band3,他们模拟的是真彩色,感觉单纯比较数值有点占便宜)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
 楼主| 发表于 2024-5-21 19:46 | 显示全部楼层
本帖最后由 我不是Carl2 于 2024-5-22 11:47 编辑

2023/09/27

双波段模型:

RGB中R空着,G是Band13-15差分,B是Band13IR


双波段的训练结果,看得出来生成器loss下降到10以下的时间点比单波段早一截,30个epcoh训练完在验证集的表现上就和单波段差不离了,一会直接拿SSIM检验一下


30个epoch后的双波段模型:
SSIM:0.7043519912281064
RMSE:0.05824207144297647
SSIM比700个epoch的单波段差0.02,RMSE比单波段好0.002,两者表现确实已经在同一水平,接着继续训练双波段应该很快就能超越

60epoch后的结果:
SSIM:0.7716136355723116
RMSE:0.04919214986197597
全面超越单波段的效果了


100epoch:
验证集:
SSIM0.799
RSME0.046
同时训练集的表现是SSIM0.834 RMSE0.035,可以看到训练集表现略优于验证集,但是两者之间的差距比单波段小多了



150epoch
训练集
SSIM:0.859
RMSE:0.0312
训练集生成效果

验证集
SSIM:0.807
RMSE:0.0456
验证集生成效果

训练曲线

基本上loss降到极限了,接下来梯度从0.0002降到0.00005试一试看看还有多少潜力,不过得先备份一下模型防止过拟合了

200个epoch
验证集
SSIM0.8162
RSME0.0451
随着学习率的降低生成效果再次有所改善,能看到验证集图像云顶光影开始逐渐清晰(虽然高频信息还是丢的比较多,比较糊)

至于训练集...效果看起来已经很好了,大概长这样:

整体SSIM已经到0.881了说实话训练集表现和验证集表现差距加大不是什么好消息,但是至少验证集的SSIM没有不升反降,一会再调低学习率跑个几十epoch试试看

双波段基本上训练完毕了,大概250epoch时SSIM最高(0.817)后面可能出现了轻微的过拟合 接下来放一些单张样图



似乎分辨这种隐约有眼的embc还是有用的,和原版伪VIS比感觉在云顶螺纹和积云线方面效果差一些,但是在卷云识别方面猜的比较准了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
 楼主| 发表于 2024-5-21 20:05 | 显示全部楼层
本帖最后由 我不是Carl2 于 2024-5-22 21:51 编辑

2023/09/28

三波段模型(错位差分):
注:错位差分波段目前已弃用

Band13-15双波段训练完毕,我们试试看再加一个错位差分的波段,看看能否更有效地生成云顶光影
错位差分在亮温相减的基础上添加了一个映射函数以着重突出云顶纹路

映射后的数据大概长这样:

顺便提一下 方向也一样调成了下午光,不知道这样的设置有没有必要

不得不说输入图像长得越来越抽象了

450h后最终SSIM停在了0.774,不过D_loss明显上升了,说明在鉴别器眼中生成的图像确实更能以假乱真了

稍微放俩样图

可以看到高频细节确实有不少改善,但是说实话,有部分高频细节和VIS对比起来实际上是不存在的,只是像VIS而已,对于干净的风眼表现也不够好(图9,10的玛娃)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
 楼主| 发表于 2024-5-22 11:21 | 显示全部楼层
2023/09/30

修改错位差分范围:

之前在24楼规划的三种输入方式(band13,band13+band13-15差分,band13+band13-15差分+band13错位差分)已经测试完毕。目前的结果是band13+band13-15差分的双波段模型取得了最好的SSIM和RMSE表现(0.817,0.045),而band13+band13-15差分+band13错位差分的三波段模型取得了最好的“以假乱真”的效果(D_loss约≈0.1,即判别器有10%左右概率把AI生成的当成真的)。

目前的模型效果楼主还并非完全满意,接来会尝试通过不同方法改进。之前本来想着再加个Band11的,以为识别低云的效果会很好...后来发现实际上没啥用,识别低云的效果还不如Band15
band13-11差分

band13-15差分

暂时下一步计划是修改错位差分的有效范围,将其限制于TC的低温云顶,取消卷云/高温区区域的错位差分,这样应该能够明显减少干扰,避免生成过多错误的高频细节。

上面说的这种对于错位差分的预处理其实很像合成伪VIS时对低温区的处理
现在感觉深度输入端的预处理还是很重要的,虽然理论上一个波段输进去模型能提取全部信息,但实际上通过随机梯度的方式AI很难准确捕捉其中的一些物理性结论(比如说低温且冰晶密集的时候容易出现云顶光影),最好要预处理为AI容易找到输入和vis之间的对应的形式。我这里就相当于输了个已经比较像VIS的伪VIS云顶进去,希望能有进一步改善吧。

跑完以后训练曲线长这样...与其说是改进不如说是加错位差分和不加的折中...还得想别的方法在保证SSIM的情况下尽可能好地模拟云顶细节
SSIM0.796
RMSE0.0483

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
 楼主| 发表于 2024-5-22 11:47 | 显示全部楼层
本帖最后由 我不是Carl2 于 2024-5-22 21:52 编辑

2023/10/04

SSIM损失函数:

今天大概搞明白为什么pix2pix的云顶细节生成的不太好了。生成器的loss函数由两部分组成,一部分相当于以假乱真,骗过鉴别器的能力,越能骗数字越小,另一部分相当于生成图像与vis每个像素的偏差。生成器的目标是让loss函数尽可能小。在6.x的loss值中,前者只占0.x,后者占了接近6。也就是说,生成图像与vis每个像素的偏差主导了训练,而“骗过鉴别器”的这一学习目标是受抑制的。(这一点从鉴别器的loss也能看出)
目前打算把生成器的L1_loss换成SSIM_loss,看看能不能减少对于云顶细节模拟的抑制。对自己的代码水平不是很自信所以留了俩备份以防写崩了

总算把SSIM loss搞定了
稍微讲一下原理
原本的生成器的loss由两部分组成

ls_G1相当于判别器的表现,判别器越分不清楚真假越低
ls_G2是l1_loss相当于和原图的相似程度,用的是真假两图每个像素的差值的绝对值再取平均
整个ls_G肯定是越小越好。
在训练末尾基本上ls_G1占零点几,ls_G2*100占6左右,也就是说原来每个像素平均和真图有0.06左右的差值(整张图是-1~1的范围)
加上SSIM loss以后,式子变成这样:

加上去的ls_G3是SSMI_loss,直接计算的值和出图之后再算的不太一样,只有0.6~0.7,不过同样是数字越大图像生成效果越高。由于loss是越小越好,所以取个倒数再乘个系数。
目前先就这样,后两种loss的比例差不多一半一半,我放它跑几十个epoch看看,等会再从头炼几个模型。
这个想法部分来自于P. Harder那篇总结Hackathon的论文

改完之后发现有点问题
虽然大部分结果变好了,但是部分图出现了很奇怪的bug

这些生成结果看着都还挺不错的然而,在遇到大片高反射率区时:

后来尝试降低学习率从头跑一遍...发现高温区反而出现了奇怪的bug,看起来SSIM的对生成图像的监管不是很严格,容易陷入奇奇怪怪的局部最小值(?)打算原封不动重新跑几遍看看有没有好的结果

最近把整个loss都换成SSIM了,发现不需要错位差分对于高频细节的还原就已经挺到位了
下面是几张验证集图像

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
 楼主| 发表于 2024-5-22 12:34 | 显示全部楼层
2023/10/10

三波段模型(太阳方位角):

下一步计划是把第三个波段换成太阳方位角,同时包含上下午的云图,看看能不能AI能不能理解云顶光影和太阳方位角的关系

同时包含上下午的数据之后验证集表现又上了一个台阶

SSIM大概能有0.83吧,破纪录了

扩充训练集后的验证集表现
SSIM:0.832
RMSE:0.0496

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
 楼主| 发表于 2024-5-22 12:36 | 显示全部楼层
2023/10/21

最近正在重做验证集的筛选方式
原本是控制太阳高度角后随机抽的,但是这种筛选方式有一种问题,10分钟一张的云图,可能前一张在训练集,后一张就在验证集。因此,对前一张云图的拟合可能同样也会“改善”后一张云图的验证表现。这就相当于训练集的训练结果对验证集有泄露,会降低验证集对模型泛化能力的检验能力,相应的检验数据也会虚高。
目前这两天重新筛选了一下验证集,以一天为单位划分验证集,即如果某张云图属于验证集,同一天的所有符合高度角范围的云图也都属于验证集。验证集的云图数量基本不变但是杜绝了上文提到的效应。训练结果显示...SSIM和RMSE表现确实变差了,SSIM降了0.09,RMSE升了0.035。这说明上述效应的确是存在的,并且之前的检验数据也的确是偏高的。
当然也不是没有好消息...就是实际泛化效果不会比布拉万的测试云图/云图视频差,毕竟布拉万的云图是完全不属于训练集的,修改验证集的筛选方式之后反而应该会改善一点。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|TY_Board论坛

GMT+8, 2024-10-18 13:26 , Processed in 0.049912 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表