《仿京东购物商城》是一个电商网站的实战课程,主要讲解开发商城的必备要点,帮助你系统掌握Web商城类功能和开发流程。其中页面包括:首页、列表页、商品详情页、购物车、订单、登录、注册、支付(支付宝、微信)等…

除了以上必须掌握的知识点,课程还额外拓展了Django_RestFrameWork+Vue的开发使用,前后端分离已经是非常流行的趋势,而且api接口还可为开发的移动端app使用,学完本课程肯定是得学习api接口开发。

文件:590m.com/f/25127180-497892862-c73c0c(访问密码:551685)

以下内容无关:

-------------------------------------------分割线---------------------------------------------

  1. 导读

作为DAU过亿的国民出行服务平台,高德地图每天为用户提供海量的检索、定位和导航服务,实现这些服务需要有精准的道路信息,比如电子眼位置、路况信息、交通标识位置信息等。读者是否会好奇,高德是如何感知到现实世界的道路信息,并提供这些数据给用户呢?

事实上,我们有很多的方法将现实世界的道路要素采集回收,并更新到高德地图App上。其中一种非常重要的方法是利用计算机视觉的手段,将视觉算法部署到客户端,通过对图片的检测识别,快速将道路的信息回收。

为了低成本,高实时性地实现道路要素回收,我们借助MNN引擎(一个轻量级的深度神经网络推理引擎),将卷积神经网络模型部署到客户端,在客户端进行端侧的模型推理,从而完成在计算能力低,内存小的客户端进行道路要素采集的任务。

传统的CNN(卷积神经网络)计算量非常大,且业务场景需要部署多个模型。如何在低性能的设备上部署多个模型,并在不影响实时性的情况下保证应用的"小而优"是一个非常大的挑战。本文将分享利用MNN引擎在低性能设备上部署深度学习应用的实战经验。

  1. 部署

2.1 背景介绍

如Figure2.1.1所示,业务背景是将道路要素识别相关的CNN模型部署到客户端,在端侧进行模型推理,并提取道路要素的位置和矢量等信息。

由于该业务场景的需要,目前端上需同时部署10+甚至更多的模型,以满足更多的不同道路要素的信息提取需要,对于低性能设备来说是非常大的挑战。

Figure 2.1.1 高德数据采集

为了达到应用的"小而优",MNN引擎部署模型的过程中遇到了很多问题和挑战。下面就这些问题和挑战分享一些经验和解决办法。

2.2 MNN部署

2.2.1 内存占用

应用运行内存对于开发者来说是始终绕不开的话题,而模型推理产生的内存在应用运行内存中占有很大的比例。因此,为了使模型推理内存尽可能小,在模型部署的过程中,作为开发者必须清楚模型运行产生内存的主要来源。根据我们的部署经验,部署单模型的过程中,内存主要来源于以下四个方面:

Figure 2.2.1 单模型部署内存占用

ModelBuffer: 模型反序列化的buffer,主要存储模型文件中的参数和模型信息,其大小和模型文件大小接近。

**FeatureMaps: **Featuremaps的内存,主要存储模型推理过程中,每一层的输入和输出。

**ModelParams: **模型参数的内存,主要存储模型推理所需的Weights, Bias, Op等内存。其中Weights占用了该部分的大部分内存。

**Heap/Stack: **应用运行中产生的堆栈内存。

2.2.2 内存优化

知晓模型运行内存占用后,就能方便理解模型运行时的内存变化。经过多个模型部署实践, 为了降低部署模型的内存峰值,我们采取的措施如下:

模型反序列化(createFromFile)并创建内存(createSession)后,将模型Buffer释放(releaseModel), 避免内存累加。
处理模型输入,图像内存和inputTensor可内存复用。
模型后处理,模型输出Tensor和输出数据的内存复用。

Figure 2.2.2.1 MNN模型部署内存复用方案

经过内存复用,以部署1个2.4M的视觉模型为例,模型运行时从加载到释放,中间各阶段所占用内存变化可以用以下曲线表示:

Figure 2.2.2.2 单模型应用内存曲线(Android memoryinfo统计)

模型运行前,模型占用内存为0M。
在模型加载(createFromFile)和创建内存(createSession)后,内存升到5.24M, 来源于模型反序列化和Featuremaps内存创建。
调用releaseModel内存降低至3.09M,原因是释放了模型反序列化后的buffer。
InputTensor和图像内存复用,应用内存增加到4.25M, 原因是创建了存储模型输入的Tensor内存。
RunSession(),应用内存增加到5.76M,原因是增加了RunSession过程中的堆栈内存。
在模型释放后,应用恢复到了模型加载前的内存值。
经过多次模型部署的实践,下面总结了部署单模型到端的内存峰值预估公式:

MemoryPeak:单模型运行时内存峰值。

StaticMemory:静态内存,包括模型Weights, Bias, Op所占内存。

DynamicMemory:动态内存,包括Feature-maps所占内存。

ModelSize:模型文件大小。模型反序列化所占内存。

MemoryHS:运行时堆栈内存(经验取值0.5M-2M之间)。

2.2.3 模型推理原理

本章节分享模型推理原理,以便于开发者遇到相关问题时,快速定位和解决问题。

模型推理前模型的调度: MNN引擎推理保持了高度的灵活度。即可以指定模型不同的运行路径,也可以对不同的运行路径指定不同的后端,以提高异构系统的并行性。此过程主要是调度或者任务分发的过程。

对于分支网络,可以指定当前运行分支,也可以调度分支执行不同后端,提高模型部署的性能。图Figure2.2.3.1所示为一个多分支模型, 两个分支分别输出检测结果和分割结果。

Yii 2.0开发一个仿京东商城平台(源码+数据库+模板)相关推荐

  1. 仿手机端京东商城html源码_web前端入门到实战:制作仿京东商城-商品列表商品筛选功能...

    这次实现一个仿京东商城-商品列表商品筛选的功能 一.html代码 已选条件: 品牌: 全部 惠普(hp) 联想(Lenovo) 联想(ThinkPad) 宏基(acer) 华硕 戴尔 三星 索尼 东芝 ...

  2. Node.js+MySQL开发的B2C商城系统源码+数据库(微信小程序端+服务端),界面高仿网易严选商城

    下载地址:Node.js+MySQL开发的B2C商城系统源码+数据库(微信小程序端+服务端) NideShop商城(微信小程序端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易 ...

  3. HTML网页设计结课作业~仿蘑菇街商城网站源码(HTML+CSS+JS)

    HTML网页设计结课作业~仿蘑菇街商城网站源码(HTML+CSS+JS) 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从下手?网页要求的总数量太多?没有合适 ...

  4. PHP开发B2C商城 微信小程序商城系统源码+数据库,轻量级前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP

    项目介绍 一款轻量级.高性能.前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP,前后端源码完全开源,看见及所得,完美支持二次开发,可学习可商用,让您快速搭建个性化独立商城. 完整代 ...

  5. java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 本源码技 ...

  6. 计算机毕业设计Javavue开发一个简单音乐播放器(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Javavue开发一个简单音乐播放器(源码+系统+mysql数据库+lw文档) 计算机毕业设计Javavue开发一个简单音乐播放器(源码+系统+mysql数据库+lw文档) 本源码技术栈 ...

  7. 基于mycncart开发PHP在线定制商城网站源码

    简介: PHP在线定制商城网站源码,免费开源.免费下载.本商城基于mycncart开发.安装成功后即可浏览,你可以在后台->安装扩展功能上传安装插件,在代码调整中点击刷新后系统会重新建立缓存,此 ...

  8. 基于SpringBoot vue的茶叶商城平台源码和论文含支付宝沙箱支付

    此项目是前后端分离的 后台项目:shop 前端项目:Vue-shop 后端项目启动步骤: 1.先把sql导入数据库 2.把后台项目导入编辑器 3.修改数据库配置 4.启动项目   前端项目启动步骤: ...

  9. JAVA计算机毕业设计开发的校园情感网站部署+源码+数据库+系统+lw文档

    JAVA计算机毕业设计开发的校园情感网站部署+源码+数据库+系统+lw文档 JAVA计算机毕业设计开发的校园情感网站部署+源码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言: ...

最新文章

  1. Vue Router webpack
  2. Plugin with id ‘com.android.XXX‘ not found.
  3. C++ 11 多线程--线程管理
  4. 网易2017校招编程:优雅的点
  5. lnmp yum安装mysql_centos5 yum安装lnmp
  6. Maven的基础概念
  7. Linux下编译android源码的步骤
  8. 《Linux内核分析》第一周学习报告
  9. Altium Designer 元件封装库与3D模型大全
  10. html背景图片显示不出,css中背景图片显示不出来
  11. MySQL特异功能之:Impossible WHERE noticed after reading const tables
  12. PQ分区出错用Ghost来进行补救
  13. 亚马逊aws服务取消_Amazon S3 – AWS简单存储服务
  14. 交换机运维-排查用户反应网速卡的问题
  15. BTA | 元道:去中心化第一波,Web已死,互联网怎能永生?
  16. C++沙海拾遗(三)
  17. Java实现HMacMD5加密,用于淘宝客JS 组件 API 调用时生成 sign 的签名
  18. kubernetes之容器探针(liveness and readiness probe)
  19. java模拟三人爬山_java笔记——模拟多人徒步爬山例子
  20. Excel 怎样去掉单元格中的回车符号

热门文章

  1. 金三银四季节前端面试题复习来了
  2. Linux 命令 su 和 sudo 的区别
  3. 【C#+SQL Server】实现ERP管理系统 四:销售收款单模块设计(附源码和资源)
  4. 认证Scrum Master 培训笔记(一)
  5. ryu实例---ECMP的rr(轮询)算法实现
  6. Base64编码中有回车换行符
  7. 孩子数学成绩不好怎么办_孩子数学成绩不好,家长想很多办法却没有效果,怎么办?...
  8. 读书笔记(随笔2)数据在网络中的传输
  9. AtCoder Beginner Contest 260 A~F 题解
  10. C++算法(高精度算法)