Matlab图像识别/检索系列(11)—开源介绍之深度学习工具MatConvNet toolbox
2017-12-27 20:17
861 查看
Matlab自带神经网络工具箱在2017b版本中才出现,而在2014年9月,VLFeat就推出了深度神经网络工具箱MatConvNet。该工具箱功能全面,演示程序多,不但给出了深度网络各层(包括卷积层、池化层、激活层、Softmax层)和设置损失、dropout、归一化的实现函数,通过这些函数的组合实现自己的深度网络,还给出了简单卷积网络和DAG网络的封装,详细内容可参看帮助文档。同时,官网还提供了预训练模型,并给出了它们在物体检测、人脸识别、语义分割和ImageNet ILSVRC分类的应用,其中ImageNet ILSVRC分类使用的模型包括ResNet、GoogleNet、VGG-VD、VGG-S/M/F、Caffe reference model和Alexnet,对学习和研究人员有很大参考价值。
除该工具箱给的演示程序外,牛津大学VGG也有相关演示程序,可进入Oxford Vision Geometry Group页面中的 practical,进入该页面后请下载大小为约800兆的文件,该文件中包含了编译过的脚本文件和数据,演示程序可直接运行。除了该演示外,Oxford VGG还提供了许多与图像检索、识别的项目,详细内容请查看software和projects,这些内容是该项目组多年成果,对相关领域研究有很大帮助。
下面简单介绍一个来自practical-CNN的示例exercise1.m。
下面是来自practical-category-recognition-cnn-2017a的示例exercise2.m。
工具箱的主要函数有:
Building blocks
vl_nnbnorm Batch normalization.
vl_nnbilinearsampler Bilinear Sampler.
vl_nnconv Linear convolution by a filter.
vl_nnconcat Concatenation.
vl_nnconvt Convolution transpose.
vl_nncrop Cropping.
vl_nndropout Dropout.
vl_nnloss Classification log-loss.
vl_nnnoffset Norm-dependent offset.
vl_nnnormalize Local Response Normalization (LRN).
vl_nnpdist Pairwise distances.
vl_nnpool Max and sum pooling.
vl_nnrelu Rectified Linear Unit.
vl_nnroipool Region of interest pooling.
vl_nnsigmoid Sigmoid.
vl_nnsoftmax Channel soft-max.
vl_nnsoftmaxloss Deprecated
vl_nnspnorm Spatial normalization.
SimpleCNN wrapper
vl_simplenn A lightweight wrapper for CNNs with a linear topology.
vl_simplenn_tidy Upgrade or otherwise fix a CNN.
vi_simplenn_display Print information about the CNN architecture.
vl_simplenn_move Move the CNN between CPU and GPU.
DagNN wrapper
DagNN An object-oriented wrapper for CNN with complex topologies
Other functions
vl_argparse A helper function to parse optional arguments.
vl_compilenn Compile the MEX fields in the toolbox.
vl_contrib Download, compile, and setup third-party modules.
vl_rootnn Return the path to the MatConvNet toolbox installation.
vl_setpunn Setup MatConvNet for use in MATLAB.
vl_imreadjpeg Quickly load a batch of JPEG images.
vl_taccum Accumulate tensors operating in-place when possible.
vl_tmove Exchange tensors between MATLAB processes and GPUs.
vl_tshow Show a tensor on screen.
除该工具箱给的演示程序外,牛津大学VGG也有相关演示程序,可进入Oxford Vision Geometry Group页面中的 practical,进入该页面后请下载大小为约800兆的文件,该文件中包含了编译过的脚本文件和数据,演示程序可直接运行。除了该演示外,Oxford VGG还提供了许多与图像检索、识别的项目,详细内容请查看software和projects,这些内容是该项目组多年成果,对相关领域研究有很大帮助。
下面简单介绍一个来自practical-CNN的示例exercise1.m。
%exercise1.m setup ; x = imread('peppers.png') ; % 将图像数据转换为单精度 x = im2single(x) ; % 显示输入图像 figure(1) ; clf ; imagesc(x) ; % 初始化卷基层参数 w = randn(5,5,3,10,'single') ; %对输入图像进行卷积运算 y = vl_nnconv(x, w, []) ; figure(2) ; clf ; vl_imarraysc(y) ; colormap gray ; % 对输入图像进行步长为16的卷积,达到下采样效果 y_ds = vl_nnconv(x, w, [], 'stride', 16) ; figure(3) ; clf ; vl_imarraysc(y_ds) ; colormap gray ; %对输入图像进行有填充的卷积 y_pad = vl_nnconv(x, w, [], 'pad', 4) ; figure(4) ; clf ; vl_imarraysc(y_pad) ; colormap gray ; % 手动设置卷积核系数 w = [0 1 0 ; 1 -4 1 ; 0 1 0 ] ; w = single(repmat(w, [1, 1, 3])) ; y_lap = vl_nnconv(x, w, []) ; figure(5) ; clf ; colormap gray ; subplot(1,2,1) ; imagesc(y_lap) ; title('filter output') ; subplot(1,2,2) ; imagesc(-abs(y_lap)) ; title('- abs(filter output)') ; w = single(repmat([1 0 -1], [1, 1, 3])) ; w = cat(4, w, -w) ; y = vl_nnconv(x, w, []) ; %对卷积输出进行激活运算 z = vl_nnrelu(y) ; figure(6) ; clf ; colormap gray ; subplot(1,2,1) ; vl_imarraysc(y) ; subplot(1,2,2) ; vl_imarraysc(z) ; %对卷积输出进行池化运算 y = vl_nnpool(x, 15) ; figure(7) ; clf ; imagesc(y) ; rho = 5 ; kappa = 0 ; alpha = 1 ; beta = 0.5 ; %对卷积输出进行归一化运算 y_nrm = vl_nnnormalize(x, [rho kappa alpha beta]) ; figure(8) ; clf ; imagesc(y_nrm) ;
下面是来自practical-category-recognition-cnn-2017a的示例exercise2.m。
%exercise2.m setup ; %加载预训练模型,需要先下载该模型文件 encoding = 'vggm128-conv4' ; % 是否使用图像增强,即增加图像数量 augmentation = false ; % 计算图像正例特征 encoder = loadEncoder(encoding) ; pos.names = getImageSet('data/myImages', augmentation) ; if numel(pos.names) == 0, error('Please add some images to data/myImages before running this exercise') ; end pos.descriptors = encodeImage(encoder, pos.names, ['data/cache_' encoding]) ; % 加入噪声图像 neg = load(sprintf('data/background_train_%s.mat',encoding)) ; names = {pos.names{:}, neg.names{:}}; descriptors = [pos.descriptors, neg.descriptors] ; labels = [ones(1,numel(pos.names)), - ones(1,numel(neg.names))] ; clear pos neg ; %加载测试图像 pos = load(sprintf('data/horse_val_%s.mat',encoding)) ; neg = load(sprintf('data/background_val_%s.mat',encoding)) ; testNames = {pos.names{:}, neg.names{:}}; testDescriptors = [pos.descriptors, neg.descriptors] ; testLabels = [ones(1,numel(pos.names)), - ones(1,numel(neg.names))] ; clear pos neg ; fprintf('Number of training images: %d positive, %d negative\n', ... sum(labels > 0), sum(labels < 0)) ; fprintf('Number of testing images: %d positive, %d negative\n', ... sum(testLabels > 0), sum(testLabels < 0)) ; % 对特征进行L2归一化 descriptors = bsxfun(@times, descriptors, 1./sqrt(sum(descriptors.^2,1))) ; testDescriptors = bsxfun(@times, testDescriptors, 1./sqrt(sum(testDescriptors.^2,1))) ; %训练线性SVM模型 C = 10 ; [w, bias] = trainLinearSVM(descriptors, labels, C) ; % 计算训练数据得分 scores = w' * descriptors + bias ; % 计算测试数据得分 testScores = w' * testDescriptors + bias ; figure(3) ; clf ; set(3,'name','Ranked test images (subset)') ; displayRankedImageList(testNames, testScores) ; % 显示precision-recall曲线 figure(4) ; clf ; set(4,'name','Precision-recall on test data') ; vl_pr(testLabels, testScores) ; % 显示平均准确率 [drop,drop,info] = vl_pr(testLabels, testScores) ; fprintf('Test AP: %.2f\n', info.auc) ; [drop,perm] = sort(testScores,'descend') ; fprintf('Correctly retrieved in the top 36: %d\n', sum(testLabels(perm(1:36)) > 0)) ;
工具箱的主要函数有:
Building blocks
vl_nnbnorm Batch normalization.
vl_nnbilinearsampler Bilinear Sampler.
vl_nnconv Linear convolution by a filter.
vl_nnconcat Concatenation.
vl_nnconvt Convolution transpose.
vl_nncrop Cropping.
vl_nndropout Dropout.
vl_nnloss Classification log-loss.
vl_nnnoffset Norm-dependent offset.
vl_nnnormalize Local Response Normalization (LRN).
vl_nnpdist Pairwise distances.
vl_nnpool Max and sum pooling.
vl_nnrelu Rectified Linear Unit.
vl_nnroipool Region of interest pooling.
vl_nnsigmoid Sigmoid.
vl_nnsoftmax Channel soft-max.
vl_nnsoftmaxloss Deprecated
vl_nnspnorm Spatial normalization.
SimpleCNN wrapper
vl_simplenn A lightweight wrapper for CNNs with a linear topology.
vl_simplenn_tidy Upgrade or otherwise fix a CNN.
vi_simplenn_display Print information about the CNN architecture.
vl_simplenn_move Move the CNN between CPU and GPU.
DagNN wrapper
DagNN An object-oriented wrapper for CNN with complex topologies
Other functions
vl_argparse A helper function to parse optional arguments.
vl_compilenn Compile the MEX fields in the toolbox.
vl_contrib Download, compile, and setup third-party modules.
vl_rootnn Return the path to the MatConvNet toolbox installation.
vl_setpunn Setup MatConvNet for use in MATLAB.
vl_imreadjpeg Quickly load a batch of JPEG images.
vl_taccum Accumulate tensors operating in-place when possible.
vl_tmove Exchange tensors between MATLAB processes and GPUs.
vl_tshow Show a tensor on screen.
相关文章推荐
- Matlab图像识别/检索系列(9)—开源工具介绍之图像识别reco_toolbox
- Matlab图像识别/检索系列(8)—开源工具介绍之vlfeat
- Matlab图像识别/检索系列(5)—10行代码完成深度学习网络之CNN/Autoencoder
- Matlab图像识别/检索系列(6)-10行代码完成深度学习网络之基于CNN的图像分类
- Matlab图像识别/检索系列(10)—开源介绍之图像检索caltech-image-search
- Matlab图像识别/检索系列(6)-10行代码完成深度学习网络之基于CNN的图像分类
- Matlab图像识别/检索系列(7)-10行代码完成深度学习网络之取中间层数据作为特征
- 深度学习开源工具——caffe介绍
- 深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统
- 深度学习开源工具——caffe介绍
- 【BDTC 2015】深度学习分论坛:DL的图像识别、语音识别应用进展及MxNet开源框架设计
- 利用Matlab自带的深度学习工具进行车辆区域检测与车型识别【福利-内附源码与数据库】(一)
- 深度学习开源工具——caffe介绍
- 利用Matlab自带的深度学习工具进行车辆区域检测与车型识别【福利-内附源码与数据库】(二)
- 深度 | Facebook的图像识别很强大,一次开源了三款机器视觉工具(附论文)
- matlab 关于利用深度学习进行图像识别
- 利用Matlab自带的深度学习工具进行车辆区域检测与车型识别【Github更新!!!】(三)
- 深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统
- Matlab图像识别/检索系列(2)—10行代码完成分类、识别
- Matlab图像识别/检索系列(3)—10行代码完成caltech图象集分类和识别