android中的深度学习——快速风格迁移,android插件化框架

  • 2.解释一下y = x * w1 * w2: 1.研究表明我们在看x这张图片的时候,我们会先看图片的轮廓,这里我们大脑中看图片轮廓的神经元就相当于w1 2.看完轮廓之后我们会对这个图片中的东西有基本感觉,判断这张图片属于哪些类别,这里的类别就是x * w1的结果 3.2中的结果会被输入大脑中下一层神经元,这里的神经元就相当于w2,经过w2之后我们就会输出一个结果这里就是y。 4.当然人的神经元层数远比上面说到的多

  • 3.训练y = x * w1 * w2的过程以人做对比就相当于:我们有一堆图片给一个啥也不懂的小孩看,刚开始他肯定输出的结果都是错的,但是我们只要每次纠正一下他的错误,那么他脑袋中的神经元(w)就会不断的修改然后识别的准确率不断提高。

Android中的Tensorflow

===================

这一节将会介绍如何在Android中使用已经训练好的神经网络

开始

==

本篇文章中,我只会以一个demo为例子进行讲解,前面提到的MyPhotoShop项目会另起一个专题进行剖析。

  • 1.demo地址:github地址(https://github.com/whenSunSet/TensorflowPureDemo)

  • 2.引入Tensorflow:compile ‘org.tensorflow:tensorflow-android:+’

Tensorflow中的概念

==============

  • 1.图(graph):我们在前面讲解了一个神经网络是什么样子的,在Tensorflow中神经网络的每个神经元w都属于图中的一个节点,神经网络全部的节点就构成了一个有向无环图也就是Tensorflow的图的一部分。当然Tensorflow的图中除了神经网络的节点外,还有其他辅助的操作:比如图片解码、图片编码、图片预处理操作等等。我们举一个图的例子就是:图片a–》解码图片产生b–》处理b产生图片数据矩阵c(1 * 10000)–》c与w1(10000 * x)矩阵相乘产生d(1 * x)–》d与w2(x * 10)矩阵相乘产生e(1 * 10)–》选出e中值最大的分类,神经网络就判断图片a是这种分类的图片。

  • 2.节点(node):每个节点都是图的一部分,每个节点有:入参、出参、具体操作函数(比如矩阵乘法)、可能有神经元值w。

  • 3.TensorFlowInferenceInterface:一个Tensorflow中训练的上下文,在不同语言中名字不同。内部包含了一个训练中需要的全部实例。

demo代码讲解

========

我们本次demo中只涉及Tensorflow在Android中神经网络模型的使用,并不涉及训练的过程。原因有两个:1.移动端并不适合训练神经网络 2.Tensorflow for Android没有训练的API。

  • 1.我这次使用的神经网络是已经训练好的快速风格迁移网络

  • 2.对于模型我们的输入是:一张图片转化为的float类型的张量,大小为(1 * 800 * 600 * 3),输入节点的名字是padsss:0,这里的名字是在训练过程中定义的。

  • 3.对于这个模型我们的输出是:大小为(1 * 780 * 680 * 3)的float类型张量。输出节点的名字是squeezesss:0,名字也是在训练过程中定义的。

  • 4.我们看代码,先用RxPermission获取了一下权限,获取成功之后将assets中需要处理的图片写入到sd卡中一遍后面使用,进入make()方法

  • 5.将4中的图片读取到内存中

  • 6.以ARGB为例我们知道Bitmap中每个像素是以int十六进制储存像素的,类似这种形式FFFFFFFF,那么每两位就是一个通道的数值,上限是256。所以接下来就是将Bitmap中的像素值,转化为float类型的数组,数组大小是(800 * 600 * 3)。

  • 7.创建了一个TensorFlowInferenceInterface对象,入参是AssetManager和模型文件,这里就表示将神经网络在内存中建立起来

  • 8.输出一下每个节点的名字

  • 9.向神经网络中传入输入节点的名字、输入节点的数据、数据张量的维度

  • 10.运行神经网络,入参是输出节点的名字

  • 11.神经网络的运行是阻塞的,所以运行好了之后,就能获取数据了,这里将数据存入(780 * 580 * 3)的float数组中。

  • 12.将float数组重新整合成Bitmap的像素值,然后写入Bitmap中。

注意点

===

  • 1.demo运行的时候速度会比较慢,耐心等待一下

  • 2.我运行的设备是:小米mix2、Android8.0。其他设备可能会有问题,要么就是速度非常慢,还可能是cpu或者系统版本不支持。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

最后

由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件,需要的小伙伴可以私信我【面试】免费领取或者点击GitHub免费获取!

ttps://bbs.csdn.net/topics/618156601)**

[外链图片转存中…(img-S9UbjDQl-1711326113649)]

[外链图片转存中…(img-pHpJSe2r-1711326113649)]

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值