CoDL技术介绍及代码复现

Posted JustNo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CoDL技术介绍及代码复现相关的知识,希望对你有一定的参考价值。

1 CoDL MobiSys2021 技术介绍

CoDL是一个移动设备上并行DL推理框架,它基于Xiaomi MACE框架开发,主要利用手机SoC的CPU和GPU并行加速模型推理过程,而当前的主要的推理框架还是依次只利用一个设备去推理.

1.1 挑战和解决方案

  1. 减少异构处理器之间的数据共享开销
  2. 如何为异构处理器恰当地分配OP

为了充分利用异构处理器来加速Model的每一个OP,论文中提到了两个技术来解决上面的挑战.

  1. 混合类型优化的数据共享(hybrid type-friendly data sharing),这个技术允许每个处理器能够使用其最高效的数据类型去进行推理,因为文章中设计了实验,其结果表明如果异构处理器共用统一类型的数据结构会导致推理效率并不高效且不合理.为了减少共享的开销,同时还采用了hybrid-dimension partitioningoperator chain.
  2. 非线性和并发感知的延迟预测(non-linearity and concurrency-aware latency prediction).通过构建一个轻量且准确的延迟预测器来指导OP切分来确保合理性.

有空再详细介绍介绍CoDL的技术实现

2 代码复现

CoDL的代码已经开源在了GitHub上,地址是:https://github.com/csu-eis/CoDL/

2.1 CoDL运行流程

2.1.1 离线阶段(offline)

在离线阶段,CoDL设计了一个轻量的延迟预测器指导在在线阶段的OP切分,它会考虑到data sharing的开销.

2.1.2 在线阶段(online)

在线阶段分成了两个部分,一个是OP切分(operator partitioner),另一个是OP协同执行(operator co-executor).

  1. operator partitioner,这主要负责去找对于输入model的优化的OP 切分的计划,同样OP的权重也会被预分配CPU和GPU上,从而避免推理时再去转换.
  2. operator co-executor,这主要是就是根据切分计划去对OP执行进行同步,并对不同的处理器采用不同的数据类型.

2.2 基于CoDL加速模型

废话不多说了,开干.

2.2.1 构建Docker环境和可执行文件

  1. 编译镜像

     git clone https://github.com/csu-eis/CoDL.git
     cd CoDL
     # 基于dockerfile 编译出docker
     docker build -t codl/codl -f ./Dockerfile .
    
  2. 创建环境

    # 这里的worksapce设置为自己电脑上的工作区绝对路径
    sudo docker run -it --name codl-u16 --privileged -v /dev/bus/usb:/dev/bus/usb -v worksapce:/root/worksapce --hostname codl codl/codl:latest  /bin/bash
    
    # sudo docker run -it --name codl-u16 --privileged -v /dev/bus/usb:/dev/bus/usb -v /home/yanghuan/Workspace/transsion:/root/worksapce --hostname codl codl/codl:latest  /bin/bash
    

    这里我们需要注意一个电脑上只能同时开启一个adb server.请使用adb kill-server命令关闭其他正在运行的adb sever,确保只有docker里面的adb server正在运行

    #查看一下手机序列号
    adb devices
    #结果
    #root@codl:~/codl-mobile# adb devices
    #List of devices attached
    #3a9c4f5 device
    
  3. 编译可执行文件并push到手机

    # 确保进入了docker 容器
    cd ~/codl-mobile/
    # 编译可执行文件
    bash tools/codl/build_executable_files.sh
    

    构建成功如下图

    push 到手机

    # 确保pwd还在~/codl-mobile/
    bash tools/codl/push_executable_files.sh 3a9c4f5
    # 确保push成功
    adb -s 3a9c4f5 shell "ls /data/local/tmp/codl"
    

    push成功如下图

2.2.2 构建延迟预测器

  1. 收集延迟数据

    # 确保还在docker 容器内
    cd /root/codl-eval-tools/codl-lat-collect-and-eval/
    # 注意,如果我们需要对其他的Soc进行测试,我们需要改写collect_all_op_latency.sh,这里的.sh只支持[sdm855, sdm865, sdm888,kirin990]这几种
    bash tools/collect_all_op_latency.sh sdm865 3a9c4f5
    
  2. 训练延迟预测器

    ...

Matlab实现二维数字图像相关(2D Digital Image Correlation, 2D-DIC)ADIC2D代码复现及原理介绍


前言

由于本人近期正在展开数字图像相关技术用于测量材料形变方向的研究,其中需要对别人现有算法的复现和调研,尽管其中很多算法都已经非常成熟,但对于初学者而言即使明白其中的原理,无法上手实践和操作的话,依然无法能够将其完全的应用起来或者在上面进行创新,我希望能将自己作为一个初学者复现他人代码和学习该原理的过程记录下来,方便每一个涉足该领域的人能更快应用这些知识。

本文所复现的论文——Atkinson D, Becker T. A 117 Line 2D Digital Image Correlation Code Written in MATLAB[J]. Remote Sensing, 2020, 12(18): 2906.1
GitHub源码地址:https://github.com/SUMatEng/ADIC2D.git


这篇论文是让我真正想要将自己正在做的这些事进行记录的源动力,因为这篇文章的作者也是考虑到尽管数字图像相关技术很成熟,但是网络上缺乏可以实操的源码便于理解,从而将简化的代码以及对于原理的解释共享在网络上便于他人学习。非常感谢Devan Atkinson,Thorsten Becker两位作者对于他们知识成果的共享。我将在这里将我学到的东西以中文的形式以方便国内的学者进行进一步的研究。

This paper aims to bridge the gap between the theory and implementation of DIC. It does this by firstly presenting the theory for a 2D, subset based DiC framework that is predominantly consistent with current state-of-the-art practices. 1

一.数字图像相关(Digital Image Correlation)

数字图像相关技术(Digital Image Correlation, DIC) 是广泛应用于刚体结构形变检测的视觉测量技术。它通过在被测物表面投影或绘制随机散斑图案,定义图像的相似度函数,对物体形变前后的两幅图像进行分析即可得到采样点的位移场,从而得到形变2。数字图像相关技术按照其测量的维数,可以被分为二维数字图像相关(Two-Dimensional Digital Image Correlation, 2D-DIC)三维数字图像相关(Three-Dimensional Digital Image Correlation, 3D-DIC)3。如图所示4就是2D-DIC获取形变后子区位移场的过程。

对于数字图像相关而言,其流程可以分为标定、相关运算、位移变换以及最后根据实际需要计算应变或者其他信息四个步骤,标定就是通过一系列拍摄的特定图案的图片,利用标定算法求解出相机图像坐标系与真实世界坐标系下的映射关系,之后我单独写一篇来分享好了,这里主要分享一下相关运算的流程与推导。

二.相关运算

数字图像相关的本质就是在参考图像上设置好子区后,找到形变后图片上对应的已经产生过位移的子区,从而计算出形变子区相对于参考子区在图像坐标系上的位移,最终利用标定好的映射关系求解出该区域在实际物理空间中的位移,最后利用得到的位移计算得到所拍摄表面所发生的形变。在这个过程中参考子区是已知的,但形变后的图片上原本的子区必然发生了变化,其具体位置是未知的,因此如何才能找到和原先参考子区对应的那块区域(求解这一未知量)正是关键所在,这正是相关运算所做的事情。

1.数学模型

我强烈建议大家能一起推导一次这一部分,对于理解相关运算有很大的作用!!

首先设参考图像 F F F,它很多时候代表了 t = 0 t=0 t=0时刻所拍摄到的散斑图案,其上的参考子区设为 f f f

子区的排布有很多种,可以加步进那样整列排布,也可以随机的点选;子区的形状也可以各种各样,矩形、圆型,只要保证相关运算所处理的所有子区为同一种形状、大小的即可。

接下来设形变图像 G G G,其上的形变子区 g g g,如下为一个在相机图像坐标系下的示意图1

图中左上角的矩形框即为参考子区,右下角的平行四边形即为形变子区,其中参考子区 f f f中心点为 x 0 = [ x 0 y 0 ] T \\boldsymbolx^0=\\left[\\beginarrayllx_0 & y_0\\endarray\\right]^T x0=[x0y0]T(后面的公式表达请注意上下标),参考子区上的其他像素点为 x i = [ x i y i ] T \\boldsymbolx^i=\\left[\\beginarrayllx_i & y_i\\endarray\\right]^T xi=[xiyi]T。以中心点 x 0 \\boldsymbolx^0 x0作为参考,我们可以得到
x i = Δ x i x 0 + x o = [ x i y i ] = [ Δ x i Δ y i ] + [ x 0 y 0 ] \\boldsymbolx^i=\\Delta \\boldsymbolx^i \\boldsymbolx^0+\\boldsymbolx^o=\\left[\\beginarrayl x_i \\\\ y_i \\endarray\\right]=\\left[\\beginarrayl \\Delta x_i \\\\ \\Delta y_i \\endarray\\right]+\\left[\\beginarrayl x^0 \\\\ y^0 \\endarray\\right] xi=Δxix0+xo=[xiyi]=[ΔxiΔyi]+[x0y0]其中 Δ x i x 0 \\Delta \\boldsymbolx^i \\boldsymbolx^0 Δxix0表示 x 0 \\boldsymbolx^0 x0 x i \\boldsymbolx^i xi的坐标偏移。现在我们设置形变子区中与之前 x i \\boldsymbolx^i xi相对应的当前坐标点为 x i ′ = [ x i ′ y i ′ ] T \\boldsymbolx^i' =\\left[\\beginarrayllx_i' & y_i'\\endarray\\right]^T xi=[xiyi]T,与之前中心点 x 0 \\boldsymbolx^0 x0相对应的形变子区中心点为 x d \\boldsymbolx^d xd。与上式同理,我们同样可以得到 x i ′ \\boldsymbolx^i' xi的表达式为
x i ′ = Δ x i ′ x 0 + x o = [ x i ′ y i ′ ] = [ Δ x i ′ Δ y i ′ ] + [ x 0 y 0 ] \\boldsymbolx^i'=\\Delta \\boldsymbolx^i' \\boldsymbolx^0+\\boldsymbolx^o=\\left[\\beginarrayl x_i' \\\\ y_i' \\endarray\\right]=\\left[\\beginarrayl \\Delta x_i' \\\\ \\Delta y_i' \\endarray\\right]+\\left[\\beginarrayl x^0 \\\\ y^0 \\endarray\\right] xi=Δxix0+xo=[xiyi]=[ΔxiΔyi]+[x0y0]其中 Δ x i ′ x 0 \\Delta \\boldsymbolx^i' \\boldsymbolx^0 Δxix0表示 x 0 \\boldsymbolx^0 x0 x i ′ \\boldsymbolx^i' xi的坐标偏移。注意,没有使用形变子区中心点作为参考点,是有两个原因的,第一个原因是由于本身 x d \\boldsymbolx^d x以上是关于CoDL技术介绍及代码复现的主要内容,如果未能解决你的问题,请参考以下文章

CSDN官方2048小游戏通关秘诀及复现

CSDN官方2048小游戏通关秘诀及复现

CSDN官方2048小游戏通关秘诀及复现

CSDN官方2048小游戏通关秘诀及复现

matlab代码复现:目标跟踪多传感器融合非线性滤波等探讨及技术支持

matlab代码复现:目标跟踪多传感器融合非线性滤波等探讨及技术支持