deep features for text spotting 在linux,windows上使用

本文详细介绍了如何在Linux和Windows环境下为Matconvnet编译特定的C++和CUDA文件,包括必要的配置步骤及编译过程。适用于希望在不同操作系统上运行文本检测项目的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做文本检测这个方向的同学应该都知道 deep features for text spotting 这篇ECCV14的文章。

用的是Matconvnet这个是深度学习框架来做文本检测,同时他还提供了代码:  eccv2014_textspotting

不过这个代码里的Matconvnet不同于原版本Matconvnet,原版本的内容比较全,而这个repository里的算是阉割版,同时还新加入了几个cpp,cu文件。。。

不幸的是,新加入的几个文件只在mac上有编译好的mex文件,linux上,windows上都需要自己编译。接下来就讲讲如何在linux和windows下编译这几个cpp,cu的mex文件。

 


 linux 上的编译方法已经在repository中提到

1. Edit matconvnet/Makefile to ensure MEX points to your matlab mex binary. Optinally ENABLE_GPU.
2. cd matconvnet/ && make

已经提供了编译的模板,主要是要修改好matconvnet/Makefile_Linux中几个变量的路径,就可以直接编译了。

比如 我是Ubuntu上装的CUDA7.0就修改如下:

MEX ?= /usr/local/MATLAB/R2014b/bin/mex
MEXARCH = mexa64
NVCC ?= /usr/local/cuda-7.0/bin/nvcc
ENABLE_GPU = true
MEXOPTS_GPU= $(MEXOPTS) -DENABLE_GPU -L /usr/local/cuda-7.0/targets/x86_64-linux/lib -lcudart -lcublas -lcudadevrt -f matlab/src/mex_CUDA_glnxa64.sh

然后重命名Makefile_linux为Makefile,然后 cd matconvnet/,然后 make

这里提供我编译好的 .mexa64文件,:linux_version 。     注意:我在Ubuntu下用cuda7.0编译的,matlab版本是2014b。

把这些mex文件放在 matconvnet\matlab\mex下就能跑整个代码了。

 

 


 linux下用还是有点不方便,接下来主要讲一下windows下的编译

说来惭愧,本来想自己看明白makefile,然后逐个逐个编译的,但是在不知道nvcc和mex这两编译器该怎么个顺序,用啥编译参数,后来只能偷懒了。

Makefile里面说道了,主要是编译一下几个文件

cpp_src:=matlab/src/bits/im2col.cpp
cpp_src+=matlab/src/bits/pooling.cpp
cpp_src+=matlab/src/bits/normalize.cpp
mex_src:=matlab/src/gconv.cu
mex_src+=matlab/src/gpool.cu
mex_src+=matlab/src/gnormalize.cu
mex_src+=matlab/src/gsepconv.cu
mex_src+=matlab/src/gsepconv2.cu
cpp_src+=matlab/src/bits/im2col_gpu.cu
cpp_src+=matlab/src/bits/pooling_gpu.cu
cpp_src+=matlab/src/bits/normalize_gpu.cu

用过通用版的Matconvnet会有记得那边的windows编译很方便很简单,所以就直接用那边的程序编译了。

首先去下载一个通用版本的 Matconvnet : 通用版Matconvnet

然后用他提供的 matconvnet-master\matlab\vl_compilenn.m 进行编译,修改 vl_compilenn 这个文件里面 185来行的代码,原本是这样:

if opts.enableGpu, ext = 'cu' ; else ext='cpp' ; end
lib_src{end+1} = fullfile(root,'matlab','src','bits',['data.' ext]) ;
lib_src{end+1} = fullfile(root,'matlab','src','bits',['datamex.' ext]) ;
lib_src{end+1} = fullfile(root,'matlab','src','bits',['nnconv.' ext]) ;
lib_src{end+1} = fullfile(root,'matlab','src','bits',['nnfullyconnected.' ext]) ;
lib_src{end+1} = fullfile(root,'matlab','src','bits',['nnsubsample.' ext]) ;
lib_src{end+1} = fullfile(root,'matlab','src','bits',['nnpooling.' ext]) ;
lib_src{end+1} = fullfile(root,'matlab','src','bits',['nnnormalize.' ext]) ;
lib_src{end+1} = fullfile(root,'matlab','src','bits',['nnbnorm.' ext]) ;
lib_src{end+1} = fullfile(root,'matlab','src','bits',['nnbias.' ext]) ;
mex_src{end+1} = fullfile(root,'matlab','src',['vl_nnconv.' ext]) ;
mex_src{end+1} = fullfile(root,'matlab','src',['vl_nnconvt.' ext]) ;
mex_src{end+1} = fullfile(root,'matlab','src',['vl_nnpool.' ext]) ;
mex_src{end+1} = fullfile(root,'matlab','src',['vl_nnnormalize.' ext]) ;
mex_src{end+1} = fullfile(root,'matlab','src',['vl_nnbnorm.' ext]) ;

% CPU-specific files
lib_src{end+1} = fullfile(root,'matlab','src','bits','impl','im2row_cpu.cpp') ;
lib_src{end+1} = fullfile(root,'matlab','src','bits','impl','subsample_cpu.cpp') ;
lib_src{end+1} = fullfile(root,'matlab','src','bits','impl','copy_cpu.cpp') ;
lib_src{end+1} = fullfile(root,'matlab','src','bits','impl','pooling_cpu.cpp') ;
lib_src{end+1} = fullfile(root,'matlab','src','bits','impl','normalize_cpu.cpp') ;
lib_src{end+1} = fullfile(root,'matlab','src','bits','impl','bnorm_cpu.cpp') ;
lib_src{end+1} = fullfile(root,'matlab','src','bits','impl','tinythread.cpp') ;

% GPU-specific files
if opts.enableGpu
  lib_src{end+1} = fullfile(root,'matlab','src','bits','impl','im2row_gpu.cu') ;
  lib_src{end+1} = fullfile(root,'matlab','src','bits','impl','subsample_gpu.cu') ;
  lib_src{end+1} = fullfile(root,'matlab','src','bits','impl','copy_gpu.cu') ;
  lib_src{end+1} = fullfile(root,'matlab','src','bits','impl','pooling_gpu.cu') ;
  lib_src{end+1} = fullfile(root,'matlab','src','bits','impl','normalize_gpu.cu') ;
  lib_src{end+1} = fullfile(root,'matlab','src','bits','impl','bnorm_gpu.cu') ;
  lib_src{end+1} = fullfile(root,'matlab','src','bits','datacu.cu') ;
end

改成这样:

if opts.enableGpu, ext = 'cu' ; else ext='cpp' ; end
mex_src{end+1} = fullfile(root,'matlab','src',['gconv.' ext]) ;
mex_src{end+1} = fullfile(root,'matlab','src',['gnormalize.' ext]) ;
mex_src{end+1} = fullfile(root,'matlab','src',['gpool.' ext]) ;
mex_src{end+1} = fullfile(root,'matlab','src',['gsepconv.' ext]) ;
mex_src{end+1} = fullfile(root,'matlab','src',['gsepconv2.' ext]) % CPU-specific files lib_src{end+1} = fullfile(root,'matlab','src','bits','im2col.cpp') ; lib_src{end+1} = fullfile(root,'matlab','src','bits','pooling.cpp') ; lib_src{end+1} = fullfile(root,'matlab','src','bits','normalize.cpp') ; % GPU-specific files if opts.enableGpu   lib_src{end+1} = fullfile(root,'matlab','src','bits','im2col_gpu.cu') ;   lib_src{end+1} = fullfile(root,'matlab','src','bits','pooling_gpu.cu') ;   lib_src{end+1} = fullfile(root,'matlab','src','bits','normalize_gpu.cu') ; end

然后把 matconvnet-max-version\matlab\src\ 下 5个.cu文件 gconv.cu gnormalize.cu gpool.cu gsepconv.cu gsepconv2.cu ,还有 matconvnet-max-version\matlab\src\bits下的所有文件(除了mexutils.h),分别拷贝到拷贝到 matconvnet-master\matlab\src\ 和 matconvnet-master\matlab\src\bits下。

把vl_compilenn里的 opts.enableImreadJpeg 改为false, 其他不变。

matlab切换到 vl_compilenn.m根目录,以下列参数运行 

vl_compilenn('enableGpu', true, ...
'cudaRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5', ...
'cudaMethod', 'nvcc')
'cudaRoot'设置为你windows上装CUDA的位置就行。

 然后在mex目录下面就有.mexw64文件了。 就这么简单。

这里给我自己编译的  : window64位cuda6.5

 环境: x64,matlab2014b,cuda 6.5

 

转载于:https://www.cnblogs.com/jugg1024/p/5131679.html

### 基于深度自适应缩放网络的微表情检测方法 在计算机视觉领域,微表情(Micro-expression, ME)是一种短暂而快速的表情变化,通常持续时间仅为几十毫秒到一秒之间。由于其短时性和细微特征,传统的手工设计特征提取方法难以有效捕捉这些动态信息。近年来,随着深度学习技术的发展,研究者提出了多种基于卷积神经网络(CNNs)的方法来解决这一挑战。 #### 深度自适应缩放网络简介 一种名为 **Deep Self-Adaptive Scaling Network (DSASN)** 的模型被提出用于微表情检测任务[^1]。该模型的核心思想在于通过多尺度分析和自适应权重调整机制,增强对不同时间和空间分辨率下微弱信号的学习能力。具体而言: 1. **多尺度特征提取模块** DSASN 集成了多个并行分支结构,每个分支负责处理特定的空间或时间尺度下的输入数据。这种架构能够捕获从局部细节到全局模式的不同层次的信息。 2. **自适应加权融合策略** 不同尺度上的特征可能具有不同的重要性,在实际应用中无法预先设定固定的权重分配方案。因此,引入了一个可训练参数化的注意力机制,自动计算各路径贡献的比例系数,并将其应用于最终决策层之前完成特征级联操作。 3. **端到端优化框架** 整体流程采用监督方式构建损失函数指导整个系统的联合调优过程。相比传统两阶段方法先单独预估再组合结果的方式更加高效稳定。 以下是实现上述功能的一个简化版伪代码表示形式: ```python import torch.nn as nn class DSASNet(nn.Module): def __init__(self): super(DSASNet, self).__init__() # 定义多尺度子网 self.scale_1 = ScaleModule() self.scale_2 = ScaleModule() ... # 自适应权重模块 self.attention_layer = AttentionLayer() def forward(self, x): features_scales = [] scales_output = [self.scale_1(x), self.scale_2(x)] # 获取各个尺度的结果 for output in scales_output: features_scales.append(output) combined_features = torch.cat(features_scales, dim=1) # 特征拼接 weighted_combined = self.attention_layer(combined_features) # 加入注意力建模 return weighted_combined ``` 此部分描述了如何利用 CNN 提取图像序列中的潜在表征以及后续分类预测逻辑等内容。 #### 数据集与实验评估指标 为了验证所提算法的有效性,研究人员选取了几种公开可用的标准数据库进行测试对比实验,其中包括 SMIC-HD 和 CASME II 等知名资源库。主要关注以下几个方面性能表现情况: - 准确率(Accuracy): 表明识别正确样本占总数量比例大小; - 召回率(Recall/F1 Score): 综合考虑正类发现能力和误报控制水平之间的平衡关系; - 平均精度(Mean Average Precision,mAP): 对检索排名列表质量进行全面衡量标准之一; 通过对以上几个维度数值统计比较可以看出,相较于其他先进解决方案来说,本项目取得了较为理想的效果提升成果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值