这个相对较小的数据集是否足以训练 CNN?

人工智能 卷积神经网络 训练 数据集 数据预处理 数据增强
2021-11-09 09:22:37

场景:我正在尝试创建一个数据集,其中包含为不同动物类别选择的图像。我将使用 CNN 训练这些图像进行分类。

问题:假设我不知何故没有收集太多图像的特权,并且只能为每个班级收集一些图像。这是列表:

| id | animal       | #     |
|----|--------------|-------|
| 1  | Baboon       | 800   |
| 2  | Fox          | 1000  |
| 3  | Hyena        | 5000  |
| 4  | Giraffe      | 43    |
| 5  | Zebra        | 88    |
| 6  | Hippopotamus | 233   |
| 7  | Yak          | 578   |
| 8  | Polar Bear   | 456   |
| 9  | Lion         | 3442  |
| 10 | Indian Tiger | 40000 |

我有三个问题。

  1. 这是训练 CNN 模型的好数据集吗?我担心每个班级的数量。

  2. 如果我增加数据会有帮助吗?我想我会增加它。

  3. 未来,上述数据集将会增加。所以我有机会再次训练模型。我应该创建一个适合当前数据大小的模型,还是应该创建一个更大的模型来调整未来的数据?

我可以从互联网上获取数据。但是这个问题是关于当我们拥有少量数据时采取的方法,比如国家数据科学碗(对浮游生物进行分类)中的数据。

3个回答

用你的学习机制独立讨论数据是有风险的。实际上,没有好的数据或好的学习者之类的东西。只有对特定学习者有用的数据。在今天完成了所有标准化教育和测试之后,人类智能也是如此。

当大多数其他人摸不着头脑时,也有一些优秀的学习者发现数据很好。

如果通过良好的数据和深度学习,您的意思是图像集将导致对生产中出现的未预料到的图像进行正确分类,那么您对统计数据的直观理解可以为您提供一般性答案。深度学习器在其上开发其激活权重和元参数以提供足够的生产行为的图像必须代表将在生产源中找到的图像范围。

如果你打算对男性和女性进行研究,以确定女性更受爱情前景驱动而男性更受性前景驱动的旧观念,你不会选择 43 名男性和 40,000 名女性作为研究对象。学习。该研究的价值受到两个数字中较低者的限制。

您可以使用您拥有的类别频率来训练网络,但一些深度学习者可能会充分利用印度老虎和鬣狗的特征提取,但会对斑马和长颈鹿表现出不可接受的错误分类水平。

回到上面的概念,深度学习器可以解释类别频率的偏差。从理论上讲,可以创建一个出色的学习器或一个能够很好地适应这种频率偏斜的学习器。一种简单的方法是开发一种识别频率偏斜的方案,并为训练分配额外的计算资源,该训练侧重于区分具有不常见标记训练实例的相似动物。

我不记得是谁做过的,但我知道它已经做过。

有几种方法可以让您在代码中手动对不常见的类别给予额外的关注,但这将是一个不太通用的解决方案,并且生成的程序既不是出色的学习者,也不是特别可重用的。

寻找一种抗倾斜的深度学习方案并测试其对罕见动物的准确性比派摄影师到非洲更具成本效益。如果您无需付出巨大的努力就可以找到更多不太常见的动物的图像,我也会这样做。

您的数据集将是所谓的“不平衡”,这可能会导致开发准确分类器出现问题。

最好的办法(您可能无法做到)是为那些图像数量较少的类找到更多图像。

另一种选择是综合生成更多图像。一种方法是使用 Keras ImageDataGenerator.flow_from_directory文档位于https://keras.io/preprocessing/image/创建目录 ( your_dir)。在其中创建一个子目录Giraffe将所有 43 幅长颈鹿图像放入该目录。创建另一个目录your_save_dir,并将其留空。现在,创建如下所示的生成器。

datagen = ImageDataGenerator(rotation_range = 30, width_shift_range = 0.2,
                             height_shift_range = 0.2,
                             shear_range = 0.2, 
                             zoom_range = 0.2,                             
                             horizontal_flip = True,
                             fill_mode = "nearest")

data=datagen.flow_from_directory(your_dir, target_size=(200, 200),
                                 batch_size=43, shuffle=False,
                                 save_to_dir=your_save_dir,save_format='png',
                                 interpolation='nearest')

images,labels=data.next()

现在,每次执行最后一行代码时,都会生成 43 张图像并将其存储在your_save_dir. 这些图像将根据图像数据生成器中的参数以随机方式进行转换。虽然不如拥有真正的原始图像,但它有助于平衡数据集。

当然,对其他样本数量较少的图像集也这样做。

另一件有用的事情是,对于图像较少的集合,首先,裁剪图像,使动物在裁剪图像中占据尽可能高的像素百分比。然后执行上面定义的过程。这为网络提供了更高百分比的有意义的像素来“学习”。

您可以仅使用 100 个图像来构建它。就您而言,斑马和长颈鹿需要更多图像。使用 DNNClassifier (TensorFlow),您可以做到。但是你拥有的图像越多,你的分类器就越准确。

我建议您也观看视频:使用 TensorFlow 为诗人训练图像分类器 - 机器学习食谱 #6