问题链接:https://www.zhihu.com/question/384519338,本文来自知乎问答,回答已获作者授权,禁止二次转载。

一、Fing

https://www.zhihu.com/question/384519338/answer/1160886439

wandb,weights\&bias,最近发现的一个神库。

深度学习实验结果保存与分析是最让我头疼的一件事情,每个实验要保存对应的log,training curve还有生成图片等等,光这些visualization就需要写很多重复的代码。跨设备的话还得把之前实验的记录都给拷到新设备去。

wandb这个库真是深得我心,只要几行代码就可以把每一次实验打包保存在云端,而且提供了自家的可视化接口,不用每次都自己写一个logger,也省掉了import matplotlib, tensorboard等一大堆重复堆积的代码块。

最关键的是,它是免费的:)

https://github.com/wandb/client

二、Jeremy Zhou

https://www.zhihu.com/question/384519338/answer/1152322804

推荐一个基于PyTorch的Deep Learning框架PyTorch Lightning。

https://github.com/PyTorchLightning/pytorch-lightning

经过我的试用,这个框架现在优点很多,使用方便,节省大量时间,让用户只需要关注模型和数据。

1. 不再需要关注很多无关但必要的繁杂细节,例如控制训练流程、保存模型checkpoint、fp16支持、多机多卡训练、梯度累计等等。这些东西全部由框架实现。

2. 对于一般的模型训练,只需要关注模型设计和数据读取。模型部分就不谈了。对于数据读取,除了具体的读数据,只需要写一个如何将多个instance打包成一个batch的函数即可。

3. 扩展性强。这是我认为这个框架最优秀的地方。PyTorch实际上有很多不同的框架,但是增加的易(无)用(脑)性的同时,其扩展性往往大打折扣。PyTorch Lightning对于这点的处理很好。可能某高级炼金术师不止需要控制模型设计和数据读取,而是想要进行更精细的控制,例如学习率的自定义调节。PyTorch Lightning也通过hook的方式提供了支持,几乎所有常见的可以插入自定义控制流程的地方都可以使用hook进行更精细的控制。

下面说说缺点:

1. 老生常谈的第一点,对于某些国家炼金术师,他们想要控制每一个细节,那么PyTorch Lightning可能无法提供支持。但是我觉得这些人也没必要用这个,自己从头写最好了。

2. 框架还处于高频更新中,可能前后版本存在兼容性问题。甚至有一些小坑。

三、金天

https://www.zhihu.com/question/384519338/answer/1150941204

谢药。

来推广一波我的Alfred库,首先请大家pip安装一波:

sudo pip3 install alfred-py

然后是Github链接:

https://github.com/jinfagang/alfred

这个库目前有143个star,30个fork,看完觉得有用的老铁记得回过头来三连(疯狂暗示)。

alfred是什么

这是个啥库?这里贴一个github官方的定义:

英文不大好,大概意思是这是一个lib,同时也是一个tool,你只要安装了上面的命令,你就可以在terminal召唤alfred了!

大家安装完了使一下??

alfred -h

是不是感觉很顺手?到目前为止大家还是不知道alfred是干啥的。但是你看看-h应该会看到一大堆指令。我感觉alfred里面*最装比,最牛x,最掉炸天的应该是visualize你的任何格式的标注数据*.

曾几何时,我都有这样的需求:我有一堆数据,目标检测或者实力分割的,它是VOC或者coco的format,我每次想可视化一下,看看数据有没有标错,都需要自己写脚本,很麻烦。现在有了alfred,你要可视化VOC,只需要:

alfred data vocview -i JPEGImages/ -l Annotations/

简单吗?只要把图片路径和标注路径穿过去即可。然后你就可以看到了:

就可以可视化出来了。请注意,你标注和图片放在同一个文件夹也是可以的噢,很鲁帮性的哦。

这其实没啥,当然coco的数据集也是一样的,这里我不做过多的演示。我想要介绍的alfred里面一个很神奇的功能,也是十分牛逼的功能:

*各式各样的画box的函数*.

你还在为box烦恼吗?每次做完一个检测模型,画框的代码我觉得很麻烦,虽然复制粘贴很爽,但不是那么的优雅。而在alfred里面,你可以很方便的画bounding box:

比如这个box的API,大概代码如下:

from alfred.vis.image.det import visualize_det_cv2_part``from alfred.vis.image.get_dataset_label_map import coco_label_map_list``boxes = b.pred_boxes.tensor.cpu().numpy()``scores = b.scores.cpu().numpy()``classes = b.pred_classes.cpu().numpy()``visualize_det_cv2_part(ori_img, scores, classes, boxes, class_names=coco_label_map_list, thresh=0.16, is_show=True)

你只要把box,scores,和classes传进去就可以了,甚至你连coco的labelmap你都可以省掉去了歪!然后出来的效果就是上图所示,所有的画框,score大小的抑制,颜色都可以自动帮你处理。

当然这不是说alfred里面的画框多牛逼,也有很多其他的好用的画框库,但我想说的不是某个库不行,而是在座的库都是...... 2D框好画,3D框你行吗?

很多人以为alfred只是一个image相关的库,图样图森破,那衣服。点云照样处理!

甚至可以给你在点云上画3D的Boundingbox,还不够,甚至可以帮助把点云里面的3D box投影到图片显示。。。

好了,介绍到这里大家应该知道alfred库是干啥的吧。案例一个十分好用的snippet,来自于alfred。我们每次写pytorch的代码,都喜欢托裤子放屁:

if use_cuda: a = a.cuda()

实际上使用alfred你可以防止这种不优雅的if操作:

from alfred.dl.torch.common import device``a = a.to(device)

虽然代码函数差不多,但是你只需要import一句,任何变量都可以使用,简化的代码就不止一行了。

最后告诉大家alfred它不是一个专注pytorch的库,如果你用tensorflow,你照样可以用它的一些API去简化你的操作。譬如tensorflow烦人的log,你不用设置环境变量也可以去掉它:

from alfred.dl.tf.common import mute_tf()``mute_tf()``import tensorflow as tf

然后整个世界就清净了许多。

alfred的彩蛋

其实要说彩蛋,那其实很多,挑比较有意思的将,其实alfred还有一个爬虫功能,当你需要某些图片的时候可以让alfred给你爬:

alfred scrap image -q '美女'

然后你就有了一堆美女。。。图片。。

最后alfred其实有一个兄弟库,纯C++编写的,功能差不多,只不过C++里面也有很多人烦人的操作,用thor就可以让世界安静:

https://github.com/jinfagang/thor

四、董鑫

https://www.zhihu.com/question/384519338/answer/1123898006

”工欲善其事, 必先利其器“

今天介绍的是 NVIDIA 推出的一款专门用于记录深度学习调 (lian) 参 (dan) 的工具,runx。(为即将的新东家打免费广告了,哈哈)

https://github.com/NVIDIA/runx

runx非常的新,大概是五天前正式开源的。正好在 Github 上面看到,感觉挺有意思的,就拿来仔细的看了一下。这篇文章也应该是中文全网第一个介绍这个工具。

简单来说,runx 生来就是用来方便深度炼丹师记录各种实验数据的。

因为深度学习里面,一个大模型一跑少则几个小时,多则几天或者几个星期,如果没有很好的把已经跑过实验很好的记录下来,会是一件非常低效而且恼火的事情。

我在我之前的文章也介绍过一些方便记录实验数据的小方法,比如:

https://zhuanlan.zhihu.com/p/112583368

而 runx 则更像是把各种常用的工具做了一个集合,可以把他理解为深度学习炼丹中的”瑞士军刀“。工具很小,本身也很简单简洁,但是很多时候可以给你很大方便。

目前 runx 的文档还很不全,我先来介绍他的一个用法—- 记录实验输出及方便的Tensorboard记录

主要用的是 runx 下面的子模块,runx.logx。

logx.initialize

在实验开始前进行一些必要的设置。

logx.initialize(logdir=args.logdir, coolname=True, tensorboard=True, hparams=vars(args))

上面就是定义了:

logdir 把所有保存的结果存在哪。如果指定的文件夹不存在,会自动的新建,不用再手动的 os.makedirs(logroot, exist_ok=True) 了哦。方便\~

tensorboard是否开启 tensorboard 记录。这个也很方便,不用再手动的 writer = SummaryWriter()了哦。方便\~

global_rank分布式训练的时候,防止多个输出,自动只log rank=0,不用自己写判断了哦。方便\~

coolname是否在 logdir下面再新建一个随机命名的文件夹来用 logging(这样你可以在 logdir下面存一些除了logging之外的东西,方便分类)。随机命名的文件夹的画风是这样的 industrious-chicken, arrogant-buffalo,哈哈哈哈哈。

hparams把所有的超参数都存起来,功能和我上面推荐的文章基本一样,虽然砸了我上面文章的”饭碗“,但是不得不说,方便\~

eager_flush如果每次 tensorboard 写的东西比较多,那就把这个打开,以防因为IO太快没写上。(有些服务器开启了IO限制,经常会遇到实际没写上的情况,建议常开)

logx.msg()

把你程序之前 pirnt都换成这个就对了,他会帮你自动保存所有 print 输出,方便日后查看。方便\~

logx.metrics

用来记录各种变量的,比如

# capture metrics``metrics = {'loss': loss.item()}``iteration = epoch * len(train_loader) + batch_idx``logx.metric('train', metrics, iteration)

phase 指定是 train 还是 test

metrics一个字典,里面装着所有你打算在这一步你要记录的值。

global_step这个是第几步的结果。

这其实就是一个 保存训练变量+TensorBoard自动写入 器。

save_model

用法

logx.save_model( save_dict, metric=accuracy, epoch=epoch,``        higher_better=True)

epoch会用这个来命名存的模型

metric以什么为标准来决定当前模型是否是最好的模型,并由此决定要不要存。如果你的metric是准确率,那么 higher_better就要置为 True。

delete_old是否每个 epoch 都保存一个一个新的,还是永远只存一个最好的。不用自己写判断的代码了哦。方便

4 个节省大量时间的 Deep Learning 效率神器相关推荐

  1. 收藏 | 有没有什么可以节省大量时间的 Deep Learning 效率神器?

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:链接:https://www.zhihu.com/quest ...

  2. 有没有什么可以节省大量时间的 Deep Learning 效率神器?

    链接:https://www.zhihu.com/question/384519338 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:Fing https://www.zhihu.com ...

  3. 节省大量时间的 Deep Learning 效率神器

    1. 每个实验保存完整config + wandb远程追踪 还在给model取巨长的文件名来记录其超参吗?out了.wandb可以把config和结果曲线同步云端供横向评比和查看.同步云端的代码: d ...

  4. 全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning

    全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 摘要 人们越来越需要将机器学习应用到各种各样 ...

  5. Deep Learning的基础概念

    目录 DNN CNN DNN VS CNN Example 卷积的好处why convolution? 权值共享 parameter sharing 稀疏连接 sparse connection 平移 ...

  6. A Survey on Deep Learning Techniques for Stereo-based Depth Estimation论文阅读

    第一次校正,改正了一些错误和生硬的翻译(像机器翻译一样).一定会有一些笔误.翻译不准确甚至错误的地方.还望批评指正. 1. 摘要 估计RGB图片的深度一直以来都是棘手的问题,计算机视觉.图形学.机器学 ...

  7. 【点云系列】综述: Deep Learning for 3D Point Clouds: A Survey

    文章目录 起因 题目 摘要 1 简介 2 背景 2.1 数据集 2.2 衡量指标 3 3D形状分类 3.1基于多视角的方法 3.2基于体素的方法 3.3 基于点的方法 3.3.1逐点MLP网络 3.3 ...

  8. 《Deep Learning for Computer Vision withPython》阅读笔记-StarterBundle(第6 - 7章)

    6.配置您的开发环境 当涉及到学习新技术(尤其是深度学习)时,配置开发环境往往是成功的一半.在不同的操作系统.不同的依赖版本以及实际的库本身之间,配置您自己的深度学习开发环境可能是相当令人头痛的事情. ...

  9. 《Deep Learning for Computer Vision withPython》阅读笔记-PractitionerBundle(第9 - 11章)

    9.使用HDF5和大数据集 到目前为止,在本书中,我们只使用了能够装入机器主存储器的数据集.对于小数据集来说,这是一个合理的假设--我们只需加载每一个单独的图像,对其进行预处理,并允许其通过我们的网络 ...

最新文章

  1. php 导航高亮,zblogphp导航高亮代码分享教程
  2. Python,OpenCV应用轮廓逼近算法,检测对象的形状
  3. YOLOv5-Lite 详解教程 | 嚼碎所有原理、训练自己数据集、TensorRT部署落地应有尽有...
  4. mysql 主键选择_mysql – 无论列名如何,都选择主键?
  5. 基于HTML5实现的(本地存储)多标签页面元素的复制粘贴
  6. 第十六届智能车竞赛线上全国总决赛远程组委会监督腾讯会议
  7. linux 0.11根文件系统,linux内核与根文件系统之间的关联的理解
  8. python操作系统-Python实现获取操作系统版本信息方法
  9. tcpdump抓包ftp协议_tcpdump抓包并保存成cap文件
  10. Make NTFS writable on macOS
  11. Python爬虫时中文乱码的处理
  12. oracle flex asm ceph,关于12c flex cluster及 flex asm疑问
  13. iOS开发基础知识-多线程概念深入浅出
  14. My first project
  15. 解析:百度快照与站点权重的关系!
  16. 使用minidwep-gtk
  17. 电脑插入耳机后没反应怎么办?
  18. jQuery雪花插件JQuery-Snowfall Plugin
  19. re模块02-re模块
  20. 极速PEu盘启动盘制作工具(2003内核)V06.6官方版

热门文章

  1. 铺地砖问题 java
  2. 交房不验等于毁房!详细总结验房16项 别等开发商跑了才醒悟!
  3. Python入门课程课件
  4. Centos7+Open***使用用户及密码验证登陆
  5. 《Python3网络爬虫开发实战》第二波抽奖赠书活动来了!
  6. [转]网易相册照用不误(解决网易相册的跨服使用)突破防盗链
  7. 医学高材生们,思维导图给你4个高效学习技巧
  8. wireshark 的用处、下载和安装
  9. win10使用命令行批量压缩同一个文件夹下的所有文件
  10. 用c++写一个简单的图书管理系统