Easy-Classification-分类框架设计
1. 框架介绍
1.1 框架功能
1.1.1 数据加载
- 文件夹形式
- 其它自定义形式,在项目应用中,参考案例编写DataSet自定义加载。如基于配置文件,csv,路径解析等。
1.1.2 扩展网络
- Resnet系列,Densenet系列,VGGnet系列等所有[pretrained-models.pytorch](https://github.com/Cadene/pretrained-models.pytorch)支持的网络
- [Mobilenetv2](https://pytorch.org/docs/stable/torchvision/models.html?highlight=mobilenet#torchvision.models.mobilenet_v2)
- [Mbilenetv3](https://github.com/kuan-wang/pytorch-mobilenet-v3)
- ShuffleNetV2,[MicroNet](https://github.com/liyunsheng13/micronet)
- [EfficientNet](https://github.com/lukemelas/EfficientNet-PyTorch)
- [Swin Transformer](https://github.com/microsoft/Swin-Transformer)
- [ConvNeXt](https://github.com/facebookresearch/ConvNeXt)
1.1.3 优化器
- Adam
- SGD
- AdaBelief
- AdamW
1.1.4 学习率衰减
- ReduceLROnPlateau
- StepLR
- MultiStepLR
- SGDR
1.1.5 损失函数
- 直接调用PyTorch相关的损失函数
- 交叉熵
- Focalloss
1.1.6 其他
- Metric(acc, F1)
- 训练结果acc,loss过程图片保存
- 交叉验证
- 梯度裁剪
- Earlystop
- weightdecay
- 冻结/解冻 除最后的全连接层的特征层
1.2 框架设计
1.2.1 通用模块设计

|
目录
|
子项
|
功能说明
|
扩展说明
|
|
config
|
|
框架基础配置目录
|
|
|
|
weight
|
预训练权重模型存储目录
|
各种神经网络的模型文件,下载后存储在该目录下
|
|
|
classification_model_enum.py
|
列举出当前分类框架,目前支持的分类神经网络模型。
枚举中的神经网络名称,与配置文件中的名称一样,表示加载对应的网络模型。
|
后续新增网络时,需在该枚举类中注入
|
|
project
|
|
分类框架下的项目应用模块,详细使用参考后续项目应用模块。
|
分类项目目录名称如:验证码识别,简单手写数字识别
|
|
universe
|
|
框架通用模块主目录。
|
后续通用的功能,均可放在该目录下。
|
|
|
data_load
|
基础数据加载类
|
加载训练数据,验证数据,预测数据等
|
|
|
data_load_service.py
|
基于配置文件,加载配置路径下的基础数据,返回对应的张量信息。
不同的分类任务,用户构建DataSet模式不同,该模块提供函数,接收用户构建的DataSet对象。做统一数据加载处理。
|
目前支持目录模式加载。
|
|
|
normalize_adapter.py
|
归一化配置类
|
其他新增网络的归一化参数,可配置在此类中。
|
|
|
model
|
定义目前框架中,支持的所有分类网络模型。
|
新增网络放入到model_category目录下。
|
|
|
model_service.py
|
分类网络模型的对外暴露类,基于配置文件,可指定具体使用哪个分类网络,项目应用时,只需调用moel_service。
moel_service.py:代理者的角色。类似于java中的代理模式。
|
新增的分类网络,要注入到moel_service.py中,对所有分类网络的统一拦截,加日志等功能可在model_service中实现。
|
|
runner_config
|
|
训练配置的目录,定义训练过程中的一些配置信息。
|
定义如优化器,学习率调整,损失函数等。
深度学习运行前,配置相关的模块均可放在该目录下。
|
|
|
optimizer_adapter.py
|
优化器适配类,根据配置文件,可返回一个具体的优化器。
|
常用优化器如:Adam,AdamW,SGD,AdaBelief,Ranger
|
|
|
loss_function_adapter.py
|
自定义损失函数适配类,可基于配置文件,返回一个具体的损失函数。
|
损失函数也可使用 PyTorch中提供的。
|
|
|
scheduler_adapter.py
|
学习率调整适配类,可基于配置文件,返回具体的调整类。
|
扩展支持ReduceLROnPlateau,StepLR,MultiStepLR, SGDR
|
|
utils
|
utils.py
|
常用的工具函数,如加载文件,全连接处理等
|
一些项目通用的工具类函数,如保存acc,loss等记录。
|
|
key字段
|
解释
|
参考值
|
|
model_name
|
分类网络模型名称,如mobilenetv3,efficientnet_advprop,具体值参考ClassificationModelEnum枚举类中定义的值
|
efficientnet_advprop
|
|
GPU_ID
|
多GPU时,设置的GPU编码,无GPU时,该值设置为空
|
0
|
|
class_number
|
目标输出分类数量,如简单数字识别,输出值10
|
10
|
|
random_seed
|
随机数种子
|
43
|
|
num_workers
|
DataLoad加载数据时,是否启用多个线程加载数据
|
4
|
|
train_path
|
训练图像对应的存储目录地址
|
"data/train"
|
|
val_path
|
验证图像对应的存储目录地址
|
"data/val"
|
|
test_path
|
预测图像对应的存储目录地址
|
"data/test"
|
|
pretrained
|
预加载模型权重的文件存储路径,无值时,设置为空‘’
|
'../../out/mobilenetv3.pth'
|
|
save_best_only
|
训练时,是否只保存最优的模型
|
true
|
|
target_img_size
|
图像转换为网络模型对应的目标图像尺寸,如mobilenet v3,接收图为:[224,224]
|
[224,224]
|
|
learning_rate
|
初始化学习率值
|
0.001
|
|
batch_size
|
训练时,DataLoad一次加载数据的批次数量
|
64
|
|
test_batch_size
|
预测时,DataLoad一次加载数据的批次数量
|
1
|
|
epochs
|
训练总次数
|
100
|
|
optimizer
|
优化器类型,枚举值:Ranger,AdaBelief,SGD,AdamW,Adam
|
SGD
|
|
scheduler
|
学习衰减率调整策略,枚举值:default,step,SGDR,multi
|
default
|
|
loss
|
损失函数,若使用pytorch提供的损失函数,可不管该值。使用框架提供的需配置。枚举值:CE,CE2,Focalloss
|
|
|
early_stop_patient
|
提前结束,当后续训练轮次出现N次,acc小于历史值时,就提前结束
|
7
|
|
model_path
|
模型预测时,训练生成的权重文件存储路径
|
'../../out/mobilenetv3_e22_0.97.pth'
|
|
dropout
|
为了防止过拟合,设置值,表示随机多少比例的神经元失效,取值服务[0,1]
|
0.5
|
|
class_weight
|
训练数据类别分配不均匀,防止过拟合等情况出现,设置的惩罚值。默认值设置为None。
|
调用:n.CroEntropyLoss(),设置不同类别的惩罚值,三个类别,如[0.8,0.1,0.1]。
|
|
weight_decay
|
在与梯度做运算时,当前权重先减去一定比例的大小。
|
0.01
|
1.2.2 项目应用模块设计

|
目录
|
子项
|
功能说明
|
扩展说明
|
|
mnist_caassify
|
|
分类项目主目录
|
表示一个具体的分类项目,本例为简单手写数字识别
|
|
|
data
|
该项目的训练数据,验证数据,推理数据等
|
与训练流程,推理流程等相关的数据,包括图片和label等配置信息。
|
|
|
output
|
项目的输出结果
|
训练过程中的acc,loss图,模型权重文件,预测结果等,全部输出到这个目录。
|
|
|
scripts
|
构建训练数据,验证数据等的脚本文件
|
基于脚本文件,生产对应的训练数据,验证数据到data目录下。主要功能如:
1.生产图片,生成label;
2.解析文件,并基于图像做一定的前期调整。清洗训练数据,提前加工部分数据。
|
|
|
service
|
分类任务,主要的项目应用模块,用户自定义代码存储目录。
|
|
|
|
xxx_config.py
|
分类项目的配置文件,每一个分类项目都存在一个单独的配置文件。
|
常用的配置参数,如指定使用什么模型,图像大小调整等,具体参考案例的配置文件
|
|
|
xxx_dataset.py
|
分类项目的数据加载类
|
每个分类任务的数据加载模式不一定完全一样,该模块属于用户自定义模块。可做图像的预处理,最终将图像转换为张量信息。
|
|
|
xxx_runner_service.py
|
分类项目的运行类
|
包括配置运行参数,训练流程定义,预测流程处理等。
|
|
|
train.py,prectict.py
|
训练类,预测类
|
主要是加载配置文件,获取训练数据,加载网络模型,初始化训练过程的配置参数,调用训练函数开始训练。
|
1.3 框架使用
1.3.1 基础使用
- 在project 目录下,创建一个目录作为项目名称,目录名称命名为项目名称,如mnist_classsify。
- 在mnist_classsify目录下,创建一个data目录,用于存储训练,验证,推理等相关的基础数。
- scripts目录,根据实际情况,若项目提前准备好数据了,可不编写。若需要通过一定的脚本预处理训练数据,可在该目录下编写脚本处理。
- 在mnist_classsify目录下,创建一个service目录。
- 编写配置文件,xxx_config.py,配置文件的key值一定要和案例中的配置key名称一样(不然通用模块无法加载)。
- 编写DataSet自定义类,xxx_dataset.py,参考案例中的DataSet类,编写自定义Dataset类时,初始化参数需定义为source_img, cfg。否则数据加载通用模块,data_load_service.py模块会报错。(source_img :传入的图像地址信息集合。基于配置文件,加载文件的路径信息。 cfg:传入的配置类,是配置文件xxx_config.py。)
- 编写项目运行类,xxx_runner_service.py,参考案例中的项目运行类,注意输出张量信息处理,acc计算等根据实际情况调整。
- 编写train.py,prectict.py,参考案例中的代码,加载数据时,传入编写的xxx_dataset类,调用xxx_runner_service.py中提供的训练函数,预测函数即可。
1.3.2 扩展使用
- 在model/model_category目录下,添加对应的网络模型如:test_model.py。
- 在config/classification_model_enum.py文件中,添加新增的网络模型。
- 在model_service.py中,注入新增的网络模型。
- 在配置文件中,配置使用的模型名称,如:test_model。
2. 框架案例介绍
- 简单手写数字识别-参考文章:https://www.cnblogs.com/wlandwl/p/deep_learn_mnist.html
- 验证码识别-参考文章:https://www.cnblogs.com/wlandwl/p/deep_learn_captcha.html
3. 参考文献
Easy-Classification-分类框架设计的更多相关文章
- 偶的《javascript框架设计》终于出版
#cnblogs_post_body p{ text-indent:2em!important; } 历时两年多,我的书终于付梓出版了.应各方面的要求,写软文一篇,隆重介绍一下此书对各位程序员的钱途有 ...
- 基于cocos2d-x的游戏框架设计——李成
视频:http://v.youku.com/v_show/id_XMzc5ODUyMTI4.html?f=17330006 网易科技讯 3月31日,第四届CocoaChina开发者大会暨Cocos2d ...
- Aforge.net 一个专门为开发者和研究者基于C#框架设计
时间过得真快啊,转眼今年就要过去了,大半年都没有写博客了,要说时间嘛,花在泡妹子和搞英语去了,哈哈...前几天老大问我 怎么这么长时间都没写博客了,好吧,继续坚持,继续分享我的心得体会. 这个系列我们 ...
- .NET框架设计—常被忽视的C#设计技巧
.NET框架设计—常被忽视的C#设计技巧 阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你 ...
- 游戏UI框架设计(6): 消息传递中心
游戏UI框架设计(6) --消息传递中心 最近一直忙于一个益智类游戏的研发工作,所以博客有段时间没有更新了.经过朋友的督促,决定这两天立刻完成最后的两篇博客讲解(UI框架).说起“消息传递中心”,或者 ...
- Topic Model的分类和设计原则
Topic Model的分类和设计原则 http://blog.csdn.net/xianlingmao/article/details/7065318 topic model的介绍性文章已经很多,在 ...
- 《开源框架那些事儿22》:UI框架设计实战
UI是User Interface的缩写.通常被觉得是MVC中View的部分,作用是提供跟人机交互的可视化操作界面. MVC中Model提供内容给UI进行渲染,用户通过UI框架产生响应,一般而言会由控 ...
- 自动化测试基础篇--Selenium框架设计(POM)
一.自动化测试框架 感谢木棉花的漂泊分享,内容转自链接:http://www.cnblogs.com/fengyiru6369/p/8053035.html 1.什么是自动化测试框架 简单来说,自动化 ...
- python+selenium之框架设计
一.自动化测试框架 1.什么是自动化测试框架 简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境.自动化测试框架能够提供很多便利给用户高效完成一些事情,例如,结构清晰开发脚本, ...
- Python+Selenium框架设计篇之-什么是自动化测试框架
1.什么是自动化测试框架 简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境.自动化测试框架能够提供很多便利给用户高效完成一些事情,例如,结构清晰开发脚本,多种方式.平台执行脚 ...
随机推荐
- Python 第五次实验
[1] (程序设计)编写程序,将二维列表数据写入 CSV文件(命名为"out.csv"),用逗号隔开.二维列表如下:[['Name','Age','Gender'], ['Bob' ...
- HTTP和Servlet快速入门
目录 1.HTTP 1.1 请求数据格式 1.2 相应数据格式 2.Servlet 3.Servlert的xml配置 1.HTTP 1.1 请求数据格式 请求行:请求数据的第一行 包含三个内容,按顺序 ...
- [Python]-pandas模块-机器学习Python入门《Python机器学习手册》-02-加载数据:加载文件
<Python机器学习手册--从数据预处理到深度学习> 这本书类似于工具书或者字典,对于python具体代码的调用和使用场景写的很清楚,感觉虽然是工具书,但是对照着做一遍应该可以对机器学习 ...
- fastapi快速入门
fastapi是高性能的web框架.他的主要特点是: 快速编码 减少人为bug 直观 简易 具有交互式文档 基于API的开放标准(并与之完全兼容):OpenAPI(以前称为Swagger)和JSON ...
- centos yum安装docker
cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo_bak wget -O /etc/yum.repos.d/CentOS-Base.r ...
- PAT (Basic Level) Practice 1022 D进制的A+B 分数 20
输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数. 输入格式: 输入在一行中依次给出 3 个整数 A.B 和 D. 输出格式: 输出 A+ ...
- 关于Azure-AzCopy在Linux环境下的安装
关于Azure云中有一个AzCopy工具,它 是一个命令行实用工具,支持各种操作系统 AzCopy可以用于向存储帐户复制上传文件,也可以从存储账号下载文件到本地 这里笔者主要记录一下在Linux-x8 ...
- OSS对象存储
OSS对象存储 当项目以微服务搭建时,多个服务往往运行在多台服务器上,此时针对存储文件的获取和保存,难以确定具体的位置: 针对这个问题,一般有两个办法: 搭建独立的文件存储服务器,用 FastDFS等 ...
- TF-GNN踩坑记录(一)
引言 Batch size作为一个在训练中经常被使用的参数,在图神经网络的训练中也是必不可少,但是在TF-GNN中要求使用 merge_batch_to_components() 把batch之后的图 ...
- MFC-创建MFC图形界面dll
创建MFC图形界面dll 概述: 利用MFC的DLL框架,制作带有图形界面的dll,可以实现很多功能. 流程: 选择静态链接MFC DLL:以免有的库没有. 采用该框架创建的MFC,会自动生产一个MF ...