和我们公司另外一个搞机器视觉的同事吵了一架,原因很简单,我们公司有个视觉项目,我的方案是使用传统算法,且不需要客户去标定检测物,也就是说,客户只需要点击软件的开始按钮就可以开始检测,而另外一个同事采取的则是深度学习框架,也就是需要客户对每一种型号的产品进行标定和取样才能开始检测,我觉得他这样做虽然对我们来说方便一些,但是对客户很不友好。最后,我俩谁也没说服得了谁,事情就僵在那了!

打开网易新闻 查看精彩图片

我之所以选择傻瓜式操作,原因就是这次的视觉项目,操作者都是一些普通流水线的工人,平时别说机器视觉了,可能很多人连电脑都没怎么用过,所以,我的设计就是让他们只需要点击“开始检测”和“结束检测”按钮就行了,其他什么都不需要他们去管。

这种与人方便的设计思路,我也是结合客户现场情况来决定的,选择把麻烦留给自己。

最主要的是,本次视觉检测项目其实也不是太难,只要代码考虑的周全,完全不需要客户去标定产品的,前期只需要经过一定的时间的测试验证即可。

本来,这个项目都已经快做完了,因为有部分产品存在一定的特殊性,因此出现了误检的情况,再加上我正在参与其他项目,暂时没时间把这部分误检情况写进代码里面,所以,这期间就发生了一点误会。

所谓的误会,其实就是公司认为我解决不掉这个问题,然后就让另外一个同样是搞视觉的同事问我情况,于是,我就把情况跟他说了。

我的意思就是现在出现的问题并不是解决不掉,而是我暂时没时间,我还特意告诉他现在这种情况应该怎么去解决。

最后,公司了解了情况,但是问题摆在那里有个不能不解决,所以就问我,如果让另外一个同事帮我写,我愿意不愿意。

我当然愿意,表示其实代码写起来很简单,主要费时间的就是测试这块。

一般来说,我在视觉代码写完以后,会批量测试几万张之前采集的各种状态下的产品图片,如果所有图片都批量跑完了算法没有问题以后,我才会去给客户更新最新算法。

这个过程可能需要耗费一两天时间,因为可能新算法有兼顾不到的地方,批量测试的时候可能跑一半发现问题又得改代码,改完以后还得从头开始......

因为我是用传统算法写的,我的这位同事比较排斥传统算法,因为他从学习到工作,使用的都是深度学习框架,传统算法虽然会一些,但是不太精。

于是,他就跟我说,我这种方法太原始了,没办法兼顾到所有情况,后面万一又出现物料不一致的情况,还得改代码!

总之,他的意思是还是用深度学习比较好,这样能兼顾到所有情况。

我跟他说,我知道深度学习好,但是你要当一帮上了年纪的大哥大姐去帮你框选ROI,你觉得实际吗?况且,还不仅仅是ROI的问题,训练成本也是一个问题。

客户那边的物料有上千个,但区别其实很小,而且,客户那边的生产车间是保密车间,图片很难带出来,我自己手上的几万张照片还是项目实施的时候带出来的,深度学习要训练,必然需要现场图片,难道还要每次出问题的时候让客户把图片导出来发给我们吗?我这里几万张图片就将近10个G了,一个深度学习的训练集至少也得50万张吧,这得多少数据?

不光如此,我负责的这个视觉项目其实已经稳定跑了半年多了,只不过最近出了几次特殊情况,没有考虑到而已,如果把现有逻辑从传统算法改为深度学习,那就意味着我们得重新修改代码,那么代码的稳定性、检测的稳定性将都需要重新花时间来验证,即使客户愿意,公司也不愿意吧?

最后,我和他因为这件事情就争执了起来,最后他跟我说:“不上深度学习,我是不知道怎么做了!”

我不知道他说的是不是气话,但是我是怕了,万一真的让他去改代码,那这个项目最起码还得半年才能验收!

最后,我跟公司说我抽个时间优化下算法,然后给客户一个交代!我坚持我的想法,这个项目不适合用深度学习来做!

结语

有时候,视觉项目的确是用深度学习能解决很多问题,但是,如果用纯技术思维去做项目,虽然项目做成的可能性大,但是客户体验是极差的。

我就碰到过很多这种情况,我估计很多人也碰到过一种情况,那就是明明项目已经通过验收了,但是客户就是不怎么去用,原因就在于此!

我们把很多本该可以通过代码去解决的问题交给使用者去解决了,这本就背离了功能性软件的初衷,功能性软件,本身存在的意义不光是专业性,还得尽可能减少让客户自己去操作复杂场景的次数,傻瓜式更好,否则,给客户带来的那就是冰冷的体验!