YOLOv8目标检测创新改进与实战案例专栏
专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例
专栏链接: YOLOv8基础解析+创新改进+实战案例
介绍
摘要
卷积神经网络(ConvNets)通常在固定的资源预算下开发,如果有更多资源可用,则会进行扩展以提高准确性。在本文中,我们系统地研究了模型扩展,并发现仔细平衡网络的深度、宽度和分辨率可以带来更好的性能。基于这一观察,我们提出了一种新的扩展方法,使用一个简单但非常有效的复合系数均匀扩展深度、宽度和分辨率的所有维度。我们展示了这种方法在扩展MobileNets和ResNet时的有效性。
为了进一步提高,我们使用神经架构搜索设计了一个新的基准网络,并将其扩展,获得了一系列称为EfficientNets的模型,这些模型比以前的ConvNets在准确性和效率方面都有了很大的提升。特别是,我们的EfficientNet-B7在ImageNet上实现了最先进的84.3%的top-1准确率,同时在推理时比现有的最佳ConvNet小8.4倍,快6.1倍。我们的EfficientNets在迁移学习任务中也表现良好,在CIFAR-100(91.7%)、Flowers(98.8%)和其他3个迁移学习数据集上实现了最先进的准确率,参数量减少了一个数量级。源码可在:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet 找到。
文章链接
论文地址:论文地址
代码地址:代码地址
基本原理
卷积神经网络(ConvNets)通常是在固定资源预算下开发的,当有更多资源可用时,可以通过增加网络深度(depth)、网络宽度(width)和输入图像分辨率(resolution)来提高精度。然而,手动调整这些参数组合非常困难,尤其在计算资源有限的情况下,不同参数的组合空间太大,难以穷举。
创新方法
本文提出了一种新的模型缩放方法,通过使用一个简单而高效的复合系数,从深度(depth)、宽度(width)和分辨率(resolution)三个维度放大网络。相比传统方法,该方法不会随意缩放网络的维度,结合神经结构搜索技术,可以获得最优的一组参数(复合系数)。
复合模型扩张方法
- 问题定义:卷积网络N可以分为多个阶段,每个阶段由多个相同结构的卷积层组成。
- 优化目标:在资源有限的情况下,最大化精度(Accuracy)。更大的网络具有更大的宽度、深度或分辨率,可以获得更高精度,但单一维度的扩展效果有限。
- 模型扩张的局限性:只对单一维度进行扩张的精度增益迅速饱和,说明需要平衡各个维度的扩张。
复合扩张方法的求解
- 求解参数:通过固定φ=1,通过网格搜索(grid search)得到最优的α、β、γ,得到基本模型EfficientNet-B0。
- 扩展模型:固定α、β、γ的值,通过调整φ的大小,获得EfficientNet-B1到B7。φ的大小决定了资源消耗的大小。
核心代码
import sys
sys.path.append('tpu/models/official/efficientnet')
from modeling.architecture import efficientnet_constants
from modeling.architecture import nn_blocks
from modeling.architecture import nn_ops
from official.efficientnet import efficientnet_builder
class Efficientnet(object):
"""Class to build EfficientNet family models."""
def __init__(self,
model_name):
"""EfficientNet initialization function.
Args:
model_name: string, the EfficientNet model name, e.g., `efficient-b0`.
"""
self._model_name = model_name
def __call__(self, inputs, is_training=False):
"""Returns features at various levels for EfficientNet model.
Args:
inputs: a `Tesnor` with shape [batch_size, height, width, 3] representing
a batch of images.
is_training: `bool` if True, the model is in training mode.
Returns:
a `dict` containing `int` keys for continuous feature levels [2, 3, 4, 5].
The values are corresponding feature hierarchy in EfficientNet with shape
[batch_size, height_l, width_l, num_filters].
"""
_, endpoints = efficientnet_builder.build_model(
inputs,
self._model_name,
training=is_training,
override_params=None)
u2 = endpoints['reduction_2']
u3 = endpoints['reduction_3']
u4 = endpoints['reduction_4']
u5 = endpoints['reduction_5']
return {
2: u2, 3: u3, 4: u4, 5: u5}
task与yaml配置
详见: https://blog.csdn.net/shangyanaf/article/details/140451442