卷积神经网络

通过自适应卷积的视频帧插值——CGB

我的梦境 提交于 2019-12-03 04:36:27
论文链接:https://arxiv.org/abs/1703.07514 论文题目: Video Frame Interpolation via Adaptive Convolution (通过自适应卷积的视频帧插值) 发表时间: 2017 年 CVPR 作者及其背景: Simon Niklaus, Long Mai, Feng Liu (波特兰州立大学 Portland State University ) 1.提出问题    传统视频帧插值方法是两步走:运动估计和像素合成。运动估计一般使用光流法 optical flow ,光流法的难点在于遮挡,污渍和突然的光环境变化。基 于流的像素综合也不能很可靠地处理遮挡的问题。 2.解决办法     之前的插值是两步走的:运动估计 motion estimation 和像素合成 pixel synthesis 。文章提出了一种鲁棒的视频帧插值方法,该方法使用深度卷积 神经网络实现帧插值,而无需将其明确划分为单独的步骤。这个方法中用来生成插值帧 interpolated frame 的“像素合 成”法 pixel synthesis ,就是作用在 两个输入图像之间局部卷积 local convolution ( 也就是说,对两张输入图片进行像素级别的卷积,可以生成一张 插值图片 )。这个卷积核作者号称可以捕获两帧图片之间的局部运动

深度学习之TCN网络

百般思念 提交于 2019-12-03 04:28:49
论文链接: https://arxiv.org/pdf/1803.01271.pdf TCN(Temporal Convolutional Networks) TCN特点: 可实现接收任意长度的输入序列作为输入,同时将其映射为等长的输出序列,这方面比较像RNN。 计算是layer-wise的,即每个时刻被同时计算,而非时序上串行。 其卷积网络层层之间是有因果关系的,意味着不会有“漏接”的历史信息或是未来数据的情况发生,即便 LSTM 它有记忆门,也无法完完全全的记得所有的历史信息,更何况要是该信息无用了就会逐渐被遗忘。 TCN组成: \[TCN = 1D \ FCN + causal convolutions\] TCN结构图: 因果卷积(Causal Convolution) 因果卷积可以用上图直观表示。 即对于上一层t时刻的值,只依赖于下一层t时刻及其之前的值。和传统的卷积神经网络的不同之处在于,因果卷积不能看到未来的数据,它是单向的结构,不是双向的。也就是说只有有了前面的因才有后面的果,是一种严格的时间约束模型,因此被成为因果卷积。 膨胀卷积(Dilated Convolution) 如图TCN结构图(a)。单纯的因果卷积还是存在传统卷积神经网络的问题,即对时间的建模长度受限于卷积核大小的,如果要想抓去更长的依赖关系,就需要线性的堆叠很多的层。为了解决这个问题

基于theano的卷积神经网络实现中遇到的问题

佐手、 提交于 2019-12-03 04:11:11
No module named theano.tensor.nnet 在使用Anaconda Navigator-jupyter notebook运行下面的python代码时,出现上述问题。 import theano from theano.tensor.nnet import conv import theano.tensor as T 解决方法: 在Anaconda – Environments中安装需要的theano组件。 注意:有时会因为网络问题,导致部分安装失败,可以多次尝试。 UserWarning: downsample module has been moved 在运行下面代码的时候,出现如下错误提示: from theano.tensor.signal import downsample 解决方法:将上述代码改为: from theano.tensor.signal import pool # from theano.tensor.signal import downsample 同时,对于使用了下面代码的语句,也需要做一些改动。 pool_out = downsample.max_pool_2d(input, maxpool_shape, ignore_border=True) # 改为: pool_out = pool.pool_2d(input,

经典卷积神经网络——AlexNet

时光总嘲笑我的痴心妄想 提交于 2019-12-03 01:57:52
一.网络结构   AlexNet由5层卷积层和3层全连接层组成。   论文中是把网络放在两个GPU上进行,为了方便我们仅考虑一个GPU的情况。   上图中的输入是 224 × 224 224×224,不过经过计算 ( 224 − 11 ) / 4 = 54.75 (224−11)/4=54.75并不是论文中的 55 × 55 55×55,而使用 227 × 227 227×227作为输入,   卷积层C1:处理流程为:卷积、ReLU、LRN、池化、     卷积:输入为227x227x3,使用96个11x11x3的卷积核,步长为4x4,得到FeatureMap为55x55x96     池化:3x3最大池化,步长为2,得到27x27x96的FeatureMap   卷积层C2: 处理流程为:卷积、ReLU、LRN、池化     卷积:输入为27x27x96,使用256个5x5x96的卷积核(padding = 2),步长为1x1,得到FeatureMap为27*27*256     池化:3x3最大池化,步长为2,得到13x13x26的FeatureMap   卷积层C3: 处理流程为:卷积、ReLU     卷积: 输入为13x13x256,使用384个3x3x256的卷积核(padding = 1),,步长为1x1,得到13x13x384的FeatureMap   卷积层C4:

卷积神经网络CNN原理详解――基本原理(一)

匿名 (未验证) 提交于 2019-12-03 00:43:02
神经网络的预备知识 特征提取的高效性。 大家可能会疑惑,对于同一个分类任务,我们可以用机器学习的算法来做,为什么要用神经网络呢?大家回顾一下,一个分类任务,我们在用机器学习算法来做时,首先要明确feature和label,然后把这个数据"灌"到算法里去训练,最后保存模型,再来预测分类的准确性。但是这就有个问题,即我们需要实现确定好特征,每一个特征即为一个维度,特征数目过少,我们可能无法精确的分类出来,即我们所说的欠拟合,如果特征数目过多,可能会导致我们在分类过程中过于注重某个特征导致分类错误,即过拟合。   举个简单的例子,现在有一堆数据集,让我们分类出西瓜和冬瓜,如果只有两个特征:形状和颜色,可能没法分区来;如果特征的维度有:形状、颜色、瓜瓤颜色、瓜皮的花纹等等,可能很容易分类出来;如果我们的特征是:形状、颜色、瓜瓤颜色、瓜皮花纹、瓜蒂、瓜籽的数量,瓜籽的颜色、瓜籽的大小、瓜籽的分布情况、瓜籽的XXX等等,很有可能会过拟合,譬如有的冬瓜的瓜籽数量和西瓜的类似,模型训练后这类特征的权重较高,就很容易分错。这就导致我们在特征工程上需要花很多时间和精力,才能使模型训练得到一个好的效果。然而神经网络的出现使我们不需要做大量的特征工程,譬如提前设计好特征的内容或者说特征的数量等等,我们可以直接把数据灌进去,让它自己训练,自我“修正”,即可得到一个较好的效果。 数据格式的简易性  

吴恩达《深度学习》第四门课(1)卷积神经网络

匿名 (未验证) 提交于 2019-12-03 00:41:02
1.1计算机视觉 (1)计算机视觉的应用包括图像分类、目标检测、图像分割、风格迁移等,下图展示了风格迁移案例: (2)图像的特征量非常之大,比如一个3通道的1000*1000的照片,其特征为3*1000*1000达到300万,如果第一个隐藏层有1000个单元那么W[1]有20亿个参数,计算量不仅大,而且由于图像样本相对于特征实在是太少,导致很容易过拟合,所以需要其他的方式来连接,即卷积。 1.2边缘检测示例 (1)卷积运算是输入图像与过滤器(也叫核)进行的运算,得到输出图像。卷积核与图像对应的位置相乘求和得到一个新值,如下图所示: 输出中第一个绿色框的值为: (2)每个不同的核可以检测到不同的边缘特性,如下面的核就可以检测到图像的垂直特性,即输入图像中的边缘会在输出图像中用白色显示出来,非边缘部分显示为黑色或灰色。同理还有其他水平边缘检测等各种核(过滤器)。 1.3更多边缘检测的内容 (1)除了上面提到的卷积核,还有其他许多卷积核,把上面3*3的卷积核看成9个参数,然后不是通过人工的确定,而是通过神经网络来学习这些参数,这就是卷积神经网络。 1.4Padding (1)边缘不填充会有两个缺点:第一是随着不断卷积,图像会变得越来越小,有时你可不想让它变小;第二是最角落的点只被使用了一次,这意味着在下传的过程中丢掉了图像边缘位置的信息。如下图所示(角落的绿色点只被计算了一次

卷积神经网络---padding

匿名 (未验证) 提交于 2019-12-03 00:41:02
# coding:utf-8 import tensorflow as tf tf.reset_default_graph() image = tf.random_normal([1, 112, 96, 3 ]) in_channels = 3 out_channels = 32 kernel_size = 5 conv_weight = tf.Variable(tf.truncated_normal([kernel_size, kernel_size, in_channels, out_channels], stddev=0.1 , dtype = tf.float32)) print ‘ image shape ‘ , image.get_shape() print ‘ conv weight shape ‘ , conv_weight.get_shape() bias = tf.Variable(tf.zeros([out_channels], dtype= tf.float32)) conv = tf.nn.conv2d(image, conv_weight, strides=[1, 3, 3, 1], padding= ‘ SAME ‘ ) conv = tf.nn.bias_add(conv, bias) print ‘ conv output shape with

语义分割--(DenseASPP )DenseASPP for Semantic Segmentation in Street Scenes

匿名 (未验证) 提交于 2019-12-03 00:37:01
DenseASPP DenseASPP for Semantic Segmentation in Street Scenes 原文地址: DenseASPP 收录:CVPR2018(IEEE Conference on Computer Vision and Pattern Recognition) 代码: PyTorch 简介: 将DeepLab系列中的ASPP和DenseNet中的密集连接相结合,构成了DenseASPP。新的模块具有更大的接收野和更密集的采样点。在CityScapes上获得了state-of-the-art的标签。 关于扩张卷积和DenseNet的相关文章解读: DRN HDC DeepLabv3 DeepLabv2 DenseNet Abstract 使用扩张卷积(Atrous Convolution)能够在不牺牲特征空间分辨率的同时扩大特征接收野,DeepLab系列工作结合多尺度信息和扩张卷积的特点提出了ASPP模块,将不同扩张率的扩张卷积特征结合到一起。但论文认为ASPP模块在尺度轴上特征分辨率还不够密集,获取的接收野还不够大,为此提出了DenseASPP(Densely connected ASPP),以更密集的方式连接一组扩张卷积,获得了更大的范围的扩张率,并且更加密集。在没有显著增加模型大小的情况下

Caffe中如何计算卷积

匿名 (未验证) 提交于 2019-12-03 00:37:01
1.caffe中通过构造两个矩阵实现: Caffe中的卷积计算是将卷积核矩阵和输入图像矩阵变换为两个大的矩阵A与B,然后A与B进行矩阵相乘得到结果C(利用GPU进行矩阵相乘的高效性),三个矩阵的说明如下: (1)在矩阵A中 M为卷积核个数,K=k*k,等于卷积核大小,即第一个矩阵每行为一个卷积核向量(是将二维的卷积核转化为一维),总共有M行,表示有M个卷积核。 (2)在矩阵B中 image_h:输入图像的高度 image_w:输入图像的宽度 pad_h:在输入图像的高度方向两边各增加pad_h个单位长度(因为有两边,所以乘以2) pad_w:在输入图像的宽度方向两边各增加pad_w个单位长度(因为有两边,所以乘以2) kernel_h:卷积核的高度 kernel_w:卷积核的宽度 stride_h:高度方向的滑动步长; stride_w:宽度方向的滑动步长。 因此,N为输出图像大小的长宽乘积,也是卷积核在输入图像上滑动可截取的最大特征数。 K=k*k,表示利用卷积核大小的框在输入图像上滑动所截取的数据大小,与卷积核大小一样大。 (3)在矩阵C中 矩阵C为矩阵A和矩阵B相乘的结果,得到一个M*N的矩阵,其中每行表示一个输出图像即feature map,共有M个输出图像(输出图像数目等于卷积核数目) (在Caffe中是使用src/caffe/util/im2col

TensorFlow下CNN在MNIST数据集下的实验

匿名 (未验证) 提交于 2019-12-03 00:30:01
#coding:utf-8 from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf mnist = input_data.read_data_sets ( "MNIST_data/" , one_hot = True ) sess = tf.InteractiveSession () x = tf.placeholder ( "float" , [ None , 784 ] ) y_ = tf.placeholder ( "float" , [ None , 10 ] ) W = tf.Variable ( tf.zeros ( [ 784 , 10 ] )) b = tf.Variable ( tf.zeros ( [ 10 ] )) sess.run ( tf.initialize_all_variables ()) #权重初始化 def weight_variable ( shape ) : initial = tf.truncated_normal ( shape , stddev = 0.1 ) return tf.Variable ( initial ) def bias_variable ( shape ) : initial = tf.constant (