# 2022-MegCup
旷视MegCup比赛,模型算法,代码以及总结
2022.04.09 初赛4.8号结束,最终初赛排名Rank24,无缘决赛(前20进决赛),遗憾。
│ README.md
│
├─code
│ train.py 用来进行训练代码,包含验证以及预测
│ U-net.py 网络架构
├─image
└─model
model.pkl 模型文件
比赛官网:https://studio.brainpp.com/competition/5?name=2022%20MegCup%20%E7%82%BC%E4%B8%B9%E5%A4%A7%E8%B5%9B&tab=overview
赛题介绍:针对RAW格式图像文件进行降噪处理,其中RAW格式数据为图像传感器直接读取的数据,通俗来说,一张通过手机拍出,并且没有经过任何处理的图片。
数据说明:训练集:8192\*256\*256 的RAW格式图像 取值范围0~65535,每张图片的大小为256\*256,一共为8192张。
8192\*256\*256 大小的real 数据
8192\*256\*256 大小的noise数据
测试集:1024\*256\*256 大小的 noise
题目限制:对于模型参数量限制为100k
初步思路:
1.刚开始的思路为使用编码器-解码器的架构,考虑使用Transformer这么模型架构,但是由于模型参数量太大(要是不考虑模型参数量,可以考虑使用Transformer预训练参数+编码器-解码器架构,效果不会很差)
2.不考虑参数量的前提下,可以无脑的添加resnet层,效果一定很好。
3.CNN架构
DnCNN https://arxiv.org/pdf/1608.03981.pdf
DnCNN 架构如下:
![im](D:\Desktop\competition\MegCup\2022-MegCup\image\DnCNN.jpg)
通过上图,可以看出DnCNN 基本是在堆砌Conv层,设计出相应的网络的层数以及相应的参数来使的模型变得更好(很难设计出来好的架构)。
但是,通过阅读DnCNN原文,会发现模型的目标并不是在预测降噪后的图片,而是在预测噪声,其实认真思考一下,在同一个环境下,同一个设备进行采样的数据,那么噪声应该是服从某一个正态分布的,因此可以将从预测图像到预测噪声就可以了。
DnCNN架构需要堆砌10层以上的卷积层,深度太深,可能会出现梯度爆炸或者梯度消失,并且难以训练,那么可以考虑不那么深的网络,或者说更注意表层信息的网络嘛?
BRDNet 使用双层网络架构来解决网络太深的问题,并且训练时间以及效果都比DnCNN要强。
BRDNet 网络架构
![](D:\Desktop\competition\MegCup\2022-MegCup\image\BRDNet.png)
通过对比DnCNN与BRDNet网络架构,其实BRNNet就是两个DnCNN一起进行预测。那么BRNNet比DnCNN的效果强在哪里?其实BRNNet网络更多的关注表层信息(其实对于图像降噪这种问题来说,表层信息是最重要的),那么居然将两个DnCNN合并到到一起,效果会更好的。那么如果将三个,或者更多的DcCNN合并到一起会不会效果更好的。当然盲目的堆砌DcCNN会带来参数量过大之类的问题,但是目前还没有看到相应的实验。
4. U-net 架构
**Loss函数**
1.L1 loss
2. L2 loss
3. MSE loss
2. MS_SSIM loss
2. MS_SSIM+L1 loss