首页
学习
活动
专区
圈层
工具
发布

TinyML-5:TFLite Quantization背后的运行机制

在此,即使是梯度也针对量化的权重进行计算。通俗的说,训练过程在每层的输出进行量化,让网络习惯精度下降的训练,最终达到在推理部署时候获得更小的精度下降损失。本文着重讲PTQ,以后有机会再展开阐述。...Post-training Quantization (PTQ) 训练后量化 PTQ所做的都是把TF model的weights的float32转换为合适的int8,存储在tflite model中...size] decompress解压把模型保存的weights的int8转换回去float32,并将范围缩放回其原始值,然后执行标准的浮点乘法;获得的好处是压缩网络,模型的尺寸小了。...Floating point vs Fixed Point 浮点数使用尾数和指数表示实际值,并且两者都可以变化。指数允许表示范围广泛的数字,尾数给出精度。...回到数字行示例,比例因子的值确定行上2个刻度之间的最小距离,此类刻度的数量取决于我们用来表示整数的位数(对于8位固定点) ,256或28)。我们可以使用它们在范围和精度之间进行权衡。

2.6K91
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    关于TCP和MQTT之间的转换

    通信的协议,然后发送和接收数据都通过协议处理之后,通过TCP发送和接收, 其实有现成的写好的协议 可以看这两篇 http://sun2y.me/2017/05/12/MQTT协议在STM32上的移植/...我感觉应该用ESP8266实现 其实思路很简单,8266建TCP客户端(用AT指令),因为现在没有AT指令版的MQTT,所以用AT指令配置8266 然后连接的服务器的地址是我的云端的MQTT,当然TCP...然后就不说了,也不想说了,大家自己看协议把,,,,因为让自己感觉MQTT在我心中的地位大大的受到了..........唉,,,,感觉自己讲出来的东西确实感觉竟然的如此的简单.........然后今天写好了单片机程序,用自己写的MQTT封装的协议,在8266作为TCP客户端的基础上,连接了我的云端的MQTT服务器,然后用调试助手测试了远程通信,代码很少,力求可以直接移植到51单片机上 ?...index = 0; if(whether) MqttSendData[index++] = 0x82; //0x82 //消息类型和标志

    2.1K32

    【Ubuntu】Tensorflow对训练后的模型做8位(uint8)量化转换

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。...本文链接:https://blog.csdn.net/huachao1001/article/details/101285133 1 量化为PB格式模型 从官方提供的tensorflow版本与编译工具版本中选择...bazel版本下载,各个版本的Tensorflow与各个编译环境映射表如下。...bazel build tensorflow/tools/graph_transforms:transform_graph 1.3 执行转换量化命令 将导出的pb模型执行模型量化转换,以tensorflow_inception_graph.pb...格式模型 除了使用transform_graph工具对pb模型进行量化转换外,还可以使用TFLite对模型进行量化处理,但是需要注意的是,使用TFLite转换得到的量化模型是tflite结构,意味着只能在

    1.9K30

    深度学习算法优化系列五 | 使用TensorFlow-Lite对LeNet进行训练后量化

    中文官方地址我放附录了,我们理解为这个框架可以把我们用tensorflow训练出来的模型转换到移动端进行部署即可,在这个转换过程中就可以自动调用算法执行模型剪枝,模型量化了。...由于我并不熟悉将tflite模型放到Android端进行测试的过程,所以我将tflite模型直接在PC上进行了测试(包括精度,速度,模型大小)。...因为将tensorflow模型转换为tflite模型有多种方法例如将tensorflow模型的checkpoint模型固化为pb模型然后使用toco工具转换为tflite模型,但这个过程稍显麻烦。...,分别对原始模型和量化后模型的推理速度和精度进行一个测试,代码如下: # 使用原始的checkpoint进行预测 def origin_predict(): mnist = input_data.read_data_sets...测试集精度 推理测试集10轮的时间 原始模型 242KB 97.39% 110.72 量化后的模型 67KB 97.34% 35.97 可以看到对LeNet量化后模型的大小变为原始模型的近1/4,并且精度几乎不降

    1.8K10

    安卓软件开发:如何实现机器学习部署到安卓端

    选择已训练好的 .tflite 模型文件。 导入完成后,Android Studio 会显示模型的概要信息,提供示例代码。 然后可以看到提供了两种编程语言代码的模板,根据个人喜爱用哪种编程语言。...TensorFlow Lite 提供了量化技术,模型的权重和激活函数从浮点数表示转换为整数,从而减少模型大小加快推理速度。...• 同时,使用 ONNX 格式可以帮助模型在不同框架和平台间迁移,但在转换过程中,可能遇到精度下降或者其他兼容性问题。...我特别喜欢它的 API 设计,它让复杂的模型推理工作变得直观易懂。通过一些工具和指南,轻松就能将 Keras 模型转换为 .tflite 文件并集成到 Android 项目中。...6.4 技术细节的把控 在将机器学习模型应用于移动设备时,深刻感受到硬件性能和资源的局限性,特别是在推理时间、内存使用和功耗之间做平衡时,需要不断优化和调试代码.

    1.7K105

    TensorFlow模型部署到Android,需要注意几点

    , "wb") as f: f.write(tflite_model) 当然你也可以使用TensorFlow提供的工具转换。...但完成这一步之后,发现在Android系统上的推理精度和PC上的差别很大,为什么会存在这样的差别呢?...经过这一转化,模型的大小得到了大幅缩减,从原来的23M减小到6M。但经过在我的HUAWEI Mate 20 pro上测试,推理速度却有小幅下降,精度也有所降低。...采用浮点模型 + GPU进行推理,也并没有如想象中的能够提升推理速度。是否需要采用量化模型,需要根据实际部署系统的测试情况以及是否接受推理速度和精度下降这两个不利因素。...经过这次的部署测试,发现tensorflow-open_nsfw模型在我的手机上推理速度能达到100ms左右,精度能达到90%,基本上能够满足需求。

    1.2K20

    深度学习算法优化系列六 | 使用TensorFlow-Lite对LeNet进行训练时量化

    接下来我们需要将checkpoint模型文件转换成freeze pb文件,当然保存为saved_model模型也是可以的,因为昨天介绍过了保存为saved_model然后转换为tflite模型,所以今天介绍这种新的也是更加常用的转换方式...quantized_input_states是定义输入的均值和方差,tensorflow lite的文档中说这个mean和var的计算方式是:mean是0到255之间的整数值,映射到浮点数 0.0f。...可以大概算出来mean和stddev取[0,1]是满足这个关系的。 接下来我们写3个测试函数来测试一下原始的checkpoint模型,pb模型和tflite模型的表现。...测试结果 类型 模型大小 测试集精度 推理测试集10轮的时间 原始模型 242KB 97.52% 110.72 pb模型 242KB 97.52% 114.00 量化后的模型 67KB 94.00% 56.77...并且这个模型再训练10w轮,量化后模型的精度可以降低到2个百分点。

    1.8K20

    端侧AutoML:硬件感知NAS 2.0

    性能评估与权衡在硬件感知NAS 2.0中,性能评估需要同时考虑模型精度和硬件效率。通常采用多目标优化方法,在搜索过程中找到精度与效率的最佳平衡点。...部署过程包括:模型转换:将PyTorch/TensorFlow模型转换为目标设备支持的格式(如TensorRT、TFLite、ONNX)量化:应用量化技术减少模型大小并提升推理速度硬件特定优化:利用硬件厂商提供的...SDK进行进一步优化(如骁龙的SNPE、NVIDIA的TensorRT)效率测试:在目标设备上进行实际效率测试,验证性能预测准确性# 模型转换为TFLite示例代码import tensorflow as...f.write(tflite_model) print("模型成功转换为TFLite格式")V....总结硬件感知NAS 2.0的优势总结通过对理论分析、代码实现和实例验证,我们可以总结硬件感知NAS 2.0的主要优势:硬件针对性:根据目标硬件特性设计模型,充分利用硬件能力效率与性能平衡:在保持或提升模型精度的同时显著降低计算和能耗成本自动化程度高

    19110

    用FaceNet的模型计算人脸之间距离(TensorFlow)

    128维特征向量,从而通过计算特征向量之间的欧氏距离来得到人脸相似程度。...人脸之间距离 如上图所示,直接得出不同人脸图片之间的距离,通过距离就可以判断是否是同一个人,阈值大概在1.1左右。...环境 macOS 10.12.6 Python 3.6.3 TensorFlow 1.3.0 实现 模型文件 首先我们需要训练好的模型文件,这个可以在FaceNet官方的github中获取: github...:%f "%dist) 代码的逻辑就是 先导入模型参数 然后导入两张图片,分别获取其经过模型后得到的128维特征向量 最后计算两个向量的欧氏距离 代码中有几个参数: image_size:图片长宽尺寸,...这里要求输入的图片是长宽相等的,但是不要求两张人脸图大小一致,这里设置的尺寸是代码中会将人脸图读取后重新拉伸压缩成这个大小,这个尺寸最好比200大,太小了会运行失败 modeldir:预训练好的模型路径

    2K10

    Android Tensorflow 示例代码 Pose Estimation项目编译

    它的生态比百度的飞桨要完善不少。 而这里,我主要介绍下Tensorflow提供的Pose Estimation (姿态估计)框架Demo示例。 让我们了解Tensorflow能够实现的姿态估计效果。...文本分类 text_searcher 文本搜索 video_classification 视频分类 这些示例中,有些是Android端代码和ios端代码都存在,有些只有Android,没有ios的。...分别对应的模型文档为: movenet_lightning.tflite:单姿势模型:该模型只能估计一个人的姿势。(最新的姿态识别模型,比thunder文件小,速度快,但是精度低。)...movenet_thunder.tflite:单姿势模型:该模型只能估计一个人的姿势。(最新的姿态识别模型,比lightning文件大,速度慢,但是精度高。)...追求精度用:movenet_thunder.tflite。多人识别用:movenet_multipose_fp16.tiflite。 posenet精度要差不少,不建议使用。

    1.5K10

    Json和对象之间转换的封装(Gson)

    一、前言前段时间由于做spring boot的后端,经常需要进行Json 和对象之间的转换,所以利用Gson结合Kotlin扩展函数的特性封装了两个非常方便的函数,如果是其他语言,也可以封装一下,就是没...下面展示一下最终封装效果对象转Jsonval cat = Cat()cat.toMyJson()Json转对象 //单个对象,这里转换成单个对象需要手动,主要是为例统一形式val cat = Cat()...Any下面进行扩展,由于Any为所有类的父类,这个和Java里面的Object 有点类似fun Any.toMyJson():String{ return Gson().toJson(this)}...如果有大佬有换返回值类型的方法,欢迎评论区留言四、需要注意的问题对象转Json需要注意的这个只需要注意转换之后的格式即可,list或者单个对象都是可以直接转换的Json 转对象需要注意的这个需要注意的就是对象是什么类型的要清楚...,还有就是非Json格式的字符串是不能转换成功的,虽然它有这个方法,然后目前我这套方案是转化成统一的list类型,所以需要手动取值五、总结以前碰到这些是相当的头疼,经常就需要转来转去的,网上的文章很多都没讲明白

    1.8K50

    AutoIt和Python之间的加密解密转换

    在AutoIt和Python之间进行加密和解密转换,通常涉及使用相同的加密算法和密钥。以下是一个示例,演示如何在AutoIt和Python中使用AES对称加密算法进行加密和解密。...从输出中可以看出,加密后的结果不一致,解密后的结果也存在差异。...Re-Encrypted string: A6848F1EF8C7C1313689E18567235A93可以看出,使用 rijndael.au3 和相同的填充方式后,加密和解密的结果是一致的...关键点密钥:确保在AutoIt和Python中使用相同的密钥。填充:确保在加密和解密过程中使用相同的填充方式。IV(初始向量):对于CBC模式,IV必须一致。...2、IV管理:对于CBC模式,加密过程中生成的IV需要在解密过程中使用,因此在传输或存储密文时需要保存IV。通过以上示例代码,可以实现AutoIt和Python之间的AES加密和解密转换。

    34410

    字符串和列表之间的转换

    字符串本身是由一个或多个字符组成;列表可以看作是由一个或多个相对独立的字符串构成,因此,两者之间在一定条件下是可以转换的。...split命令可以将字符串按照指定规则进行分割,并将分割后的各个字符串构成列表返回。该命令接收两个参数,第一个参数是字符串变量,第二个参数是分割字符。看一个例子。...它把列表元素串接成一个字符串,元素之间用指定的分隔符号隔开。该命令接收两个参数,第一个参数是列表,第二个参数是分割字符。看一个例子。 ? 再看一个例子。...这个例子巧妙地利用了join命令计算几个数据的和。这样无论有多少个数据,都可以方便地描述,避免出现长串的“数据+数据”的形式。 ? 在Vivado中,join命令也非常有用。...一种可行的方案是在每个元素之间插入换行符,这样每个元素单独占用一行,从而增强了可视性,如下图所示。 ?

    3.1K11

    AIoT应用创新大赛-基于TencentOS Tiny & Yolo v3的濒危动物野外目标识别跟踪系统

    因此有必要对Yolo v3做出修改,降低计算量和参数量,能够在单片机上运行。 修改后的模型如下: image.png 因模型结构图神似猴赛雷,因此我们就将他称为Yolo-猴赛雷模型。...猴赛雷模型相较于原版yolo v3的改变主要有以下几点: 1、缩小输入分辨率 yolo输入通常为416*416分辨率,猴赛雷模型将模型输入分辨率降低到160*160,在牺牲一定的精度后计算量大幅下降。...2、轻量化骨干网络 yolo的骨干网络使用darknet网络,该网络虽然精度表现很好,但计算量和参数量过大,不适合在MCU设备上运行。...猴赛雷模型骨干网络采用深度可分离卷积和残差连接组成,大幅降低计算量和参数量。同时激活函数由leaky relu替换为relu6,这使得模型在量化后精度下降少一点。...模型部署到MCU 1、移植TensorFlow Lite Micro 模型部署采用TensorFlow Lite Micro推理框架,这个框架在NXP的MCUXpresso中也提供支持,免去自己手动移植

    1.4K230
    领券