ImageNet主要网络benchmark对比
深度神经网络繁多,各自的性能指标怎样?
实际应用中,在速度、内存、准确率等各种约束下,应该尝试哪些模型作为backbone?
有paper对各个网络模型进行了对比分析,形成了一个看待所有主要模型的完整视角,其分析结果可以在实践中提供指导和帮助。
这篇博客主要整合了其中3篇文章的结论,分别是
- 201605-An Analysis of Deep Neural Network Models for Practical Applications
- 201809-Analysis of deep neural networks
- 201810-Benchmark Analysis of Representative Deep Neural Network Architectures
文章1和3是paper,2是篇博客(对1的更新)。这3篇文章对图像识别任务(ImageNet-1k)主要的state of the art网络进行了对比分析,采用的指标有:
- accuracy,准确率,只使用cental crop,评估Top1、Top5在ImageNet-1k上的准确率
- model complexity,模型复杂度,通过模型的可学习参数量衡量(近似为模型文件大小),反映了自由度
- computational complexity,计算复杂度,操作次数,通过floating-point operations (FLOPs)衡量,Multiply-add乘加运算为2 FLOPS
- memory usage,内存大小(空间复杂度)
- inference time,推理时间
- accuracy density,等于 accuracy / modle size,用来衡量参数的利用效率
比较重要的结论有:
- 计算复杂度高,识别准确率不一定高;参数量大,识别准确率也不一定高。——好的网络结构设计很重要,比如ResNet系的模型。
- 不同模型的参数利用效率不同,目前来看针对移动端设计的网络参数利用效率较高,如MobileNet、ShuffleNet、SqueezeNet等,但在Top1准确率高于80%的模型中,Inception-V4和SE-ResNeXt-101的利用率较高
- 操作次数(FLOPs)是推理时间的良好估计
- 为了满足不同的内存和速度要求,可选的最优模型不同
其他一些更细致的结论可以参看论文,下面贴一下论文中的重要图表。
论文An Analysis of Deep Neural Network Models for Practical Applications诞生于2016年5月,文中对当时的主要模型(从AlexNet到Inception-v4)进行了对比分析,得到了那张流传甚广的ball chart。后来在2018年9月,文章作者Eugenio Culurciello在博客Analysis of deep neural networks中,对图表进行了更新,包括了Shufflenet、Mobilenet、Xception、Densenet、Squeezenet等新近模型的对比分析,更新的ball chart如下:

图中,blob的中心为模型在图表中的位置,blob的大小对应模型的参数量,横轴为操作次数,纵轴为Top-1 center crop的准确率,越靠近左上角的模型计算复杂度越低、准确率越高,blob越小的模型参数越少。
论文An Analysis of Deep Neural Network Models for Practical Applications中,推理时间和操作数的关系图表如下,不出意料的正相关

论文Benchmark Analysis of Representative Deep Neural Network Architectures中,做了更详细的对比,如下图所示,左上角ResNet系的模型表现强劲,右上角NASNet-A-Large的准确率最高但计算复杂度也最大:

参数利用率如下:

速度(帧率)与准确率如下,图中的曲线为特定硬件下帧率与性能的上界,横轴为帧率的对数,

模型参数量与内存占用大小如下,GPU上内存占用最少的也在0.6G以上,

对于每个网络具体的推理时间和内存占用情况可以参见论文原文,有更详细的描述。
给定硬件平台上,在不同内存和速度约束下的最优模型如下:

Benchmark Analysis of Representative Deep Neural Network Architectures的代码基于pytorch,详见models-comparison.pytorch。
参考
- Benchmark Analysis of Representative Deep Neural Network Architectures
- models-comparison.pytorch
- Analysis of deep neural networks
- An Analysis of Deep Neural Network Models for Practical Applications
- torch-opCounter
ImageNet主要网络benchmark对比的更多相关文章
- k8s的网络方案对比
如下图,三台虚拟机k8s-master.k8s-node-1.k8s-node-2组成k8s集群,网络拓扑和节点IP分配如下图: 一.flannel组网方案 https://github.com/co ...
- Flannel和Calico网络插件对比
1.Kubernetes通信问题 1.容器间通信:即同一个Pod内多个容器间通信,通常使用loopback来实现. 2.Pod间通信:K8s要求,Pod和Pod之间通信必须使用Pod-IP 直接访问另 ...
- 五种网络IO模型以及多路复用IO中select/epoll对比
下面都是以网络读数据为例 [2阶段网络IO] 第一阶段:等待数据 wait for data 第二阶段:从内核复制数据到用户 copy data from kernel to user 下面是5种网络 ...
- Flannel和Calico网络插件工作流程对比
Flannel和Calico网络插件对比 Calico简介 Calico是一个纯三层的网络插件,calico的bgp模式类似于flannel的host-gw Calico方便集成 OpenStac ...
- CNN网络架构演进:从LeNet到DenseNet
卷积神经网络可谓是现在深度学习领域中大红大紫的网络框架,尤其在计算机视觉领域更是一枝独秀.CNN从90年代的LeNet开始,21世纪初沉寂了10年,直到12年AlexNet开始又再焕发第二春,从ZF ...
- 残差网络ResNet笔记
发现博客园也可以支持Markdown,就把我之前写的博客搬过来了- 欢迎转载,请注明出处:http://www.cnblogs.com/alanma/p/6877166.html 下面是正文: Dee ...
- 『高性能模型』轻量级网络ShuffleNet_v1及v2
项目实现:GitHub 参考博客:CNN模型之ShuffleNet v1论文:ShuffleNet: An Extremely Efficient Convolutional Neural Netwo ...
- CNN网络架构演进
卷积神经网络可谓是现在深度学习领域中大红大紫的网络框架,尤其在计算机视觉领域更是一枝独秀.CNN从90年代的LeNet开始,21世纪初沉寂了10年,直到12年AlexNet开始又再焕发第二春,从ZF ...
- Golang 序列化方式及对比
Golang 序列化方式及对比 - fengfengdiandia的专栏 - CSDN博客 https://blog.csdn.net/fengfengdiandia/article/details/ ...
随机推荐
- 端口,OSI7层模型,TCP的三次握手和四次挥手,进度条
1.端口: 端口是为了将同一个电脑上的不同程序进行隔离 IP是找电脑,端口是找电脑上的程序 MySQL是一个软件,帮助我们在硬盘上进行文件操作,默认端口是3306 Redis是一个软件,帮助我们在内存 ...
- C 单链表 实现约瑟夫环
list.h #ifndef _List_H #define _List_H typedef int ElementType; struct Node; typedef struct Node *Pt ...
- laravel5.6 使用迁移创建表
laravel 使用迁移创建表 创建迁移文件 --table 和 --create 选项可以用于指定表名以及该迁移是否要创建一个新的数据表.这些选项只需要简单放在上述迁移命令后面并指定表名: php ...
- vue.js主要内容
vue的主要内容 1.了解vue 2.vue开发环境的搭建和脚手架工具的使用 3.vue具体的指令和项目实战 1.了解vue 1.具备基础:html.css.js,模块化概念.ES6语法(简单即可) ...
- Linux内容点(部分)
文件属性 -w 文件或目录,对目前(有效的)用户或组来说是可写的 -x 文件或目录,对目前(有效的)用户或组来说是可执行的 -o 文件或目录, ...
- 后端开发实践系列之二——领域驱动设计(DDD)编码实践
Martin Fowler在<企业应用架构模式>一书中写道: I found this(business logic) a curious term because there are f ...
- 【pycharm】pycharm远程连接服务器的Python解释器,远程编写代码!!!
今天讲讲如何用pycharm连接远程服务器,使用远程服务器的Python解释器,比如说是你公司的服务器,在家里就可以编写或修改项目的代码! 第一步,先找到服务器上的ip地址 Linux查看IP命令:i ...
- Java Grammer:数据类型
Java的数据类型 我们知道,Java是一种强类型语言,类型对于Java语言来说非常的重要不言而喻,在Java中,分为基础数据类型和引用数据类型,其中基础数据类型分为了四类八种: 下面,我们来分别说一 ...
- c#链接数据库,查找数据信息
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- 【Java例题】5.4 子串出现的次数
4. 输入一个字符串s,再输入另一个字符串t,在s中查找t出现的次数. package chapter5; import java.util.Scanner; public class demo4 { ...