社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

恒源云_Gpushare.com | RTX 3090独家训练实录

恒源云 • 4 年前 • 301 次点击  

进入干货之前,先简单自我介绍一下吧,笔者主要从事深度学习CV领域,近一年,由于工作需要,再加上个人兴趣,在目标检测、实例分割任务方面,花了不少时间调研和阅读论文。

对此,笔者也跑过了无数实验,参加过大大小小的比赛,emmm,有最终获得第一的,有遗憾获得第二的,有初赛就被淘汰无缘复赛的,也有做到一半由于各种原因放弃的,有机会以后可以和大家唠一唠...

言归正传,今天想和大家分享的独家干货是,MMDetectionV2 + ResNeSt + RTX3090的训练实录,CVer会比较熟悉,这三款分别来自框架、算法、硬件领域的产品,都是2020年新推出的爆款,目前还没有看过三者结合的公开实验分享。

正好,笔者最近租用了一台双卡24G的GeForce RTX 3090设备,就顺便升级了一下MMDetection至V2.7.0(2020年11月底发布,之前由于其更新速度太快,下半年一直停留在V2.2.0版本),并发现此次更新,增加了对ResNeSt作为backbone的支持,立刻决定跑个实验测试一下性能,希望能给大家一些参考。

接下来,分别简单介绍一下:

【MMDetection】

这是港中大OpenMMLab及商汤科技开源的基于PyTorch的检测分割框架,该团队在参加2018 MS COCO Detection Challenge后开源,于2018年10月首次发布V0.5.1版本,2020年1月发布V1.0.0版本,2020年6月推出全新升级的V2.0.0版本。

相比于其他类似的开源框架,例如Facebook的maskrcnn-benchmark及Detectron2或百度的PaddleDetection,MMDetection是目前最受欢迎、关注度最高的框架,主要原因在于,其功能全覆盖面广、性能高、以及更新速度快等特点。

【ResNeSt】

号称最强ResNet改进版,“ResNeSt: Split-Attention Networks”这篇论文出自亚马逊李沐,张航团队,于2020年4月上传至arXiv(截止目前还未在会议或期刊上发表,不出意外,2021年的CVPR或ICCV等顶会应该会有它的身影)。

此文一出反响热烈,一方面,由于其在图像分类、目标检测、实例分割、语义分割等多项任务中都有显著提升。

另一方面,一些质疑声也随之而来,主要来源于其对比实验,例如ResNeSt-50 vs. ResNet-50,采用了大量最新发表的训练及数据增强策略,而在ResNet-50于2015年提出时,这些技术并不存在,因此其公平性受到挑战。

无论如何,ResNeSt在最近各大比赛中频繁登场并大放光彩,可见其泛化能力极强。

【RTX 3090】

英伟达GeForce RTX 30系列,于2020年9月正式发布,其中的3090版本对比上一任“老大哥”GeForce RTX 2080 Ti,不论是性能还是价格都完全碾压。

再加上疫情原因,以至于推出后很长时间,在国内市场都处于缺货、抢购、价格抬高等现象,即便在美国也是一卡难求,这无疑让深度学习爱好者对其充满向往。

介绍完背景后,现在进入正题,本次实验的相关配置如下:

Python 3.8.7 PyTorch 1.7.1 torchvision 0.8.2 CUDA 11.0 cuDNN 8.0.5 GCC 7.3 MMDetection 2.7.0 MMCV 1.2.4

数据方面,采用了经典的MS COCO 2017,其中训练集train、验证集val以及测试集test-dev的数量分别约为118K、5K、20K。

算法方面,本次实验选择了ResNeSt-101 + FPN + SyncBN + Cascade Mask RCN作为检测器,这里并没有使用最新的HTC或DetectoRS,主要是想和ResNeSt论文中给出的实验结果做直接对比。

训练及测试细节如下:

训练时长采用“2x schedule”,即24周期,step=[16,22] 多尺度训练1600x[400,1200],这里参考了HTC论文里的尺度,而非ResNeSt论文中的1333x[640,800] 单尺度测试1600x1000,同上,未选择传统的1333x800 双卡训练,每卡2张图片,即batch size为4 初始学习率设定为0.01,这里稍高于传统目标检测linear scaling rule定义的0.005 根据ResNeSt论文推荐,backbone及head都采用SyncBN 其余设置及超参数不变

训练一个周期大约11.5小时,训练时显存几乎占满,如下图所示。由于是双卡跑“2x schedule”,如果按照一般论文中的8卡跑“1x schedule”配置来算的话,整个训练过程大约需要34.5小时,算是比较快的。这里顺便提一下,经亲测,同样的配置8卡2080 Ti跑“1x schedule”一般需要2天多一些(49至50小时)。

受资源限制,多尺度训练并未采用HTC的1600x[400,1400]。同样的,backbone并没加入最近比较流行的DCNv2,加入后mAP一般可以提升1至2个百分点左右,如下图所示(来自于ResNeSt原文中的Table 12)。

根据以往经验,多尺度测试一般mAP可提升1.5至2.5个百分点左右,由于本次实验并非为了比赛或刷榜,为节省时间测试阶段采用单尺度,结果如下:

上面两张图,分别为模型在验证集上的检测bbox mAP以及分割segm mAP结果,对比下图中的结果(来自于ResNeSt原文中的Table 6),本次实验效果稍微好一些(bbox 49.4% vs. 48.3%,segm 43.1% vs. 41.6%),可能得益于较大的尺度及较长的训练时长,但不论如何,双卡的RTX 3090可以复现作者的8卡结果还是令人比较满意的。

下面三张图分别为测试集test-dev上的bbox mAP、segm mAP(需要将json文件上传至COCO的官方网站)以及原文中的Table 10。需要注意的是原文中的结果使用了DCNv2, 而本次实验并未对backbone做额外的增强操作,也达到了一样的效果(bbox 50.0% vs. 50.0%,segm 43.7% vs. 43.0%)。

综上,通过测试“新一代卡皇”GeForce RTX 3090的性能,最终结果还是比较令人满意的。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/112127
 
301 次点击