如何下载和编译 VLFeat
更新时间
VLFeat 最新版本是 0.9.21,官网提供 Windows、Mac OS X、Linux 的二进制包,也提供源码和安装仓库。如果你只是想在 MATLAB 或 Octave 里调用 SIFT、MSER、k-means 等算法,直接下载对应平台的二进制包即可;如果你需要修改源码、在 C 项目中静态链接,或二进制包与你的编译器/系统不兼容,则下载源码自行编译。编译说明按平台分为 UNIX-like 平台和 Windows 两类,文档中另有 Xcode、Visual C++、g++ 等具体环境的使用说明。
下载:先确认你需要哪一类包
官网首页的 Download 区域提供两类内容:
| 内容 | 适合谁 | 说明 |
|---|---|---|
| VLFeat 0.9.21 二进制包(Windows、Mac、Linux) | 在 MATLAB/Octave 中直接调用,或使用命令行工具 | 免编译,解压后按文档配置路径即可 |
| 源码与安装仓库 | 需要自行编译、修改源码、排查问题 | 同时提供 bug tracking 入口 |
版本信息以官网 News 为准:0.9.21 于 2018/8/1 发布,属于维护版本,修复了 vl_argparse 与 MatConvNet 的兼容性,并修复了较新版本 macOS 上的二进制文件。更早的 0.9.20(2015/1/14)同样是维护版本。也就是说,0.9.21 是当前应优先选择的版本,尤其在使用较新 macOS 时。
编译:按平台走两条路径
官网的 Compiling 部分把编译说明分成两类:
- UNIX-like 平台:覆盖 Linux、Mac OS X 等环境,通常用
make完成构建。 - Windows:单独一套说明,文档中另有 Visual C++ 环境的使用指引。
此外,文档还提供 Xcode(macOS 图形化开发环境)和 g++ 的使用说明。选择哪条路径取决于你的目标:
- 只想在 MATLAB 中跑算法:不需要编译,用二进制包,按 “Using from MATLAB” 页面配置即可。
- 在 Octave 中使用:同样优先用二进制包,参考 “Using from Octave”。
- 在 C 程序中调用:需要拿到编译产物(库文件与头文件),按 “Using from C” 配置包含路径和链接参数;若二进制包不匹配你的工具链,则从源码编译。
- 只用命令行工具:参考 “Using from the command line”,二进制包中已包含相应可执行文件。
编译前需要准备的前提,官网没有逐项列出具体依赖清单,因此以对应平台的编译页面为准;不要假设二进制包一定能在任意编译器版本下直接链接。
验证安装是否成功
编译或解压完成后,用最小任务验证,而不是只看文件是否存在:
- MATLAB/Octave:按 “Using from MATLAB” 页面把 VLFeat 加入搜索路径后,调用一个简单函数(例如
vl_version,或文档教程中的 SIFT 示例),能返回结果即说明路径配置正确。 - 命令行:运行文档中列出的命令行工具(如
sift、mser),能输出帮助或处理一张示例图即说明可执行文件可用。 - C 项目:编译一个只调用库初始化或版本查询的最小程序,链接通过且运行不报错,再接入实际算法。
常见卡点
- macOS 上二进制包异常:0.9.21 的发布说明专门提到修复了较新 macOS 的二进制文件,遇到加载失败先确认版本是否为 0.9.21。
- MATLAB 中函数找不到:多为路径未加入或加入顺序不对,回到 “Using from MATLAB” 页面核对。
- C 链接失败:通常是头文件路径或库路径与你的平台/架构不匹配,此时改用源码按对应平台编译更稳妥。
- Windows 下编译报错:优先按 Windows 编译说明和 Visual C++ 指引操作,不要直接套用 UNIX-like 的步骤。
配套文档与教程
官网 Documentation 区域提供 MATLAB API、C API(含算法描述)和命令行工具的 man pages,Tutorials 覆盖局部特征帧、协变特征检测器、HOG、SIFT 检测子与描述子、Dense SIFT、LIOP、MSER、距离变换、Fisher Vector 与 VLAD、GMM、k-means、层次 k-means、AIB、quick shift、SLIC、SVM、KD 树与森林、AP/ROC 曲线绘制等主题。示例应用包括 Caltech-101 分类和 SIFT 匹配自动拼接,可作为安装后验证与入门的现成任务。