图像算法从业一年的体验

序幕

在老家的一个私企从事图像算法这个行业已经将近一年,说是这一年学到了什么的话,可能就是如何应用框架对数据进行训练了吧;说是养成了什么习惯,可能就是越来越懒了吧。下面给大家总结一下我个人这一年工作以来的感受。(本文纯纯txt版本,文末有话要说)

拉开序幕

我是从事工业故障(缺陷)方面的检测工作,其中一些涉及到公司内部信息的我这里便不进行提及了。
对于工业故障检测,我们应用的主要方案大致就是:

  1. 数据处理+图像处理+深度学习+图像处理
  2. 数据处理+图像处理+深度学习+深度学习+图像处理

数据处理

先说第一种,图像处理+深度学习+图像处理。这个可以解决大多数故障的检测、分割和形态判断。
一般工业故障数据都比较少,故障要是多的话,那就得回炉重造了,所以说,你得先对数据进行增强。前一阵,各路大神对数据增强的方法进行了大量的研究,这里我就说一说我常用的,主要还得是根据数据和故障的特性进行增强(比如一个不可能翻转的零件,我感觉你进行翻转旋转这样的增强也没啥用)。

我这里数据增强主要分为两种情况,第一种是你手里面基本故障形态都有了,但是数量不多,你可以试试:图像翻转、旋转、仿射、各种模糊(高斯、中值。。。)、运动图像模糊、添加噪声(高斯、条纹。。。)、马赛克(这里指的是yolo里面的,不是电影里面的)、均衡化。 这些用的多一点,其他的还有什么雨滴噪声啊,copy-paste啥的啊也不怎么用,这里说一点,我个人尝试过GAN、编码器也是可以进行数据增强的,但是限制条件有点多,增强完你还得一张一张的选,感觉没啥意思。
第二种是,你手里没啥故障的数据,但是你知道故障应该是什么样子,那么你可以试试PS,或者自己对零件进行破坏,然后再进行第一种方式。大家也知道,故障这个东西就和指纹一样,基本都不一样,你要PS全部可能的故障基本也不太现实,所以你就PS点特征比较典型的故障,然后合理的变换一下形态就可以了。严谨一点就是:故障具有多样性、差异性和未知性,你是PS不完的,我们要做的就是实现 “以偏概全”。

“数据增强在我这里没有存在即合理这一说,它得是客观存在,才能合理。”

图像预处理

差不多数据增强完事了,就得进行第一个图像处理了,也就是图像预处理这个步骤。你先根据你数据的特征和故障的特征进行简单的图像处理(当然这步是非必要的,你要是图像质量挺不错,故障清晰可见,那就没啥必要了),如果你要求实时性的话,这里的处理一般不能太复杂,这个也是根据数据的特性进行预处理的,这里我说几种情况:
1) 你的图像采集到的太黑或者太亮,你就直方图均衡化、自适应直方图均衡化;
2) 你的图像要是太大,你就缩小,一般不用放大;
3) 可以适当的添加一点模糊处理,减少噪声,就像高斯、中值啥的;
4) 剩下的就是具体问题具体分析了,比如频域滤波、二阶滤波器啥的。

当然,要是要求实时性的话,最好是:能看清故障的前提下,图像越小越好,作用不大的滤波器越少越好

深度学习模型

我目前接触到的主要就是检测和分割模型,因为都是对故障进行识别定位,所以分类模型几乎是用不到的。主要就是说说检测和分割模型。

检测模型是我用的最多的,只要不涉及到对于距离,面积的精准把控,一般不用分割,用着用着就感觉,那个东西没有检测准,而且标记也费劲。
我们可能对实时性要求不是很高,现在我主要用的是两阶段的FasterRCNN,这个模型虽然出来了好几年了,但是相比于其他模型来说,这个模型有下面两个优点:
1) 模型和框架都比较成熟,用起来和改起来都很方便;
2) 准的很!试过很多两阶段的模型,用起来这个还是效果最好的;

对于工业的故障检测,甲方爸爸就是让你全检测出来,一个别误报,一个别漏报,但是做过这方面的人可能都知道,不管啥模型,都不可能达到100%的准确率和识别率。你能做的就是选一个模型,推理时间满足要求、准确率满足要求、还得让硬件跟得上。说到这里我说一下我用faster-rcnn的电脑配置吧(公司是服务器不能说),我的显卡是N卡2080S,内存32G,跑上Faster还可以,速度啥的平均下来50fps吧。至于单阶段的检测模型,就像YOLO1~5全家桶,这些效果和Faster相比还是差点,但是确实是快。

然后是分割模型,用分割模型一般就是看角度的偏移,有没有哪块缺失了这种,我一般用Mask就差不多够了,有的时候会用HTC模型,但是感觉效果都差不多。我这个感觉没啥说的,只要数据好一点,标记的好一点,分割效果确实还可以。

图像后处理

这一步其实就是给客户看的了,你想想都识别出来了,你后处理也没啥用,就是给客户看的清除一点,好看一点。当然,也不排除后面对类别进行筛选、提取啥的。具体就看你啥要求了。我这里一般就是简单的图像处理方法,二值化、腐蚀膨胀啥的。

深度学习模型+1

然后是第二种,和第一种相比多了一个深度学习模型,这个模型我一般都是用来定位的,就是那种背景乱乱的,就加一个模型进行定位,当然,这个模型我选的一般也都是检测模型,这里说明一点,两个模型最好用一个框架,这样调用的时间能快一点。至于单阶段模型还是双阶段模型的话,我还是选双阶段的,毕竟人家准。

闭幕

可能也就这样了,打字太累了。如果表达的不正确,欢迎大家鸟悄的和我说。也欢迎大家提出不同的观点。

重要的事

如果有视觉方面需求的,特别是工业检测方面的,可以联系我:
请发邮箱:[email protected]
可以帮你
提供方案、提供模型、设计算法、PS图像

你可能感兴趣的:(项目,机器视觉,深度学习,photoshop,图像处理)