【发布时间】:2019-08-12 21:07:25
【问题描述】:
我是 python 和图像处理的初学者和新手。对于一个大学项目,我试图训练一种地区语言的字符识别。我有一个非常庞大的数据集(大约 90000 张图像)。下面的代码部分用于将图像提取到数据集。但是,当我运行代码时,它会耗尽我的 8gb RAM 并且我的电脑会死机。这可能是由于处理了大量图像。
我的 PC 规格:Intel Core I5 第 8 代 8GB RAM NVIDIA Geforce GTX 1060 6GB。
是否有任何解决方法以便我可以在我的 PC 上运行它?任何帮助将不胜感激。
%matplotlib inline
root_dir = os.getcwd()
img_dir = os.path.join(root_dir, 'images')
pixels = np.array(['pixel_{:04d}'.format(x) for x in range(1024)])
flag = True
for char_name in sorted(os.listdir(img_dir)):
char_dir = os.path.join(img_dir, char_name)
img_df = pd.DataFrame(columns=pixels)
for img_file in sorted(os.listdir(char_dir)):
image = pd.Series(imageio.imread(os.path.join(char_dir, img_file)).flatten(), index=pixels)
img_df = img_df.append(image.T, ignore_index=True)
img_df = img_df.astype(np.uint8)
img_df['character'] = char_name
img_df.to_csv('data.csv', index=False, mode='a', header=flag)
flag=False
print('=', end='')
df = pd.read_csv('data.csv')
df['character_class'] = LabelEncoder().fit_transform(df.character)
df.drop('character', axis=1, inplace=True)
df = df.astype(np.uint8)
【问题讨论】:
-
我看到您正在使用数据框。您实际使用什么库进行培训?也许它不必接受一个充满图像的巨大数据框。
-
我实际上是在尝试使用这个link
-
我看到你手动创建了一个进度条。你应该寻找
tqdm包,它会让你的生活更轻松。 -
如果我错了,请原谅我,但是将大量内容附加到
.csv文件非常消耗内存。我会保存在单独的 CSV 中。最终,我会使用泡菜,因为它比字符串更快的序列化。 -
我的问题是代码试图首先将所有图像读入 RAM 然后处理它们,而不是读取一个图像,处理它,删除加载的图像,读取下一个图像,处理它,等等。
标签: python python-3.x python-2.7 dataset ocr