踩坑实录——多光谱影像(.tif)输入深度学习网络训练

项目场景:

从github下载了fastercnn_Resnet50的目标识别网络,尝试把多光谱影像数据集(.tif)输入进去进行训练,由于本人是刚接触深度学习的小白,网上又没有找到相关教程,只能一边DEBUG一边理解。


问题描述:坑1

在这里插入图片描述


原因分析:

经过百度可以知道这错误是因为PIL不支持.tif多波段图像的读取导致的。在修改网络的时候我有一个原则,就是不修改第三方库的源码,原因是因为我个人功力不够,所以不敢轻易修改。根据报错提示我定位到my_dataset.py文件的image = Image.open(img_path) 这个位置
在这里插入图片描述
在这个位置我们可以看到使用PIL模块对图像进行读取的,返回的是一个Image对象,然后在后面一段代码中,我发现Image对象是经过了transforms这个地方后被转换为张量了

在这里插入图片描述顺藤摸瓜,找到这个transforms.py,发现是利用tochvision.transforms.ToTensor()这个函数把Imges对象转为Tensor。在研究transforms.ToTensor()这个函数的时候,发现输入可以是PIL.Image对象或numpy.ndarray对象,因此我只需要在ToTensor()这个函数之前把多波段影像转换为numpy.ndarray进行输入就可以了。
在这里插入图片描述


解决方案:

所以,坑1的解决方案就很明确了。我们找到自定义数据集的数据读取的文件my_dataset的__getitem__方法,把原来的image = Image.open(img_path) 改成自己写的方法,我这里用的是gdal,重新写了对多光谱波段的读取方法,返回值是ndarray。具体实现过程请移步到这里

在这里插入图片描述
这样子这个坑就填完了,我们喝杯水休息一下,然后运行程序,继续下一个坑。

在这里插入图片描述



问题描述:坑2

在这里插入图片描述


原因分析:

这个错误我看到448,我记得我的tif图像的维度应该是6 * 448 * 448,但是这里提示第一个448,经过一段时间的DEBUG,最后把错误锁在了自己上一步写的读取图像的方法。原因是GDAL读取影像和cv2读取影像有点类似,原本图像应该是【6,448,448】,但是GDAL和cv2读取的时候是【448,6,448】。所以只需要把维度变换一下,变成【C,W,H】即可。


解决方案:

在transforms.py文件中,找到这个类,把张量的维度进行变换。
在这里插入图片描述



问题描述:坑3

在这里插入图片描述


原因分析:

修改了坑2之后还出现这个问题让我非常无奈。没办法,又是一步步DEBUG,最后把问题锁定在self.image_mean和self.image_std这两个变量,经过一段时间的百度后才了解,这是用于图片去均值化操作的变量。顺藤摸瓜后找到了这两个变量定义的位置,就在faster_rcnn_framework.py这个文件中,可以看到现在image_mean和image_std这两个变量都只有三个,分别是RGB通道的均值和方差,这里的参数是网上ImageNet数据集的参数。因此我需要在这里补充我另外三个通道的参数。关于如何计算栅格图像各个波段的均值和方差,我在另一篇博文里有写,需要的可以出门右拐去看。
在这里插入图片描述


解决方案:

好了,在我算出其他三个波段的均值和方差后就可以补充上去了,算出的均值和方差记得要做归一化处理(除以255)。
在这里插入图片描述



问题描述:坑4

在这里插入图片描述


原因分析:

这个坑是我最最最容易找到的解决方法的一个坑,因为我一直知道model文件需要修改输入的图片的波段数量。所以我看到模型文件resnet50_fpn_model.py有报错的时候,我第一时间就找到问题所在,我的猜想没有错,只需要把Resnet网络的输入通道修改为和输入图片的通道数量一致即可。


解决方案:

把这里改成6。
在这里插入图片描述



问题描述:坑5

这个坑真的是很难发现,因为他在第三方库里的源码,但是功夫不负有心人啊,终究还是让爷给找到了。
在这里插入图片描述


原因分析:

因为网络在训练的时候,会把所有的张量都做归一化后再扔进去网络里面。又因为默认的图片都是RGB格式的,所以这个函数直接除以255做了归一化处理。但是我们的波段值域并非都在【0,255】这个范围。


解决方案:

这个解决只能在数据预处理部分去做了,只需要把其他波段的数据都映射到【0,255】的范围就可以了,这个操作在我另一篇博文里有介绍,请移步!



问题描述:坑6

在这里插入图片描述


原因分析:

这个坑也很好理解,原因就是预训练模型的参数与我们要训练的模型参数的数量不匹配。原因应该就是我们通道数变了,网上预训练的权重几乎都是RGB三通道的权重。


解决方案:

解决方法就是不要载入预训练参数,或者要找到适合你模型的预训练参数。也就是说很难实现迁移学习了。呜呜呜。。。
在这里插入图片描述



问题描述:坑7,脏数据(大坑)

这个坑就是出现 loss is Nan,stop training,这个坑可把我逼疯了,在百度的过程中,因为出现这个原因太多太多了。我随便给一篇给大家观摩一下。

https://blog.csdn.net/m0_52571323/article/details/112122263?ops_request_misc=&request_id=&biz_id=102&utm_term=loss%20is%20nan&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-2-112122263.pc_search_result_before_js&spm=1018.2226.3001.4187


原因分析:

因为导致这个问题出现的原因是在是太多了,我一度想要放弃。后来打了一把王者放松放松后开始思考,我之前一直跑模型的时候都没出现过这个坑,那证明参数应该不会有问题,直到我看到脏数据也会导致这个情况发生,我才顺着这个思路下去。因为Tensor里面不能出现NAN值和除数为0的情况。外加我之前在打标签的时候发现影像出现白点,结果我在arcgis再看了一下。
在这里插入图片描述


解决方案:

结果很明显了,我随后把蓝色波段去掉,重新生成了一批新的数据进行训练,然后模型就快乐地跑起来了。
在这里插入图片描述


总结

在使用自定义的数据集的时候,脏数据的情况是很常见的,这让我想起了在用网上典型的数据集快乐的奔跑的时候,那时候不用想这么多,只是专心理解网络架构和算法就好。
下周开始自己写模型,希望不会被折磨的太惨。TvT…
在这里插入图片描述

  • 63
    点赞
  • 213
    收藏
    觉得还不错? 一键收藏
  • 28
    评论
### 回答1: 2023年的数字IC设计秋季招聘已经结束,现在来回顾一下这次复盘。整个招聘过程中,有数十家公司参加了笔试和面试,竞争非常激烈。 首先是笔试环节。笔试题目涵盖了数字电路设计、计算机组成原理、操作系统、数据结构等多个领域,题目难度也有所不同。其中,一些较难的题目需要对底层硬件有较深的理解和编程能力,还有一些考察算法和数据结构的应用,对于应聘者的基础能力要求较高。 然后是面试环节。面试中,面试官对于应聘者的技术能力、项目经验、学术背景等方面进行了深入的了解,考察了应聘者的思路清晰度、解决问题的能力、团队协作能力等方面。 整个招聘过程中,很多公司更注重应聘者的实际能力和潜力,将实力放在第一位,并且更加关注应聘者的全面素质和团队协作能力。 总的来说,这次数字IC设计秋招复盘展示了很多应聘者的编程能力和技术水平,对于应聘者而言更是一次宝贵的机会,同时也给了招聘公司更多的选择和发现优秀人才的机会。 ### 回答2: 2023数字IC设计秋招已经结束,各大公司也陆续公布了面试结果。回顾这次秋招的笔试和面试,可以发现许多新的趋势和特点。 笔试题趋势 首先,笔试题目趋向综合,不仅包括专业相关的知识,还涉及到诸如计算机编程、英语等的综合考核。这也足以印证了人才市场对于全面素质的重视。 其次,笔试题目更加注重实战能力,许多题目涉及到实际的设计场景和问题,需要熟练掌握工具的使用和项目的整体规划、协作。 再次,笔试题目考察重心更加突出学生的综合素质,注重全面考核应聘者的理解、分析、判断能力以及沟通协调等,更贴近企业实际需求。 面试特点 首先,面试对个人的专业能力和综合素质要求都很高,需要应聘者具备扎实的理论基础和实际工程经验,同时在沟通协调等方面也应有较强的个人能力。 其次,许多公司的面试特别注重细节问题,通过提问、测试等方式来发现和检验应聘者对细节的注意力和对整个系统的整体把握能力。 再次,许多企业对于应聘者的人品、性格、偏好等也会考究,主观因素对于面试结果有着不可忽视的作用。 总之,就目前的趋势来看,未来数学IC设计秋招中,企业会更注重全面素质的考核和综合能力的培养。希望广大参加秋招的同学都能沉淀好自己的能力,提高自身综合素质,为以后的职业发展夯实基础。 ### 回答3: 2023 数字 IC 设计秋招已经落下帷幕,各家公司的笔试题、面试实录也相继公布。我们可以通过分析这些题目和面试问题,来了解企业对应届毕业生的需求和期待,也可以总结自己的申请情况,为下一轮招聘做好准备。 首先,我们可以对各家公司的笔试题进行分类。大多数公司的笔试题目都围绕数字电路设计、模拟电路设计、通信电路设计、计算机组成原理等方向,题目难度较高,需要考生运用自己的专业知识进行解答。同时,也有部分公司会增加智力测试、数学逻辑等综合能力题目,考察应聘者的综合素质。为了应对这些题目,应聘者需要熟练掌握专业知识,同时也需要加强自己的综合能力训练。 其次,我们可以分析各家公司的面试问题。大多数公司的面试问题都是围绕应聘者的个人经历和能力进行的,包括个人介绍、自我评价、项目经验、职业规划等方面。同时,也有不少公司会增加逻辑思维类问题,考察应聘者的思维能力和解决问题的能力。为了应对面试,应聘者需要在个人经历和能力上强化自己的优势,并且提前思考可能会被问到的问题,对应准备相应的答案。 在总结这次秋招经验的同时,也要注意未来的趋势和发展方向。随着数字 IC 设计的不断发展和创新,新技术不断涌现,应聘者需要不断学习新知识和新技术,以适应未来发展的需求。同时,公司也会更加注重应聘者的综合能力和创新能力,因此应聘者需要在专业知识的基础上,注重自己的软实力和创新思维的培养。 总而言之,2023 数字 IC 设计秋招是一个很好的学习和锻炼机会。通过这次经历,应聘者可以更好地了解自己的实力和优势,也可以借此机会探索未来的发展方向和趋势。希望未来的应聘者可以以积极的心态面对挑战,不断学习和成长,为未来的数字 IC 设计行业做出更大的贡献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值