论文地址:

http://openaccess.thecvf.com/content_cvpr_2017/papers/Hu_FC4_Fully_Convolutional_CVPR_2017_paper.pdf

源代码(Python):

https://github.com/yuanming-hu/fc4


一、    任务描述

网络的主要目的是能够对偏色的图片估计光源,从而移除偏色,恢复图片真实颜色。为满足此类网络训练要求,需要数据集中不仅包括图片且需要提供图片的真实光源数据。

二、    数据集

解释网络原理前,先下载数据集并了解数据集,有助于后面原理的理解

数据集(Shi's Re-processing of Gehler's Raw Dataset):

http://www.cs.sfu.ca/~colour/data/shi_gehler/

下载的文件包括:

png_canon1d.zip

png_canon5d_1.zip

png_canon5d_2.zip

png_canon5d_3.zip

groundtruth_568.zip;

其中,前四个文件夹中是图片,最后一个文件夹中包括对应图片的光照数据。

下载后,将所有图片放入一个文件夹中,一共有568张图片

注:568张图片是16位RAW图像,电脑图片查看工具一般是8位的,所以显示纯黑


利用Python代码进行图片格式转换(训练时中并不需要此步骤),可以看到图片真实效果(借助下载文件中保存了真实光源文件real_illum_568.mat),效果如下图(8D5U5525.png):

           

(16bit RAW原图)                                                  (8bit 图)

代码如下:

三、    网络原理

  先看整个网络的结构图:

1) 网络结构:

论文使用全卷积网络,代替了全连接层,可以接受任意图像尺寸的输入 ,当然,训练时,输入还是需要归一化到大致相当的尺寸,保持统一尺度。同时,代码中使用SqueezeNet网络代替AlexNet网络,相较于AlexNet网络,SqueezeNet更轻量级,在保持同等分类精准率的前提下,模型参数缩小了50部。

2)输入图片

从上述网络框架图中看到输入图片‘input image’的w和h,并不是原始图片的大小,在此项目中w*h=512*512,即一个patch。

而512*512输入图片的产生原理:选择边长比例为【0.1~1】范围内随机值乘以原始图像的较短边,以此大小生成正方形裁剪框;以【-30°~+30°】范围内随机的角度值旋转原始图像,接着,从上述旋转操作结束后得到的图像中随机选择一点作为该方形裁剪框的左上角并开始裁剪,调整裁剪下来的图片大小到512*512。为了增强数据效果,512*512的图片可进行随机的上、下和左、右翻转,且,利用【0.6~1.4】中随机值调整图片RGB值及其光照信息(基于原始光照ground truth值),这样即完成了数据预处理工作,得到输入图片。

注:上述中涉及的数值均可在源代码文件config.py中进行动态设置

3)架构解析

   首先,可以在ImageNet上预训练SqueezeNet,而对于分类作用的SqueezeNet网络提取到的是图片的语义信息,且光照不敏感的;论文中对网络结构进行改造,使用SqueezeNet的前5层卷积层,即输入的结构是:512*512*3,经过SqueezeNet的5层卷积层后得到的结构是:15*15*512;而语义信息会作为区分不同照度的置信权重,语义信息越多的,可认为其权重越大,越能影响决定最终光照。

接着,经过conv6和conv7两个卷积层降维后,结构变成:15*15*4;假设这样规定:经过conv7后得到的4通道数据中包括照明估计的三个颜色通道,第四通道为置信度权重c.

至此,可以看出FC4采用了一种选择机制,选择图像中的哪些色块用于估计,避免语义不明确的色块影响照度估计;网络中采用更大的带有更多的语义patch(以往论文中大多是32*32大小的patch),利用FC网络共享特性将局部估计结合到全局中,同时,利用置信度权重,可以将监督信号仅派发给训练期间具有语义的区域;简单来说:就是先估计所有局部区域的光源,接着聚合所有局部区域的光源信息形成最终结果。注:局部区域并不是一个patch,是其子集

如果希望预测的精度越高,则可以提供更多的patch,其覆盖率越高,精度自然也会更高,但效率会变低。

4)损失值计算

首先,先看下如何计算网络得到光源估计值,参照论文中的公式:

  :patch的照度估计值   

  :Ri区域的权重值

 :Ri区域的照度估计值

补充,基于上述公式的特点,源代码中conv7提供了两种结构方案:

①    conv7:1*1*3,直接只输出非标准化的R,G,B,并简单地取和和归一化,使用长度进行加权计算。

②    conv7:1*1*4,输出归一化的RGB颜色通道和权重通道,如同上面公式中进行加权求和。

    如果假设真实光照值,则计算损失值的公式如下:

通过不断地迭代训练,优化损失值,得出最终照度估计值,作用于输入图片上,即完成了网络的目的,得到‘去偏色’图片。

四、    网络复现

1) 复现SqueezeNet

作者提供了SqueezeNet在ImageNet上预训练的模型文件model.pkl,版本是python2.7的,如果您的环境也是如此,则不需要复现SqueezeNet,如果不是,可以按照下面步骤进行复现

Github: https://github.com/DeepScale/SqueezeNet

SqueezeNet网络Caffe版本的地址,可以下载进行训练,其复现方式可以参考https://www.cnblogs.com/wangyong/p/8616939.html,这里就省略具体过程了。

训练结束后,可以得到后缀为.caffemodel的模型文件,依据源代码中需求将.caffemodel文件转换为.pkl文件,python代码如下:

将生成的squeeze_net.pkl替换源代码中的data/squeeze_net文件夹下的model.pkl


2)   图片预处理

数据集是一共568张RAW格式的图片,附带每张图片的真实光源信息,同时,在下载的源代码中,还有每张图片中的Macbeth Color Checker(颜色检查器)的坐标信息文件。

作者将568张图片分成了三批,以进行三重交叉验证,增强网络训练效果,其中:

第一批:189张图片

第二批:191张图片

第三批:188张图片

因为FCN网络会学习到图片中的颜色信息作为语义来影响照度估计,所以,需要将图片中颜色丰富的color checker去掉以免干扰结果,作者的做法是根据color checker的坐标信息,将其位置处像素置黑,去除干扰。

最后,生成三个后缀为.pkl的文件,关于细节可以参看源代码文件datasets.py


3) 训练和测试网络

依据作者在Github上的说明,可以按照其步骤进行训练和测试;下面是我测试出来的图片效果,复现了仅有三个输出类别的SuqeezeNet网络:

作为一枚技术小白,写这篇笔记的时候参考了很多博客论文,在这里表示感谢,同时,转载请注明出处......

如有疑问,欢迎留言,互相学习

基于神经网络的颜色恒常性—Fully Convolutional Color Constancy with Confidence-weighted Pooling相关推荐

  1. Cascading Convolutional Color Constancy

    Abstract 在计算色彩恒常性中,将场景的光照从物体的表象中回归是一种普遍采用的方法.然而,由于光源未知.材料的反射性质不同.外部成像因素(如不同的相机传感器)等原因造成的固有外观和标签的模糊性, ...

  2. Automatic White Balance(AWB)/Color Constancy(CC)系列论文

    ISP里面有个叫自动白平衡(AWB)的算法,学术界叫色彩恒常性(CC),其实解决的是同一个问题:使得相机获取的图像和人看到的颜色是一样的. 本文主要介绍用神经网络解决该问题的方法,要想深入理解,建议读 ...

  3. 颜色恒常性CVPR2020 Multi-Domain Learning for Accurate and Few-Shot Color Constancy阅读笔记

    原文引用:Xiao J , Gu S , Zhang L . Multi-Domain Learning for Accurate and Few-Shot Color Constancy[C]// ...

  4. 基于色彩恒常( color constancy)特性的Frankle-McCann Retinex图像增强。

    from:https://www.cnblogs.com/Imageshop/archive/2013/04/18/3029352.html 基于色彩恒常( color constancy)特性的Fr ...

  5. 卷积神经网络CNN(3)—— FCN(Fully Convolutional Networks)要点解释

    卷积神经网络CNN(3)-- FCN(Fully Convolutional Networks)要点解释

  6. Fully Convolutional Networks for Semantic Segmentation (FCN)论文翻译和理解

    论文题目:Fully Convolutional Networks for Semantic Segmentation 论文来源:Fully Convolutional Networks for Se ...

  7. 白平衡(Color Constancy,无监督AWB):CVPR2019论文解析

    白平衡(Color Constancy,无监督AWB):CVPR2019论文解析 Quasi-Unsupervised Color Constancy 论文链接: http://openaccess. ...

  8. 深度学习白平衡(Color Constancy,AWB):ICCV2019论文解析

    深度学习白平衡(Color Constancy,AWB):ICCV2019论文解析 What Else Can Fool Deep Learning? Addressing Color Constan ...

  9. 【论文阅读】Color Constancy by Learning to Predict Chromaticity from Luminance

    论文:Color Constancy by Learning to Predict Chromaticity from Luminance 作者:Ayan Chakrabarti 年份:2015 期刊 ...

最新文章

  1. SQL Server 2008 R2如何开启数据库的远程连接
  2. 纪念:2006年我在51CTO的第一帖
  3. linux ubuntu systemd-udevd进程 cpu占用过高 解决方法
  4. JS判断请求来自Android手机还是iPhone手机,根据不同的手机跳转到不同的链接。...
  5. 怎么把 CDialogBar像工具条一样使用,有图有真相
  6. Windiws环境安装轻量级文件服务器ftpserver
  7. HDUOJ-----X问题
  8. 中国内窥镜仪器固定臂市场趋势报告、技术动态创新及市场预测
  9. 全球首发1毫秒计费模式,腾讯云引领Serverless时代新标准
  10. 搜狗入选Fast Company最具创新力公司,智能翻译机表现抢眼
  11. Navicat工具怎么连接oracle数据库
  12. 孙鑫VC学习笔记:第十五讲 (二) 线程创建方法
  13. 【pygame游戏编程】第四篇-----打字测速游戏
  14. 双闭环直流调速系统的MATLAB的仿真,双闭环直流调速系统MATLAB仿真
  15. 安卓系统如何访问wincc服务器,wincc客户端读取服务器数据库
  16. TaggedInputSplit cannot be cast to org.apache.hadoop.mapreduce.lib.input.FileSplit
  17. Unity3D 显示FPS
  18. 查看 gmail 办法_如何在Gmail对话主题上查看新电子邮件
  19. 143_iOS干货50_认识几个概念:跨域问题和内网穿透
  20. python数据分析就业市场调查报告

热门文章

  1. 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡
  2. android开发微信分享隐藏logo,前两天刚刚做了微信分享自定义logo和文字,做个标记,从零开始记录...
  3. 在Windows系统上对hfds中的文件进行操作
  4. 【组合数学】组合数学简介 ( 组合思想 2 : 数学归纳法 | 数学归纳法推广 | 多重归纳思想 )
  5. 中亦安图通过创业板注册:年营收近12亿 拟募资6亿
  6. 使用httpModule做权限系统
  7. html 怎么插入向上的箭头,如何在html中插入箭头?
  8. win10安装Ubuntu16.04
  9. matlab我方指挥,【单选题】机场指挥塔位置:北纬30度35.343分,东经104度2.441分,在MATLAB中用变量...
  10. 数论 质因数分解 试除法