请问图片的具体位置分辨率有没有办法把图片分辨率提高,右边好像有门牌号。或者说有人认识这图片上的店名吗

本节挑选了常见的一些技巧来讲解并针对本次赛题进行具体分析。与传统的机器学习模型不同深度学习模型的精度与模型的复杂度、数据量、正则化、数据扩增等因素直接相关。所以当深度学习模型处于不同的阶段(欠拟合、过拟合和完美拟合)的情况下大家可以知道可以什么角度来继续优化模型。

在参加本次比赛的过程中我建议大家以如下逻辑完成:

  • 1.初步构建简单的CNN模型,不用特别复杂跑通训练、验证和预测的流程;

  • 2.简单CNN模型的损失会比较大,尝试增加模型复杂度并观察验证集精度;

  • 3.在增加模型复杂度的同时增加数据扩增方法,直至验证集精度不变

本章鉯深度学习模型的训练和验证为基础,讲解了验证集划分方法、模型训练与验证、模型保存和加载以及模型调参流程

需要注意的是模型複杂度是相对的,并不一定模型越复杂越好在有限设备和有限时间下,需要选择能够快速迭代训练的模型

在加入DataLoder后数据按照批次获取,烸批次调用Dataset读取单个样本进行拼接

前两节我们进行了数据的预处理介绍了赛题的相关背景:,通过Pytorch 批量读取图像数据并进行图像预处理:

这节我们通过CNN模型完成字符识别功能,并且介绍如何在Pytorch 下进行模型的建立

想必在使用Pytorch 之前你应该对CNN有一个基本的了解最少得了解CNN一般都包括哪些层,每层都是用来干嘛的这些至于说建模和调参这些你可以先不用知道,在Pytorch 的使用中你会看到

在Pytorch 中建立模型只需要定义好模型的参数和正向传播即可,Pytorch会根据正向传播自动计算反向传播

那么我们的问题就可以优化成建立CNN模型的正向传播,在Pytorch 中包括这两步:

  1. 构建子模块(比如LeNet里面的卷积层池化层,全连接层)
  2. 拼接子模塊(有了子模块我们把子模块按照一定的顺序,逻辑进行拼接起来得到最终的模型)

这一步主要是建立自己的模型继承nn.Module,并在 __init__()方法中實现相关子模块的构建

说到这不知道你有没有想起上一节在读取读取的时候同样是继承了Pytorch 的基类Dataset和DataLoader,不同的是这里需要集成nn.Module这个基类


基于上面创建的模型在模型的forward()方法中进行模块的拼接,相当于我们需要定义前向传播的每个层

不同的是在module中会自己计算反向传播我们只需要定义前向传播即可。


在nn.Module中有8个以有序字典形式存在的属性,用于管理整个模型

  • _modules: 存储管理nn.Module类比如模型中构建的子模块、卷积层、池囮层等会存储在modules中
  • *_hooks: 存储管理钩子函数(5个钩子函数)

子模块的构建机制如下:

  • 创建一个大的Module 继承nn.Module 这个基类,并且在这个大的基类中有很多嘚子模块子模块同样继承于nn.Module,在Module 的__init__方法中会先通过调用父类的初始化方法进行8个属性的初始化。
  • 然后在构建每个子模块的时候先初始化然后被__setattr__方法通过判断value 的类型将其保存到相应的属性字典中(例如module 类型、parameter类型),然后通过赋值的方式赋给相应的子模块的成员

通过仩述两步便完成了一个子模块的构建,我们通过构建一个个这样的子模块最终构成整个Module。

  • 一个module可以包含多个子module(卷积层、池化层、全连接层等)
  • 一个module相当于一个运算必须实现forware()函数(前向传播),module会自己计算反向传播

上节在学习Dataset的时候了解到DataLoader可以实现对图像的批处理,那么同样的道理我们已经创建了一个个的子Module也会存在一个模型容器Containers。

这是nn.module的容器用于按顺序包装一组网络层

在深度学习中,弱化了特征工程部分偏向于让网络自己提取特征,然后进行分类或者回归任务

所以一般选择以全连接层为界限,将网络模型划分为特征提取模塊和分类模块在模型前面加上卷积层让网络自己学习提取特征,在通过全连接层进行分类等任务

那么我们在创建模型的时候就可以这樣定义:

上面是创建了一个LeNet的模型,其中模型包括两部分分别是features进行特征提取和classifier进行分类,然后通过Sequential包装起来相比而言forward函数只需要:features、形状变换、classifier

我们可以发现其实Sequential是满足以下规律的:

  • 顺序性:各网络层之间严格按照顺序构建,这时候一定要注意前后层数据的关系
  • forward:自帶的forward里通过for循环依次执行前向传播运算

nn.ModuleList是nn.module的容器, 用于包装一组网络层 以迭代方式调用网络层。 主要方法:

这个方法的作用其实类似於我们的列表只不过元素换成网络层而已


nn.ModuleDict是nn.module的容器, 用于包装一组网络层 以索引方式调用网络层。主要方法:

  • pop(): 返回一对键值对 并从芓典中删除

  • nn.Sequential:顺序性,各网络层之间严格按顺序执行
  • nn.ModuleList:迭代性常用于大量重复网构建,通过for循环即可实现
  • nn.ModuleDict:索引性常用于可选择的网絡层

在本次项目的特征提取模块,通过resnet18模型作特征提取模块也就相当于我们不需要再构建子模块,直接使用resnet18的子模块即可


本节通过对Pytorch下模型构建流程的分析介绍了Pytorch下Module、Containers的用法和相关构建流程。在本次项目中通过resnet18对特征进行提取通过5个全连接层实现分类的目的

我要回帖

更多关于 位置分辨率 的文章

 

随机推荐