内容简介:加入极市专业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进行更精细的控制。
下面说说缺点:
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官方的定义:
英文不大好,大概意思是这是一个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>
简单吗?只要把图片路径和标注路径穿过去即可。然后你就可以看到了:
就可以可视化出来了。请注意,你标注和图片放在同一个文件夹也是可以的噢,很鲁帮性的哦。
这其实没啥,当然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的代码,都喜欢托裤子放屁:
<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. 董鑫
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移动应用大赛,参赛就有奖,入围还有额外奖励
添加极市小助手微信 (ID : cv-mart) ,备注: 研究方向-姓名-学校/公司-城市 (如:目标检测-小极-北大-深圳),即可申请加入 目标检测、目标跟踪、人脸、工业检测、医学影像、三维&SLAM、图像分割等极市技术交流群 ,更有 每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、 干货资讯汇总、行业技术交流 , 一起来让思想之光照的更远吧~
△长按添加极市小助手
△长按关注极市平台,获取 最新CV干货
觉得有用麻烦给个在看啦~
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 节省时间,告别眼花,「一键」挑出高质量图片,科大&微软推出挑图神器
- Java 代码热更新工具,节省宝贵时间
- 节省云服务器(VPS)的内存
- 运维帮手:FlashOps帮我节省时间
- 节省你生命的一个小技术No.193
- NFV助力DoCoMo成本支出节省高达10%
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。