对于一个输入图像为180x180像素的卷积神经网络,我应该采取多少训练示例?

时间:2018-08-18 02:41:19

标签: tensorflow machine-learning computer-vision conv-neural-network

我正在建立用于人脸识别的CNN(特别是我的脸)。我会将图片大小调整为180x180像素左右。为了获得良好的效果,我的数据集中应该有几张图像?对于正常的神经网络,我知道特征的数量应少于数据集,以防止过度拟合,但是CNN也是这样吗?

我要做的只是将我的图像分类为“ mypic”,将其他人的图像分类为“其他”。

2 个答案:

答案 0 :(得分:3)

“多少数据足够?”的问题实际上是一个非常复杂的问题,简短的答案是,因情况而异。例如,如果您正在使用CNN来确定照片中是否存在一定范围的颜色,那么您很可能不需要大量数据。另一方面,如果您正在使用CNN尝试识别图像中不同种类的鸟类,则可能需要很多个示例。

This这个问题确实很好地总结了出来,但是TL; DR,您应该获取尽可能多的数据,并通过选择的任何错误度量标准来衡量所获得的错误。

如果添加更多数据可以减少测试集的误差,或者训练误差大大低于测试误差,那么添加更多数据以进一步减少测试集误差也许是个好主意。但是,如果在添加更多示例时您的测试错误保持不变,或更糟,是 up ,则这可能是过度拟合的征兆,因此示例过多。我希望这种解释是有道理的,如果对此有任何疑问,请在下面留下评论。

编辑:另外一项注意事项是,您应该为数据提供尽可能多的位置,以便在其中识别出您的面孔。例如,如果您只希望它在同一张面孔中识别出您的面孔每次使用照明/背景,那么您可能都不需要太多数据,但是您应该从那个角度提供大部分图片数据,因此相机看到的内容与数据所具有的相似度很高。另外,例如,如果您想通过手机进行面部识别,则可能有许多不同的角度/背景,因此您应该提供更多示例,所有示例都包含这些角度/背景的多种/组合,以获得最佳效果。

答案 1 :(得分:0)

我的数据集中应该有多少张图像才能获得良好的效果?

实际上,这个问题太笼统了,我可以给出2个答案。好吧,根据Python中用于TensorFlow的脚本,您至少需要20张图像作为输入。

if len(file_list) < 20:
  tf.logging.warning(
      'WARNING: Folder has less than 20 images, which may cause issues.')
elif len(file_list) > MAX_NUM_IMAGES_PER_CLASS:
  tf.logging.warning(
      'WARNING: Folder {} has more than {} images. Some images will '
      'never be selected.'.format(dir_name, MAX_NUM_IMAGES_PER_CLASS))

最好提供比推荐数量更多的输入图像,因为您输入的数据越多,训练和推理数据的准确性就越高。由于您只是想根据自己的脸部图像进行检测,因此我敢打赌,您可以轻松地从您自己的照片和自拍照中收集照片。

但是,好的结果不仅取决于图像数量。某些用户可能对资源的访问受限。好的结果还取决于您使用的CNN架构。不同的架构或培训模型肯定会带来不同类型的良好结果。有很多模型或体系结构,例如MobileNet和ResNet,都非常适合CNN深度学习。

无论您希望使用哪种类型的检测(在这种情况下为mypicothers,请确保已将这些图像分类到各自的文件夹中。