我认为这是一个广泛适用的问题,但我正在尝试为特定竞赛创建一个数据集,该竞赛涉及将无人机飞过带有涂有字母数字字符的纸板几何形状的 field 。目标是对形状和字符进行检测和分类。
目前,我使用 SURF 来检测形状,使用 K-means 来分割形状和字符,并使用卷积神经网络来对每个形状和字符进行分类。然而,当涉及到可以在真实数据上表现良好的训练数据时,我遇到了瓶颈。
我尝试过的
使用 Keras 生成数据集 ImageDataGenerator打字字体和几何形状的每个字母数字字符的模板图像的随机旋转、缩放和倾斜:可以很好地处理数据集中的数据(如图)和一些外部数据,但当字符时会感到困惑太离经叛道
使用 MNIST 数据集:没有提示,但只包含数字
使用 EMNIST ByClass 数据集(与 MNIST 数据集不同;也包含字母):由于大小的原因,训练起来并不容易,即使训练得相当好,也表现不佳高准确率。在数据集本身中,许多图像与所谓的类几乎没有相似之处,并且某些类的旋转速度与其他类不同
对字符使用 Tesseract OCR。 这并没有取得很好的结果
我没有尝试过的
使用我们创建的真实纸板 Papercut 进行多次飞行,并使用每个视频中的多个帧作为数据集。 缺点:这需要大量航类和纸板剪裁,并且不会提供太多数据变化。
使用 ImageDataGenerator,但使用几种不同的字体,而不是一种。
有人对如何为此类任务创建自定义数据集有任何建议吗?
最佳答案
这是我的 dataSetGenerator 也许可以帮助您生成自己的数据集
import numpy as np
from os import listdir
from glob import glob
import cv2
def dataSetGenerator(path,resize=False,resize_to=224,percentage=100):
"""
DataSetsFolder
|
|----------class-1
| . |-------image-1
| . | .
| . | .
| . | .
| . |-------image-n
| .
|-------class-n
:param path: <path>/DataSetsFolder
:param resize:
:param resize_to:
:param percentage:
:return: images, labels, classes
"""
classes = listdir(path)
image_list = []
labels = []
for classe in classes:
for filename in glob(path+'/'+classe+'/*.tif'):
if resize:image_list.append(cv2.resize(cv2.imread(filename),(resize_to, resize_to)))
else:image_list.append(cv2.imread(filename))
label=np.zeros(len(classes))
label[classes.index(classe)]=1
labels.append(label)
indice = np.random.permutation(len(image_list))[:int(len(image_list)*percentage/100)]
return np.array([image_list[x] for x in indice]),np.array([labels[x] for x in indice]),np.array(classes)
关于python - 创建自定义数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48856444/