神经网络中的卷积与反卷积
引言普通图像反卷积,跟深度学习中的反卷积是一回事吗?别傻傻分不清!其实它们根本不是一个概念
图像反卷积最早支持反卷积是因为图像去噪跟去模糊,知道图像去模糊时候会使用反卷积技术,那个是真正的反卷积计算,会估算核,会有很复杂的数学推导,主要用在图像的预处理与数字信号处理中。本质上反卷积是一种图像复原技术,典型的图像模糊可以看成事图像卷积操作得到的结果,把模糊图像重新复原为清晰图像的过程常常被称为去模糊技术,根据模糊的类别不同可以分为运动模糊与离焦模糊,OpenCV支持对这两张模糊图像进行反卷积处理得到清晰图像。反卷积的基本原理就是把图像转换到频率域,通过估算图像的核函数,在频率域对图像点乘计算之后,重新获取图像信息,转回为空间域。主要操作都在频率域,转换通过离散傅里叶(DFT)变换与反变换,通过维纳滤波处理获取反模糊信息,OpenCV支持反卷积采用维纳滤波方式的去模糊,但是参数调整事一个大坑,基本上每张图像的参数都不一样,很难有相同的结果。最近这些年,图像反模糊逐步被深度学习的方法引领,OpenCV提供的那几个函数越来越少的人知道,主要是通用性很差。
深度学习中的反卷积深度学习中典型网络就 ...
知识蒸馏简介
介绍在化学中,蒸馏是一种有效的分离不同沸点组分的方法,大致步骤是先升温使低沸点的组分汽化,然后降温冷凝,达到分离出目标物质的目的。化学蒸馏条件:(1)蒸馏的液体是混合物;(2)各组分沸点不同。
一般地,大模型往往是单个复杂网络或者是若干网络的集合,拥有良好的性能和泛化能力,而小模型因为网络规模较小,表达能力有限。因此,可以利用大模型学习到的知识去指导小模型训练,使得小模型具有与大模型相当的性能,但是参数数量大幅降低,从而实现模型压缩与加速,这就是知识蒸馏与迁移学习在模型优化中的应用。Hinton等人最早在文章《Distilling the Knowledge in a Neural Network》中提出了知识蒸馏这个概念,其核心思想是先训练一个复杂网络模型,然后使用这个复杂网络的输出和数据的真实标签去训练一个更小的网络,因此知识蒸馏框架通常包含了一个复杂模型(被称为Teacher模型)和一个小模型(被称为Student模型)。
知识蒸馏的作用深度学习在计算机视觉、语音识别、自然语言处理等内的众多领域中均取得了令人难以置信的性能。但是,大多数模型在计算上过于昂贵,无法在移动端或嵌入式设 ...
视频插帧之super_slomo
前言论文地址:Super SloMo: High Quality Estimation of Multiple Intermediate Frames for Video InterpolationGitHub:https://github.com/avinashpaliwal/Super-SloMo
super_slomo基于光流反向变换的框架,整体的结构如图所示:首先橙色部分使用Unet网络输入$I_{0},I_{1}$,输出$F_{0 \rightarrow 1}, F_{1 \rightarrow 0}$的双向光流。第二个网络也是Unet,但是输入部分和网络输出后需要经过计算得出最后的$I_{t}$。我们着重讲一下第二个网络。
输入部分公式super_slomo通过第一个橙色网络输出了双向光流$F_{0 \rightarrow 1}, F_{1 \rightarrow 0}$,那么中间流$F_{t \rightarrow 0},F_{t \rightarrow 1}$如何计算呢?我们可以近似为以下公式:$$F_{t \rightarrow 0} = -(1-t)tF_ ...
视频插帧之DVF中的体素流与三线性插值
体素(Voxel)题图中是3D数据的不同表示类型:(a) 点云(Point clouds):点云是三维空间(xyz坐标)点的集合(b) 体素网格(Voxel grids):体素是3D空间的像素。量化的,大小固定的点云。每个单元都是固定大小和离散坐标(相当于图片的像素化风格应用到三维上,像无数个正方体积木组成的三维形状)(c) 多边形网格(Polygon meshes):mesh是面片的集合(d) 多视图表示(Multi-view representations):多视图表示是从不同模拟视点渲染的2D图像集合
为了解释体素网格(Voxel grid),首先我们要了解占据栅格地图(Occupancy Grid Map)画一个二维网格,每个网格单元里有实体的话就为占据状态(1),空的话就为(0)。很好理解。
而体素就是固定分辨率的三维栅格地图。体素网格是固定分辨率的,与之对应可变分辨率的网格叫八叉树地图(Octomap)。
三线性插值为了便于理解,介绍三线性插值之前先介绍一下线性插值和双线性插值
线性插值已知数据 (x0, y0) 与 (x1, y1),要计算 [x0, x1] 区间内 ...
视频插帧之前后向变形
前言RIFE中使用了图像的后向变形技术,这里解释一下什么是前向变形和后向变形。
假设原图像为f(u,v),扭曲的目标图像是g(x,y)
foreward warping在已知图像坐标转换关系x(u,v)和y(u,v),直接把原图坐标映射到转换后图像相对应的位置上,近似取整得到结果。经过变换后,像素的位置可能落在非整数的位置,四舍五入(就近原则)选取坐落的终点,可能会有多个点四舍五入到同一个像素点,造成重叠效应;或者变换后的图像位置中没有投影过来的点,产生空洞。
带来的问题:新图上有很多点并不规整
backward warping/Inverse Warping对于每个获得新坐标(x,y),用逆向映射函数u(x,y),v(x,y)找到它在原图上对应的位置(u,v),然后g(x,y)=f(u,v)。若点算出来不在格子上,用插值方法获得像素值,因此不会产生的Forward Warping的问题。——– 这个地方还是不太懂 需要看backward warping/Inverse Warping相关论文
视频插帧之光流
光流场定义场景中景物的运动会导致运动期间所获得的图像中景物处在不同的相对位置,这种位置的差别可以称之为视差,它对应景物运动反应在图像上的位移矢量。如果用视差除以时差,就得到速度矢量。一幅图像所有速度矢量构成一个矢量场,在很多情况下也可称为光流场
利用图像差可以获得运动轨迹,利用光流不能获得运动轨迹,但可以获得对图像有用的信息。光流分析可以用于解决各种运动问题——摄像机静止目标运动、摄像机运动目标静止、两者都运动。光流场刻画了物体运动的速度大小及方向,二维光流场包含了运动速度信息和时间相干信息。
稀疏光流与稠密光流稀疏光流只计算某些特征明显的像素点的运动。稀疏光流估计最经典的算法是Lucas-Kanade method (KL)。稠密光流计算图像上所有像素点的运动。稠密光流是 Farneback。下图中作图为稀疏光流,右图为稠密光流。
怎么看稠密光流图上图中左图为第1帧图像,中间为第二帧图像,右图为第三帧图像。在光流图中,不同颜色表示不同的运动方向,深浅表示运动的速度。其参考图如下所示:所以可以知道视频中的右边米白色沙发大概是向右上角做平移。
中间流与双向流视频插帧的目标是在两个相 ...
视频插帧之RIFE
前言论文地址:RIFE:Real-Time Intermediate Flow Estimation for Video Frame Interpolation项目主页: https://zhuanlan.zhihu.com/p/568553080github代码:Pytorch版本
RIFERIFE有两个重要组成部分:
使用IFNet进行有效的中间流估算。
使用FusionNet对warp后的帧进行融合处理。
RIFE网络总体结构RIFE的总体框架如下图所示,其主要由IFNet、Backward Warp以及Fusion Process三个模块组成,其中RIFE的核心功能是由IFNet与Fusion实现的,因此后文我会着重介绍这两部分内容。RIFE的大致流程是先给定两张连续的帧,和取值范围为0到1的步长t,根据步长t来确定合成的中间帧的数量。IFNet先是直接对输入帧估计中间流信息,然后假设为线性运动从而估计,公式如下∶$$F_{t\rightarrow 1}=-\frac{1-t}{t}F_{t\rightarrow 0}$$这就是IFNet光流估计与传统的利 ...
视频插帧之DVF
前言2017年的视频插帧算法,使用的是类似于Unet的网络模型。整体结构比较简单,适合对视频插帧领域入门学习。论文地址:Video Frame Synthesis using Deep Voxel Flow项目主页: https://liuziwei7.github.io/projects/VoxelFlowgithub代码:Pytorch版本TensorFlow版本
DVF传统的基于光流的解决方案往往在流量估计具有挑战性的情况下失败,而直接产生像素值的基于神经网络的方法往往会产生模糊的结果。DVF结合这两种方法的优点,该方法可以通过以连续三帧图像作为训练数据,以1,3帧作为输入,中间第二帧作为输出无监督训练网络。训练好的模型可以通过连续两帧图像直接生成中间图像(也可以生成两帧外的图像,即外插帧)。
模型pipeline算法首先通过两张连续图片作为输入,通过卷积层和max pooling层多次encoder,再通过多次反卷积还原图像维度(很想unet的结构)。此时输出的时两张图像的体素流数据voxel flow layer,是一种3D的时空光流向量(其实个人认为就是光流估计中间流数据加 ...
神经网络之Unet
super—slomo图像插值算法中间使用了两个Unet网络,这里对Unet进行介绍。输入: 1*572*572输出: 2*388*388(1)UNet采用全卷积神经网络。(2)左边网络为特征提取网络:使用conv和pooling(3)右边网络为特征融合网络:使用上采样产生的特征图与左侧特征图进行concatenate操作。(pooling层会丢失图像信息和降低图像分辨率且是永久性的,对于图像分割任务有一些影响,对图像分类任务的影响不大,为什么要做上采样呢?上采样可以让包含高级抽象特征低分辨率图片在保留高级抽象特征的同时变为高分辨率,然后再与左边低级表层特征高分辨率图片进行concatenate操作)(4)最后再经过两次卷积操作,生成特征图,再用两个卷积核大小为1*1的卷积做分类得到最后的两张heatmap,例如第一张表示第一类的得分,第二张表示第二类的得分heatmap,然后作为softmax函数的输入,算出概率比较大的softmax,然后再进行loss,反向传播计算。
代码"""这是根据UNet模型搭建出的一个基本网络结构输入和输出大小是一样 ...
图像评价常用指标
论文中测试生成图像数据的评估指标,可用于光流估计、图像插帧等
PSNR:峰值信噪比PSNR全称为“Peak Signal-to-Noise Ratio”,中文意思即为峰值信噪比,是衡量图像质量的指标之一。图像与影像压缩中典型的峰值讯噪比值在30dB 到50dB 之间,越高越好。
$PSNR\approx50dB$ ,代表压缩后的图像仅有些许非常小的误差。
$PSNR>30dB$ ,人眼很难察觉压缩后和原始影像的差异。
$PSNR \in [20dB ,30dB]$,人眼就可以察觉出图像的差异。
$PSNR \in [10dB ,20dB]$,人眼还是可以用肉眼看出这个图像原始的结构,且直观上会判断两张图像不存在很大的差异。
$PSNR<10dB$,人类很难用肉眼去判断两个图像是否为相同,一个图像是否为另一个图像的压缩结果。
公式PSNR是基于MSE(均方误差)定义,对给定一个大小为m*n的原始图像I和对其添加噪声后的噪声图像K,其MSE可定义为:$$MSE=\frac{1}{m n} \sum_{i=0}^{m-1} \sum_{j=0 ...