• Torch车牌字符识别-网络搭建(五)


    目录

    1.CNN卷积神经网络的介绍

    2.卷积神经网络识别分类原理

    3.编码

    3.1定义网络

    3.2卷积层

     3.2.1卷积层小结

    3.4前向传播 

     3.5其他

    1.CNN卷积神经网络的介绍

    可以处理多维数据是CNN的重要特征(因为有卷积)

    车牌也是采用三通道进行训练

    先是对一个批次的数据集通过卷积层提取特征

    然后是池化层压缩特征

    然后再卷积再池化

    然后展开输出分类结果

    2.卷积神经网络识别分类原理

    卷积层主要就是对输入特征进行提取

    通过卷积核来实现,卷积核就可以看成一个指定大小的扫描器窗口

    扫描器通过滑动来提取整个图片特征 

    并且将特征送入池化层

    也是滑动窗口实现池化

    最后送入全连接层,输入结果

    所以实际上前面都是在提取特征

    最重要的计算分类还是在全连接层

    3.编码

    3.1定义网络

    卷积神经网络的定义类

    必须要继承module

    打开中文文档

     主页 - PyTorch中文文档

    init构造方法

    然后是super继承父类

    3.2卷积层

    然后是 两个卷积层,用的是Sequential方法(具体见中文文档)

    Sequential是一个时序容器

    可以把卷积层需要的一些操作(比如说relu等)放入Sequential中

    然后模型运行的时候就会按照传入顺序执行这些操作

    在卷积层中

    先是定义了卷积核的卷积核等一些属性

    然后是relu

    和池化层

    因为输入是3通道rgb,所以这里等in _channels是3

    out _channels

     就是卷积核的数量

     然后就是再过一层relu和一层pooling

    nn.MaxPool2d(kernel_size=2)   #维度变换(16,60,40) --> (16,30,20)

     但是这里对输入维度是2对倍数,所以维度/2就是maxpool2d后对输出维度

     3.2.1卷积层小结

     这个网络就是输入是(3*60*40)对Tensor

    然后经过网络变换后:

    上面的笔记看错了conv2的out_channles是32

    所以输出(32,15,10)的tensor

    输出经过线性层给出结果(此结果是24列,代表24哥分类)

    补充一个例子

    1. import torch
    2. import torch.nn as nn
    3. import torch.nn.functional as F
    4. class CNN(nn.Module):
    5. def __init__(self):
    6. super(CNN, self).__init__()
    7. self.conv1 = nn.Sequential(
    8. nn.Conv2d(1,1,kernel_size=5, padding=1,stride=2),
    9. nn.MaxPool2d(kernel_size=3, padding=0,stride=2),
    10. nn.Conv2d(1,1,kernel_size=3, padding=1,stride=1),
    11. )
    12. def forward(self,x):
    13. x = self.conv1(x)
    14. return x
    15. cnn=CNN()
    16. input=torch.randn(1,200,200)
    17. output=cnn.forward(input)
    18. print(output.shape)
    19. #输出大小 = (输入大小 + 2 * padding - kernel size) / stride + 1
    20. '''
    21. 所以上述代码完成的操作是
    22. 输入200*200
    23. conv1 -> (200-5+2)/2+1 = 99
    24. maxpool -> (99-3)/2+1=49
    25. con2 -> (49-3+2)/1+1 = 49
    26. '''

     

    3.4前向传播 

     注意前向传播中有一项.view这是为了将之前conv2输出的(32,15,10)的Tensor拉平为(32*15*10,1)的向量

     以下就是24个分类结果(也可以理解为输出的y的ground truth)

    也就是说,经过前处理的图片输出网络后,会输出一个(1,24)的向量,代表这张图片在24个结果上的最高概率是哪一类 

     3.5其他

    然后就是实例化网络

    然后参照之前的简单的二次函数的网络拟合定义

    1. 先定义优化器
    2. 然后选择损失函数 

    具体的看下图

     4小结

    所以网络实质上就是:

    1. 先写好网络结构(输入到输出所需要经过的网络层)(一些层间的预处理(relu,view等)可以写在网络结构里,也可以写在forward里)
    2. 然后是写好前向传播,在这一部分里,输入到输出的完整流程要体现出来
    3. 定义优化器和损失函数
  • 相关阅读:
    计算机毕设 基于大数据的服务器数据分析与可视化系统 -python 可视化 大数据
    一个Adapter+recycleview实现多种布局,区分布局中
    强大的协作工具 J2L3x,创造出高效敏捷的工作氛围
    Unity坦克迷宫Demo总结
    计算机网络(文章链接汇总)
    判断一个点是否在一个多边形内部
    gptp报文完成时间同步原理
    得帆云“智改数转,非同帆响”-AIGC+低代码PaaS平台系列白皮书,正式发布!
    正则表达式基础知识
    SpringMVC之JSON返回&异常处理机制
  • 原文地址:https://blog.csdn.net/weixin_50920579/article/details/126533500