4个节省大量时间的 Deep Learning 效率神器

栏目: IT技术 · 发布时间: 5年前

内容简介:加入极市专业CV交流群,与同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。关注

加入极市专业CV交流群,与  1 0000+来自港科大、北大、清华、中科院、CMU、腾讯、百度  等名校名企视觉开发者互动交流!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。关注  极市平台  公众号  , 回复  加群, 立刻申请入群~

来源: 知乎问答

https://www.zhihu.com/question/38451 9 338

极市特精选了部分优质回答供 大家参考学习。 回答已获作者授权,禁止二次转载。

1. 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

2. 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进行更精细的控制。

4个节省大量时间的 Deep Learning 效率神器

下面说说缺点:

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

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

3. 金天

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

谢药。

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

<span><span>sudo</span> pip3 install alfred-py</span>

然后是Github链接:

https://github.com/jinfagang/alfred

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

alfred是什么

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

4个节省大量时间的 Deep Learning 效率神器

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

大家安装完了使一下??

<span><span>alfred</span> -h</span>

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

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

<span><span>alfred</span> data vocview -i JPEGImages/ -l Annotations/</span>

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

4个节省大量时间的 Deep Learning 效率神器

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

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

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

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

4个节省大量时间的 Deep Learning 效率神器

比如这个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框你行吗?

4个节省大量时间的 Deep Learning 效率神器

4个节省大量时间的 Deep Learning 效率神器

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

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

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

<span><span>if</span> <span>use_cuda:</span></span>

<span> <span>a</span> = <span>a.cuda()</span></span>

实际上使用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给你爬:

<span><span>alfred</span> scrap image -q <span>'美女'</span></span>

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

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

https://github.com/jinfagang/thor

4个节省大量时间的 Deep Learning 效率神器

4. 董鑫

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

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

<span>logx.initialize(logdir=args.logdir, coolname=<span>True</span>, tensorboard=<span>True</span>,</span>

<span> hparams=vars(args))</span>

上面就是定义了:

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 都保存一个一个新的,还是永远只存一个最好的。 不用自己写判断的代码了哦。 方便~

极市独家福利

40万奖金的AI移动应用大赛,参赛就有奖,入围还有额外奖励

4个节省大量时间的 Deep Learning 效率神器

添加极市小助手微信 (ID : cv-mart) ,备注: 研究方向-姓名-学校/公司-城市 (如:目标检测-小极-北大-深圳),即可申请加入 目标检测、目标跟踪、人脸、工业检测、医学影像、三维&SLAM、图像分割等极市技术交流群 ,更有 每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、 干货资讯汇总、行业技术交流 一起来让思想之光照的更远吧~

4个节省大量时间的 Deep Learning 效率神器

△长按添加极市小助手

4个节省大量时间的 Deep Learning 效率神器

△长按关注极市平台,获取 最新CV干货

觉得有用麻烦给个在看啦~   


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Distributed Algorithms

Distributed Algorithms

Wan Fokkink / The MIT Press / 2013-12-6 / USD 40.00

This book offers students and researchers a guide to distributed algorithms that emphasizes examples and exercises rather than the intricacies of mathematical models. It avoids mathematical argumentat......一起来看看 《Distributed Algorithms》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试