飞桨深度学习学院零基础深度学习7日入门-CV疫情特辑学习笔记(四)DAY03 车牌识别

article/2025/9/24 20:01:06

本课分为理论和实战两个部分

理论:卷积神经网络

1.思考全连接神经网络的问题
一般来收机器学习模型实践分为三个步骤,(1)建立模型 (2)选择损失函数 (3)参数调整学习

1.1 模型结构不够灵活


假设对16 x 16 的图片进行分类手写字体分类任务,设计了如上所示的网络。第输入层转换为一维向量是256个,那对100*100的图片做相同的任务,只有通过增加每层的神经元个数或者增加网络的层数来完成。

1.2模型参数太多

例如:输入为16 x 16 的图片,输入层为256个神经元,隐藏层每层1000个神经元,输出层10个。假设共5层,则共需要学习(256*10^3+10^6+10^6+10^4 )个,w再加(1000+1000+1000+10)个b。这是十分大运算量。如果输入为100*100的图片或者更大的图片呢?如果网络的层数为十层呢?

 

 

2.如何改进?卷积神经网络

2.1 在第一步建立模型时候抛弃全连接神经网络,采用卷积神经网络。

建立模型:

  • 卷积神经网络(CNN)   三大特性:局部连接  权重共享  下采样减少网络参数;这些都可以加快训练速度
  • 卷积层 
  • Pooling层

局部连接

权重共享

下采样

 

完成的卷积神经网络结构如下图:

卷积神经网络

 

卷积层:

卷积核

 

单个卷积核只能提取单一特征,如何利用卷积核提取更复杂的特征?

一个卷积核可以提取图像的一种特征,多个卷积核提取多种特征

POOLing 池化层

 

 

损失函数

 

参数学习部分还是梯度下降方法。

 

实战:车牌识别

 

1. 直接在百度AI Studio中阅读案例代码,并运行,查看结果

跟上节课任务类似,区别在于 神经网络模型部分

#定义网络
class MyLeNet(fluid.dygraph.Layer):def __init__(self):super(MyLeNet,self).__init__()self.hidden1_1 = Conv2D(1,28,5,1) #(通道数,卷积核个数,卷积核大小) featuremap (20-5+1)  变成 16* 16self.hidden1_2 = Pool2D(pool_size=2,pool_type='max',pool_stride=1)  #采用是取最大值,池化步长可以改 1    self.hidden2_1 = Conv2D(28,32,3,1) #(28,因为上一个卷积核28)self.hidden2_2 = Pool2D(pool_size=2,pool_type='max',pool_stride=1)self.hidden3 = Conv2D(32,32,3,1)self.hidden4 = Linear(32*10*10,65,act='softmax') #转换为全连接层FC,便于分类输出,概率def forward(self,input):   #print x.shape 用于输出参数,辅助理解和观察,便于及时调整参数x = self.hidden1_1(input)print(x.shape)x = self.hidden1_2(x)x = self.hidden2_1(x)x = self.hidden2_2(x)x = self.hidden3(x)x = fluid.layers.reshape(x,shape=[-1,32*10*10]) #转换为一维数组y = self.hidden4(x)return y#迭代输出损失函数和精度大小Iter=0
Iters=[]
all_train_loss=[]
all_train_accs=[]
def draw_train_process(iters,train_loss,train_accs):title = "training loss/training accs"plt.title(title,fontsize=24)plt.xlabel("iter",fontsize=14)plt.ylabel("loss/acc",fontsize=14)plt.plot(iters,train_loss,color='red',label='training loss')plt.plot(iters,train_accs,color='green',label='traning_accs')plt.legend()plt.grid()plt.show()

在训练部分主要是调整参数,优化模型,因为刚接触,没有太多深入了解,所以没有添加额外的神经网络处理方式如dropout,batch等。

with fluid.dygraph.guard():model=MyLeNet() #模型实例化model.train() #切换到训练模式,该模式下自动搭建反向传播网络,评估模式没有opt=fluid.optimizer.SGDOptimizer(learning_rate=0.008, parameter_list=model.parameters())#优化器选用SGD随机梯度下降,学习率为0.001.epochs_num=100 #迭代次数为2#参数组合 0.001  100   0.94358677# 0.005 100  0.97394913u# 0.008 100 0.9805597# 0.008 50 0.9481078# 0.008 150 0.97946256for pass_num in range(epochs_num):for batch_id,data in enumerate(train_reader()):images=np.array([x[0].reshape(1,20,20) for x in data],np.float32)labels = np.array([x[1] for x in data]).astype('int64')labels = labels[:, np.newaxis]image=fluid.dygraph.to_variable(images)label=fluid.dygraph.to_variable(labels)predict=model(image)#预测loss=fluid.layers.cross_entropy(predict,label)avg_loss=fluid.layers.mean(loss)#获取loss值acc=fluid.layers.accuracy(predict,label)#计算精度
avg_acc: 0.9775549

损失和精确度图像

 

2.由线上导出ipynb格式文件,导入到本地jupyterLab环境

本地导入文件后,修改对应的文件路径,安装cv2包,opencv

数据包导入本地解压后要正确的配置路径,以免找不到资源

data_path = 'data/characterData/data'
character_folders = os.listdir(data_path)

分别为不同项目建立文件夹,以免数据资源覆盖冲突,比如train_data.list,test_data.list

因为本项目使用到 是单通道图像,所以加载图像后不需要转置。

#昨天三通道图像处理函数
def data_mapper(sample):img, label = sampleimg = Image.open(img)img = img.resize((100, 100), Image.ANTIALIAS)img = np.array(img).astype('float32')img = img.transpose((2, 0, 1)) #转置img = img/255.0return img, label#今天车牌处理图像
def data_mapper(sample):img, label = sampleimg = paddle.dataset.image.load_image(file=img, is_color=False)img = img.flatten().astype('float32') / 255.0return img, label

出现错误: 将中文文件名的图片换成英文即可,原因是OpenCV在Window下支持不好

因为几乎每个文件夹都有含中文的图片,一个个实在费时间,所以用everything 高级搜索

批量重命名

Exception in thread Thread-15:
Traceback (most recent call last):File "D:\Programs\Anaconda3\envs\paddle\lib\threading.py", line 926, in _bootstrap_innerself.run()File "D:\Programs\Anaconda3\envs\paddle\lib\threading.py", line 870, in runself._target(*self._args, **self._kwargs)File "D:\Programs\Anaconda3\envs\paddle\lib\site-packages\paddle\reader\decorator.py", line 400, in handle_workerr = mapper(sample)File "<ipython-input-3-c6787fa3ea42>", line 5, in data_mapperimg = img.flatten().astype('float32') / 255.0
AttributeError: 'NoneType' object has no attribute 'flatten'

 

3.进行部分参数调整,思考会有何变化,查看结果

卷积层的输出特征图如何当作全连接层的输入使用呢?卷积层的输出数据格式是,在输入全连接层的时候,会自动将数据拉平,也就是对每个样本,自动将其转化为长度为的向量,

TODO: 工作上事情太多,只来得及在线上调试好得出结果,本地错误未解决。以后要花时间好好理解相关的理论,并重做这个案例。

参考资料:

配套参考资料:1.百度深度学院课程课件   2.PaddlePaddle官方文档 3.其他网络资料(CSDN PaddlePaddle)

神经网络理解:https://blog.csdn.net/lzx159951/article/details/105254912/


http://chatgpt.dhexx.cn/article/7KVkA4JF.shtml

相关文章

unity sdk(android)-友盟推送SDK接入

注意&#xff1a;一开始想接友盟Unity的SDk&#xff0c;但是导入后缺少各种jar&#xff0c;所以最后还是接了android的&#xff0c;demo文档齐全 官方文档&#xff1a;开发者中心 按照官方文档对接即可&#xff0c; 接入流程 1、项目中com.android.tools.build:gradle配置&…

友盟推送学习

一、首次使用U_Push 1、首先注册友盟账号&#xff0c;进入工作台&#xff0c;选择产品U_Push。 2、创建应用 3、在自己的项目中自动集成SDK 开发环境要求&#xff1a; Android Studio 3.0以上 Android minSdkVersion: 14 Cradle: 4.4以上 在根目录build.gradle中添加mav…

Android 学习之如何集成友盟推送

我是利用Android studio 新建一个空的Android项目。 步骤一 导入第三方库 1.切换Android项目状态为Project状态 2.在main文件下新建 jniLibs文件夹&#xff08;用来导入PushSDK项目下lib文件中的so文件&#xff09; 3.在libs文件夹下添加友盟PuskSDK中的 jar 文件&#xff…

用PaddlePaddle(飞浆)实现车牌识别

项目描述&#xff1a;本次实践是一个多分类任务&#xff0c;需要将照片中的每个字符分别进行识别&#xff0c;完成车牌的识别 实践平台&#xff1a;百度AI实训平台-AI Studio、PaddlePaddle1.8.0 动态图 数据集介绍&#xff08;自己去网上下载车牌识别数据集&#xff09; 数据…

深度学习(五) CNN卷积神经网络

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 CNN卷积神经网络 前言一、CNN是什么&#xff1f;二、为什么要使用CNN&#xff1f;三、CNN的结构1.图片的结构2.卷积层1.感受野&#xff08;Receptive Field&#xff09;2.卷积…

CNN网络实现手写数字(MNIST)识别 代码分析

CNN网络实现手写数字&#xff08;MNIST&#xff09;识别 代码分析(自学用) Github代码源文件 本文是学习了使用Pytorch框架的CNN网络实现手写数字&#xff08;MNIST&#xff09;识别 #导入需要的包 import numpy as np //第三方库&#xff0c;用于进行科学计算 import torc…

Android删除chartty证书,C/C++知识点之android应用安全分析

本文主要向大家介绍了C/C知识点之android应用安全分析&#xff0c;通过具体的内容向大家展示&#xff0c;希望对大家学习C/C知识点有所帮助。 应用名 &#xff1a;OKEx(OKEx-android.apk) 包名 &#xff1a;com.okinc.okex MD5 &#xff1a;1ffbd328d13e91b661592cdf58516bd2 版…

代码编写过程 - 正确率折线图

获取绘图函数 首先&#xff0c;看到需要画acc和loss图。先去参考现成的&#xff0c;于是打开猫12分类&#xff0c;找到生成折线图的地方。 发现框内的两个函数绘制了折线图。既然是作为函数出现&#xff0c;说明已经有一定的封装&#xff0c;考虑能不能把整个函数搬走用。 由…

李宏毅机器学习课程HW03代码解释

作业3任务是将图片进行分类 从官网上下载数据到data文件里面。此外&#xff0c;将代码分为三个模块&#xff0c;分别是dataset,model以及main。 一、dataset模块 此模块作用是读取图片数据。 重要函数&#xff1a;os.path.join(path,x) 将path和x路径组合在一起 #导入库…

接入友盟厂商push通道遇到的坑

目录 调试友盟Push问题的检查清单 客户端、服务端数据协议 客户端接入方式 小米厂商通道 华为厂商通道 魅族厂商通道 VIVO厂商通道 OPPO厂商通道 支持桌面角标的厂商 吐槽一下集成友盟厂商通道时发现的问题 调试友盟Push问题的检查清单 过滤UmengPushAgent开头的日志…

Android集成友盟消息推送SDK

消息推送SDK快速集成&#xff1a; 申请AppKey ——> 接入Push SDK ——> 基础接口引入 ——> 消息推送测试 ——> 接入完成 1.申请AppKey 2.接入Push SDK 1&#xff09;、加入依赖 //友盟push相关依赖(必须)implementationcom.umeng.umsdk:push:6.1.0impleme…

机器学习之手写决策树以及sklearn中的决策树及其可视化

文章目录 决策树理论部分基本算法划分选择信息熵 信息增益信息增益率基尼系数基尼指数 决策树代码实现参考 决策树理论部分 决策树的思路很简单&#xff0c;就是从数据集中挑选一个特征&#xff0c;然后进行分类。 基本算法 从伪代码中可以看出&#xff0c;分三种情况考虑&…

android使用友盟推送注册失败获取不到token accs bindapp error!

使用友盟推送注册失败获取不到token public void onFailure(String s, String s1)的值分别是“-9”和“accs bindapp error!”或者s的值为-11.都是同一个问题 就是主工程&#xff08;除友盟PushSDK 其他的module均看成为主工程&#xff09;so目录与PushSDK下的so目录不一致…

同时集成阿里云旺与友盟推送,初始化失败s:-11,s1:accs bindapp error!的解决办法

在应用中需要同时集成聊天和推送功能&#xff0c;聊天选用阿里的sdk&#xff08;百川云旺&#xff09;&#xff0c;推送选用友盟的pushSDK。 这时候悲剧就出现了&#xff0c;注册友盟的时候报错。 I/com.umeng.message.PushAgent: register-->onFailure-->s:-11,s1:accs …

关于友盟s=-11;s1=accs bindapp error!的解决处理

项目使用了友盟推送之后&#xff0c;在部分手机上出现accs bindapp error&#xff0c;错误码-11的问题&#xff0c;为什么会出现这个问题呢&#xff0c;网上查找了很久&#xff0c;友盟给出的解释是so文件不正确。 具体链接&#xff1a;http://bbs.umeng.com/thread-23018-1-1…

友盟register failed: -11 accs bindapp error!

下载官方Demo后,替换自己的id包名后出现 register failed: -11 accs bindapp error! 经过一番搜索之后,都是说这二种原因 1、检查appkey和secret key是否配置正确&#xff0c;如果正确无误&#xff0c;请看步骤2。2、so文件配置有误&#xff0c;需重新配置&#xff1a; Pus…

阿里无线11.11 | 手机淘宝移动端接入网关基础架构演进之路

移动网络优化是超级App永恒的话题&#xff0c;对于无线电商来说更为重要&#xff0c;网络请求体验跟用户的购买行为息息相关&#xff0c;手机淘宝从过去的HTTP API网关&#xff0c;到2014年升级支持SPDY&#xff0c;2015年双十一自研高性能、全双工、安全的ACCS&#xff08;阿里…

VS2015 realease模式下调试

一、将项目属性设置为Release&#xff0c;生成--->配置管理器&#xff1a; 二、按AltF7&#xff0c;弹出属性页进行设置&#xff1a;

AndroidStudio如何打包生成realease版本的arr包,并上传到Nexus搭建的maven仓库,供项目远程依赖(二)

AndroidStudio如何打包生成realease版本的arr包&#xff0c;并上传到Nexus搭建的maven仓库&#xff0c;供项目远程依赖&#xff08;二&#xff09; AndroidStudio如何打包生成realease版本的arr包&#xff0c;并上传到Nexus搭建的maven仓库&#xff0c;供项目远程依赖&#xff…

AndroidStudio如何打包生成realease版本的arr包,并上传到Nexus搭建的maven仓库,供项目远程依赖(一)

AndroidStudio如何打包生成realease版本的arr包&#xff0c;并上传到Nexus搭建的maven仓库&#xff0c;供项目远程依赖&#xff08;一&#xff09; 背景: 公司之前在eclipse上做开发&#xff0c;写了很多library库供项目依赖使用&#xff0c;现在转AS上了&#xff0c;并用Nexu…