2020研究生数学建模大赛E题复盘

探索大雾演化规律,预测大雾变化趋势

  1. 关键词:能见度分析,图像处理,深度学习,神经网络

  2. 组队情况

    • 19级学长 * 1
    • 20级新生 * 2(我是其中之一)

    Tips:选择队友请擦亮双眼,否则就会难受四天半

  3. 比赛时间:2020.9.17 8:00:00 ~ 2020.9.21 12:00:00

  4. TimeLine

    • 第一天(9.17):上午八点开始,拿到密钥后解密试题,获得了题目之后,打印成纸质版方便看,A题直接就排除了,20级的同学高**在本科就参加过比赛,比较有经验,选题的任务就交给了他,其他题我没有细看,最后只确定了D题和E题。我看了D题,有些读不懂题,再看了一眼E题后,瞬间就来了兴趣,E题的第二三问已经指明了使用神经网络来做,而我最近刚学了神经网络,正好又在九点半去见了导师,顺便和导师交流了一下这道题目,觉得有的做。此时心中激情澎湃,上午已经有思路了,真好。但还是尊重高同学的意见,因为E题他一点也不懂,最后在下午,我们还是确定了E题。第一天还算比较轻松。

    • 第二天(9.18):有些记不清了,晚上开始写代码的,想直接读取视频流,使用Pytorch的torchvision.io.read_video()接口直接加载视频,发现加载了半天没反应,自己拍了个两秒的视频,发现代码写的没毛病,加载太慢大概是一下两个原因:

      • torchvision.io.read_video()封装的是ffmpeg的接口,我怀疑是它性能不行(章口就来啊,我可没求证,错了别打我~~)
      • 电脑不行

      所以,我不直接加载视频了,换了个思路,打算制作自己的训练集和测试集。我也不知道为啥,脑子当时抽抽了,非要把间隔为15s的数据和间隔为1min的数据对应起来,所以我就把间隔为15s的数据四次求一次平均值,作为1min内的数据,这样就可以对应起来了,又用opencv的接口加载视频,每隔1min截一张图,其实根本没必要,因为第一问和第二问真没啥关系。(后来第四天发现被第一问的高同学的数据带跑偏了,我不用每隔一分钟截一张图,直接就按VIS_R06_12.his文件中的时间戳间隔15s截图就行)说的有点多了,其实就是用截的图做训练样本,能见度数据MOR做训练样本的标签。

    • 第三天(9.19):早上醒来,发现8小时的视频只截出来466张图,不对啊,应该是480张才对,看了答疑论坛,才发现视频中居然有段视频丢失了,我靠,官方真会玩,这里还给留个彩蛋,大概是凌晨1点那里丢了14mins,正好对应上了,我本来想写个程序按照his中的时间戳截图的,难度太大,还要OCR监控里的时间水印,我就放弃了,没办法,直接把那一小时的视频给剪了,所以只剩下了不到7小时的有效数据。还是按照之前的思路,一共获得了近420张图片,300张训练集,120张测试集。制作自己的训练集是真的费时间,之前没用过,这里耗了将近一天的时间才做好。晚上试着开始搭神经网络,哎呀,这咋搭呀,可把我难住了,毕竟本菜鸡刚学了一个月的神经网络,脑子里只有全连接。爷青结啊!
      肯定不能用全连接啊,一张照片1280*720,将近100W的像素点,搭多少层也是个问题,还有输出层该多少神经元呢,十万个为什么啊~~~
      晚上搜了搜,┗|`O′|┛ 嗷,人家都是用CNN的,没学过呀,不管了,CNN搞起来,像模像样的搭了一个1层卷积层+2层全连接的神经网络,就三点了,好不容易没bug了,然后爆显存了,我哭了

    • 第四天(9.20):早上幸亏去了趟机房,有个研二的计算机大师哥,他点了我一句,可以用AlexNet啊,我去网上搜了搜,好像很流批的亚子,上午赶紧搭了个,原理咱也不懂,能跑就完事了,batch_size设置成3,Epoch设置成10,哇,显存也不爆了,Loss也下降了,爷青回!(我把图片Resize到了原图的1/4,要不还是会爆,终于知道为啥好显卡香了)
      趁着神经网络训练着,高同学告诉我可以写论文了,此时搞心态的划水学长该登场了,真是不知道他干了啥,我本来想跟他说说我的思路,让他写的,最后我这块的论文还是得我写,太搞我心态了,当时真是气不过!后来还是得硬着头皮写,才发现了致命的问题!这也是我和高同学交流最多的时候,我发现数学建模大赛不是个写代码的比赛,而是个“写论文的比赛”。而我的模型因为数据集的问题,性能非常差,导致二三问没什么可写的了,真是惭愧啊,力气没用对地方。

    • 第四天半(9.21):就是写论文了,还有改论文。

  5. 赛后感想:

    1. 队友很重要!队友很重要!队友很重要!
    2. 不能陷进去,写好论文很重要
    3. 深刻理解了:深度学习就是调包调参炼丹侠,哇哈哈哈哈

赛是比完了,代码可没写完啊,等我完善完善,就开源。

主要解决以下问题:

  • 数据集分布不均匀,能见度为50的图片有240张,可以减少这些照片的数量,使用数据增强,增加其他样本的数量,从而使数据集分布的更加均匀
  • 截图间隔改为15s,与his中的数据对应
  • 稍微调整一下卷积核和步长,提高显卡的利用率

好像有白嫖算力的网站,等的找一找