码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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. 定义优化器和损失函数
  • 相关阅读:
    Linux安装PHP(最新版)
    DeepFace【部署 01】轻量级人脸识别和面部属性分析框架安装使用详解(网盘分享模型文件)
    js 图形操作一(兼容pc、移动端实现 draggable属性 拖放效果)
    OpenCV之怀旧色、冰冻滤镜、熔铸滤镜
    通讯网关软件012——利用CommGate X2OPC实现MS SQL数据写入OPC Server
    竞赛抢答器4路抢答器verilog,仿真视频、代码、AX301开发板
    天图资本通过香港上市聆讯:上半年利润下滑24%,王永华为董事长
    文献速递:深度学习肝脏肿瘤诊断---基于深度学习的表型分类重新划分联合肝细胞胆管癌
    为什么别人年薪30W+?同样为测试人,“我“的测试之路...
    计算机毕业设计django基于python企业资产管理系统(源码+系统+mysql数据库+Lw文档)
  • 原文地址:https://blog.csdn.net/weixin_50920579/article/details/126533500
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号