移动和嵌入式人体姿态估计(Mobile and Embedded Human Pose Estimation)

探讨了移动和嵌入式设备上的人体姿态估计技术,包括MobileNet系列模型的优化及基于深度图的估计方法,强调了实时性和资源受限环境下的性能。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

移动和嵌入式人体姿态估计

1. 背景

  • 现有的大部分模型都是在PC(带有超级强大GPU)上进行的,所以在嵌入式设备上基本无法使用

  • 人体姿态估计

    • 人体姿态估计主要是指在图像或者视频中找到人体的重要关节的位置(比如头,手、脚、肩部、膝盖、肘部等)
  • 姿态相似性度量

    • 利用各个关节点的位置进行适当的组合构造出的人体姿态特征
  • 实现方案

    • 优化模型:大大地减少参数
    • 使用ARM中的GPU和NEON
  • 实现方法

    • 生成方法(Generative Methods)/有模型方法

      • 先预定义身体部件模型,然后与输入的深度图像进行匹配
      • 使用PSO, ICP最小化手工特征(hand-crafted)代价函数
      • 通过将人体分为多个部件组合成模型,通过部件检测器检测部件的位置,进行部件之间的概率计算,从而对图像中的人体进行姿态估计
      • 优势:不需要建立庞大的数据库,同时在模型建立完毕以后对于符合模型视角的姿态具有较高的识别率
      • 劣势:复杂的人体模型构建较为困难,并且在实际情况中由于人体姿态具有多样性,使得很难构建出具有很强代表性的人体模型;所以此方法很难面对具有庞大数据量的真实情况
      • 经典论文
        • Therepresentationand matching of pictorial structures (1973)
        • Cascaded models for articulated pose estimation (2010)
        • Multi-view Pictorial Structures for 3D Human Pose Estimation (2013)
        • Articulated part-based model for joint object detection and pose estimation (2013)
        • Expanded parts model for human attribute and action recognition in still images (2013)
        • 基于约束树形图结构外观模型的人体姿态估计 (2014)
        • 一种基于图结构模型的人体姿态估计算法 (2013)
        • 人体姿态估计步骤
          在这里插入图片描述
        • 常用特征提取方法
          • 尺度不变特征变换法(SIFT:Scale Invariant Feature Transform)
          • 梯度方向直方图特征(HOG:Histogram of Oriented Gradient)
    • 判别方法(Discriminative Methods)/无模型方法

      • 根据输入的深度图像,直接定位关节位置
      • 大多数基于深度学习的方法
      • 通过对每张图像的像素点进行分析,通过先进的特征提取方法来估计人体部件的位置
      • 优势:不需要建立复杂的人体模型,从而使用得此方法不受模型的约束,可以适用于真实应用场景中
      • 劣势
        • 为适应现实生活中,需要建立庞大的数据库
        • 对硬件条件具有较高的要求
      • 经典论文
        • Real-time human pose recognition in parts from single depth images (2013, Kinect, Shotton)
        • Efficient regression of general-activity human poses from dept images (2011)
        • Accurate 3d pose estimation from a single depth images (2011)
      • 人体姿态估计步骤
        在这里插入图片描述
      • 常用特征提取方法
        • 人体部件尺度特征
          • 赵文闯 《深度图像中基于的人体识别方法》 2012
          • 四维特征向量 ( d 0 , d 45 , d 90 , d 135 ) (d_0, d_{45}, d_{90}, d_{135}) (d0,d45,d90,d135)通过除以图像中人体身高进行归一化
          • 优势:不同尺度下的人体姿态估计有着天然的优势
          • 劣势:由于此特征没有很好的运用到部件在空间中处于不同位置,且不同部件的区分效果并不明显
        • 深度图像偏移比较特征
          • Shotton J (Kinect)
          • 优势:运算简单、效果较好
          • 劣势:由于此特征维数较低、在部件内部反应较小,所以使用在实际应用中偏移比较特征的鲁棒性和准确性并不是很好
        • 深度图像方向梯度特征
          • 方向梯度特征:像素点所在平面与深度相机所在平面的夹角
          • 传统的深度图像方向梯度(DGoD:Directional Gradient of Depth)
            D G o D p ( x , y ) = t a n − 1 d y d x = t a n − 1 p ( x , y + 1 ) − p ( x , y − 1 ) p ( x + 1 , y ) − p ( x − 1 , y ) DGoD_{p(x,y)} = tan^{-1} \frac{dy}{dx} = tan^{-1}\frac{p(x,y+1) - p(x, y-1)}{p(x+1, y) - p(x-1, y)} DGoDp(x,y)=tan1dxdy=tan1p(x+1,y)p(x1,y)p(x,y+1)p(x,y1)
            • p ( x , y ) p(x,y) p(x,y):是深度图像在x列y行处的深度值
            • 方向梯度取值范围: [ 0 ° , 360 ° ] [0°, 360°] [0°,360°]
            • d x = 0 a n d d y = 0 dx=0 \quad and \quad dy=0 dx=0anddy=0,则DGoD=0
            • d x > 0 a n d d y = 0 dx > 0 \quad and \quad dy=0 dx>0anddy=0,则DGoD = 360°
            • d x < 0 a n d d y = 0 dx < 0 \quad and \quad dy=0 dx<0anddy=0,则DGoD = 180°
          • 优化的深度图像方向梯度
            D G o D p ( x , y ) = t a n − 1 d y d x = t a n − 1 p ( x , y + i ) − p ( x , y − i ) p ( x + i , y ) − p ( x − i , y ) DGoD_{p(x,y)} = tan^{-1} \frac{dy}{dx} = tan^{-1}\frac{p(x,y+i) - p(x, y-i)}{p(x+i, y) - p(x-i, y)} DGoDp(x,y)=tan1dxdy=tan1p(x+i,y)p(xi,y)p(x,y+i)p(x,yi)
            • i ∈ ( i m i n , i m a x ) i \in (i_{min}, i_{max}) i(imin,imax)
            • 目的:解决dx=0或 dy=0过多的问题
          • 不同部件可能位于同一平面,也可能位于不同平面,此方法不能区分位于同一平面但不同部件的点,量级梯度特征可解决此问题
        • 深度图像量级梯度特征
          • 传统的深度图像量级梯度(MGoD:Magnitude Gradient of Depth)
            M G o D p ( x , y ) = [ p ( x + 1 , y ) − p ( x − 1 , y ) ] 2 + [ p ( x , y + 1 ) − p ( x , y − 1 ) ] 2 MGoD_{p(x,y)} = \sqrt {[p(x+1, y) - p(x-1, y)]^2 + [p(x,y+1) - p(x, y-1)]^2} MGoDp(x,y)=[p(x+1,y)p(x1,y)]2+[p(x,y+1)p(x,y1)]2
            • p(x,y):是深度图像在x列y行处的深度值
          • 优化的深度图像量级梯度
            M G o D ( I , x ) = d I ( x + u d I ( x ) ) − d I ( x + v d I ( x ) ) MGoD_{(I,x)} = d_I(x + \frac {u}{d_I(x)}) - d_I(x + \frac {v}{d_I(x)}) MGoD(I,x)=dI(x+dI(x)u)dI(x+dI(x)v)
            • $MGoD_{(I,x)} : 表 示 深 度 图 像 :表示深度图像 I 中 位 置 为 中位置为 x$的像素点的量级梯度特征值
            • d ( ⋅ ) d({\cdot}) d():此点的深度信息
            • u 和 v u和v uv:分别为 x x x点在水平和垂直方向的偏移量
    • 混合方法(Hybrid Methods)

      • 把生成方法和判别方法结合使用
      • 使用自动编码器学习潜在空间
  • 研究现状

    • 基于RGB彩色图像
      • 易受光照变化、背景、阴影和噪声等的影响
    • 基于深度图像
      • 逐像素分类的方法
      • 基于概率图模型的方法
      • 基于特征点的方法
      • 基于深度学习的方法
    • 结合RGB彩色图像和深度图像
  • 逐像素分类的方法

    • 将深度图像上邻近区域内像素对的深度差值作为部位特征,来区分身体的不同部位,然后再结合随机决策森林的方法,将每一个像素进行分类
    • 在逐像素分类的方法中,首次发表于2011 年的内置于Kinect 中使用的方法最具有代表性,该方法由Shotton 等提出,他们的做法是将一个区域内人体的像素对应的深度之间的差值作为特征,然后利用随机决策森林进行训练,对于每一个像素进行分类贴上部位标签,然后利用部位的信息再将这些特征回归到关节点。
    • 这种方法实时性很好,并且在准确性上也有很好的表现,但是这种方法需要海量的带标签的数据进行很长时间的训练才能达到良好的效果。基于Shotton 等提出逐像素分类方法的开拓,越来越多的研究人员受到该方法的启发,并在该方向上取的了一定的进步。逐像素分类的方法目前只能应用于深度图像。
    • 流程图
      在这里插入图片描述
    • 优点
      • 基本思想:设计像素或者像素对之间的特征,将人体像素通过分类方法对应到人体不同部位,然后再将人体对应部位信息优化到人体关节点信息。
      • 这种方法的准确性比较高
    • 缺点
      • 需要大量的带标签的训练数据进行模型的训练才能达到能够接受的效果
      • 训练时间也很长,工作量极大,只能应用在特定场景中
    • 相关论文
      • Multi-task forest for human pose estimation in depth images (Lallemand J)
        • 提出了一种新颖的方法,在进行随机森林训练时,除了将深度图像中人体的每一个像素对应到相应的三维关节点位置,还将每一个像素与人体的运动状态进行关联,将人体运动信息整合到目标函数中,改善了人体姿态预测的精度
      • The Vitruvian manifold: inferring dense correspondences for one-shot human pose estimation (Taylor J)
        • 使用回归森林来使深度图像与身体模型相对应,对于输入的深度图像,通过回归森林推断出对应的人体模型,然后优化模型参数,得到优化后的关节点位置,得到最终人体姿态
      • An adaptable system for RGB-D based human body detection and pose estimation (Buys K)
        • 使用随机森林将深度图像中每一个像素与身体部位联合起来,并通过在部位中聚类中以及人体关节点间的约束关系得到初始骨架模型,然后再结合外观模型,将人体从彩色图像中分割出来,逐步迭代得到最终人体姿态
      • Human body part estimation from depth images via spatiallyconstrained deep learning (Jiu M)
        • 基于卷积神经网络使用身体部位的空间特征进行逐像素分类,而且像素分类的性能有了极大提高
      • Accurate realtime full-body motion capture using a single depth camera (Wei X)
        • 使用混合动作捕捉系统将3D 姿态跟踪与人体检测结合,并做到
          了实时人体姿态估计的效果
  • 基于概率图模型的方法

    • 是指把人体模型用刚体或者非刚体的部件来表示,这些部件之间用相连接的边来约束,最终能够用人体部件分配的先验概率优化问题定位人体的每一个部件,识别人体姿态并达到识别人体每一个关节的目的
    • 这种方法在彩色图像和深度图像中都可以应用,有许多的实现。
    • 基于概率图模型来解决问题,实质上是指通过概率模型来推理结果,整个过程包括学习模型基于模型进行推理两个部分。
    • 概率图模型指的是结合了概率论和图论相关知识,用图形的方式去表达变量之间的关系的模型的一类总称
    • 概率图模型中的图主要是由点和边构成:
      • 点代表随机变量
      • 边指的是与边连接的点之间的概率关系
    • 常见的概率图模型主要包括:
      • 马尔科夫模型
      • 贝叶斯模型
      • 隐马尔科夫模型
    • 实际应用中为了克服有时候单个模型对于问题的描述不够准确的情况,出现了混合模型,这种模型由概率图模型与其他模型或者理论相结合而形成。
    • 相关论文
      • Controlled human pose estimation from depth image streams (Zhu Y)
        • 人使用飞行时间成像装置来获取深度图像,并在深度图像上提取特征来估计人体姿态。其中这些特征是基于概率推断的方法来进行检测和跟踪的
      • Bayesian 3D human body pose tracking from depth image sequences (Fujimura K)
        • 使用深度图像和人体模型之间的对应关系,进行局部优化得到身体部位,进而得到当前帧的人体关节点。并通过贝叶斯推断的方法来跟踪图像序列中的人体关节点
      • Real time motion capture using a single time-offlight camera (Ganapathi V)
        • 通过结合生成模型和判别模型来表示身体部位,并使用爬山搜索来解决最大后验推理问题
      • Real-time simultaneous pose and shape estimation for articulated objects using a single depth camera
        • 将关节形变模型嵌入到高斯混合模型中,并提出了一种用于将模板形状映射到主体形状的形状自适应算法。
    • 综合以上提到几种概率图模型的方法,在人体姿态估计领域使用范围最广的是贝叶斯模型,此外基于混合概率图模型的方法也比较常见。基于概率图模型的方法主要是基于样本数据进行训练,学习模型的参数以及模型的结构,也即模型中各个节点之间的关系和概率密度函数等。训练好模型后即可基于已知参数进行变量取值的推断。
  • 基于特征点的方法

    • 是指在深度图像上找到人体的目标点(通常为在人体深度图像上求测地距离,并将求得的极值点作为感兴趣的目标点)

    • 常常利用深度图像中像素点的空间几何特点,首先将深度图像数据转换成点云数据,再利用空间中相邻点之间约束关系等,将点连接成连通图,然后将中心点作为起始点计算测地距离[38],通常挑选最大测地距离的点或者其他特征的极值点作为特征点

    • 测地距离(Geodesic Distance):就是在曲面上从A点走到B点(不允许离开曲面)的最短距离, G e o d e s i c _ D i s t a n c e = d 12 + d 23 + d 34 + d 45 Geodesic\_Distance = d_{12} + d_{23} + d_{34} + d_{45} Geodesic_Distance=d12+d23+d34+d45

    • 欧氏距离(Euclidean Distance):即两点之间的最短距离, E u c l i d e a n _ D i s t a n c e = d 15 Euclidean\_Distance = d_{15} Euclidean_Distance=d15
      在这里插入图片描述

    • 处理流程

      • 深度图像预处理:剔除背景,提取前景,然后进行中值滤波去噪
      • 把深度图像转换成点云 (根据相机内参)
      • 得到点云数据后,可以利用空间中点的约束关系来构建边,进而连接成整张网格图,即ijx 与klx 两点之间是否有边连接,需要考察空间中两点之间的欧氏距离是否满足一定阈值,而且在2D 深度图像上两点是否是邻接关系,即点云中点包含边的原则是两点在深度图像上相邻,而且空间中两点的距离也在阈值范围内
      • 求身体极值点的通常做法是:取人体点云中的重心作为起点,然后计算起点到其他所有点的测地距离,最后选取其中的几个具有极大测地距离的点作为特征点
        在这里插入图片描述
    • 在得到目标点后,不同的学者提出了不同的方案

      • Human skeleton tracking from depth data using geodesic distances and optical flow (Schwarz L A)
        • 是利用测地极值求出5个身体部位,分别是头部、左手、右手、左脚、右脚,然后将这几个点跟关节点进行拟合,得出最终关节点,如果存在没有检测到的部位,则利用上一帧的彩色图像信息,求取光流变化并推断出这一帧丢失的部位
      • Accurate static pose estimation combining direct regression and geodesic extrema (Holt B)
        • 首先使用随机决策森林对身体上每一个像素进行分类,估计出身体的刚性部位,然后通过Dijkstra 算法求测地距离,并结合测地极值点将身体具体部位划分出来,最终估计出人体姿态;同时发布了一个包含对齐的彩色图像和深度图像的全新的数据集,用来评估不同方法的效果
      • Real-time identification and localization of body parts from depth images (Plagemann C)
        • 在身体上通过测地距离计算大约20 个感兴趣点,并提取每个点的方向向量,并确定该点属于的身体部位,从而识别人体姿态。
    • 基于特征点的方法目前只能应用于深度图像

    • 仅仅依靠测地极值点作为人体的全部特征,往往不能刻画全部的人体姿态,鲁棒性不够好

  • 基于深度学习的方法

    • 基于深度学习提出了一种新的深度推理嵌入式(deep inference-embedded)多任务学习框架,用于从静态深度图像中预测人体姿态
    • 相关论文
      • Human pose estimation from depth images via inference embedded multi-task learning (Wang K)
        • 使用全卷积网络来生成身体部位的热度(置信度)图 (heatmap)
        • 利用此heatmap将身体关键部位检测出来
        • 基于检测到的关键部位使用嵌入的匹配网络(MatchNet)来推断当前身体部位的具体位置,得到最终人体关节位置
          在这里插入图片描述
      • Reconstruction of 3D human body pose from stereo image sequences based on top-down learning (Yang H D)
        • 是将输入的深度图像用事先准备好的数据库中的多张深度图像线性组合而成
        • 求出组合系数
        • 将数据库中的深度图像对应的3D 人体模型进行线性组合即可得到输入的深度图像对应的人体模型
      • Accurate 3d pose estimation from a single depth image (Ye M)
        • 将深度图像对应的点云剔除背景、去除噪声
        • 将点云的坐标正则化,使之与视角无关
        • 在本地数据库中搜索相似姿态并进行适当修正,得到最终人体关节点位置
      • Real-time posture reconstruction for Microsoft Kinect (Shum H)
        • 利用Kinect SDK 给出的关节点位置进行评估
        • 对于存在遮挡的情况,在本地离线的动作数据库中进行最近邻搜索
        • 查找与当前姿态最相似的姿态,并通过姿态优化合成得到最终模拟人物
          在这里插入图片描述

1.1 获取小型网络的方法

  • 收缩(shrinking),分解(factorizing)或压缩(compressing)预训练的网络
  • 压缩:基于乘积量化(product quantization)、哈希(hashing)以及修剪(pruning)的压缩,提出了向量量化和霍夫曼编码
  • 蒸馏:它使用较大的网络来教授较小的网络

1.2 判断模型的指标

  • 准确度(accuracy)
  • 通过乘法加法(MAdd)度量的操作数(number of operations measured by multiply-adds (MAdd))
  • 实际延迟(处理耗时: actual latency)
  • 参数数量(number of parameters)
  • MACs/MADDs:乘法和加法操作数量(the number of multiply-accumulates)

1.3 经典网络结构

  • 移动和嵌入式平台
    • ShuffleNet:利用分组卷积和通道打乱操作进一步减少MAdds
    • SqueezeNet:广泛使用1x1卷积与挤压和扩展模块,主要集中于减少参数的数量
    • MobileNetV1:采用深度可分离卷积,大大提高了计算效率 ( 1 K 2 \frac {1}{K^2} K21
    • MobileNetV2:避免丢失低维空间的特征信息
      • 在MobileNetV1基础上引入了一个具有反向残差和线性瓶颈的资源高效模块
    • MobileNetV3:减少操作的数量(MAdds)和实际测量的延迟
    • CondenseNet:在训练阶段学习组卷积,以保持层与层之间有用的紧密连接,以便功能重用
    • ShiftNet:提出了与点向卷积交织的移位操作,以取代昂贵的空间卷积
  • 专业GPU/TPU平台
    • AlexNet
    • VGGNet
    • GoogLeNet
    • ResNet

1.4 源码

1.5 读论文的正确方法

  • 论文+代码
  • 明白论文的常用手法
    • 每篇论文都不会说自己的缺点,只会放大优点。但是引用别人的论文时,却总放大别人工作的缺点。当你对比阅读时,形成一个知识串,才会对某个问题有更清晰的认识。
    • 论文为了出成果,一般只会选择对自己模型有力的数据集验证。对某一领域数据集特征了解,再也不会被作者蒙蔽双眼了。比如NAS(Neural Architecture Search),很多论文喜欢在CIFAR-10/ CIFAR-100/SVHN等小数据集比实验结果,ImageNet性能表现避重就轻避而不谈;很多论文写state-of-art的性能,对实时性不谈;论文没有说的没有做的可能是个大坑。
    • 论文因为要投稿和发表顶会,故意会云里雾里引入很多概念和公式,当对比代码,关键trick,才能返璞归真。Code+paper,才是论文最佳的阅读方式。
    • 对于自己关注的领域,可能每篇有影响的,实验结果不是state-of-art也要关注,因为工作可能会撞车。对横向领域的论文,要关注state-of-art,说不定很多trick可以直接迁移到自己的工作。
    • 拒绝二手知识。阅读一篇论文,直接从原文阅读思考、和作者邮箱联系寻找答案。

1.6 分组卷积(Group Convolution)

  • Group Convolution:AKA(also known as) Filter groups
  • 常规卷积
    • 如果输入feature map尺寸为C∗H∗W,卷积核有N个
    • 输出feature map与卷积核的数量相同也是N
    • 每个卷积核的尺寸为C∗K∗K
    • N个卷积核的总参数量为N∗C∗K∗K
  • 分组卷积
    • 对输入feature map进行分组,然后每组分别卷积。
    • 假设输入feature map的尺寸仍为C∗H∗W,输出feature map的数量为N个,
    • 如果设定要分成 G G G个groups,则每组的输入feature map数量为 C G \frac {C}{G} GC,每组的输出feature map数量为 N G \frac {N}{G} GN,每个卷积核的尺寸为 C G ∗ K ∗ K \frac{C}{G}∗K∗K GCKK,卷积核的总数仍为N个
    • 每组的卷积核数量为 N G \frac{N}{G} GN,卷积核只与其同组的输入map进行卷积,卷积核的总参数量为 N ∗ C G ∗ K ∗ K N∗\frac{C}{G}∗K∗K NGCKK,可见,总参数量减少为原来的 1 G \frac{1}{G} G1
    • group1输出map数为2,有2个卷积核,每个卷积核的channel数为4,与group1的输入map的channel数相同,卷积核只与同组的输入map卷积,而不与其他组的输入map卷积。
      在这里插入图片描述
  • 分组卷积的用途
    • 减少参数量,分成G组,则该层的参数量减少为原来的 1 G \frac{1}{G} G1
    • 分组卷积可以看成是structured sparse,每个卷积核的尺寸由 C ∗ K ∗ K C∗K∗K CKK变为 C G ∗ K ∗ K \frac{C}{G}∗K∗K GCKK,可以将其余 ( C − C G ) ∗ K ∗ K (C−\frac{C}{G})∗K∗K (CGC)KK的参数视为0,有时甚至可以在减少参数量的同时获得更好的效果(相当于正则)
  • 分组卷积=>深度可分离卷积
    • 当分组数量等于输入map数量,输出map数量也等于输入map数量,即 G = N = C G=N=C G=N=C N N N个卷积核每个尺寸为 1 ∗ K ∗ K 1∗K∗K 1KK时,分组卷积(Group Convolution)就成了深度可分离卷积(Depthwise Convolution),参见MobileNet,参数量进一步减少。
      在这里插入图片描述
  • 分组卷积=>全局深度可分离卷积
    • Global Depthwise Convolution(GDC):全局深度可分离卷积
    • 更进一步,如果分组数G=N=C,同时卷积核的尺寸与输入map的尺寸相同,即K=H=W,则输出map为C∗1∗1即长度为C的向量,此时称之为Global Depthwise Convolution(GDC),见MobileFaceNet
    • 可以看成是全局加权池化,与 Global Average Pooling(GAP) 的不同之处在于,GDC 给每个位置赋予了可学习的权重(对于已对齐的图像这很有效,比如人脸,中心位置和边界位置的权重自然应该不同),而GAP每个位置的权重相同,全局取个平均
      在这里插入图片描述

2. 移动应用模型

  • MobileNet家族
MobileNet版本 主要特点
V1 深度可分离卷积
V2 1) 反向残差
2) 线性瓶颈
V3 1) 网线结构搜索:基于块搜索的NAS, 基于层搜索的NetAdapt
2) 使用的新的激活函数 h-swish(x)
3) 基于squeeze and excitation 结构的轻量级注意力机制

2.1 MobileNet -V1 (2017 Google)

2.1.1 深度可分离卷积概念

  • MobileNet模型:基于深度可分离卷积
  • 深度可分离卷积
    • (DSC:Depthwise Separable Convolution)
    • 它是分解卷积的一种形式,可将标准卷积分解为深度卷积1×1卷积 (点式卷积)
  • 使用DSC创建了一个轻量级神经网络
  • 使用两个简单的全局超参来控制性能(计算量)和准确性之间的平衡
  • 标准卷积:一步实现以下两个功能:
    • 滤波器
    • 将输入合并为一组新的输出
  • 深度可分离卷积(MobileNet):分步实现以下两个功能:
    • 深度卷积(depthwise convolution):将单个滤波器应用于每个输入通道
    • 逐点卷积 (pointwise convolution):使用1×1卷积合并深度卷积的输出
  • 深度可分离卷积把标准卷积分为以下两个独立的层
    • 滤波器层(filtering)
    • 合并层(combing)
    • 这样大大减小于模型的大小和计算量

2.1.2 深度可分离卷积流程

  • 标准卷积流程:
    在这里插入图片描述
  • 把标准卷积分解为深度卷积和逐点卷积的流程如下图所示:
    在这里插入图片描述
  • 深度可分离卷积示意图
    在这里插入图片描述

2.1.3 深度可分离卷积计算成本

  • 计算参数数量
    • 参数说明
      • 输入特征图(Input Feature Map) F : D F × D F × M F:D_F \times D_F \times M FDF×DF×M
      • 输出特征图(Output Feature Map) G : D F × D F × N G:D_F \times D_F \times N GDF×DF×N
      • M M M:输入特征图的通道数(input channels / input depth)
      • N N N:输出特征图的通道数(output channels / output depth)
      • D F D_F DF:特征图的宽度和高度
    • 标准卷积
      • 卷积Kernel K K K的参数数量 D K ⋅ D K ⋅ M ⋅ N D_K \cdot D_K \cdot M \cdot N DKDKMN
        • D K D_K DK:方形Kernel的边长
        • M M M:输入特征图的通道数(深度)
        • N N N:输出特征图的通道数(深度),也即卷积Kernel D K ⋅ D K ⋅ M D_K \cdot D_K\cdot M DKDKM 的个数
      • 输出特征图(stride 1 and padding 1):
        G k , l , n = ∑ i , j , m K i , j , m , n ⋅ F k + i − 1 , l + j − 1 , m G_{k,l,n} = \sum_{i,j,m}K_{i,j,m,n} \cdot F_{k+i-1, l+j-1,m} Gk,l,n=i,j,mKi,j,m,nFk+i1,l+j1,m
      • 计算成本 标 准 卷 积 计 算 成 本 c o s t = D K ⋅ D K ⋅ M ⋅ D F ⋅ D F ⋅ N 标准卷积计算成本cost = D_K\cdot D_K \cdot M \cdot D_F\cdot D_F \cdot N cost=DKDKMDFDFN
    • 深度可分离卷积
      • 深度卷积Kernel K ^ \hat{K} K^ (Kernel数量=输入层的深度值)
        • 参数数量**: D K ⋅ D K ⋅ M D_K\cdot D_K \cdot M DKDKM
        • D K D_K DK:方形Kernel的边长
        • M M M:输入特征图的通道数(深度)
        • 深度卷积Kernel K ^ \hat{K} K^的第m个Filter应用于输入特征图 F F F的第m个通道(channel),且生成输出特征图 G ^ \hat{G} G^的第m个通道
      • 深度卷积计算成本 c o s t 1 = D K ⋅ D K ⋅ M ⋅ D F ⋅ D F cost_1 = D_K \cdot D_K \cdot M \cdot D_F \cdot D_F cost1=DKDKMDFDF
      • 逐点卷积 (Kernel数量=输出层的深度值)
        • 通过 1 × 1 1 \times1 1×1卷积计算深度卷积输出的线性组合,产生新的特征图 G G G
        • 计算成本 c o s t 2 = M ⋅ D F ⋅ D F ⋅ N cost_2 = M \cdot D_F\cdot D_F\cdot N cost2=MDFDFN
      • 深度可分离卷积计算成本 深 度 可 分 离 卷 积 计 算 成 本 c o s t = D K ⋅ D K ⋅ M ⋅ D F ⋅ D F + M ⋅ D F ⋅ D F ⋅ N 深度可分离卷积计算成本cost = D_K \cdot D_K \cdot M \cdot D_F \cdot D_F + M \cdot D_F\cdot D_F\cdot N cost=DKDKMDFDF+MDFDFN
  • 计算成本之比(深度可分离卷积/标准卷积) r a t i o = D K ⋅ D K ⋅ M ⋅ D F ⋅ D F + M ⋅ D F ⋅ D F ⋅ N D K ⋅ D K ⋅ M ⋅ D F ⋅ D F ⋅ N = 1 N + 1 D K 2 ratio = \frac {D_K \cdot D_K \cdot M \cdot D_F \cdot D_F + M \cdot D_F\cdot D_F\cdot N} {D_K\cdot D_K \cdot M \cdot D_F\cdot D_F \cdot N} = \frac {1}{N} + \frac{1}{D_K^2} ratio

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值