|
作者丨qiuqiuqiu@知乎 (已授权)
1.测试指标:
表中耗时是用NCNN测的,测试平台为RK3568 ARM-CPU,FastestDet相比于yolo-fastest单核耗时减少了10%,mAP0.5的指标要比yolo-fastestv2提升接近1个点。
2.概要
这次本来是打算把yolo-fastestV2代码重构下(本来yolo-fastestV2的代码就临时东拼西凑写的),性能在优化下,结果改着改着就面目全非了,和yolo八杆子打不着了,再叫yolo-fastestV2.5或者V3就容易误导大家了,干脆叫个新名字FastestDet吧。
其实算法的代码框架半年前就写完了,但是一直拖到现在才完善发布,主要是搞这个轻量级目标检测这个算是自己业余爱好,自己平日工作不是搞这类算法的,所以就平日下班没事儿做做实验,学习学习看看论文,探索优化(其实根本原因是前段时间沉迷游戏,占着家里炼丹的炉子没法炼丹)
3.算法定位
FastestDet是设计用来接替yolo-fastest系列算法,相比于业界已有的轻量级目标检测算法如yolov5n, yolox-nano, nanoDet, pp-yolo-tiny, FastestDet和这些算法压根儿不是一个量级,FastestDet无论在速度还是参数量上,都是要小好几个数量级的(不要在拿int8的模型和我fp32的模型比体积了,不公平),但是精度自然而然也比不过。
FastestDet是针对计算资源紧缺的ARM平台设计的,突出单核效能,因为在实际业务场景中,不会把所有CPU资源都给推理框架做模型推理的,假如说你想在例如树莓派, RK3399, RK3568去跑实时目标检测,那么FastestDet是比较好的选择,或者移动端上不想占用太多cpu资源,也可以去用单核并设置cpu sleep去推理FastestDet,在低功耗的条件下运行算法。
4.算法特性
先说下FastestDet的几个重要特性: 1.单轻量化检测头 2.anchor-free 3.跨网格多候选目标 4.动态正负样本分配 5.简单的数据增强 下面我就一个个去详细讲下吧:
4.1 单轻量化检测头
这个是对网络结构上对算法模型进行优化,主要是提升算法运行速度,简化后处理步骤,大家可以先看下这块的网络结构:
其实多检测头设计的是为了适应检测不同尺度物体目标,高分辨率的检测头负责检测小物体,低分辨的检测头负责检测大物体,一种分而治之的思想。我个人觉得根因在于感知野,不同尺度的物体所需要的感知野是不同的,而模型每层的感知野都是不一样的,包括FPN也是对不同感知野特征的汇总融合。
这块单检测头我也是参考的YOLOF的思想,在网络结构中,采用类似inception的5x5分组卷积并行网络结构,期待能融合不同感知野的特征,让单个检测头也能适应检测不同尺度的物体。
4.2 Anchor-Free
原先的anchor-base算法在训练模型都需要对数据集进行anchor-bias的运算,anchor-bias可以理解为对数据集中标注物体的宽高进行聚类,得到一组先验宽高,网络在这组先验宽高的基础上去优化预测框的宽高。FastestDet采用的是anchor-free算法,模型是直接回归gt于特征图宽高的scale值的,是没有先验宽高。这种方法可以简化模型后处理。而且对于anchor-base算法每个特征图的特征点是对应N个anchor候选框的,而这种anchor-free每个特征图的特征点只对应一个候选框,所以在推理速度上也是有优势的。
4.3 跨网格多候选目标
这块还是借鉴了yolov5,不单单只把gt中心点所在的网格当成候选目标,还把附近的三个也算进行去,增加正样本候选框的数量,如下图所示:
球球猫在努力拉粑粑
4.4 动态正负样本分配
所谓的动态正负样本分配其实就是在模型训练过程去动态分配正负样本,这是有别于以前yolo-fastest的,原先yolo-fastest的anchor-bias设置好以后, 通过计算anchor-bias与gt宽高的scale,对scale卡固定阈值分配正负样本(参考yolov5的做法),而anchor-bias和gt在训练过程中都是不变的,所以正负样本分配在训练过程中也是不变的。而在FastestDet的正负样本分配参考的ATSS,通过设置预测框与GT计算的SIOU的均值作为分配正负样本的阈值,假如当前预测框与GT的SIOU阈值大于均值,那么为正样本,反之异然。(为什么没有参考simota?那是因为在构建cost矩阵时,不同loss的权重还得调超参,懒的调了)
4.5 简单的数据增强
对于轻量级的模型数据增强要慎重,本来学习能力差,脑子不怎么好使,上来给难题做可不拉跨,所以采用简单的数据增强如随机平移和随机缩放,并没有采用moscia和Mixup。
5.测试效果图
参考
项目源代码:https://github.com/dog-qiuqiu/FastestDet 往期精选
数据集汇总:
- 人脸识别常用数据集大全
- 行人检测数据集汇总
- 10个开源工业检测数据集汇总
- 21个深度学习开源数据集分类汇总(持续更新)
- 小目标检测、图像分类、图像识别等开源数据集汇总
- 人体姿态估计相关开源数据集介绍及汇总
- 小目标检测相关开源数据集介绍及汇总
- 医学图像开源数据集汇总
顶会资源:
- CVPR 2022 全面盘点:最新250篇论文分方向汇总 / 代码 / 解读 / 直播 / 项目(更新中)
- CVPR'22 最新106篇论文分方向整理|包含目标检测、动作识别、图像处理等32个方向
- 一文看尽 CVPR2022 最新 22 篇论文(附打包下载)
- 17 篇 CVPR 2022 论文速递|涵盖 3D 目标检测、医学影像、车道线检测等方向CVPR 2021 结果出炉!最新500篇CVPR'21论文分方向汇总(更新中)
- CVPR 2021 结果出炉!最新600篇CVPR'21论文分方向汇总(更新中)
- CVPR 2020 Oral 汇总:论文/代码/解读(更新中)
- CVPR 2019 最全整理:全部论文下载,Github源码汇总、直播视频、论文解读等
- CVPR 2018 论文解读集锦(9月27日更新)
- CVPR 2018 目标检测(object detection)算法总览
- ECCV 2018 目标检测(object detection)算法总览(部分含代码)
- CVPR 2017 论文解读集锦(12-13更新)
- 2000 ~2020 年历届 CVPR 最佳论文汇总
技术综述:
- 综述:图像处理中的注意力机制
- 搞懂Transformer结构,看这篇PyTorch实现就够了
- 熬了一晚上,我从零实现了Transformer模型,把代码讲给你听
- YOLO算法最全综述:从YOLOv1到YOLOv5
- 图像匹配大领域综述!涵盖 8 个子领域,近 20年经典方法汇总
- 一文读懂深度学习中的各种卷积
- 万字综述|核心开发者全面解读Pytorch内部机制
- 19个损失函数汇总,以Pytorch为例
- 一文看尽深度学习中的15种损失函数
- 14种异常检测方法总结
- PyTorch常用代码段合集
- 神经网络压缩综述
理论深挖:
- 深入探讨:为什么要做特征归一化/标准化?
- 令人“细思极恐”的Faster-R-CNN
论文盘点:
- 图像分割二十年,盘点影响力最大的10篇论文
- 2020年54篇最新CV领域综述论文速递!涵盖14个方向:目标检测/图像分割/医学影像/人脸识别等
实践/面经/求学:
- 如何配置一台深度学习工作站?
- 国内外优秀的计算机视觉团队汇总
- 50种Matplotlib科研论文绘图合集,含代码实现
- 图像处理知多少?准大厂算法工程师30+场秋招后总结的面经问题详解
- 深度学习三十问!一位算法工程师经历30+场CV面试后总结的常见问题合集(含答案)
- 深度学习六十问!一位算法工程师经历30+场CV面试后总结的常见问题合集下篇(含答案)
- 一位算法工程师从30+场秋招面试中总结出的目标检测算法面经(含答案)
- 一位算法工程师从30+场秋招面试中总结出的语义分割超强面经(含答案)
Github优质资源:
- 25个【Awsome】GitHub 资源汇总(更新中)
- 超强合集:OCR 文本检测干货汇总(含论文、源码、demo 等资源)
- 2019-2020年目标跟踪资源全汇总(论文、模型代码、优秀实验室)
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|