前言 训练过程主要是指编写train.py文件,其中包括参数的解析、训练日志的配置、设置随机数种子、classdataset的初始化、网络的初始化、学习率的设置、损失函数的设置、优化方式的设置、tensorboard的配置、训练过程的搭建等。

由于篇幅问题,这些内容将分成多篇文章来写。本文介绍参数解析的两种方式。

欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。

一个模型中包含众多的训练参数,如文件保存目录、数据集目录、学习率、epoch数量、模块中的参数等。

参数解析常用的有两种方式。

一种是将所有参数都放在yaml文件中,通过读取yaml文件来配置参数。这种一般用于比较复杂的项目,例如有多个模型,对应多组参数。这样就可以每个模型配置一个yaml文件,里面对应的是每个模型的对应的参数。

另一种是直接在train.py文件中通过argparser解析器来配置。这种一般用于仅一个模型或比较简单的项目中。每次只需要改一两个参数的。

yaml文件解析

yaml语法规则

大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tab键,只允许使用空格。(可以将你的ide的tab按键输出替换成4个空格)
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#表示注释

yaml文件示例

TRAIN:
RESUME_PATH: "/path/to/your/net.pth"
DATASET: ucf24 # `ava`, `ucf24` or `jhmdb21`
BATCH_SIZE: 10
TOTAL_BATCH_SIZE: 128
SOLVER:
MOMENTUM: 0.9
WEIGHT_DECAY: 5e-4
LR_DECAY_RATE: 0.5
NOOBJECT_SCALE: 1
DATA:
TRAIN_JITTER_SCALES: [256, 320]
TRAIN_CROP_SIZE: 224
TEST_CROP_SIZE: 224
MEAN: [0.4345, 0.4051, 0.3775]
STD: [0.2768, 0.2713, 0.2737]
MODEL:
NUM_CLASSES: 24
BACKBONE: darknet
WEIGHTS:
BACKBONE: "weights/yolo.weights"
FREEZE_BACKBONE_2D: False
LISTDATA:
BASE_PTH: "datasets/ucf24"
TRAIN_FILE: "path/to/your/classdataset/trainlist.txt"
TEST_FILE: "path/to/your/classdataset/testlist.txt"

yaml的解析

这里介绍两种方法,一种比较复杂的,像上面这个有两级。解析比较麻烦,代码如下:

import yaml
import argparser
from fvcore.common.config import CfgNode
cfg = CfgNode()
cfg.TRAIN= CfgNode() #每一级都要这样新建一个节点
cfg.TRAIN.RESUME_PATH = "Train"
cfg.TRAIN.DATASET = "ucf24" # `ava`, `ucf24` or `jhmdb21`
cfg.TRAIN.BATCH_SIZE=10
cfg.TRAIN.TOTAL_BATCH_SIZE=128
...
cfg.SOLVER= CfgNode() #每一级都要这样新建一个节点
cfg.SOLVER.MOMENTUM=0.9
cfg.SOLVER.WEIGHT_DECAY=5e-4
... yaml_path = "yaml_test.yaml"
cfg.merge_from_file(yaml_path) #访问方法
print(cfg.TRAIN.RESUME_PATH)

它的麻烦在于需要将所有的元素都初始化一遍,然后通过cfg.merge_from_file(yaml_path)来根据yaml文件更新这些元素。

另一种是比较简单的解析二级的方法。

import yaml
import argparser
with open(yaml_path,'r') as file:
opt = argparse.Namespace(**yaml.load(file.read(),Loader=yaml.FullLoader))
#访问方法
print(opt.TRAIN["RESUME_PATH"])

即第一级是在argparse的Namespace中,可通过点号来访问,第二级仍然是字典的形式。但它简单太多了。如果只有一级的话,直接通过点号就可以了。如果不使用argparse.Namespace,则两级都是字典,直接通过访问字典的形式也可以。

argparser解析

argparser解析的形式一般放在train.py文件的最前面,适用于参数相对比较少,每次只需要改一两个参数的情况。(我本人习惯将它放在其它文件中,例如单独搞一个parser.py或直接放在util.py中,只因为如果放在train前每次都要滑动很长才能到train的部分,相当麻烦)

先来个标准示例

import argparser
def get_args():
parser = argparse.ArgumentParser(description='Training')
parser.add_argument('--color_jitter', action='store_true', help='use color jitter in training')
parser.add_argument('--batchsize', default=8, type=int, help='batchsize')
parser.add_argument('--gpu_ids', default='0', type=str, help='gpu_ids: e.g. 0 0,1,2 0,2')
return parser.parse_args() #使用方法
python train.py
--color_jitter \
--batchsize=16 \
--gpu_ids='0' #访问元素
opt = get_args()
print(opt.batchsize)

这里列举了三种形式,一种是action的,当action='store_true'时,默认是false,在设置参数时直接--color_jitter即可变成True,另外两种如上所示。

下一篇将介绍编写训练过程的训练日志的配置、设置随机数种子、classdataset的初始化、网络的初始化、学习率的设置、损失函数的设置、优化方式的设置等内容。

欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。

CV技术指南创建了一个免费的知识星球。关注公众号添加编辑的微信号可邀请加入。

征稿通知:欢迎可以写以下内容的朋友联系我(微信号:“FewDesire”)。

  1. TVM入门到实践的教程
  2. TensorRT入门到实践的教程
  3. MNN入门到实践的教程
  4. 数字图像处理与Opencv入门到实践的教程
  5. OpenVINO入门到实践的教程
  6. libtorch入门到实践的教程
  7. Oneflow入门到实践的教程
  8. Detectron入门到实践的教程
  9. CUDA入门到实践的教程
  10. caffe源码阅读
  11. pytorch源码阅读
  12. 深度学习从入门到精通(从卷积神经网络开始讲起)
  13. 最新顶会的解读。例如最近的CVPR2022论文。
  14. 各个方向的系统性综述、主要模型发展演变、各个模型的创新思路和优缺点、代码解析等。
  15. 若自己有想写的且这上面没提到的,可以跟我联系。

声明:有一定报酬,具体请联系详谈。若有想法写但觉得自己能力不够,也可以先联系本人(微信号:FewDesire)了解。添加前请先备注“投稿”。

其它文章

招聘 | ​迁移科技招聘深度学习、视觉、3D视觉、机器人算法工程师等多个职位

计算机视觉入门路线

YOLO系列梳理(一)YOLOv1-YOLOv3

YOLO系列梳理(二)YOLOv4

YOLO系列梳理(三)YOLOv5

Attention Mechanism in Computer Vision

从零搭建Pytorch模型教程(三)搭建Transformer网络

从零搭建Pytorch模型教程(二)搭建网络

从零搭建Pytorch模型教程(一)数据读取

StyleGAN大汇总 | 全面了解SOTA方法、架构新进展

一份热力图可视化代码使用教程

一份可视化特征图的代码

工业图像异常检测研究总结(2019-2020)

关于快速学习一项新技术或新领域的一些个人思维习惯与思想总结

从零搭建Pytorch模型教程(四)编写训练过程--参数解析的更多相关文章

  1. 从零搭建Pytorch模型教程(三)搭建Transformer网络

    ​ 前言 本文介绍了Transformer的基本流程,分块的两种实现方式,Position Emebdding的几种实现方式,Encoder的实现方式,最后分类的两种方式,以及最重要的数据格式的介绍. ...

  2. 从零搭建Pytorch模型教程(一)数据读取

    ​  前言  本文介绍了classdataset的几个要点,由哪些部分组成,每个部分需要完成哪些事情,如何进行数据增强,如何实现自己设计的数据增强.然后,介绍了分布式训练的数据加载方式,数据读取的整个 ...

  3. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)

    前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...

  4. tensorflow笔记:模型的保存与训练过程可视化

    tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) tensorflow笔记:多层CNN代码分析 (三) tensorflow笔记:多层LSTM代码分析 ...

  5. tensorflow:模型的保存和训练过程可视化

    在使用tf来训练模型的时候,难免会出现中断的情况.这时候自然就希望能够将辛辛苦苦得到的中间参数保留下来,不然下次又要重新开始. 保存模型的方法: #之前是各种构建模型graph的操作(矩阵相乘,sig ...

  6. [译]Godot系列教程四 - 编写脚本

    编写脚本(Scripting) 简介 关于无需编程即可创建视频游戏的那些工具的谈论有很多.不用学习编程知识对很多独立开发者来说就是一个梦想.这种需求 - 游戏开发者.甚至在很多公司内部,希望对游戏流程 ...

  7. 从零搭建SSM框架(四)手动实现Tomcat部署

    发布War包 Windows环境部署 增加如下配置 <Context path="/" docBase="cnki" debug="0" ...

  8. 利用Tensorboard可视化模型、数据和训练过程

    在60分钟闪电战中,我们像你展示了如何加载数据,通过为我们定义的nn.Module的子类的model提供数据,在训练集上训练模型,在测试集上测试模型.为了了解发生了什么,我们在模型训练时打印了一些统计 ...

  9. Qt零基础教程(四) QWidget详解篇

    在博客园里面转载我自己写的关于Qt的基础教程,没次写一篇我会在这里更新一下目录: Qt零基础教程(四) QWidget详解(1):创建一个窗口 Qt零基础教程(四) QWidget详解(2):QWid ...

随机推荐

  1. html5知识点补充—footer元素的使用

    使用footer元素创建脚注 顾名思义,footer元素通常位于页面的底部.尽管footer通常位于某个区域或者页面的底部,但并非总是如此.footer元素旨在包含作者.网站所有者.版权数据.网站规章 ...

  2. vue引入echarts

    效果图: 1.安装Echarts :     npm install echarts -S 或者使用国内的淘宝镜像: 安装: npm install -g cnpm --registry=https: ...

  3. 动态div点击事件传递对象参数格式-草稿889

    <button type='button' style='border: 1px solid #eeeeee;color: #717070;height: 20px;border-radius: ...

  4. Centos搭建 Git 服务器教程

    搭建 GIT 服务器教程 下载安装 git Git 是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 此实验以 CentOS 7.2 x64 的系统为环境,搭建 git 服 ...

  5. js刷新页面window.location.reload()

    window.location.reload()刷新当前页面 window.parent.location.reload()刷新父亲对象(用于框架) opener.location.reload()刷 ...

  6. 2021.11.02 eleveni的水省选题的记录

    2021.11.02 eleveni的水省选题的记录 因为eleveni比较菜,所以eleveni决定从绿题开始水 --实际上菜菜的eleveni连绿题都不一定能水过/忍不住哭了 [P2217 HAO ...

  7. 开源框架YiShaAdmin如何使用任务计划

    1.在Startup添加 new JobCenter().Start();(红色字体,下同) // This method gets called by the runtime. Use this m ...

  8. 技术分享 | Selenium 测试用例编写

    编写Selenium测试用例就是模拟用户在浏览器上的一系列操作,通过脚本来完成自动化测试. 编写测试用例的优势: 开源,免费. 支持多种浏览器 IE,Firefox,Chrome,Safari. 支持 ...

  9. 攻防世界-MISC:simple_transfer

    这是攻防世界高手进阶区的题目,题目如下: 点击下载附件一,得到一个流量包,用wireshark打开搜索flag无果,无奈跑去查看WP,说是先查看一下协议分级,但是并没有像WP所说的协议的字节百分比占用 ...

  10. HttpServletResponse & HttpServletRequest

    web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse: 如果要获取客户端请求过来的 ...