模型压缩开源项目:阿里-tinyNAS/微软NNI/华为-vega

文章目录

  • 阿里-TinyNAS
    • 使用流程
      • 步骤一:搜索模型结构
      • 步骤二:导出模型结果
      • 步骤三:使用搜索的模型结构
        • 图像分类任务
        • 目标检测任务
  • 华为-vega
    • 简介
    • 定位
    • 优点
    • 缺点
  • 微软NNI
    • 简介
    • 定位
    • 优点
    • 缺点

阿里-TinyNAS

在这里插入图片描述
https://github.com/alibaba/lightweight-neural-architecture-search

  • 聚焦NAS,进行合理的模块划分;
  • 更偏向算法使用平台,搜索得到精度较好的模型结构,通过该项目得到damoyolo 的backbone结构;

使用流程

步骤一:搜索模型结构

python tools/search.py configs/classification/R50_FLOPs.py

configs/classification/R50_FLOPs.py

# Copyright (c) Alibaba, Inc. and its affiliates.
# The implementation is also open-sourced by the authors, and available at
# https://github.com/alibaba/lightweight-neural-architecture-search.

work_dir = './save_model/R50_R224_FLOPs41e8/'
log_level = 'INFO'  # INFO/DEBUG/ERROR
log_freq = 1000

""" image config """
image_size = 224  # 224 for Imagenet, 480 for detection, 160 for mcu

""" Model config """
model = dict(
    type = 'CnnNet',
    structure_info = [ 
        {'class': 'ConvKXBNRELU', 'in': 3, 'out': 32, 's': 2, 'k': 3}, \
        {'class': 'SuperResK1KXK1', 'in': 32, 'out': 256, 's': 2, 'k': 3, 'L': 1, 'btn': 64}, \
        {'class': 'SuperResK1KXK1', 'in': 256, 'out': 512, 's': 2, 'k': 3, 'L': 1, 'btn': 128}, \
        {'class': 'SuperResK1KXK1', 'in': 512, 'out': 768, 's': 2, 'k': 3, 'L': 1, 'btn': 256}, \
        {'class': 'SuperResK1KXK1', 'in': 768, 'out': 1024, 's': 1, 'k': 3, 'L': 1, 'btn': 256}, \
        {'class': 'SuperResK1KXK1', 'in': 1024, 'out': 2048, 's': 2, 'k': 3, 'L': 1, 'btn': 512}, \
    ]
)

""" Budget config """
budgets = [
    dict(type = "flops", budget = 41e8),
    dict(type = "layers",budget = 49),
    dict(type = "model_size", budget = 25.55e6)
    ]

""" Score config """
score = dict(type = 'madnas', multi_block_ratio = [0,0,0,0,1])

""" Space config """
space = dict(
    type = 'space_k1kxk1',
    image_size = image_size,
    )

""" Search config """
search=dict(
    minor_mutation = False,  # whether fix the stage layer
    minor_iter = 100000,  # which iteration to enable minor_mutation
    popu_size = 256,
    num_random_nets = 100000,  # the searching iterations
    sync_size_ratio = 1.0,  # control each thread sync number: ratio * popu_size
    num_network = 1,
)

界面显示如下
在这里插入图片描述
输出文件如下
在这里插入图片描述

  • nas_cache:nas过程的缓存数据;
  • search_log: nas过程日志保存;
  • best_structure.json:在搜索过程中找到的几个最佳模型架构;
  • config_nas.txt: nas的config信息
  • nas_info.txt:nas网络结构的其他信息。包括 layers,acc,flops,model_size,score

步骤二:导出模型结果

python tools/export.py save_model/R50_R224_FLOPs41e8 output_dir

demo 中的相关代码拷贝至output_dir/R50_R224_FLOPs41e8/目录中
在这里插入图片描述
包含以下几部分:

  • best_structure.json:在搜索过程中找到的几个最佳模型架构;
  • demo.py:一个简单的示例说明如何使用模型, 可通过如下命令行运行示例
python demo.py --structure_txt best_structure.json
  • cnnnet.py:用于构建模型的类定义和使用函数;
  • modules: 模型的基本模块;
  • weights/:在搜索过程中找到的几个最优模型权重(仅适用于one-shot NAS方法).
    说明:modules,cnnnet.py,demo.py 是从目录tinynas/deploy中拷贝过来的:
    在这里插入图片描述

步骤三:使用搜索的模型结构

图像分类任务

图像分类任务中可以直接运行

  • demo.py 就是一个使用的示例,可在上述步骤后直接运行demo.py.
  • 继续以resnet-50结构在分类任务上为例,核心代码如下
目标检测任务

在该nas项目中模型结构搜索仅限于backbone,而一般的图像检测任务 由backbone+neck+head 三部分组成
目标检测器主要由4部分组成:
InputBackbone(提取特征训练)、Neck(整合收集特征)、Head(目标检测)。

因此使用TinyNAS 检索出backbone后,需要对接项目GFocalV2构造整个模型
其中neck采用的是FPN(Feature Pyramid Network)head采用的是GFL(GFocalHead)
使用步骤参见 readme.txt

MAE-DET-S uses 60% less FLOPs than ResNet-50;
MAE-DET-M is alignedwith ResNet-50 with similar FLOPs and number of parameters as ResNet-50;
MAE-DET-L is aligned with ResNet-101.
在这里插入图片描述
在这里插入图片描述

华为-vega

简介

Vega是诺亚方舟实验室自研的AutoML算法工具链,有主要特点:

  1. 完备的AutoML能力:涵盖HPO(超参优化, HyperParameter Optimization)、Data-Augmentation、NAS(网络架构搜索, Network Architecture Search)、Model Compression、Fully Train等关键功能,同时这些功能自身都是高度解耦的,可以根据需要进行配置,构造完整的pipeline。
  2. 业界标杆的自研算法:提供了诺亚方舟实验室自研的 业界标杆(Benchmark) 算法,并提供 Model Zoo 下载SOTA(State-of-the-art)模型。
  3. 高并发模型训练能力:提供高性能Trainer,加速模型训练和评估。
  4. 细粒度SearchSpace:可以自由定义网络搜索空间,提供了丰富的网络架构参数供搜索空间使用,可同时搜索网络架构参数和模型训练超参,并且该搜索空间可以同时适用于Pytorch、TensorFlow和MindSpore。
  5. 多Backend支持:支持PyTorch(GPU, Ascend 910), TensorFlow(GPU, Ascend 910), MindSpore(Ascend 910).。
  6. 支持昇腾平台:支持在Ascend 910搜索和训练,支持在Ascend 310上模型评估。

定位

自动机器学习,基于硬件的算法工具链

优点

  • 文档完善

  • 提供pipline流程,更加贴近业务,实现端到端的AutoML流程,输入数据,即可得到所需的模型,使用上有一定的门槛

  • 场景覆盖全面
    在这里插入图片描述

  • 提供端侧模型评估

缺点

  • 已有一年不再更新
    [图片]

  • NAS相关的算法 
    配置文件示例

general:
    backend: pytorch  # pytorch

# 定义pipeline。
# pipeline: [my_nas, my_hpo, my_data_augmentation, my_fully_train]
pipeline: [nas, fully_train]


nas:
    pipe_step:
        type: SearchPipeStep

    dataset:
        type: Cifar10
        common:
            data_path: /cache/datasets/cifar10/
            train_portion: 0.5
            num_workers: 8
            drop_last: False
        train:
            shuffle: True
            batch_size: 128
        val:
            batch_size: 3500

    search_algorithm:
        type: CARSAlgorithm
        policy:
            num_individual: 8
            start_ga_epoch: 50
            ga_interval: 10
            select_method: uniform
            warmup: 50

    search_space:
        type: SearchSpace
        modules: ['super_network']
        super_network:
            type: CARSDartsNetwork
            stem:
                type: PreOneStem
                init_channels: 16
                stem_multi: 3
            head:
                type: LinearClassificationHead
            init_channels: 16
            num_classes: 10
            auxiliary: False
            search: True
            cells:
                modules: [
                    'normal', 'normal', 'reduce',
                    'normal', 'normal', 'reduce',
                    'normal', 'normal'
                ]
                normal:
                    type: NormalCell
                    steps: 4
                    genotype:
                      [
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 2, 0 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 2, 1 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 3, 0 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 3, 1 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 3, 2 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 4, 0 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 4, 1 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 4, 2 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 4, 3 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 5, 0 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 5, 1 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 5, 2 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 5, 3 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 5, 4 ],
                      ]
                    concat: [2, 3, 4, 5]
                reduce:
                    type: ReduceCell
                    steps: 4
                    genotype:
                      [
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 2, 0 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 2, 1 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 3, 0 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 3, 1 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 3, 2 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 4, 0 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 4, 1 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 4, 2 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 4, 3 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 5, 0 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 5, 1 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 5, 2 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 5, 3 ],
                      [ ['none', 'max_pool_3x3', 'avg_pool_3x3', 'skip_connect', 'sep_conv_3x3', 'sep_conv_5x5', 'dil_conv_3x3', 'dil_conv_5x5'], 5, 4 ],
                      ]
                    concat: [2, 3, 4, 5]

    trainer:
        type: Trainer
        darts_template_file: "{default_darts_cifar10_template}"
        callbacks: CARSTrainerCallback
        epochs: 500
        optimizer:
            type: SGD
            params:
                lr: 0.025
                momentum: 0.9
                weight_decay: !!float 3e-4
        lr_scheduler:
            type: CosineAnnealingLR
            params:
                T_max: 500
                eta_min: 0.001
        grad_clip: 5.0
        seed: 10
        unrolled: True
        loss:
            type: CrossEntropyLoss


fully_train:
    pipe_step:
        type: TrainPipeStep
        models_folder: "{local_base_path}/output/nas/"
    trainer:
        ref: nas.trainer
        epochs: 600
        lr_scheduler:
            type: CosineAnnealingLR
            params:
                T_max: 600.0
                eta_min: 0
        loss:
            type: MixAuxiliaryLoss
            params:
                loss_base:
                    type: CrossEntropyLoss
                aux_weight: 0.4
        seed: 100
        drop_path_prob: 0.2
    evaluator:
        type: Evaluator
        host_evaluator:
            type: HostEvaluator
            metric:
                type: accuracy
    dataset:
        ref: nas.dataset
        common:
            train_portion: 1.0
        train:
            batch_size: 96
            shuffle: True
            transforms:
                -   type: RandomCrop
                    size: 32
                    padding: 4
                -   type: RandomHorizontalFlip
                -   type: ToTensor
                -   type: Normalize
                    mean:
                        - 0.49139968
                        - 0.48215827
                        - 0.44653124
                    std:
                        - 0.24703233
                        - 0.24348505
                        - 0.26158768
                -   type: Cutout
                    length: 8 # pipeline scale this number to 8*20/10
        val:
            batch_size: 96
            shuffle: False

微软NNI

简介

NNI (Neural Network Intelligence) 是一个轻量而强大的工具,可以帮助用户 自动化:

  • 超参调优
  • 架构搜索
  • 模型压缩
  • 特征工程

定位

大而全面的工具

优点

  • 模块之间高度解耦,更加灵活
  • 项目完整,包含剪枝 NAS 量化,提供能可视化界面

缺点

  • NAS 方法,需要设置搜索范围,对用户要求高
    [图片]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/374444.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Mybatis】从0学习Mybatis(2)

前言 本篇文章是从0学习Mybatis的第一篇文章,由于篇幅太长CSDN会限流,因此我打算分开两期来写,这是第二期!第一期在这儿:【Mybatis】从0学习Mybatis(1)-CSDN博客 1.什么是ResultMap结果映射&am…

Vue3快速上手(一)使用vite创建项目

一、准备 在此之前,你的电脑,需要安装node.js,我这边v18.19.0 wangdymb 2024code % node -v v18.19.0二、创建 执行npm create vuelatest命令即可使用vite创建vue3项目 有的同学可能卡主不动,可能是npm的registry设置的问题 先看下&#x…

MES生产制造管理:汽车零部件生产MES解决方案

某某汽车部件科技有限公司是一家铝合金零部件研发、压铸和精加工为一体的高新技术企业,拥有先进压铸、机加、检测等设备,并配套自动化生产线。为解决发动机支架等产品的全程生产质量追溯和实现机台设备联网,梅施科技提供了车间级的MES解决方案,如图所示: 梅施科技采…

IF=82.9!高分文献解读|吉西他滨联合顺铂化疗激活肿瘤免疫新机制

鼻咽癌(nasopharyngeal carcinoma, NPC)是一种发生于鼻咽部上皮细胞的恶性肿瘤,且高发于中国。吉西他滨联合顺铂(GP)化疗作为鼻咽癌的一种全球标准治疗方案,然而治疗的具体机制目前尚不清楚。中山大学肿瘤防…

好“云”来!盘点春节与云计算息息相关的那些事儿

在过去的几年里,因为疫情的缘故好多人都选择了就地过年。春节期间,在科技的推动下,“云拜年”“云团圆”“云聚餐”等过年新模式正成为人们过年的选项,各种新模式让相隔千里的亲朋也能感受到浓浓的亲情和喜庆的年味。 那春节里有…

多线程 --- [ 线程概念,线程控制 ]

目录 1. 补充知识 1.1. 什么叫做进程呢? 1.2. 堆区的知识补充 1.3. 虚拟地址到物理地址的转化过程 2. 线程概念 3. 见见代码 3.1. pthread_create 4. Linux进程 && 线程 4.1. 线程如何看待进程内部的资源 4.2. 进程 vs 线程 4.3. 线程的优点 4.…

JVM 性能调优 - 参数基础(2)

查看 JDK 版本 $ java -version java version "1.8.0_151" Java(TM) SE Runtime Environment (build 1.8.0_151-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode) 查看 Java 帮助文档 $ java -help 用法: java [-options] class [args...] …

vue element 组件 form深层 :prop 验证失效问题解决

此图源自官网 借鉴。 当我们简单单层验证的时候发现是没有问题的,但是有的时候可能会涉及到深层prop,发现在去绑定的时候就不生效了。例如我们在form单里面循环验证,在去循环数据验证。 就如下图的写法了 :prop"pumplist. i .device…

YUM | 起源 | 发展 | 运行逻辑

介绍 YUM(Yellowdog Updater, Modified)起源于 Red Hat Linux 发行版 up2date 工具。 最初,up2date 是由 Red Hat 公司提供的用于管理系统更新的工具。然而,社区逐渐对 up2date 出现一些不满,主要是由于其使用体验和…

【考研408】算法与数据结构笔记

文章目录 绪论数据结构的基本概念算法和算法评价 线性表线性表的定义和基本操作线性表的顺序表示线性表的链式表示 栈和队列栈基本操作栈的顺序存储结构栈的链式存储 队列队列常见的基本操作队列的顺序存储结构队列的链式存储结构双端队列 栈和队列的应用栈在括号匹配中的应用栈…

【C/C++ 17】继承

目录 一、继承的概念 二、基类和派生类对象赋值转换 三、继承的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员变量 七、菱形继承与虚拟继承 一、继承的概念 继承是指一个类可以通过继承获得另一个类的属性和方法,扩展自己的功能&…

Mysql-数据库压力测试

安装软件 官方软件 安装插件提供了更多的监听器选项 数据库驱动 数据库测试 配置 这里以一个简单的案例进行,进行连接池为10,20,30的梯度压测: select * from tb_order_item where id 1410932957404114945;新建一个线程组 新增一个连接池配置 新建一…

【Java】MybatisPlus入门

学习目标 能够基于MyBatisPlus完成标准Dao开发 能够掌握MyBatisPlus的条件查询 能够掌握MyBatisPlus的字段映射与表名映射 能够掌握id生成策略控制 能够理解代码生成器的相关配置 一、MyBatisPlus简介 1. 入门案例 问题导入 MyBatisPlus环境搭建的步骤? 1.1 Sp…

在VM虚拟机上搭建MariaDB数据库服务器

例题:搭建MariaDB数据库服务器,并实现主主复制。 1.在二台服务器中分别MariaDB安装。 2.在二台服务器中分别配置my.cnf文件,开启log_bin。 3.在二台服务器中分别创建专用于数据库同步的用户replication_user,并授权SLAVE。&#x…

【ARM 嵌入式 编译系列 2.7 -- GCC 编译优化参数详细介绍】

请阅读【嵌入式开发学习必备专栏 】 文章目录 GCC 编译优化概述常用优化等级-O1 打开的优化选项-O2 打开的优化选项-O3 打开的优化选项-Os 打开的优化选项优化技术使用优化选项的注意事项GCC 编译优化概述 GCC(GNU Compiler Collection)包含了用于C、C++、Objective-C、Fort…

机器学习之DeepSequence软件使用学习1

简介 DeepSequence 是一个生成性的、无监督的生物序列潜变量模型。给定一个多重序列比对作为输入,它可以用来预测可获得的突变,提取监督式学习的定量特征,并生成满足明显约束的新序列文库。它将序列中的高阶依赖性建模为残差子集之间约束的非…

FLUENT Meshing Watertight Geometry工作流入门 - 6 描述几何体

本视频中学到的内容: 讨论“描述几何”任务中所需各种输入的工作细节如何为流体区域创建盖面使用“创建区域”任务创建流体区域 视频链接: FLUENT Meshing入门教程-6描述几何体_哔哩哔哩_bilibili 【Import Mesh】 启动 Ansys Fluent 进入网格模式。转…

从头开始构建和训练 Transformer(下)

导 读 上一篇推文从头开始构建和训练 Transformer(上)https://blog.csdn.net/weixin_46287760/article/details/136048418介绍了构建和训练Transformer的过程和构建每个组件的代码示例。本文将使用数据对该架构进行代码演示,验证其模型性能。…

[office] Excel如何快速统一数字编号长度 #经验分享#其他

Excel如何快速统一数字编号长度 我们在办公室使用Excel统计数据的时候,经常会遇到第一列数据全部是数字编号,但是因为数字的位数不一样,长短不一的样子看起来不是很协调。那么如何快速统一数字编号长度呢?一起来了解一下吧 我们在…

STM32内部Flash

目录 一、内部Flash简介 二、内部Flash构成 1. 主存储器 2. 系统存储区 3. 选项字节 三、内部Flash写入过程 1. 解锁 2. 页擦除 3. 写入数据 四、工程空间分布 某工程的ROM存储器分布映像: 1. 程序ROM的加载与执行空间 2. ROM空间分布表 一、内部Flash…