2020天池 “数字人体”视觉挑战赛VNNI赛道_冠军_方案分享

   日期:2020-07-18     浏览:219    评论:0    
核心提示:2020天池-“数字人体”视觉挑战赛-VNNI赛道-冠军比赛主页: 数字人体”视觉挑战赛——宫颈癌风险智能诊断代码开源:github0. 团队信息团队名称: LLLLC团队成员: 梁凯焕(@knightliang)、李晨阳(@morning_sun_lee)、林婉宜、林宏辉(@now_more)、陈展丽1. 赛题分析1.1 任务对异常鳞状上皮细胞进行定位,属于单类别目标检测任务在支持Intel VNNI的框架上进行量化推理1.2 指标性能scroe :mAP时间score

文章目录

  • 0. 团队信息
  • 1. 赛题分析
    • 1.1 任务
    • 1.2 指标
    • 1.3 数据
    • 1.4 难点
  • 2. 整体方案
    • 2.1 模型训练
      • 2.1.1 数据增强
      • 2.1.2 模型结构
      • 2.1.3 训练策略
    • 2.2 模型量化
      • 2.2.1 量化算法
    • 2.3 模型推理
      • 2.3.1 图片读取
      • 2.3.2 预处理
      • 2.3.3 前向执行
      • 2.3.4 代码框架 & 流程图
  • 3. 实验结果
  • 4. 总结 & 展望
    • 4.1 总结
    • 4.2 展望
  • 5. Reference

比赛主页: 数字人体”视觉挑战赛——宫颈癌风险智能诊断

相关代码:github

0. 团队信息

  • 团队名称: LLLLC
  • 团队成员: 梁凯焕(@knightliang)、李晨阳(@morning_sun_lee)、林婉宜、林宏辉(@now_more)、陈展丽

1. 赛题分析

1.1 任务

  • 对异常鳞状上皮细胞进行定位,属于单类别目标检测任务
  • 在支持Intel VNNI的框架上进行量化推理

1.2 指标

  • 性能scroe :mAP
  • 时间score : QPS = slide数量 / inference总时间(总时间包括数据预处理、模型推理、后处理时间等)
  • 最终score = 性能score + 时间score(两个指标分别计算,取第一名作为Gold standard,score=1.0, 其余的成绩与第一名的差距的百分比作为score的累加值,依次计算。如第一名0.3张/s,第二名0.1张/s,则第一名score=1.0,第二名score=1.667)。

1.3 数据

  • 训练数据: 宫颈癌细胞学图片800张,其中阳性数据500张(包含1212个ROI),阴性数据300张;
  • 测试数据:200张ROI区域图片(分辨率在几千到上万)

1.4 难点

  • 速度与精度平衡
  • 训练样本较少,目标背景复杂
  • 细胞成像颜色多样性(染色剂种类、配比、染色时间等因素影响)

2. 整体方案

基于RetinaNet[1]的目标检测算法,在 pytorch 框架上进行模型训练,在 Openvino 上完成量化推理,流程图如下,包括以下四个步骤:模型训练、格式转换、模型量化、模型推理。

2.1 模型训练

2.1.1 数据增强

  • OnlineCropResize : 以 RoI 中目标为中心,“在线”随机裁剪1600x1600框,然后Resize成800x800,降低计算量;

  • RandomFlip:随机翻转;

  • RandomShift:将目标框裁剪下来,随机贴到图像中的其它位置,使模型学到更多的背景信息,裁剪后的区域使用cv2.inpaint进行填补;

  • ReplaceBackground + StainNorm:

    • 将阳性数据中目标裁剪下来,随机贴到阴性样本上(阴性样本中背景信息有利于假阳抑制);

    • 裁剪的目标框可能与随机抽取的阴性图像颜色差异较大,为减少“突兀”,通过染色剂归一化算法将裁减目标调色至阴性背景风格;

2.1.2 模型结构

为了提升推理速度,我们对 RetinaNet 各个模块重新设计。

  • Backbone :

    • 采用轻量化的 (ImageNet pretained) MobileNetV2 [2] ;
    • 实验中,MobileNetV2性能与ResNet-50相当,ResNet-34、ResNet-18等精度下降;
    • 使用本次检测数据,训练分类网络作为初始化参数效果不如ImageNet;
  • 减少 FPN 以及 Head 通道数:

    • FPN-256 —> FPN-128
    • Head-256 —> Head-64
    • 实现网络各部分计算量平衡
  • 模型各部分理论计算量 (GFLOPS) 及占比分析

Model structure Backbone FPN Head Total 加速比
R50-FPN256-Head256 52.55 (35.11%) 10.87 (7.26%) 86.27 (57.64%) 149.66 -
MbV2-FPN128-Head64 4.07 (34.73%) 2.37 (20.22%) 5.28 (45.05%) 11.72 ≈12x

2.1.3 训练策略

  • 超参数:
优化器 SGD
学习率 **采用余弦下降方式,初始学习率为 1e-2 ,终止学习率为 1e-5 **
Batch size 8
预训练模型 ImageNet,训练时不固定BN
Epoch数量 100

2.2 模型量化

2.2.1 量化算法

  • OpenVINO Calibration Tool [3] : 量化过程包括以下4个步骤;

  • 量化层选择:

    • OpenVINO支持自动进行量化层选择,将准确率损失较大的层切换回fp32,但在实验中我们发现对我们模型并不是很work;
    • 实验中,我们不采用OpenVINO量化层选择,而是基于经验,FPN部分参数对量化比较敏感,对MbV2-FPN1287-Head64,FPN部分卷积层不量化,其余卷基层全部量化;
    Δ map@0.5 时间(ms)
    量化全部卷积层 -1.71 43.58
    不量化FPN部分卷积层 -0.33 51.57
  • 校验数据:实验中增加校验数据并没有带来性能的提升,最终以300张训练图片作为校验数据;

    校验图片数量 Δ map@0.5
    300 -1.71
    1200 -2.13

2.3 模型推理

推理流程包括:图片读取、预处理、前向执行、后处理等步骤。

2.3.1 图片读取

实验中IO读取占据了相当大的一部分时间消耗,采取了两个优化策略:

  • 采用读取速度更快的GDAL库[3];
  • 多个子进程同时读取,存放到共享队列中;
图片读取库 时间(s)
OpenCV (OpenVINO版本) 174
GDAL 99

2.3.2 预处理

预处理主要包括以下步骤:

  • 采用无交叠滑窗策略;
  • 丢弃边界像素;
  • 将裁减 1600x1600 区域缩放成 800x800;

2.3.3 前向执行

采用 OpenVINO 的异步模式[4] :

  • 发起执行请求后,控制权交还给主程序,分摊数据读取和后处理的时间;

  • 执行完成后,通过回调函数通知主程序;

  • 可以发起多个infer request同时执行;

2.3.4 代码框架 & 流程图

  • 子进程负责图片的读取、裁剪、缩放、拼batch等数据处理相关的操作,处理完的数据存放到共享队列中;
  • 主进程从共享队列读取数据,负责模型推理、后处理操作;

3. 实验结果

  • 性能:网络结构改进 & 数据增强
模型 训练数据 Online crop Random flip Replace BG Drop border **Random Shift ** Crop size map@0.5 (%)
R50-FPN256-Head256 90% 800 27.49
R50-FPN256-Head256 90% 800 28.24
R50-FPN256-Head256 90% 800 28.87
R50-FPN256-Head256 90% 800 29.49
R50-FPN256-Head256 90% 800 29.63
MbV2-FPN256-Head256 90% 800 28.37
MbV2-FPN256-Head128 90% 1280 29.14
MbV2-FPN128-Head128 100% 1280 32.22
MbV2-FPN128-Head64 100% 1600 33.54
  • 时间:Batch size & infer request & subProcess (io) & Drop border
    • 由网络结构从MbV2-FPN256-Head128调整为计算量更小的MbV2-FPN128-Head64,但推理时间不变(均为120s)可知,推理时间平静下来不在模型推理,而是 io。
模型 Batch size Infer request subProcess Drop border Crop size 时间(s)
R50-FPN256-Head256 1 - - - 800 830
R50-FPN256-Head256 1 13 - - 800 356
R50-FPN256-Head256 8 13 - - 800 303
R50-FPN256-Head256 8 13 - 800 260
MbV2-FPN256-Head128 8 13 - 1280 120
MbV2-FPN128-Head64 8 13 - 1280 120
MbV2-FPN128-Head64 8 13 8 1600 35
MbV2-FPN128-Head64 1 11 15 1600 24

4. 总结 & 展望

4.1 总结

  • 轻量化网络结构设计;
  • RandomShift、ReplaceBackground + StainNorm 等针对医疗数据场景样本较少的数据增强方法;
  • 采用异步模式进行推理;
  • 多进程、GDAL库等加速IO;

4.2 展望

  1. IO与推理的时间大约各占一半,更优化的IO库,更小的模型都能进一步提升性能;
  2. 推理时采用更大的裁剪区域或者整图,预计能进一步提升速度和精度;
  3. 采用量化损失更小的 Backbone(Intel工程师建议,目前 OpenVINO 针对 ResNet 优化较好,量化损失较低);

比赛结果:

team_id mAP time(s) Norm_time Norm_mAP score rank
LLLLC 35.99 34 1 1 2 1
《我的便携式游戏女友》 34.92 196 1.83 1.03 2.86 2
named 31.28 208 1.84 1.13 2.97 3
AI-LIGHT 28.17 144 1.76 1.22 2.98 4
xywh 32.18 443 1.92 1.11 3.03 5
Drcubic 27.73 209 1.84 1.23 3.07 6
deep-thinker 32.41 1148 1.97 1.10 3.07 7
HUST_WNLO_AI 29.34 1001 1.96 1.18 3.15 8

注:由于天池测评api时间也被计入,所有队伍实际时间都增加了10s。

5. Reference

[1] Lin T Y, Goyal P, Girshick R, et al. Focal loss for dense object detection[C], CVPR, 2017: 2980-2988.

[2] Sandler M, Howard A, Zhu M, et al. Mobilenetv2: Inverted residuals and linear bottlenecks[C], CVPR, 2018: 4510-4520.

[3] https://gdal.org/

[4]https://docs.openvinotoolkit.org/2019_R3.1/_inference_engine_tools_benchmark_tool_README.html

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服