写点什么

恒源云 _Gpushare.com | RTX 3090 独家训练实录:MMDetectionV2 + ResNeSt

用户头像
恒源云
关注
发布于: 2021 年 04 月 22 日
恒源云_Gpushare.com | RTX 3090独家训练实录:MMDetectionV2 + ResNeSt

进入干货之前,先简单自我介绍一下吧,笔者主要从事深度学习 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 的性能,最终结果还是比较令人满意的。

用户头像

恒源云

关注

专注人工智能云GPU服务器训练平台 2020.12.25 加入

还未添加个人简介

评论

发布
暂无评论
恒源云_Gpushare.com | RTX 3090独家训练实录:MMDetectionV2 + ResNeSt