工业视觉检测中关于深度学习工程化的思考-持续更新中

工业视觉检测中关于深度学习工程化的思考-持续更新中
图:AI应用到工业产线示例<来源:腾讯全球数字生态大会>

思考

  • 数据
    数据获取
    数据清洗 (@TODO)
    数据增广
    不断新增的数据
  • 训练
    模型训练
    模型选择
    模型调试(@TODO)
    迭代训练
  • 部署
    模型部署
    框架接口编写
  • 模型提升&数据反馈
    模型上线后信息与数据收集
  • 其他
    资源管理(模型、数据) (@TODO)
    过程管理 (@TODO)
    GPU集群 (@TODO)
    云上(@TODO)

数据

数据获取
1 归档存储图像尺寸设多大?原图+增广变换后融合在一起,还是只存原图?

工业相机分辨率往往很高,采出的图>100M很常见,而缺陷尺度不一,在我们做最初数据集以及数据管理时,经常都会有这些的疑惑:
1.1 存原图还是补充一些增广后的图一起存
【一切还是跟问题息息相关】 问题来源于,很多场景下,缺陷样本极其稀少,导致正负样本比例严重不均衡,做最初数据集时,就面对了这样的问题。
结论:肯定是要单独存原始图的,外部显式增广后的图不能与原图混淆。
理由:原始图像反应了问题的难度,原问题的所在(ex:问题难度来源于数据不均衡,还是模式复杂,亦或是对比度太弱),如果放弃了原始图,仅存储的是增广变换后的图,容易人为将问题带偏,使训练出的模型带有偏见,即数据的分布与原始的不一致了,不纯洁,不干净,训练的模型上线预测结果很差;且容易造成数据的冗余,现阶段通用的数据增广本都主要是在训练时,对原图以一定的概率进行变换,而不是简单的将每张图进行变换来获取增广,不过也还是要根据问题来看,并不绝对,当数据严重不均很时,单方面的数据增广上采样也是能起到一定作用的;

1.2 存小图尺寸问题
结论:是在设备空间充足的前提下,尽可能保留大一点的图,例如(512*512), 并配有完备的截图工具(或者训练时pytorch,预处理直接crop/resize都行)
理由:首先,工业缺陷数据集本身具有的特点就是,multi-scale!, 如果我们只存相对较小的图,是有一定概率无法保存缺陷的完整模样;

数据增广
  • 亮度变换是必须的
    工业质检数据,对于高分辨率图像,局部很可能出现不均匀的情况
  • 添加噪声
    实测,添加噪声一般能提升准确率
  • 要注意各种旋转
    一些应用场景,缺陷是具有方向性的
  • 随机crop
    注意截图大小与缺陷位置,避免把缺陷crop掉
不断新增的数据

当模型上线后,势必会碰到误判的数据,当此类数据返回时,我们迭代训练用的数据需要是旧+新的所有数据,如果只用新数据微调,很难达到对整个数据集都有效果(这也是深度学习在工业检测应用的一个待解决点)。

训练

模型选择/模型评价

理论:
工业缺陷检测的特点是高精度,检测要做到μm级别,过检率(1-精准率),漏检率(1-召回率)甚至需要达到0.01%级别,也就是召回率要99.9%才能用,因此只看这种百分比都不能给人直观的印象,在模型选择评价时,要根据具体任务确定漏检优先还是过检优先,看模型性能要在验证集或测试集上看判断错误的个数,有些问题准确率或召回率是98%,都并不是一个优秀的模型,例子就是一张手机屏有1000个灰尘,分类正确980个就是98%,但是剩下的20个判错仍然是不可接受的。
训练流程自动化:
1)应该有模型训练时,关于测试集的错误个数的实时文件,供观察
2)实时loss曲线,PR曲线/ROC曲线,都可有可无,实际上并不重要;
3)accuracy应该有,简单监控训练过程
4)最好能自动输出最佳模型

迭代训练

见“不断新增的数据”章节

部署

模型部署

如果模型以文件形式被机台软件调用,

  • 为了安全,加密是必须的,避免(.caffemodel .pth)后缀的模型文件
框架接口编写
推理框架选择

部署的推理框架,可以选择原来训练模型用的框架(pytorch,tensorflow,caffe…),也可以用专属部署框架(tensorRT, opencv4.3 dnn模块,OpenVINO…),推荐使用后者,用caffe训练的模型实测过tensorrt,效率比原生caffe推理快4倍以上。

封装接口注意事项

当深度学习作为整个检测系统检测算法一个模块时,一般作为动态链接库被调用,在接口编写时,要考虑到以下几个方面:

  1. 日志系统完善 ,不然调试起来很费劲(比如用caffe的话,caffe本身日志系统就很齐全,错误,警告都能找到信息,要做的就是将日志重定向)
  2. 线程安全
  3. 需要有有分数/概率等控制参数控制过漏检情况

模型提升&数据反馈

工业质检深度学习模型必然要迭代数伦才能比较稳定,因此建立上线后的数据反馈收集是必需的。