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

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

内容简介:加入极市专业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干货

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


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

查看所有标签

猜你喜欢:

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

创新者的窘境(全新修订版)

创新者的窘境(全新修订版)

克莱顿•克里斯坦森 / 胡建桥 / 中信出版社 / 2014-1-1 / 48.00元

全球商业领域中,许多企业曾叱咤风云,但面对市场变化及新技术的挑战,最终惨遭淘汰。究其原因,竟然是因为它们精于管理,信奉客户至上等传统商业观念。这就是所有企业如今都正面临的“创新者的窘境”。 在《创新者的窘境》中,管理大师克里斯坦森指出,一些看似很完美的商业动作——对主流客户所需、赢利能力最强的产品进行精准投资和技术研发——最终却很可能毁掉一家优秀的企业。他分析了计算机、汽车、钢铁等多个行业的......一起来看看 《创新者的窘境(全新修订版)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

html转js在线工具
html转js在线工具

html转js在线工具

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

UNIX 时间戳转换