paddlepaddle-VisualDL2.0对项目进行可视化调参

如果需要更好的阅读体验,可以在ai studio上fork该项目:使用VisualDL2.0对项目进行可视化调参

调参是深度学习必须要做的事情。数据和模型处理好后,需要进行模型训练,这个时候就需要进行调参了。一种好的参数配置,可以使得训练出来的模型在测试集上表现出很好的效果。可是要如何调呢?这里用飞桨(paddlepaddle深度学习框架)

我们通常说的调参是指调整超参数这些,例如:

  • 先给他个设置一个不大不小的epoch,和一些其他超参数,例如epoch=10?然后跑一下,每多少iter(batch步数)打印一次loss看看,这其实是很不直观的,得一条条输出看过去。
  • batch_size给个32?还是64?又或者更大更小?大的batch容易收敛,可是又容易陷入局部最小值(鞍点);小的batch训练的模型鲁棒性好,可是又难收敛!
  • 学习率先给个0.01,观察loss,如果loss上升就说明loss过大,给他减小到0.001?又或者0.005之类。如果loss下降很慢,这个时候是否考虑给他增大学习率呢?学习率衰减使用哪些策略比较好呢?是选择分段衰减?还是按按步数衰减之类?等等…
  • 这些超参数都是需要尽可能的去试,在不同模型和数据上这些参数选择哪种是比较好的,都是不确定的(也就是所谓炼丹了)。
  • 显而易见调参这项工作是十分的耗费费时间和资源的,如果可以快速找到这些最好的参数,可以节约很多时间和算力资源。这也是本文的主要问题:如何进行高效的调参?这里推荐使用VisualDL工具进行可视化分析
  • PaddleSeg是基于PaddlePaddle开发的端到端图像分割开发套件,覆盖了DeepLabv3+, U-Net, ICNet, PSPNet, HRNet, Fast-SCNN等主流分割网络。通过模块化的设计,以配置化方式驱动模型组合,帮助开发者更便捷地完成从训练到部署的全流程图像分割应用。
  • 本文将使用paddleSeg套件实现一个语义分割项目,并用VisualDL工具对其参数进行可视化分析,以可视化的形式帮助开发者清楚了解这些参数的变化情况。
下载安装命令## CPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle## GPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu

项目内容

  • 一.对数据进行一些处理以及简单配置一下paddleSeg中提供的模型的参数
  • 二.训练模型,期间调整一些超参数/参数
  • 三.使用VisualDL2.0工具进行可视化
  • 四.总结

一.数据和配置准备:

  • 数据这里采用第八届CCF BDCI遥感影像地块分割的初赛数据集,由于数据比较多,语义分割训练较慢,我们这边只是为了观察vdl的使用。因此,我们就从这14万张训练集里划分出一万张来作为我们的训练集。模型使用deeplabv3+exception65(轻量级网络)
#下载paddleSeg
!git clone https://hub.fastgit.org/PaddlePaddle/PaddleSeg.git

#配置
%cd PaddleSeg
!pip install -r requirements.txt

%cd PaddleSeg/
#下载预训练模型
!python pretrained_model/download_model.py deeplabv3p_xception65_bn_coco

#将数据集解压到PaddleSeg路径下,如果在本地运行,注意更改data/data55400/
!unzip data/data55400/img_train.zip -d PaddleSeg/dataset/rs_data
!unzip data/data55400/lab_train.zip -d PaddleSeg/dataset/rs_data

#为了方便训练,从14万张数据集中划分出1万张作为数据集,这边已经划分好了,如果想用完整数据集,或者进行一些数据增强操作,可以在下面代码基础上修改
%cd PaddleSeg/dataset/rs_data
%mkdir new_img
%mkdir new_lab
import os.path
import glob
import cv2
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
import numpy as np
from PIL import Image, ImageEnhance, ImageDrawnums_id = 0#计数器
with open("train_list.txt", "w", encoding='utf-8') as f1:#训练集with open("val_list.txt", "w", encoding='utf-8') as f2:#验证集with open("test_list.txt", "w", encoding='utf-8') as f3:#测试集for file1 in glob.glob(r'lab_train/*.png'):nums_id += 1#原文件保存路径path1, pngfile = file1.split()[0], file1.split("/")[1]path2, jpgfile = "img_train", pngfile.split(".")[0] + ".jpg"file2 = os.path.join(path2, jpgfile)#新文件保存路径new_file1 = os.path.join("new_lab", pngfile)new_file2 = os.path.join("new_img", jpgfile)##遍历lab_train下的png图片,复制1万张到另一个文件夹new_lab下'''img1 = cv2.imread(file1,flags=-1)cv2.imwrite(new_file1, img1)#'''img1 = Image.open(file1)img1.save(new_file1)#保存图片,用PIL读取png图片##对应的img_train目录下的1万张jpg图片,也复制到一个新文件夹new_img下img2 = cv2.imread(file2)cv2.imwrite(new_file2, img2, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])#保存图片#保存list文件if nums_id <= 900:f1.write(new_file2 + " " + new_file1 + "\n")#生成训练集列表else:f2.write(new_file2 + " " + new_file1 + "\n")#生成验证集列表if nums_id > 9980:f3.write(new_file2 + "\n")#生成测试集列表,用于可视化数据,就取最后20张#打印进度if nums_id %100 == 0:print("处理到:",nums_id)if nums_id == 1000:break
%cd ../../

二.开始训练:打印loss等信息(正常的观察模型训练情况的方式)以及保存日志文件(用于VDL可视化显示训练情况)

  • 训练过程中,设置参数:–use_vdl(使用vdl) --vdl_log_dir “vis”(指定日志保存的路径)
#进入到PaddleSeg路径下,如果在终端运行,需要删去代码前面符号。
%cd PaddleSeg
!python pdseg/train.py --cfg ../work/deeplabv3.yaml --use_gpu  --use_vdl --do_eval --vdl_log_dir "vis5"

三.使用VDL可视化分析训练过程的各参数变化情况

1.训练完后(训练过程中也可以动态查看),如何使用vdl可视化查看数据变化呢?

2.完成准备工作后,我们就可以进行可视化了!

训练过程中就打开vdl,观察数据在训练过程中的动态变化情况

3.查看模型结构:使用deeplabv3p_xception65模型训练,选择模型文件,然后打开vdl,就可以查看模型结构了

  • 如果想看自己搭的一个模型结构图,那么也可以不需要自己去辛苦画了,直接vdl打开,跑一下,就可以显示出来啦!用处多多,有待挖掘!

4.我们还可以分成多组实验,观察不同超参数下,loss等数据的变化情况,在一张图上展示出来

  • 从最简单的来:学习率
    • vis1:lr1=0.01
    • vis2:lr2=0.02
    • vis3:lr3=0.05

  • lr1、lr2、lr3在步数(横坐标)为280的时候,miou分别为0.49357,0.43952,0.2408,可以帮助我们分析学习率衰减情况对miou提升的影响。对于某一阶段的miou如果是单纯看打印信息,是基本上都是没显示的,使用vdl后可以看任意阶段的数值变化。Relative是训练到该位置的时间,通过这个参数可以查看训练多少步数,需要多长时间,调参时候可以先跑几个epoch,就可以较为准确的算出一个训练一个epoch要多长时间,方便我们调整总epoch数的设置。

5.查看数据集

  • 在aistudio环境中查看图片其实不太方便的,不过很多和我一样的小伙伴们又得用aistudio上的gpu环境,这个时候怎么办呢?就可以用我们的vdl工具了,直接可视化出来你要看的一部分数据,想看哪些看哪些!
  • log日志在vis4中
  • 要在vdl查看数据集的话,需要配置deeplabv3.yaml文件中的一个参数:VIS_FILE_LIST: "./dataset/rs_data/test_list.txt"
  • 会在训练过程中保存模型时候打印一次,如果不想打印/在vdl中查看数据,可以将此参数设置为None:VIS_FILE_LIST: None

四.总结

  • 在训练过程中,也有打印loss等信息,可是训练多个epoch的话,打印的信息会非常多,每一条挨个看过去是非常累的。使用VDL2.0工具,可以将这些信息用几张图片展示出来,鼠标移动到图上,数据也会动态显示,可以帮助开发者们去更好的分析模型的一些情况。目前VisualDL2.0工具有6大功能,支持多个框架的模型可视化。
    • 标量数据的展示
    • 直方图
    • 样本数据
    • 网络结构
    • P-R曲线
    • high dimensional
  • 最后,欢迎大家去VDL GitHub上点个star鸭!!
    • github首页:https://github.com/PaddlePaddle/VisualDL
    • 官网:https://www.paddlepaddle.org.cn/paddle/visualdl
    • aistudio项目:【VisualDL2.0–眼疾识别训练可视化】https://aistudio.baidu.com/aistudio/projectdetail/502834
    • aistudio项目:【VisualDL2.0–基于「手写数字识别」模型的全功能展示】https://aistudio.baidu.com/aistudio/projectdetail/622772
    • aistudio论坛:https://ai.baidu.com/forum/topic/show/960053?pageNo=2
下载安装命令## CPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle## GPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一、二次实训作业

1.编写程序&#xff1a; 声明一个整型变量a&#xff0c;并赋初值5&#xff0c;在程序中判断a是奇数还是偶数&#xff0c;然后输出判断的结果。 package 判断奇偶; public class liux { public static void main(String[] args){ int x5; if(x%20){ System.out.println("这…

推荐一款作图工具

以前看到别人的时序图觉得好好看&#xff0c;然后就想这都是用的什么工具画出来的呢&#xff1f;然后看到了一个师兄用的这个工具&#xff0c;真的挺好用的。这是是试用版的界面。类图我觉着看起来效果都挺不错的。转载于:https://www.cnblogs.com/tuhooo/p/8874410.html

【codeforces】【比赛题解】#849 CF Round #431 (Div.2)

cf的比赛越来越有难度了……至少我做起来是这样。 先看看题目吧&#xff1a;点我。 这次比赛是北京时间21:35开始的&#xff0c;算是比较良心。 【A】奇数与结束 "奇数从哪里开始&#xff0c;又在哪里结束&#xff1f;梦想从何处起航&#xff0c;它们又是否会破灭呢&#…

PaddleDetection支持的数据格式

PaddleDetection支持的数据格式 目前#PaddleDetection支持43种数据格式&#xff1a;coco voc widerface。在这里我们主要说明一下如何使用自定义COCO进行目标检测、实例分割&#xff1b;如何使用自定义VOC数据集进行目标检测。在PaddleDetection新的版本中&#xff0c;我们将数…

[dts]Device Tree机制【转】

转自&#xff1a;https://www.cnblogs.com/aaronLinux/p/5496559.html 转自&#xff1a;http://blog.csdn.net/machiner1/article/details/47805069 ------------------Based on linux 3.10.24 source code 参考/documentation/devicetree/Booting-without-of.txt文档 目录 1.…

AntiSamy测试

AntiSamy为owasp针对xss提供的处理库&#xff0c;可以配置xml策略来决定过滤的内容&#xff0c;比如标签、属性、css等&#xff0c;自定义策略给开发人员使用成本比较高&#xff0c;AntiSamy也提供了几个内置的策略&#xff0c;其安全级别也不同&#xff0c;过滤的内容也不一样…

SoJpt Boot 2.2-3.8 发布,Spring Boot 使用 Jfinal 特性极速开发

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 在Spring Boot框架下使用Jfinal特性极速开发,可以在Spring Boot中向使用Jfinal一样使用Enjoy、Aop、Controller等一系列方法(如: getFile(), renderFile....),以及ActiveRecord SoJpt Boot&…

3轴机器人各关节运动学建立,python编程,非常容易理解

分类&#xff1a;机器人学 一、问题描述 如右图所示的三自由度机械臂&#xff0c;关节1和关节2相互垂直&#xff0c;关节2和关节3相互平行。如图所示&#xff0c;所有关节均处于初始状态。 要求: (1) 定义并标注出各关节的正方向&#xff1b; (2) 定义机器人基坐标系&#x…

Win 10 源码一览:0.5T 代码、400 万文件、50 万文件夹

Windows 操作系统本身是不开源的&#xff0c;但是近日微软内核工程师 Axel Rietschin 发表了一篇博客&#xff0c;带大家一窥了 Windows 10 内核的魅力。 Axel 介绍&#xff0c;Windows 10 与 Windows 8.x、7、Vista、XP、2000 和 NT 的代码库是相同的&#xff0c;其中每一代都…

JDK+Tomcat搭建JSP运行环境--JSP基础

一、搭建JSP运行环境之前需要了解的基本知识 配置JSP运行环境之前&#xff0c;我们需要了解JSP的运行机制。只有了解JSP运行机制后&#xff0c;我们才能知道为什么要搭建JSP运行环境?如何去搭建JSP运行环境?为什么要配置Tomcat、JDK&#xff1f; JSP(Java Sever Page)即Java服…

Docker容器的自动化监控实现

本文由 网易云 发布。 近年来容器技术不断成熟并得到应用。Docker作为容器技术的一个代表&#xff0c;目前也在快速发展中&#xff0c;基于 Docker的各种应用也正在普及&#xff0c;与此同时 Docker对传统的运维体系也带来了冲击。我们在建设运维平台的过程中&#xff0c;也需…

人工智能实战小程序之语音_前端开发

1. 人工智能实战小程序之准备工作 2. 人工智能实战小程序之语音_前端开发 今天这部分主要讲小程序前端功能的开发由于我偏后端&#xff0c;css是我的弱项&#xff0c;可能很多人和我一样开发小程序不知道如何下手&#xff0c;希望本篇文章对你有帮助我的学习路线是&#xff1a;…

当TFS/VSTS遇上Power BI

引言众所周知&#xff0c;要对TFS进行深入的图表分析&#xff0c;往往需要依赖于SQL Server Analysis Service和SQL Server Reporting Service。虽然随着TFS对敏捷项目的支持&#xff0c;内置了诸如累积流图、燃尽图等快捷图表&#xff1b;并且在最新的版本中还可以在仪表盘和查…

HashMap深度解析:一文让你彻底了解HashMap

写在前面HashMap是Map族中最为常用的一种&#xff0c;也是 Java Collection Framework 的重要成员。本文首先给出了 HashMap 的实质并概述了其与 Map、HashSet 的关系&#xff0c;紧接着给出了 HashMap 在 JDK 中的定义&#xff0c;并结合源码分析了其四种构造方式。最后&#…

python_线程、进程和协程

线程 Threading用于提供线程相关的操作&#xff0c;线程是应用程序中工作的最小单元。 1 #!/usr/bin/env python2 #codingutf-83 __author__ yinjia4 5 6 import threading,time7 8 def show(arg):9 time.sleep(2) 10 print(线程: str(arg)) 11 12 for i in range(…

第四章:手机平板要兼顾-探究碎片

碎片是什么&#xff1f; 碎片&#xff08;Fragment&#xff09;是一种可以嵌入在活动&#xff08;Activity&#xff09;中的 UI 片段&#xff0c;它能让程序更加合理和充分的利用大屏幕的空间&#xff0c;因而在平板上应用的非常广泛。 碎片的使用方式 静态嵌入动态加载碎片和活…

Android Studio 3.4增可视化资源管理工具 可管理和预览项目资源

经过6个月的开发时间&#xff0c;网络大厂17日发布了最新版的App开发IDE Android Studio 3.4&#xff0c;现在就能够下载使用&#xff0c;除了有超过300个错误修护和稳定度增强之外&#xff0c;在开发、建置和测试App阶段&#xff0c;都推出了一些小的新功能和工具&#xff0c;…

[IoC容器Unity]第三回:依赖注入

上节介绍了&#xff0c;Unity的Lifetime Managers生命周期&#xff0c;Unity具体实现依赖注入包含构造函数注入、属性注入、方法注入&#xff0c;所谓注入相当赋值&#xff0c;下面一个一个来介绍。 2.构造函数注入 Unity利用Resolve方法解析一个对象&#xff0c;都是调用注册类…

Apache CarbonData 1.5.0编译及安装

2019独角兽企业重金招聘Python工程师标准>>> 一、编译环境描述 OpenStack创建五个虚拟机&#xff0c;其中1个主节点&#xff08;hostname为bigdatamaster&#xff09;&#xff0c;4个从节点&#xff08;hostname分别为&#xff0c;bigdataslave1、bigdataslave2、bi…

Filter介绍

Filter 可认为是 Servlet的一种 “ 加强版 ”&#xff0c;它主要用于对用户请求进行预处理&#xff0c; 也可以对HttpServletResponse 进行后处理&#xff0c;是个典型的处理链。Filter 也可对用户请求生成响应&#xff0c;这一 点与Servlet 相同&#xff0c; 但实际上很少会使…