对 AI 算法进行测试时,有一个很重要的问题就是测的越多越觉得测试难以收敛。

举个例子,比如说人脸检测算法,一般情况下我们在准备 testcase 的时候,需要考虑光线、距离、角度、表情、遮挡、背景等各种因素。
假如说应用场景是手机后置摄像头,就单拿背景这个影响因素来说,覆盖到所有的背景都是做不到的。

但是对算法的测试还是要进行下去,具体操作起来可以这样操作:
在不确定中寻找确定性
先广度再深度

首先思想上要有准备,我们就是在不确定性中寻找确定性。这有点像 TCP 协议,TCP 协议就是在不稳定的网络环境下找到一个方法,可以实现稳定的网络传输。对于算法测试来说,我们就是要通过设计更加科学的测试用例、测试方案,在这么多会对算法的效果产生影响的因素中,找到算法的边界,即确定性。通过测试,我们需要达到一个目标,就是明白算法在哪些情况算法是有效的,哪些情况下算法是失效的。这样我们对算法的表现就会有一个总体的认识,也能够对算法同学提出更加专业的意见。

为了达到上面的效果,在测试的时候我们可以先广度后深度。比如说新来了一个算法需要测试,首先需要对算法进行一次摸底测试。这时候就让测试集的范围尽可能的广。
还拿上面的人脸检测来说,测试集可以分两类:有人脸和无人脸。其中有人脸的素材要尽量丰富,这里说的丰富不是说数量多,而是说要覆盖尽可能多的情况。

对于有人脸素材来说,可以是包含了大小脸、包含了不同背景、包含了不同光线 (如背光、侧光、顶光、暗光等)、包含了不同角度等。
对于无人脸素材来说,范围就更广了,比如说草地、车库、动物、风景、商场等等。

有了一定的广度之后,就大致了解算法的边界在哪里。接下来再结合相应的业务场景,重点关注算法误检和漏检的场景,就可以逐步收敛测试范围。

当然,即使做了广度测试,也不可能覆盖到所有的场景。而且随着算法的不停迭代,之前一些出问题的场景可能已经解决了,这时候就需要不定期的进行广度测试,一方面是尽可能覆盖更加多的场景,另一方面对于算法的最新表现也会有一个更加清晰的认识。


↙↙↙阅读原文可查看相关链接,并与作者交流