目标检测
目标检测是视觉任务中的基础,也是热门研究领域,很多扩展任务如精细化分类\实例分割\语义分割等都是基于物体检测的方法之上而来.
应用价值
物体检测在各行各业都有广泛的应用,最常见的有:超市商品检测\交通行人和交通标志检测\工业生产瑕疵检测和医疗检测等.
物体检测的本质是在大量图片视频中提取高层语义信息,自动化提取高维属性,便于后续处理.
存在挑战
-
环境应用(光照\模糊)
-
密集数量
-
物体遮挡\重叠
-
多尺度(小目标\大目标)
-
小样本
-
旋转框
发展历程
从深度学习发展分水岭Alexnet作为临界点,在此之前的方法都可看做传统检测方法,之后的方法称为基于深度学习检测方法.
-
传统方法
传统方法一般分为区域选择,特征提取,特征分类和后处理四个步骤.
区域选择:滑动窗口,如selective proposal
特征提取:SIFT,HOG
分类:SVM,Adaboost
后处理:NMS(极大值抑制)
-
存在问题
过度依赖模板,适应性差,解决问题有限,开发维护成本巨大;
基于深度学习的方法,在有一定量数据的情况下,能有良好的适应性,可平衡精度和速度\学习可迁移学习;
-
深度学习
和传统方法类似,区域选择\提取特征\分类,核心在于区域选择和分类\回归.
常见类别
常见的深度学习检测算法可以分为基于anchor的一阶段\两阶段和anchor free三大类.其中anchor表示锚框,相当于预设的选择区域.
-
一阶段和两阶段指的是使用anchor的方式,一阶段直接对每个特征点设计锚框并进行回归和分类,省略提取roi区域;
-
两阶段是先提取roi区域,再进行分类回归和后处理;
-
anchor free直接预测目标框的角点或者中心点;
anchor based 两阶段
经典方法有RCNN,FastRCNN,FasterRCNN
FastRCNN使用RoI Pooling减少特征的重复提取,大大降低计算量;
FasterRCNN提出RPN网络提取anchor,抛弃了selective search方法,提高速度和准确率
anchor based 一阶段
经典方法有YOLO系列,SSD系列等
直接使用anchor来回归和分类,速度更快,直接了当,但精度相比两阶段有所下降.
但后续的yolo v2,v3,v4等提出了很多骚操作,也对精度提高有帮助.
anchor free
使用anchor会带来许多问题,如何设置anchor的size,num,ratio等针对不同场景和不同数据都需要经验和调试,那是否能不用anchor来检测物体呢?
基于多关键点联合表达(CornerNet)和基于中心区域预测方法(CenterNet)等
比较
对比 | Anchor-based单阶段 | Anchor-based两阶段 | Anchor-based free |
---|---|---|---|
网络结构 | 简单 | 复杂 | 简单 |
精度 | 优 | 最优 | 较优 |
速度 | 快 | 稍慢 | 快 |
超参数 | 较多 | 多 | 较少 |
扩展性 | 一般 | 一般 | 较好 |
## 数据集一般格式
-
coco数据集
80类,12w图片,每张图7个box
采用json格式作为标注,主要信息有:id,label,box坐标,长宽尺寸以及特殊信息(是否密集,是否难以检测,是否遮挡等)
-
VOC2012数据集
20类,5717张,每张图2.4box
采用xml格式作为标注,重要的标注信息和coco类似,也有对应的官方方法提取信息,
-
格式转换
在进行物体检测训练,需要将标注信息转换为coco或者voc格式,便于训练
Paddledetection
百度飞桨团队提出的集成目标检测算法,其中包含了从anchor一阶段\两阶段到anchor free的大部分方法,且包含大部分目前能用到的调优tricks,非常方便实用,最关键还能在线使用GPU进行训练和测试,白嫖真香.
简而言之,集成多,模块化设计,功能齐全,内含各种主流模型和tricks,可以私人订制各种结构,既能训练\还能压缩参数\方便部署,可以熟练运用起来!
主要使用方法
- tools中的train和eval进行训练和验证
- 在slim中进行模型压缩
- deploy进行部署
- configs进行现成模型的组装和调优