当前位置: 首页 > news >正文

pytorch车牌识别

目录

  • 使用pytorch库中CNN模型进行图像识别
    • 收集数据集
    • 定义CNN模型
      • 卷积层
      • 池化层
      • 全连接层
    • CNN模型代码
    • 使用模型

在这里插入图片描述

使用pytorch库中CNN模型进行图像识别

收集数据集

可以去找开源的数据集或者自己手做一个
最终整合成 类别分类的图片文件
在这里插入图片描述

定义CNN模型

卷积层

功能:提取特征

概念

  1. 卷积层输入层通道数

如果输入数据是彩色图像,那么通常情况下,输入数据具有三个通道(红、绿、蓝),因此第一个卷积层的输入通道数应该为3。
如果输入数据是灰度图像,那么输入通道数通常为 1。

  1. 卷积层输出层通道数

卷积层的输出通道数控制着该层提取的特征的数量和复杂度。更多的输出通道意味着网络可以学习更多种类的特征,但过多的输出通道数会导致复杂度和过拟合。

池化层

功能:使卷积层的特征更加明显,对图像进行降维压缩(舍弃无关特征,避免过拟合),提高神经网络的泛华能力。
问题:

  1. 最大池化操作

最大池化操作是一种常用的池化操作,用于减少特征图的空间维度并保留最重要的特征信息
在这里插入图片描述

# 定义最大池化层,池化窗口大小为 2x2,步幅为 2
max_pool_layer = nn.MaxPool2d(kernel_size=2, stride=2)

全连接层

将特征进行整合,然后归一化,对各种分类情况都输入一个概率,根据概率进行分类

CNN模型代码

import os
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.transforms as transforms
from PIL import Image
from torchvision.datasets import ImageFolder
from torch.utils.data import DataLoader, Dataset
# 进度条工具
from tqdm import tqdm# 数据集中的类别数
num_classes = len(os.listdir('./数据集'))
# 训练的轮数
num_epochs = 10
# 30次:['陕', '陕', 'U', 'U', '6', '6', '6', '6']
# 10次:['陕', 'A', 'D', '0', '6', '6', '6', '6']# 一、定义数据预处理和数据加载器
transform = transforms.Compose([# 固定图像大小transforms.Resize((64, 64)),# 将图像转换为灰度图像transforms.Grayscale(),# 将图像转换为张量transforms.ToTensor(),
])
# 使用ImageFolder定义数据集,标签为序号
train_dataset = ImageFolder(root='./数据集', transform=transform)
# 数据加载器,每个批次包含32张图像
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)# 二、定义 CNN 模型
class CNNModel(nn.Module):def __init__(self):super(CNNModel, self).__init__()# 卷积层1  1代表单通道,黑白;32代表输出通道;3代表3*3的卷积核, 1代表在最外围补一圈0self.conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3, padding=1)# 池化层1  最大池化操作,2代表尺寸减半self.pool = nn.MaxPool2d(kernel_size=2, stride=2)# 卷积层2 ,32对于卷积层1的输出通道数self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)# 全连接层 64输出通道数,16*16代表压缩后的尺寸,生成长度128向量self.fc1 = nn.Linear(64 * 16 * 16, 128)self.fc2 = nn.Linear(128, num_classes)# 前向传播 返回输出结果def forward(self, x):# 卷积1x = self.conv1(x)# 激活函数/激化函数 引入非线性变化,增强神经网络复杂性x = torch.relu(x)# 池化x = self.pool(x)x = self.pool(torch.relu(self.conv2(x)))x = x.view(-1, 64 * 16 * 16)x = torch.relu(self.fc1(x))x = self.fc2(x)return x# 三、初始化模型、损失函数和优化器
model = CNNModel()
criterion = nn.CrossEntropyLoss()
# 学习率一般设0.01
optimizer = optim.SGD(model.parameters(), lr=0.01)# 四、只要当主文件运行时候,才训练模型
if __name__ == "__main__":for epoch in range(num_epochs):running_loss = 0.0print(f'Epoch : {epoch + 1}/{num_epochs}')# 显示每轮的进度条for images, labels in tqdm(train_loader):#  将优化器中存储的之前计算的梯度归零optimizer.zero_grad()# 将输入图像数据 images 输入到模型中进行前向传播,得到模型的输出outputs = model(images)# 损失函数 criterion 计算模型 输出 与 真实标签 之间的损失值。loss = criterion(outputs, labels)# 对损失值进行反向传播,计算模型参数的梯度loss.backward()# 据优化算法(梯度下降)更新模型参数,最小化损失函数optimizer.step()running_loss += loss.item()# 输出每个 epoch 的平均损失epoch_loss = running_loss / len(train_loader)print(f'Epoch {epoch + 1} loss: {epoch_loss:.4f}')# 保存模型torch.save(model.state_dict(), 'cnn_model.pt')

使用模型

import torch
from PIL import Image
from torch.utils.data import dataset
from cnn_model import transform, train_dataset, CNNModel# 加载整个模型
model = CNNModel()
# 将模型设置为评估模式
model.eval()
checkpoint = torch.load('./cnn_model.pt')
model.load_state_dict(checkpoint)# 使用模型进行预测,识别单个文字图片
def predict_image(image_path):image = Image.open(image_path)# 转换图片格式image = transform(image)# 只进行前向传播with torch.no_grad():output = model(image)# ImageFolder输出的标签是文件序号,argmax找到张量output中的最大值predicted_idx = torch.argmax(output).item()print(predicted_idx)# 将输出转换成对应序号的文件名if predicted_idx < len(train_dataset.classes) :predicted_label = train_dataset.classes[predicted_idx]return predicted_labelelse:return "null"

相关文章:

pytorch车牌识别

目录 使用pytorch库中CNN模型进行图像识别收集数据集定义CNN模型卷积层池化层全连接层 CNN模型代码使用模型 使用pytorch库中CNN模型进行图像识别 收集数据集 可以去找开源的数据集或者自己手做一个 最终整合成 类别分类的图片文件 定义CNN模型 卷积层 功能&#xff1a;提…...

【C++入门】内联函数、auto与基于范围的for循环

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…...

服务器停用,备份服务文件。

文章目录 引言I 文件备份1.1 数据库文件/证书1.2 redis1.3 nacosII JAVA流水线备份2.1 java构建2.2 镜像构建2.3 docker 部署2.4 子模块构建2.5 Dockerfile_prodIII VUE项目流水线备份3.1 Node.js 构建3.2 Dockerfile_prod...

基于Python的深度学习的中文情感分析系统(V2.0),附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

使用Postman发送跨域请求实验

使用Postman发送跨域请求 1 跨域是什么&#xff1f;2 何为同源呢?3 跨域请求是如何被检测到的&#xff1f;4 Postman跨域请求测试4.1 后端准备4.2 测试用例4.2.1 后端未配置跨域请求(1) 前端不跨域&#xff08;2&#xff09;前端跨域 4.2.2 后端配置跨域信息&#xff08;1&…...

4、jvm-垃圾收集算法与垃圾收集器

垃圾收集算法 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法&#xff0c;这种算法没有什么新的思想&#xff0c;只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代&#xff0c;这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 比如…...

[Excel]如何限制儲存格輸入格式? 以“字首為英文字母大寫,其餘為數字,共15碼“為範例

[Excel]如何限制儲存格輸入格式 需求: 當一個excel表格需要由多位使用者來輸入資料時&#xff0c;難免會出現資料輸入錯誤問題&#xff0c;尤其是料號&#xff0c;品號或是訂單號的長類型編碼。若是問題屬於輸入錯誤"資料"但格式未錯誤&#xff0c;則可能需要讓exce…...

错题记录-华为海思

华为 海思数字芯片 参考 &#xff1a;FPGA开发/数字IC笔试系列(5) 华为海思IC笔试解析 FPGA开发/数字IC笔试系列(6) 华为海思IC笔试解析 SystemVerilog Function与Task的区别 $readmemh与$readmemb这两个系统任务是用来从指定文件中读取数据到寄存器数组或者RAM、ROM中。除了…...

rspack 使用构建vue3脚手架

基于 Rust 的高性能 Web 构建工具。rspack 主要适配 webpack 生态&#xff0c;对于绝大多数 webpack 工具库都是支持的。 启动速度快&#xff1b;增量热更新快。兼容 webpack 生态&#xff1b;内置了 ts、jsx、css、css modules 等开箱即用。生产优化&#xff0c;tree shaking…...

maven之pom中的build标签

1、build标签分类 1.1、全局配置&#xff08;project build&#xff09; 针对整个项目的所有情况都有效。 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"htt…...

Cesium.js--》探秘Cesium背后的3D模型魔力—加载纽约模型

今天简单实现一个Cesium.js的小Demo&#xff0c;加强自己对Cesium知识的掌握与学习&#xff0c;先简单对这个开源库进行一个简单的介绍吧&#xff01; Cesium 是一个开源的地理空间可视化引擎&#xff0c;用于创建基于 Web 的三维地球应用程序。它允许开发人员在网页上呈现高度…...

.NET i18n 多语言支持与国际化

环境 WIN10 VS2022 .NET8 1.&#x1f44b;创建项目 2.&#x1f440;创建Resources Controllers HomeController.en.resx HomeController.fr.resx HomeController.zh.resx 3.&#x1f331;Program.cs添加国际化支持 // 添加国际化支持 builder.Services.AddLocalization(…...

基于Pytorch实现图像分类——基于jupyter

分类任务 网络基本构建与训练方法&#xff0c;常用函数解torch.nn.functional模块nn.Module模块 MNIST数据集下载 from pathlib import Path import requestsDATA_PATH Path("data") PATH DATA_PATH / "mnist"PATH.mkdir(parentsTrue, exist_okTrue)U…...

如何将CSDN的文章以PDF文件形式保存到本地

1.F12 打开开发者工具窗口 2.console下输入命令 (function(){$("#side").remove();$("#comment_title, #comment_list, #comment_bar, #comment_form, .announce, #ad_cen, #ad_bot").remove();$(".nav_top_2011, #header, #navigator").remove…...

面试经典150题——删除有序数组中的重复项

面试经典150题 day3 题目来源我的题解方法一 双指针 题目来源 力扣每日一题&#xff1b;题序&#xff1a;26 我的题解 方法一 双指针 使用两个指针分别指向相同元素的左右边界&#xff0c;再利用一个count记录最终需要的数组长度。 时间复杂度&#xff1a;O(n) 空间复杂度&a…...

Unity3D知识点精华浓缩

一、细节 1、类与组件的关系 2、Time.deltaTime的含义 3、怎么表示一帧的移动距离 4、Update和LateUpdate的区别和适用场景 5、找游戏对象的方式&#xff08;别的对象 / 当前对象的子对象&#xff09; 6、组件1调用组件2中方法的方式 7、在面板中获取外部数据的方法 8、序列化属…...

HTML的文档说明

1.告诉浏览器当前网页的版本 2.写法&#xff1a; &#xff01;以前的写法&#xff1a;要依据网页的HTML的版本去确定&#xff0c;紫萼发油很多很多。 具体的写法可以参考&#xff1a;W3C官网的文档说明 &#xff01;新写法&#xff1a;W3C都推荐用h5的写法 <DOCTYPE ht…...

ubuntu 更新或更改GCC/G++

最近遇到一些问题&#xff0c;需要用到gcc-9/g-9&#xff0c;但是我自带的ubuntu18.04是gcc-7.5/g-7.5&#xff0c;所以升级一下&#xff0c;奈何文章太多而且很多无效&#xff0c;所以在此记录一下&#xff1a; 参考&#xff1a;https://stackoverflow.com/questions/19836858…...

Java --- Java语言基础

这个Java可是个好东西&#xff0c;是一门面对对象的程序设计语言&#xff0c;其语法很类似C&#xff0c;所以学过C的伙伴们就很好上手&#xff0c;另外Java对C进行了简化与提高&#xff0c;这个在后期学习会感受到&#xff0c;Java还有很多的类库API文档以及第三方开发包。 这…...

【C++算法竞赛 · 图论】图的存储

前言 图的存储 邻接矩阵 方法 复杂度 应用 例题 题解 邻接表 方法 复杂度 应用 前言 上一篇文章中&#xff08;【C算法竞赛 图论】图论基础&#xff09;&#xff0c;介绍了图论相关的概念和一种图的存储的方法&#xff0c;这篇文章将会介绍剩下的两种方法&#xff…...

Spring AOP IOC

spring的优缺点 IOC集中管理对象&#xff0c;对象之间解耦&#xff0c;方便维护对象AOP在不修改原代码的情况下&#xff0c;实现一些拦截提供众多辅助类&#xff0c;方便开发方便集成各种优秀框架 紧耦合和松耦合 松耦合可以使用单一职责原则、接口分离原则、依赖倒置原则 …...

Linux ARM平台开发系列讲解(QEMU篇) 1.1 编译QEMU 构建RISC-V64架构 运行Linux kernel

1. 概述 QEMU可以模拟很多架构的CPU(ARM,RISC-V等),重点是免费,用来学Linux简直太适合不过了,所以,我打算开一章节来教QEMU的使用,这样也方便环境统一调试,本章节就讲解如何在Ubuntu搭建QEMU,我的环境是全新的Ubuntu22,QEMU下载的9.0,kernel下载的6.0. 2. 源码下载…...

Day19-【Java SE进阶】网络编程

一、网络编程 1.概述 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。java.net,*包下提供了网络编程的解决方案! 基本的通信架构 基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)。 网络通信的…...

pyqt写个星三角降压启动方式2

星三角降压启动用可以用类进行封装&#xff0c;就像博图FB块那样。把逻辑都在类里完成&#xff0c;和外界需要交互的暴露出接口。测试过程中&#xff0c;发现类中直接用定时器QTimer会出现问题。然后就把定时器放到外面了。然后测试功能正常。 from PySide6.QtWidgets import …...

js可视化爬取数据生成当前热点词汇图

功能 可以爬取到很多数据&#xff0c;并且生成当前的热点词汇图&#xff0c;词越大越热门&#xff08;词云图&#xff09; 这里以b站某个评论区的数据为例&#xff0c;爬取63448条数据生成这样的图片 让我们能够更加直观的看到当前的热点 git地址 可以直接使用&#xff0c;中文…...

研发岗-面临统信UOS系统配置总结

第一步 获取root权限 配置环境等都需要用到root权限&#xff0c;所以我们先获取到root权限&#xff0c;方便下面的操作 下载软件 在UOS应用商店下载的所需应用 版本都比较低 安装node 官网下载了【arm64】的包&#xff0c;解压到指定文件夹&#xff0c;设置链接&#xff0…...

【STL详解 —— list的介绍及使用】

STL详解 —— list的介绍及使用 list的介绍list的介绍使用list的构造list iterator的使用list capacitylist element accesslist modifiers 示例list的迭代器失效 list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭…...

cocos creator开发中遇到的问题和解决方案

前言 总结一下使用cocos开发遇到的坑&#xff0c;不定期更新。 问题汇总 代码修改Position坐标不生效 首先要通过打log或者断点排除下是不是逻辑上的问题&#xff0c;还有是不是有动画相关把位置修改了。我遇到的问题是坐标修改被widget组件覆盖了。 纹理压缩包体变大 co…...

10分钟带你学会配置DNS服务正反向解析

正向解析 服务端IP客户端IP网址192.168.160.134192.168.160.135www.openlab.com 一、首先做准备工作&#xff1a; 关闭安全软件&#xff0c;关闭防火墙&#xff0c;下载bind软件 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld [rootserver ~]# y…...

【vim 学习系列文章 19 -- 映射快捷键调用两个函数 A 和B】

请阅读【嵌入式开发学习必备专栏 之 Vim】 文章目录 映射快捷键调用两个函数 映射快捷键调用两个函数 在 Vim 中&#xff0c;如果想通过按下 gcm 来调用两个函数&#xff0c;比如 FunctionA 和 FunctionB&#xff0c;需要先定义这两个函数&#xff0c;然后创建一个映射。这个映…...

无为做网站/太原百度网站快速优化

Sutdent表的定义字段名字段描述数据类型主键外键非空唯一自增Id学号INT(10)是否是是是Name姓名VARCHAR(20)否否是否否Sex性别VARCHAR(4)否否否否否Birth出生年份YEAR否否否否否Department院系VARCHAR(20)否否是否否Address家庭住址VARCHAR(50)否否否否否Score表的定义字段名字段…...

办网站用什么证件/国外最好的免费建站

http://m.blog.sina.com.cn/s/blog_6bd7d94301014wru.html?sudarefwww.baidu.com#page5 count(1)比count&#xff08;*&#xff09;效率高where条件范围按照由大到小来写 删选出最多的条件写道最后面。索引列不要使用函数 否则索引可能不生效索引里面不要用*开头作为条件。多列…...

中企动力做网站的优势/网站快速排名公司

在Android编程的过程中&#xff0c;如果在Activity中某个操作会运行比较长的时间&#xff0c;比如&#xff1a;下载文件。这个时候如果在主线程中直接下载文件&#xff0c;会造成Activity卡死的现象&#xff1b;而且如果时间超过5秒&#xff0c;会有ANR报错。在这种情况下&…...

flash型网站/百度统计app下载

UDP协议是无面向连接的、不可靠的、无序的、无流量控制的传输层协议&#xff0c;UDP发送的每个数据报是记录型的数据报&#xff0c;所谓的记录型数据报就是接收进程可以识别接收到的数据报的记录边界。TCP协议是面向连接的、可靠的、有序的、拥有流量控制的传输层协议&#xff…...

做足彩网站推广/东莞网络营销全网推广

大家好&#xff0c;我是 CUGGZ。今天来分享 12 个 yyds 的微信小程序开源项目&#xff0c;速速收藏&#xff01;全文概览&#xff1a;wechat-app-mall&#xff1a;微信小程序商城&#xff1b;Vant Weapp&#xff1a;小程序 UI 组件库&#xff1b;iView Weapp&#xff1a;小程序…...

泉州模板做网站/教育培训机构排名

面试跳槽 说到面试跳槽&#xff0c;大家从当初入行开始就一直摆脱不开它&#xff08;咱们就是通过不断跳槽才能更快地提升自己&#xff09;。在我们的技术生涯中会有很多大大小小的面试&#xff0c;对我们程序员来说每一次面试都是一次提升的机会&#xff0c;不管是简历修改&a…...