EfficientDet实验笔记

一些自己对EfficientDet的理解、总结以及实验

目录

1.EfficientDet网络结构

1.1 主干网络

1.2 BiFPN

1.3 输出端

2.实验及分析

2.1 实验平台

2.2 数据集介绍

2.3 评价指标

2.4 实验结果


1.EfficientDet网络结构

        EfficientDet是在EfficientNet基础上提出来的目标检测模型,它将EfficientNet主干网络、级联的双向特征金字塔网络(bi-directional feature pyramid network,BiFPN)和联合缩放方法结合,可以快速高效完成目标检测,且检测准确率较高,同时网络参数量较之主流检测模型大幅减少,检测速度也得到了很大提升,是目前最先进的目标检测算法之一。EfficientDet是将EfficientNet的复合缩放思路进行延伸,把架构决策明确为了可拓展框架为不同的使用场景提供了D0-D7共8种模型,使用者可根据真实环境中软硬件的性价比与对精度和效率的实际需求,来对模型进行选择。EfficientDet D0-D7网络越来越深,输入分辨率也越来越大,精度越来越高的同时,计算量也越来越大。EfficientDet网络的整体架构如图1所示,是一个端到端的网络,以EfficientNet为主体网络,BiFPN作为特征网络接收来自主干网络的特征并对其进行双向特征融合,最后将融合特征送入分类和边框回归网络,输出目标的类别及位置信息实现目标检测。

图1 Efficientdet-d0算法网络结构图

1.1 主干网络

        骨干特征提取网络对输入图片通过不断的下采样的得到P1-P7的特征层,P1、P2只是简单的下采样,不具有较高的语义信息,不参与后面的加强特征提取网络。而P3-P7称之为有效层,继续传入后面的加强特征提取网络进行特征提取。以Efficientnet-b0为例,网络架构如表1所示,Stage1是一个卷积核大小为3×3的普通卷积层,其中包含批量标准化(batch normalization, BN)和Swish激活函数。Stage2~Stage8都是在重复堆叠MBConv结构。Stage9由一个普通的1×1的卷积层,一个平均池化层和一个全连接层组成。如图3所示,MBConv正是Efficientnet的核心部分,总体的设计思路是倒转残差结构(inverted residuals),在3×3或者5×5深度可分离卷积结构前利用1×1卷积升维,在深度可分离卷积后增加了SENet(squeeze-and-excitation networks),最后利用1×1卷积降维后增加一个残差边。

表1 Efficientnet-b0的网络架构

### EfficientDet 性能指标和评估标准 #### 模型结构与特点 EfficientDet 是一种单阶段目标检测器,基于 EfficientNet 架构进行了改进。该模型通过复合缩放方法,在不同尺度上平衡网络宽度、深度以及分辨率,从而实现更高效的计算资源利用[^1]。 #### 参数配置 EfficientDet 提供了从 D0 到 D7 多种版本的选择,每种版本对应不同的参数量级和运算次数(FLOPs),适用于各类硬件平台的需求。随着版本号增加,模型复杂度逐步提升,相应的检测能力也有所增强。 #### 评估标准 对于 EfficientDet 而言,常用的评价指标主要包括以下几个方面: - **mAP (mean Average Precision)**: 平均精度均值是最常用的目标检测性能衡量方式之一。它综合考虑了预测框的位置偏差(IoU交并比)及分类置信度得分等因素的影响。更高的 mAP 表明模型具有更好的定位能力和更低的误报率[^2]。 - **FPS (Frames Per Second)**: 即每秒处理帧数,反映了模型实时性的强弱程度。较高的 FPS 对于视频流分析等应用场景至关重要。 - **Loss 函数**: 训练过程中损失函数的变化趋势可以反映模型收敛情况的好坏。理想的状况是在训练初期快速下降,并最终稳定在一个较低水平附近波动[^3]。 - **Class Accuracy, No Object Accuracy 和 Object Accuracy**: 这些细粒度的准确度测量有助于理解模型在特定类别上的表现差异,尤其是在多标签或多实例场景下的适用性。 ```python import torch from efficientdet import EfficientDetModel model = EfficientDetModel(model_name='efficientdet_d0', num_classes=80) def evaluate_model(dataloader): model.eval() total_loss = 0. with torch.no_grad(): for images, targets in dataloader: outputs = model(images) loss = compute_loss(outputs, targets) total_loss += loss.item() avg_loss = total_loss / len(dataloader) return avg_loss ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘可乐呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值