CV-部署芯片接续-CV全流程部署-TF版本

1 单个CNN算子

import cv2
import numpy as np
import tensorflow as tf
import os
from tensorflow.python.framework import graph_util # 参考连接 https://blog.csdn.net/tensorflowforum/article/details/112352764 代码
# 参考连接 参数详解:https://blog.csdn.net/weixin_43529465/article/details/124721583
# https://blog.csdn.net/rain6789/article/details/78754516 class SingleCnn(tf.keras.Model):
def __init__(self):
super(SingleCnn, self).__init__()
# filters=1 卷积核数目,相当于卷积核的channel
self.conv = tf.keras.layers.Conv2D(filters=1,
kernel_size=[1, 1],
# valid表示不填充, same表示合理填充
padding='valid',
# data_format='channels_last',-> 表示HWC,输入可以定义批次
data_format='channels_last',
use_bias=False,
kernel_initializer=tf.keras.initializers.he_uniform(seed=None),
name="conv") def call(self, inputs):
x = self.conv(inputs)
return x
if __name__ == "__main__":
# 图像数据
imagefile = r"catanddog\cat\5.JPG"
img = cv2.imread(imagefile)
img = cv2.resize(img, (64, 64))
img = np.expand_dims(img, axis=0)
print(img.shape, type(img), img.dtype)
img = img.astype(np.uint8)
singlecnn = SingleCnn() output = singlecnn(img)

2 图片导入

    imagefile = r"catanddog\cat\5.JPG"
img = cv2.imread(imagefile)
img = cv2.resize(img, (64, 64))
img = np.expand_dims(img, axis=0)
print(img.shape, type(img), img.dtype)
img = img.astype(np.uint8)

  

3 推理时报错

output = singlecnn(img)
Value for attr 'T' of uint8 is not in the list of allowed values: half, bfloat16, float, double, int32
; NodeDef: {{node Conv2D}}; Op<name=Conv2D; signature=input:T, filter:T -> output:T; attr=T:type,allowed=[DT_HALF, DT_BFLOAT16, DT_FLOAT, DT_DOUBLE, DT_INT32]; attr=strides:list(int); attr=use_cudnn_on_gpu:bool,default=true; attr=padding:string,allowed=["SAME", "VALID", "EXPLICIT"]; attr=explicit_paddings:list(int),default=[]; attr=data_format:string,default="NHWC",allowed=["NHWC", "NCHW"]; attr=dilations:list(int),default=[1, 1, 1, 1]> [Op:Conv2D] Call arguments received by layer 'conv' (type Conv2D):
• inputs=tf.Tensor(shape=(1, 64, 64, 3), dtype=uint8)

  

已解决:

    # 未量化的model不支持int32和int8
# img = img.astype(np.int32)
img = tf.convert_to_tensor(img, np.float32)
print(img.shape, type(img), img.dtype)

  

4 保存为PB文件

不是ckpt文件

    # =========== ckpt保存 with session的写法tf2 已不再使用 ===========
# with tf.Session(graph=tf.Graph()) as sess:
# constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph_def, ['op_to_store']) # 保存参考 https://zhuanlan.zhihu.com/p/146243327
# save_format='tf' 代表保存pb
singlecnn.save('./pbmodel/singlecnn.pb', save_format='tf') # 加载模型 验证可以加载
new_model = tf.keras.models.load_model('./pbmodel/singlecnn.pb', compile=False)
output_ = new_model(img)
# print(output_.shape, output_[0][2:6][2:6])
print(output_.shape)

  

出现问题  保存的pb 文件是一个目录 里面有多个pb文件不知道 用哪个部署 尝试单独使用某一个pb部署 都会报错。

所以需要合一的pb文件。

tf.keras.saving.save_model  |  TensorFlow v2.11.0

pb是protocol(协议) buffer(缓冲)的缩写

CV-部署芯片接续-CV全流程部署-TF版本的更多相关文章

  1. camunda流程部署的一些简单操作

    act_re_deployment:(流程部署对象表)存放流程部署的显示名和部署时间 act_re_procdef:(流程定义表)存放流程定义的属性信息 act_ge_bytearray:(资源文件表 ...

  2. Win2k8&&vCenter部署全流程

    几个不同的组件 vCenter Server:对ESXi主机进行集中管理的服务器端软件,安装在windows server 2008R2或以上的操作系统里,通过SQL 2008R2 或以上版本的数据库 ...

  3. Activiti系列:带有serviceTask的或者定时启动任务的流程部署失败的原因分析

    在将两个带有serviceTask任务的流程部署到数据库的时候发现无法导入,最终分析出如下问题: 1)流程1是打算让定时启动事件可以每小时触发一次 由于原来是用 R/2015-11-01T01:00: ...

  4. Activiti 流程部署方式 activi 动态部署(高级源码篇)

    Activiti的流程 部署方式有很多种方式,我们可以根据activit工作流引擎提供的ap方式进行部署. 当然了实际需求决定你要使用哪一种api操作,后面的总结详细介绍了使用场景. 下面看一下部署方 ...

  5. 以太坊geth主网全节点部署

    以太坊geth主网全节点部署 #环境 ubuntu 16.4 #硬盘500GB(目前占用200G) #客户端安装 # 查看下载页面最新版 # https://ethereum.github.io/go ...

  6. 【JBPM4】流程部署

    示例代码: ProcessEngine processEngine = Configuration.getProcessEngine(); RepositoryService repositorySe ...

  7. Activiti 流程部署方式 activi 动态部署(高级源代码篇)

    Activiti的流程 部署方式有非常多种方式,我们能够依据activit工作流引擎提供的ap方式进行部署. 当然了实际需求决定你要使用哪一种api操作,后面的总结具体介绍了使用场景. 以下看一下部署 ...

  8. Spring管理流程部署——Activiti

    pom.xml <!-- activit jar 包 --> <dependency> <groupId>org.activiti</groupId> ...

  9. [转帖]从壹开始前后端分离【重要】║最全的部署方案 & 最丰富的错误分析

    从壹开始前后端分离[重要]║最全的部署方案 & 最丰富的错误分析 https://www.cnblogs.com/laozhang-is-phi/p/beautifulPublish-most ...

  10. (四)Activiti之流程定义部署之ZIP方式和流程定义查询

    一.流程定义部署之ZIP方式 上一章节我们使用classpath的方式加载流程定义文件,这里我们使用ZIP的方式. 1.1 用activiti插件生成bpmn和png图片之后,压缩到一个zip格式的压 ...

随机推荐

  1. 不借助脚手架手动搭建react项目(webpack5 + Antd4 + React18)

    前言 工作中发现很多同事在接到一个新项目时,总是基于现有项目复制一份配置文件,然后写自己的组件及业务代码,以至于项目中存在一些冗余的依赖及配置信息.并且由于已有项目的依赖包及插件比较老,新项目也一直没 ...

  2. pat 乙级1024 科学计数法关于stl中size()的一些思考即测试点六,无符号整数问题

    来,先看题目:1024 科学计数法 分数 20 作者 HOU, Qiming 单位 浙江大学 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9 ...

  3. 从0搭建Vue3组件库(四): 如何开发一个组件

    本篇文章将介绍如何在组件库中开发一个组件,其中包括 如何本地实时调试组件 如何让组件库支持全局引入 如何在 setup 语法糖下给组件命名 如何开发一个组件 目录结构 在packages目录下新建co ...

  4. WINFORM DEVEXPRESS插件常用功能总结

    前言 DevExpress 控件的功能比较强大,是全球知名控件开发公司,对于开发 B/S 或 C/S 都非常出色,可以实现很炫且功能强大的效果.DevExpress Winform 常用控件是本人在前 ...

  5. C# DevExpress GridControl中BandedGridView表格使用

    1.设计器方式创建 1.点击"Change view">>然后在选中"Convert to"选项>>最后选中点击"Banded ...

  6. Python控制台输出字体颜色及背景设置

    python 可以利用命令输出带有特效的控制台字体 基础语法 Python利用'\033[<style CODE>;<fore color CODE>;< back co ...

  7. python发送钉钉消息通用脚本

    1.使用shell生成需要发送的内容. 2.调用该脚本发送文本内容python3,其中的文件 /wj/sbjk,需要改成直接需要发送的文件. [root@manager dingding]# more ...

  8. 跨域出现:XMLHttpRequest cannot load错误

    1.右击浏览器图标-->属性-->快捷方式-->目标栏添加--> --args --disable-web-security --user-data-dir 2.修改之后重新打 ...

  9. Kubernetes部署的10个注意事项

    摘要 容器开发有望在云中实现前所未有的可移植性和可扩展 性.此外,DevOps 开发和文化实践也有助于提升业务价 值和响应能力.但是,在开始第一个容器开发项目之前, 有一些问题需要考虑清楚:我们应该使 ...

  10. 错误:[ERROR] 不再支持源选项 5。请使用 6 或更高版本。 [ERROR] 不再支持目标选项 1.5。请使用 1.6 或更高版本。

    解决方案 pom.xml文件中增加maven编译的java.version jdk版本设置,以及maven.compiler.source 资源编译jdk版本设置和maven.compiler.tar ...