自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 移动端推理引擎通用性小测

移动端推理引擎通用性小测推理引擎引擎公司Commit id(或Tag)链接使用方法MNN阿里巴巴2.6.0https://github.com/tensorflow/tensorflow/tree/v2.13.0-rc1https://mnn-docs.readthedocs.io/en/latest/start/overall.htmlTensorFlow Lite谷歌v2.13.0-rc1https://github.com/tensorflow/ten

2023-08-12 03:25:24 311

原创 【水文】基于 MNN 训练能力解方程

许久没上,水篇文章,事由同学想由房贷月还款额推测年利率:月还款额=pow(年利率/12+1,期数)*(年利率/12)*贷款总额/(pow(年利率/12+1,期数)-1)这个方程直接求解感觉比较麻烦,考虑使用梯度下降法。深度学习框架基本都支持求导和优化,MNN 也支持。所以安装 pymnn ,把方程用 MNN 的仿numpy接口实现一遍,然后写个 loss 训练就好了。

2023-08-05 17:35:04 336

原创 SIMD优化之ARM纯汇编开发

ARM纯汇编开发注:这篇文章是两年前写的,当时认知也不足,其中可能有不少错误,敬请行家指正。为什么要用纯汇编开发效率高这里可能让很多人大跌眼镜了,纯汇编开发效率高?首先,这个是有限定条件的,需要反复调优的重度运算场景(比如卷积),纯汇编开发效率最高。其次,这里的纯汇编并不是整个代码用汇编写,是指的将足够重的函数提取出来,用纯汇编实现。参数试验为什么呢,在用C开发时,受到toolch...

2020-01-17 12:46:53 2613 4

原创 浅淡深度学习的发机机——张量计算

张量计算的优化张量计算是个看似陌生,实际上很常用的概念,它包括滤镜、核函数计算、矩阵乘法、卷积等一大类算法,是图像算法、机器学习以及深度学习的基础。如何进行高效的张量计算,是OpenCV之类的图像库、OpenBlas之类的高性能计算库以及MNN之类的深度学习推理引擎要解决的核心问题。本文主要以深度学习的推理引擎为具体应用场景,谈一下张量计算的主要优化策略。相关链接:https://gith...

2020-01-05 10:42:02 3395

原创 快速矩阵乘法的研究——下

快速矩阵乘法的研究本文我们只看一个算法,就是 Coppersmith 和 Winograd 提出的O(2.39)O(2.39)O(2.39)的矩阵乘法。请确保前两篇内容已经掌握理解。https://blog.csdn.net/jxt1234and2010/article/details/88588208https://blog.csdn.net/jxt1234and2010/article/...

2019-10-21 16:11:30 868

原创 快速矩阵乘法的研究——中

快速矩阵乘法的研究渐近和不等式(Asymptotic sum inequality)有了APA之后,我们突破了Strassen 算法的阈值,但希望进一步往下降时,总是构造不出来,遇到了瓶颈。这个时候,人们发现了一条新的道路。同时计算多个矩阵乘法对于 C=ABC=ABC=AB 这个矩阵乘法,我们已经找不到更好的构造算法,但如果同时计算 C1=A1B1,C2=A2B2C_1=A_1B_1, C...

2019-04-05 14:04:58 1776 2

原创 快速矩阵乘法的研究——上

快速矩阵乘法的研究最近的工作主要在于深度学习框架的性能优化。深度学习框架在工程的优化(内存池、SIMD、汇编、GPU、DSP等等)做到接近极限之后,突破点便集中于算法。深度学习的性能瓶颈主要在于卷积,卷积的运算方法主要是通过 Im2Col / Winograd / FFT 转化为矩阵乘,完成矩阵乘法之后,再转化为目标结果。深度学习框架的输入是算法工程产出的网络模型,而目前网络模型都渐渐地转变...

2019-03-16 04:39:53 4073 1

原创 移动端深度学习框架——绝影简介

绝影(Prestissimo)绝影是一个高性能移动端深度学习框架,其项目地址见https://github.com/in66-dev/In-Prestissimo

2017-11-30 13:52:37 4543 9

原创 从软件工程的角度写机器学习7——-LSTM网络实现

LSTM网络实现问题描述影片评价问题: 输入一个英文句子,输出好/坏的二元评价,比如 The movie is very bad -> 0 Wonderful -> 1算法思路本图中的数字仅为示例,并非真实数据 Embedding层在上一篇卷积神经网络的实现中,我们将类别直接映射为{0,0…1,…0}这样的向量,但对于单词而言,这个向量维度太大了(500个单词就是500维…),结合后面的

2017-08-29 20:37:33 681

原创 基于OpenGL ES 的深度学习框架编写

基于OpenGL ES的深度学习框架编写背景与工程定位背景项目组基于深度学习实现了视频风格化和人像抠图的功能,但这是在PC/服务端上跑的,现在需要移植到移动端,因此需要一个移动端的深度学习的计算框架。同类型的库caffe-android-lib 目前应该是最便于集成使用的深度学习框架库。 tensorflow和mxnet据说也有对应的android库,因时间原因暂未测试。 CNNdroid,网址

2017-05-06 21:08:22 12115 9

原创 3D文件压缩库——Draco简析

3D文件压缩库——Draco简析今年1月份时,google发布了名为“Draco”的3D图形开源压缩库,下载了其代码来看了下,感觉虽然暂时用不到,但还是有前途的,故简单做下分析。注:Draco 代码地址: https://github.com/google/draco基本使用编译cmake . + make 编译源码,生成 draco_encoder 和 draco_decoder 两个可执行文件

2017-02-24 14:21:26 15586 5

原创 OpenGL的替代者——Vulkan

OpenGL的替代者——VulkanVulkan是一个跨平台的2D和3D绘图应用程序接口(API),最早由科纳斯(Khronos)组织在2015年游戏开发者大会(GDC)上发表。旨在替代OpenGL,提高图形性能。基于OpenGL的图形引擎性能瓶颈基于OpenGL的图形引擎,其渲染过程粗略可分为 主机端资源准备,设备端数据交互与管线准备 及 每帧循环的渲染 三个部分。 资源加载这一过程跟GPU没有

2016-12-20 15:45:30 18955

原创 从软件工程的角度写机器学习6——深度学习之卷积神经网络(CNN)实现

卷积神经网络(CNN)实现背景卷积神经网络广泛用于图像检测,它的实现原理与传统神经网络基本上是一样的,因此将普遍意义的神经网络和卷积神经网络的实现合成一篇。神经网络实现思路“扔掉神经元”尽管所有教程在介绍神经网络时都会把一大堆神经元画出来,并且以输入节点——神经元——输出结点连线,但是,在编程实现时,基于神经元去编程是低效的。典型如这篇经典文章里面的代码: http://blog.csdn.net

2016-10-28 02:00:09 4789 4

原创 从软件工程的角度写机器学习5——SVM(支持向量机)实现

SVM实现SVM在浅层学习时代是主流监督学习算法,在深度学习时代也往往作为最后一个预测层使用。本系列文章旨在讲解机器学习算法的工程实现方法,不在于推导数学原理。

2016-08-30 14:45:41 3234 2

原创 从软件工程的角度写机器学习4——-C4.5决策树的工程实现

C4.5决策树的工程实现这篇文章开始,将讲述一系列机器学习算法的工程实现方案。出于常用且简单的考虑,选择了C4.5决策树作为第一个算法。工程框架鉴于本篇是第一个算法实现,应此需要把整个工程框架介绍一下。 出于最优性能考虑,本框架是为C/C++语言设计的。不过即使用其他语言,也可以按这个框架实现,模块还可以再精简。本工程定位: 1、无脑版机器学习算法库,使用者基本不需要了解任何算法细节,也不需要了

2016-07-17 00:52:40 3925

原创 GPU与GPGPU泛淡

GPU与GPGPU泛淡GPU(Graphics Processing Unit),也即显卡,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上作图像运算工作的微处理器。它已经是个人PC和移动设备上不可或缺的芯片,有界面有显示的地方,一般就离不开它。高清电视、智能手机、个人电脑。GPU的产生是为了解决图形渲染效率的问题,但随着技术进步,GPU越来越强大,尤其是shader出

2016-05-21 01:48:32 22687 1

原创 从软件工程的角度写机器学习3——主要监督学习算法的工程性分析

主要机器学习算法的工程适用性分析前段时间AlphaGo跟李世石的大战及相关的深度学习的新闻刷了一遍又一遍的朋友圈。不过这件事情,也只是在机器学习的深度上进一步拓展,而机器学习的广度(也即工程化实践)上,仍然没有什么突破性的理论或实践,用的领域继续用,不用的领域依然不用。重要性机器学习的使命是使计算机强大的运算能力和存储能力转化为推演能力,能转化是一方面,转化的效率则是另一方面。科研性

2016-04-16 13:06:12 5285

原创 图像算法的工程优化技术

图像算法的工程优化技术当一个很酷的图像算法实现之后,我们希望集成到软件中去,这时将会遇到最大的拦路虎:性能。 可以想像一下,如果美图秀秀做一个美颜效果要转圈圈转个30秒,还会有多少人用呢。 学术界喜欢推出复杂度更低的算法,去解决性能问题,而在实际工程应用中,对代码的优化和硬件的良好运用效果来得更快更显著,这里就对不改动算法,纯工程方面做性能优化的技术作一个简介。 流程优化——节能减排对初始

2016-02-29 21:35:52 6042

原创 从软件工程的角度写机器学习2——流行的机器学习应用模式与算法

流行的机器学习应用模式与算法本文将围绕机器学习的概念,尽可能归纳总结当前流行的机器学习应用模式及相关算法。 “对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能随着经验E而自我完善,那么我们称这个计算机程序在从经验E学习。”机器学习的各类算法之间,重叠交叉又各自不同,既然是从软件工程的角度来写,我们会先介绍机器学习算法所依存的框架,再在这个框架下介绍有哪些算法,算法详情不做

2016-02-28 14:40:26 3040

原创 Renascence使用方法

Renascence使用方法下层库的适配类型下层库所有向Renascence架构提供的函数,其输入输出都必须给一个对应的继承于IStatusType的类,用于读取、保存、映射、释放该类型。/*Basic API*/class IStatusType{public: IStatusType(const std::string name):mName(name){} virtual

2016-02-14 10:53:40 1073

原创 Renascence架构原理——最优化算法

最优化算法背景通过公式生成ADF之后,根据下层函数库的配置,在结构不变的情形下,ADF是可以通过一系列值在0-1之间的参数进行调节的。也即ADF可表示为固定维数n的实数集,因此需要解决的问题就是在给定的目标下,求一组使目标值最大的参数。 max(f(x0,x1,x2,x3,...,xn)),xi∈[0,1]max(f(x_0, x_1, x_2, x_3, ..., x_n)), x_i\in [

2016-02-14 00:29:33 934

原创 Renascence架构原理——遗传规划算法

遗传规划算法遗传规划算法请先看一下遗传算法: http://blog.csdn.net/v_JULY_v/article/details/6132775遗传规划/遗传编程(Genetic Programming)是遗传算法的一个分支,与遗传算法中每个个体是一段染色体编码不同,它的个体是一个计算机程序。 维基上说它在70年代就已经有人实践,不过正式提出应该还是在John R. Koza教授于199

2016-02-13 18:13:07 6077

原创 从软件工程的角度写机器学习1——机器学习的思想

机器学习的思想序提到机器学习,圈内人首先想到的是神经网络、SVM、梯度下降、逻辑回归等具体的算法,而对圈外人而言,机器学习就等同于机器人、无人驾驶等具体的应用场景。 看了不少机器学习相关的文章,有描述知识点的:讲解算法非常详细,并且给出实现的程序demo。也有描述覆盖面的:泛泛而谈机器学习的典型应用场景,力图使大众易于理解。 但在一个软件工程中,机器学习如何应用,各算法如何衔接,怎么系统地去

2016-02-12 11:04:17 4423 2

原创 适用于OpenGL离屏渲染上下文的初始化代码

说明最近做图像算法,需要用到shader对图像进行处理,用glut会有窗口,不适合写成UT测试用例,需要创建一个无窗口的OpenGL上下文。代码这部分代码其实是参考 Android的Skia 模块相关代码写的,适用于 Mac、EGL(Android)、X11(Ubuntu等Linux系统)平台。h文件#ifndef GL_GLCONTEXT_H#define GL_GLCONTEXT_Hclas

2016-01-22 00:39:11 3229 1

原创 Android图形显示系统——一张图片的显示流程

Android设备上一张图片的显示过程应用示例假如我们现在有一张这样的风景照 想在Android设备(比如一个小米pad)上显示出来。首先想到的是写一个应用,用一个ImageView,把这张照片附到ImageView上显示,如下面的demo。 MainActivity.javapackage com.example.pictureshow;import android.app.Activit

2016-01-20 23:56:45 14542 5

原创 双三次插值算法的OpenGL实现

双三次插值算法的OpenGL实现说明最近写一个图像缩放的接口,考虑到自己有现成的OpenGL图像处理引擎,还是直接写shader用GPU实现方便。为了效果好一些,采用了双三次插值算法。 算法相关公式可参考这篇文章: http://blog.csdn.net/lichengyu/article/details/8526629代码详细实现代码见: https://github.com/jxt123

2016-01-12 17:59:54 2643

原创 图像转置的Neon优化代码

图像转置的Neon优化代码原理图像转置图像转置和矩阵转置是一样的,其公式为:dst.getPixels(y, x) = src.getPixels(x, y)dst.w = src.hdst.h = src.w效果如下: 原图: 结果图: 先做图像转置后,再实现90度/270度的旋转相对容易, 如图像旋转90度,就只需要再水平翻转一下: 旋转结果图: 分而治之图像转置的优化思路是:

2015-12-30 23:38:48 6425 5

原创 Android图形显示系统——概述

序Android的图形显示系统,虽然感觉自己基本了解了,有问题基本都能解决,但要写时,一是觉得千头万绪无从下笔,一是发现还有很多并没有真正搞懂。开工写这套体系,也顺便查漏补缺下。Android图形显示系统的剖分图形显示系统就像一个报社,它派出记者去采访,记者写成文稿后,将记者们交上来的文稿审核、排版、印刷,最终形成一期又一期报纸。 如上是Android图形显示系统的一个全貌图,以中间那条线为界,划

2015-12-28 21:40:30 9083 4

原创 Renascence架构简介

Renascence架构Renascence架构是 A-GP-B 式的桥梁架构,它要求下层库不直接对外提供接口,而是往GP库注册函数,上层库用GP公式间接调用下层库的代码。 GP库位于应用与lib库之间,作为应用调用lib库的桥梁而存在,它本身不依赖任何基础库。上层调用通过引入训练这一过程,应用跨平台的问题有了最好的解决方案,即在安装过程中,应用提供一个模板供平台训练,得到适合的实际运行的程序,然

2015-12-22 14:42:40 1038

原创 Renascence架构介绍——目录

这一系列文章是为个人项目作一个介绍,有兴趣的朋友可以关注一下。 https://github.com/jxt1234/Genetic-Program-Frame软件开发——代码为什么值钱开发亦测试#

2015-12-22 13:50:52 946

原创 基于Renascence架构的SQL查询引擎设计

基于Renascence架构的sqlite查询优化(一)sqlite查询优化方案是一开始是在Hw时设计的,但当时只实现一些简单case,并未完成sql的普遍支持。后面考虑到这可以做为 Renascence 架构的一个实验场景,因此将其方案做了一番修改,代码也重写了一遍,现在做成一个能支持普通sql查询的demo。sqlite架构参考:http://wiki.dzsc.com/info/7440.ht

2015-12-18 10:31:20 1052

原创 ETC1压缩纹理格式详解

本来以为,ETC1作为Android 设备的OpenGL标准,开源且最常用的的一种压缩纹理格式,总会有人去翻译一下khronos的文档,读一下代码,给大家作个普及的,不料就是搜不到。没办法,尽管英文不好,还是硬啃了下文档,把 ETC1压缩纹理的实现原理弄清楚了。 https://www.khronos.org/registry/gles/extensions/OES/OES_compressed_

2015-10-14 11:17:36 17642 1

原创 Android图形显示系统——上层显示2:硬件加速实现

Android界面绘制的硬件加速实现Android的界面绘制的硬件加速采取上下整合的一套流程实现一、代码结构(一)JavaHardwareRenderer->ThreadedRenderer:组织硬件加速渲染的类,下发创建显示列表和回放的指令。 GLES20RecordngCanvas GLES20Canvas HardWareCanvas:与Canvas平级的UI渲染引擎支持,但这个Canvas

2015-10-13 01:13:44 5564

原创 Android图形显示系统——上层显示1:界面绘制大纲

Android显示之应用界面绘制越到上层,跟业务关联越直接,代码就越繁杂,Android上层显示的代码正是如此。此外,java语言本身繁复的特点(比C语言多了满屏的try-catch,比C++少了析构处理的优雅简洁,和更高级的语言scala、python等就别比了),更加剧了这一现象。 直接去看代码,往往会看得一头雾水,知其然而不知其所以然。在这时候,就要把代码扔掉,仔细去理清需要实现什么,怎么实

2015-08-23 00:00:43 7236 6

原创 Android中读图片Exif信息的方法

Exif读取类Android提供了读取写入Exif的API,但很可惜,这个API只能由指定文件名读取、写入Exif,效率低得可怜。 不得已,把Android系统代码里图库的一段摘了过来。 有Android源码的看源码中 packages/apps/Gallery2/ 部分, 没有或者图方便的直接看这里: https://github.com/jxt1234/ThirdPartyUsefulC

2015-07-30 17:48:42 3342

原创 自己做的一个肤色检测模型

肤色检测在人像美化中,肤色检测有助于防止磨掉头发、胡子等需要保持细节的部分,也可以使美白算法仅作用于皮肤,不对人像周边环境产生影响。 网上找了一下肤色检测模型,效果都太差,换了一种思维,找个训练集,自己做一个。 训练结果,正确率大概85%,运行起来,确实还是比网上找的公式好,勉强可用了。模型算法最终反映为 opengl 的一个片断着色器,直接看shader代码吧。varying vec2 tex

2015-07-19 15:12:39 5127

原创 YUV转RGB(NV21-ARGB)的Neon优化代码

说明此代码仅限于 NV21 格式转 ARGB 格式。 NV21 格式中,Y 单独存储,UV分量交错存储。 使用如下公式: R = Y + 1.402*(V-128); G = Y - 0.34414*(U-128) - 0.71414*(V-128); B = Y + 1.772*(U-128); 浮点乘法用 6

2015-06-24 11:47:15 9430 10

原创 Android图形显示系统——下层显示4:图层合成下(硬件合成器)

硬件合成器-HwComposer使用3D合成,需要大面积的像素混合计算和大量的内存传输(GPU读写GraphicBuffer所需),对GPU和DDR来说是一个巨大的负担。在GPU/DDR重度使用的场景(比如玩游戏),会造成发热、卡顿等。 为了提升性能,减少功耗,可以将合成这个过程交由另一个芯片完成,减轻GPU负担。进一步,直接让这个芯片连LCD,在LCD需要显示某一行时在线合成。 HwCompo

2015-06-08 03:19:47 9304

原创 Android图形显示系统——下层显示4:图层合成上(合成原理与3D合成)

Android显示之图层合成要点1.图层合成指综合各个窗口的绘制内容,送往LCD显示的过程。从原理上可分为在线合成与离线合成两种方式。 2.在Android的SurfaceFlinger代码流程中,图层合成方式分3D合成(OpenGL)和硬件合成两大类。 3.图形系统采用垂直同步Vsync机制,由LCD上报vsync,触发图层合成。图层合成的原理什么是图层合成以Android原生版本的Launc

2015-05-27 23:44:09 17221 6

原创 自动编程体系设想

自动编程体系设想(一)编程的演化编程语言的发展 随着语言的发展,编写的代码将越来越精简,而且领域化(不同领域用不同的编程语言,以达到开发效率和程序性能的最优化)。自动编程的需求在各种设计框架、基础库日益完善的情况下,上层应用中的编程基本上就是找API,构建一个调用逻辑,然后反复的开发自测试。下层框架/函数库开发一般都基于开源代码不断优化,同样反复地自测试。 在软件开发中,编程这一环节事实上越来越

2015-04-22 21:49:56 1930 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除