比赛准备笔记 --- TensotFlow、软件调试、数据预处理(图像,csv数据)

简介

TensorFlow是由Google团队开发的一个开源深度学习框架,完全基于Python语言设计。它的初衷是以最简单的方式实现机器学习和深度学习的概念,结合了计算代数的优化技术,使计算许多数学表达式变得简单。

优势:

  • 强大的计算能力,支持多种硬件和分布式计算
  • 灵活的数据流模型,便于构建复杂的模型
  • 丰富的 社区资源和生态系统

tf.keras库

该库是一个高阶api库,提供了很多训练模型时需要使用的工具

tf.keras.models.Sequential:用于顺序地堆叠模型的各个层。
tf.keras.layers.Dense:用于定义全连接层。
tf.keras.layers.Flatten:用于将多维数组转换为一维数组。
tf.keras.losses:提供了各种损失函数。
tf.keras.optimizers:提供了优化器。
tf.keras.metrics:提供了评估指标,如准确率、精确率等

构建模型的方式

  • Sequential 模型:使用 tf.keras.Sequential 类可以按顺序堆叠层来构建模型。这是一种简单的模型构建方式,适用于层之间是线性关系的情况
  • 函数式 API:使用函数式 API 可以构建更复杂、具有分支和合并的模型结构。这种方式允许你创建具有多个输入和输出的模型
  • 子类化模型:通过继承 tf.keras.Model 类,并自定义 init 和 call 方法来构建模型。这种方式提供了更大的灵活性,可自定义模型的计算图

使用Sequential 构建模型

import tensorflow as tf
# Sequential 模型
model = tf.keras.models.Sequential([# tf.keras.layers.Dense 构建全连接层 64表示数据类型unit64 relu表示激活函数tf.keras.layers.Dense(64,activation="relu",input_shape=(784,)),tf.keras.layers.Dense(64,activation="relu"),tf.keras.layers.Dense(10,activation="softmax"),
])# 编译模型
model.compile(optimizer="adam", # 指定优化器loss="sparse_categorical_crossentropy", # 指定损失函数metrics=['accuracy']  # 指定评估指标)
  • 开始训练
# 开始训练
history = model.fit(train_data_x, # 训练数据集validation_data = test_data_x,  # 验证集epochs=10 # 根据需要设置训练轮数
)model.evaluate(test_data_y)  # 使用测试集测试模型


这样可以降低测试集的损失和收敛情况,以保证模型不容易过拟合

拿到代码之后修改算法的几种方案

  • 第一种:多加几层卷积层、池化层和全连接层
tf.teras.Sequential([layers.lambda((lambda x : tf_fn(process_base64_image,x,fn_output_signaturetf.TensorSpec(shape=(int(img_height),int(img_width),3),dtype=tf.float32))),name="image_decode_png"),layers.ConV2D(32,(3,3),activation='relu'),layers.MaxPooling2D(2,2),layers.ConV2D(64,(3,3),activation='relu'),layers.MaxPooling2D(2,2),layers.ConV2D(128,(3,3),activation='relu')layers.Flatten(),layers.Dense(128,activation='relu'),layers.Dense(class_nums,activation="softmax")
])
  • 第二种:使用vgg网络
from tensorflow.keras.applications.vgg16 import VGG16 
# 构建vgg16网络并使其预置参数冻结
base_model = VGG16(weights="imagenet",include_top=False,input_shape=(int(img_height),int(image_width,3)))
for layer in base_model.layers:layer.trainable = Falseinput_layer = base_model.input # 获取vgg的输入层
x = layers.Flatten()(input_layer)
x = layers.Dense(128,activation='relu')(x)
outputs = layers.Dense(class_nums,activation="softmax")(x)# 构建完整的模型
tf.keras.Sequential([layers.lambda(),base_model,outputs
])
  • 第三种:使用残差网络
from tensorflow.keras.applications.resnet50 import ResNet50
# 构建ResNet50模型并使其预置参数冻结base_model = ResNet50(weights='imagenet',include_top=False,input_shape=(int(img_height),int(img_width),3))
for layer in base_model.layers:layer.trainable = Falsex = base_model.output
x = layers.GlobalAveragePoolMax2D()(x)
x = layers.Dense(1024,activation='relu')(x)
output = layers.Dense(class_nums,activation='sotfmax')(x)# 构建完整模型
model = tf.keras.Sequential([layers.lambda(),base_model,output
])

模型导出

# 模型导出
import pytz
from datetime import datetime
model_version = datetime.now(pytz.timezone("Asia/Shanghai")).strftime("%Y%m%d%H%M%S")tf.keras.models.save_model(model,f'/model/slot1/{model_version}',overwrite=True)

模型的使用(部署)

导出模型之后就需要使用这个模型,一共有两种方法来使用这个模型

  1. TensotFlow-Serving
  2. 使用tf自带的包加载

本帖只讲解TensorFlow-Serving使用模型的方式

TensorFlow-Serving是一种灵活的高性能服务系统,适用于机器学习模型,专为生产环境而设计。TensotFlow Serving 可以轻松部署新算法和实验,同时保持相同的服务器架构和构。TensorFlow-Serving提供与TensorFlow模型的开箱即用集成,但可以轻松扩展以提供类型的模型和数据。

重点:通过api部署

TensorFlow中的图像预处理

有一些图像预处理的方法是万能通用的:

  • 归一化处理
    将像素值缩放到0到1之间,或者-1到1之间,以消除由于光照条件不同而导致的亮度差异。这可以通过减去所有像素值的平均值,然后除以标准差来实现

  • 数据增强

通过旋转、翻转、平移、裁剪等操作来增加数据集的大小,从而提高模型的泛化能力。

import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator# 创建一个ImageDataGenerator对象,设置旋转、翻转、平移等操作
datagen = ImageDataGenerator(rotation_range=40,  # 随机旋转角度范围width_shift_range=0.2,  # 水平平移范围height_shift_range=0.2,  # 垂直平移范围shear_range=0.2,  # 剪切强度zoom_range=0.2,  # 缩放范围horizontal_flip=True,  # 是否进行水平翻转fill_mode='nearest'  # 填充新创建像素的方法
)# 加载图片
img = tf.keras.preprocessing.image.load_img('R.jpg')
x = tf.keras.preprocessing.image.img_to_array(img)
x = x.reshape((1,) + x.shape)# 使用ImageDataGenerator生成增强后的图片
i = 0
for batch in datagen.flow(x, batch_size=1):i += 1if i > 20:  # 生成20张增强后的图片breakimage = tf.keras.preprocessing.image.array_to_img(batch[0])image.save('save/augmented_image_' + str(i) + '.jpg')

图片处理方式及其理由

  • 将图像转换为灰度图
    理由:将彩色图像转为灰度图像,可以减少数据量,简化计算,降低图像处理的复杂度,提高图像的处理速度和准确性。
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  
  • 增强图像对比度
    理由: 图像对比度提高,图像中的物体边缘和细节就会变得容易识别,从而提高图像识别和分析的准确性
alpha = 1.5   
beta = 0    
img = cv2.convertScaleAbs(gray_img, alpha=alpha, beta=beta)  
  • 锐化图像
    理由:锐化图像可以增强图像的边缘和细节,提高图像的清晰度和对比度,从而可能提高模型准确度。
kernel = np.array([[0, -1, 0], [-1, 5,-1], [0, -1, 0]])
img = cv2.filter2D(img, -1, kernel)

软件调试流程

进入到Kimage软件之后就是点击设备 (从左往右数第三个)
在这里插入图片描述
点击比赛使用的设备
在这里插入图片描述
点击回原点
在这里插入图片描述
移动点位,将画板移动到笔的正下方,笔尖轻触画纸
在这里插入图片描述

调整完毕后,点击第二个按钮进入主流程
在这里插入图片描述
点击初始位置,改变画笔下降高度为刚刚轻触在纸上的高度 速度调到50
在这里插入图片描述
进入MVVIEWER软件 网口配置好之后连接摄像头 在连接的同时调整亮度,保证在软件中看的清楚图像的画面在这里插入图片描述

打开图像识别客户端 查看配置可以看到图像识别客户端所在的网口 是2网段,所以工控机和相机连接的网口也一定是要2网段在这里插入图片描述

在自己电脑运行虚拟机 并且在浏览器中进入大数据平台
在这里插入图片描述
在图像检测客户端中点击开始 运行训练模式
在这里插入图片描述
相机会拍摄四张照片
在这里插入图片描述
接着人工截取四个工件并标记合格与不合格

点击提交(提交前要更换下一张纸)

训练完成后就可以在云平台查看标注的图片数据 也可以用程序根据接口在这里插入图片描述
访问查找数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/129235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5数字孪生制作(一) - QGIS 学习笔记

1.下载 QGIS是免费的GIS工具,下载地址: https://www.qgis.org/en/site/ 2.安装 - 转中文 按照步骤安装,完成后,在菜单 设置settings里,选择options,修改语言 确定后,需要重启下软件 3.学习视…

前端学习之webpack的使用

概述 webpack是一个流行的前端项目构建工具(打包工具),可以解决当前web开发中所面临的问题。 webpack提供了友好的模块化支持,以及代码压缩混淆、处理js兼容问题、性能优化等强大的功能,从而让程序员把工作重心放到具…

Nignx安装负载均衡动静分离以及Linux前端项目部署将域名映射到特定IP地址

目录 一、nginx简介 1.1 定义 1.2 背景 1.3 作用 二、nginx搭载负载均衡提供前后分离后台接口数据 2.1 nginx安装 2.1.1 下载依赖 2.1.2 下载并解压安装包 2.1.3 安装nginx 2.1.4 启动nginx服务 2.2 tomcat负载均衡 2.2.1 负载均衡所需服务器准备 2.2.2 配置修改 …

ArGIS Engine专题(16)之GP工具实现影像批量复制重采样和按矢量范围批量裁剪

一、结果预览 (1)影像批量复制和重采样 (2)按矢量范围批量裁剪 二、需求简介 本文的最终目的其实是要实现影像按矢量范围批量裁剪,笔者准备处理的影像范围较大,并且是按各个市分块的,要实现统一裁剪时,需要将各个…

研究人员发现34个Windows驱动程序易受完全设备接管攻击

最近,研究人员发现了34个易受攻击的Windows驱动程序,这些漏洞可能被非特权威胁行为者利用来完全接管设备,并在底层系统上执行任意代码。这一发现引发了广泛关注,并引起了Windows用户的担忧。 导语 随着科技的不断进步,…

【APP】go-musicfox - 一款网易云音乐命令行客户端, 文件很小Mac版本只有16.5M

go-musicfox 是用 Go 写的又一款网易云音乐命令行客户端,支持各种音质级别、UnblockNeteaseMusic、Last.fm、MPRIS 和 macOS 交互响应(睡眠暂停、蓝牙耳机连接断开响应和菜单栏控制等)等功能特性。 预览 启动 启动界面 主界面 主界面 通…

windows 使用 EasyScreenLive 和 EasyDarwin 软件实现相机 rtsp 推流

1. 下载软件 实现 rtsp 推流,需要运行(1)rtsp 服务器、(2)rtsp 推流客户端。 rtsp 服务器 EasyDarwin:https://github.com/EasyDarwin/EasyDarwin rtsp 推流客户端 EasyScreenLive:https://git…

基于Taro + React 实现微信小程序半圆滑块组件、半圆进度条、弧形进度条、半圆滑行轨道(附源码)

效果: 功能点: 1、四个档位 2、可点击加减切换档位 3、可以点击区域切换档位 4、可以滑动切换档位 目的: 给大家提供一些实现思路,找了一圈,一些文章基本不能直接用,错漏百出,代码还藏着掖…

MySQL 分组后统计 TopN 优化思路

一、表信息 表结构如下: CREATE TABLE score (id int(11) NOT NULL AUTO_INCREMENT,name varchar(255) DEFAULT NULL,score int(11) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT1746687 DEFAULT CHARSETutf8;使用存储过程生成十万条测试数据&am…

JavaScript:事件循环机制(EventLoop)

一、理解进程、线程 进程是操作系统中的基本概念之一,指的是一个正在运行中的程序,包括了程序的执行代码、数据、资源等。操作系统为每个进程分配一定的系统资源,例如内存空间、文件和设备等,以便进程能够正常运行。 线程是进程…

Nginx简介,Nginx搭载负载均衡以及Nginx部署前端项目

目录 一. Nginx简介 Nginx的优点 二. Nginx搭载负载均衡 2.1 Nginx安装 2.1.1 安装依赖 2.1.2 解压nginx安装包 2.1.3 安装nginx 2.1.4 启动nginx服务 2.2 tomcat负载均衡 2.3 Nginx配置 三. Nginx前端部署 一. Nginx简介 NGINX(读作:engi…

气膜场馆的降噪方法

在现代社会,噪音已经成为我们生活中难以避免的问题,而气膜场馆也不例外。传统的气膜场馆常常因其特殊结构而面临噪音扩散和回声问题,影响了人们的体验和活动效果。然而,随着科技的进步,多功能声学综合馆应运而生&#…

vscode开启emmet语法

需要在setting.json中添加配置 首先进入设置,然后点击右上角 Vue项目添加如下配置 "emmet.syntaxProfiles": { "vue-html": "html", "vue": "html" },React项目添加如下配置 "emmet.includeLanguages&quo…

大数据Doris(十五):Doris表的字段类型

文章目录 Doris表的字段类型 一、TINYINT数据类型 二、SMALLINT数据类型 三、INT数据类型

【Web】TCP 和 UCP 的含义和区别

文章目录 一、两者含义二、两者区别 一、两者含义 TCP/IP 协议组为传输层指明了两个协议:TCP 和 UDP,他们都是作为应用程序和网络操作的中介物 TCP (传输控制协议):通过三次握手建立可靠的连接,发送端将数据…

Vue3 如何在<script setup>里设置组件name属性

Vue3 如何在<script setup>里设置组件name属性 文章目录 Vue3 如何在\<script setup>里设置组件name属性一、Vue组件中 name 的用处二、难看但实用的方法三、使用第三方插件支持安装插件插件基本配置插件基本使用 四、Vue官方解决方法4.1 Vue3.3版本之前安装插件插…

物理内存的组织形式

由于物理地址是连续的&#xff0c;页也是连续的&#xff0c;每个页大小也是一样的。因而对于任何一个地址&#xff0c;只要直接除一下每页的大小&#xff0c;很容易直接算出在哪一页。每个页有一个结构 struct page 表示&#xff0c;这个结构也是放在一个数组里面&#xff0c;这…

C#中只能在.NetFramework下使用LINQtoSQL不要在.net 下使用

目录 一、在net7.0下无法实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 二、在.NetFramework4.8下成功实现LINQtoSQL 1.VS上建立数据库连接 2.VS上创建LINQtoSQL 三、结论 四、理由 本文是个人观点&#xff0c;因为我百般努力在.net7.0下无法实现LINQtoSQL的…

RAR Extractor v11.20(mac解压缩软件)

RAR Extractor是一款专门用于解压RAR格式压缩文件的软件&#xff0c;以下是关于RAR Extractor的详细介绍&#xff1a; 强大的解压功能&#xff1a;RAR Extractor能够解压RAR格式的压缩文件&#xff0c;无论是单一的RAR文件还是RAR文件包&#xff0c;都可以通过RAR Extractor进…