【译】用boosting构建简单的目标分类器

简介: 用boosting构建简单的目标分类器原文boosting提供了一个简单的框架,用来构建鲁棒性的目标检测算法。这里提供了必要的函数来实现它:100% MATLAB实现,作为教学工具希望让它简单易得。

用boosting构建简单的目标分类器

原文
boosting提供了一个简单的框架,用来构建鲁棒性的目标检测算法。这里提供了必要的函数来实现它:100% MATLAB实现,作为教学工具希望让它简单易得。当然,用作实时应用还远远不够。

配置

下载数据集
下载LabelMe工具箱

解压并修改initpath.m中的路径
修改parameters.m中images和annotations的路径

函数说明

初始化
initpath.m - 添加必要的path。运行前务必调用它。
paameters.m - 包含众多用于配置分类器和数据集的参数。
Boosting工具
demoGentleBoost.m - GentleBoost的一个简单的例子,在二维空间使用stumps(决策桩)作为弱分类器
脚本
createDatabases.m - 从LabelMe数据集创建训练和测试数据
createDictinary.m - 从目标对象中创建一个滤波模版字典(??不理解,源码看不懂)
computeFeatures.m - 预先计算所有图像的特征并存储。正样本是目标外界矩形框crop出来的,负样本是从背景中稀疏取得的
trainDetector.m - 从LabelMe数据集创建训练和测试数据
runDetector.m - 在测试图像上运行检测器
特征和弱分类器
convCrossConv.m - 弱分类器:用一个局部的模版。。。(不懂。。。不理解作者原文的英文都是什么确切含义)
检测器
singleScaleBoostedDetector.m - 在测试图的单尺度上运行强分类器,算出bboxes和scores
LabelMe工具箱
LabelMe - 包含了用于操作数据集的工具函数

例子

配置
首先运行initpath.m并修改parameters.m中的文件夹路径
Boosting
先运行demoGentleBoost.m

此Demo会先让你手动创建二维样本散点(鼠标左键:正样本;鼠标右键:负样本)。由于弱分类器是决策桩,它只能区分平行于坐标轴的数据。如果你把弱分类器设定为带方向的直线,那么结果中两个类别的边界将会很有趣。
然而,决策桩(stumps)在目标检测中很常用,因为它们能被用来有效地做特征选择。此Demo也会显示决策桩的缺陷(限制)。在目标检测中通过使用非常多的特征,能够补偿其中的一些缺陷。
demoBoosting.jpg
数据库的大概模样
下面是从LabelMe数据库中随机选取的一些图像。包含car(侧视)和scene(前视),它们都经过了尺度归一化处理。createDatabases.m展示了这些数据是如何被创建的。
https://yqfile.alicdn.com/img_a8169e9ecc0c45bfdcf0817bcebd52fa.jpg

如果你下载了整个数据集,那么第一件事就是修改parameters.m中的路径。然后运行createDatabase.m来读取annotation文件并创建一个结构体(后续用于查询工具)。关于这个查询工具是如何工作的,详情请看LabelMe Toolbox

运行检测器
训练自己的分类器之前,尝试运行runDetector.m。如果一切顺利,输出类似下图:
detectorOutput.bmp
detectorPrecisionRecall.bmp

例如,训练出来的分类器在汽车侧视图上的检测结果:
carDetectorOutput.bmp

训练自己的分类器
要训练自己的分类器,需要准备自己的训练和测试数据。如果你想从LabelMe数据集里选取图像用作训练和测试,那你只需要修改parameters.m中的object的名字。同时,在parameters.m中你还可以修改训练参数,比如训练图像数量,模版(patch)尺寸,目标尺寸(scale of object),负样本数量等。

createDictinary.m会创建“模版词汇表”(??vocabulary of patches),用于特征计算

computeFeatures.m会预先为所有训练图像计算特征

trainDetector.m会使用Gentle Boosting[1]创建分类器

这里面每一个程序都会增加信息到data这个结构体变量,比如预计算的特征,用于训练的图像列表,特征字典,分类器参数

最后,使用runDetector.m,你可以运行新训练的分类器。

多尺度分类器
为了构造多尺度分类器,你需要逐尺度处理,比如:

scalingStep = 0.8;
for scale = 1:Nscales
   img = imresize(img, scalingStep, 'bilinear');
   [Score{scale}, boundingBox{scale}, boxScores{scale}] = singleScaleBoostedDetector(img, data);
end

参考文献

[1] Friedman, J. H., Hastie, T. and Tibshirani, R., "Additive Logistic Regression: a Statistical View of Boosting." (Aug. 1998)

[2] A. Torralba, K. P. Murphy and W. T. Freeman. (2004). "Sharing features: efficient boosting procedures for multiclass object detection". Proceedings of the 2004 IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR). pp 762- 769.

目录
相关文章
|
12月前
|
编解码 数据可视化 定位技术
Axure设计数字乡村可视化大屏:从布局到交互的实战经验分享
本文以Axure为工具,分享数字乡村可视化大屏的设计全流程。从需求分析到功能拆解,明确民生、经济、历史文化和空间分布四大维度,将大屏划分为左、中、右三区,涵盖10个统计模块。详细解析了各区域的图表设计与交互实现,如柱状图、环形图、时间轴等,并通过模块化设计和动态交互(如数据联动、弹窗详情)提升用户体验。最后总结避坑指南,强调数据可视化、交互友好及模块复用性,助力实现“数据驱动决策”的核心目标,推动乡村治理数字化转型。
571 132
|
缓存 Java
Java 反射之Class类的理解以及获取Class的实例
Java 反射之Class类的理解以及获取Class的实例
240 0
|
人工智能 PyTorch 算法框架/工具
Ascend Extension for PyTorch是个what?
Ascend Extension for PyTorch 是针对华为昇腾处理器的PyTorch框架适配插件,旨在让PyTorch开发者能充分利用昇腾AI处理器的强大计算能力。此扩展通过最小化对原生PyTorch的改动,实现了对昇腾NPU的支持,包括动态图特性、自动微分等功能的完整继承,并提供了与原生PyTorch一致的使用体验。项目详情及源码可在昇腾社区获取。
Ascend Extension for PyTorch是个what?
|
缓存 监控 JavaScript
SPA首屏加载速度慢的怎么解决?
SPA首屏加载速度慢的怎么解决?
881 159
|
存储 人工智能 固态存储
轻量级AI革命:无需GPU就能运算的DeepSeek-R1-1.5B模型及其低配部署指南
随着AI技术发展,大语言模型成为产业智能化的关键工具。DeepSeek系列模型以其创新架构和高效性能备受关注,其中R1-1.5B作为参数量最小的版本,适合资源受限场景。其部署仅需4核CPU、8GB RAM及15GB SSD,适用于移动对话、智能助手等任务。相比参数更大的R1-35B与R1-67B+,R1-1.5B成本低、效率高,支持数学计算、代码生成等多领域应用,是个人开发者和初创企业的理想选择。未来,DeepSeek有望推出更多小型化模型,拓展低资源设备的AI生态。
2997 8
|
JSON API 开发者
解密小红书详情API接口:获取与运用
小红书作为热门社交媒体平台,吸引了大量用户和创作者。企业或开发者可以通过调用小红书API接口,高效、合法地获取内容数据,提升业务效率。本文详细介绍如何获取和使用小红书笔记详情API接口,涵盖注册账号、创建应用、获取API密钥、查阅文档、构建请求、解析响应等步骤,以及应用场景和注意事项。
4493 2
|
安全 Cloud Native 智能网卡
带你读《2022龙蜥社区全景白皮书》——4.3 未来技术演进与展望
带你读《2022龙蜥社区全景白皮书》——4.3 未来技术演进与展望
331 64
|
存储 搜索推荐 前端开发
|
存储 Oracle 关系型数据库
【ESSD技术解读-02】企业级利器,阿里云 NVMe 盘和共享存储
当前 NVMe 云盘结合了业界最先进的软硬件技术,在云存储市场,首创性同时实现了 NVMe 协议 + 共享访问 + IO Fencing 技术。它在 ESSD 之上获得了高可靠、高可用、高性能,同时基于 NVMe 协议实现了丰富的企业特性,如多重挂载、IO Fencing、加密、离线扩容、原生快照、异步复制等功能。本文详细介绍了云上SAN和NVMe的发展历程,并做出了对未来的构想
2927 0
|
算法 C++
【算法作业】实验四:逆波兰表达式求值 & Fibonacci数列的尾递归与非递归程序
【算法作业】实验四:逆波兰表达式求值 & Fibonacci数列的尾递归与非递归程序
255 0
【算法作业】实验四:逆波兰表达式求值 & Fibonacci数列的尾递归与非递归程序

热门文章

最新文章