当前位置: 首页 > 知识库问答 >
问题:

图像识别-Tensorflow

宇文和同
2023-03-14

我正在使用卷积神经网络(CNN)对30种不同的水果进行图像检测。我目前拥有的数据集由“训练”和“测试”文件夹组成,每个文件夹都有30个不同类的子目录。

“train”文件夹共有671个jpg文件,“test”文件夹共有300个jpg文件。

我编写的实现图像检测的Python代码如下-

from keras.preprocessing.image import ImageDataGenerator
import numpy as np
import matplotlib.pyplot as plt
from keras.utils import to_categorical
from keras.models import Sequential
from keras.layers import Dense, Conv2D, Flatten, Dropout
from keras.layers.convolutional import MaxPooling2D
from keras import backend as K
from sklearn.metrics import accuracy_score, precision_score, recall_score


# Read in images from 'train' folder-
train_datagen = ImageDataGenerator(
    rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True
)

train_generator = train_datagen.flow_from_directory(
    directory=r"./train/", target_size=(420, 420), color_mode="rgb",
    batch_size=30, class_mode="categorical", shuffle=True
    )
# O/P-
# Found 671 images belonging to 30 classes.


# Read in images from 'test' folder-
test_datagen = ImageDataGenerator(
    rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True
)

valid_generator = test_datagen.flow_from_directory(
    directory=r"./test/", target_size=(420, 420), color_mode="rgb", batch_size=30,
    class_mode="categorical", shuffle=True
    )
# O/P-
# Found 300 images belonging to 30 classes.




# Dimensions of our image(s)-
img_width, img_height = 420, 420

if K.image_data_format() == 'channels_first':
    input_shape = (3, img_width, img_height)
else:
    input_shape = (img_width, img_height, 3)

print("\ninput_shape = {0}\n\n".format(input_shape))
# input_shape = (420, 420, 3)




# Build the CNN-

model = Sequential()

# model.add(Conv2D(32, (5, 5), input_shape = (32, 32, 3), activation = 'relu'))
model.add(Conv2D(32, (3, 3), input_shape = input_shape, activation = 'relu'))
# model.add(Conv2D(32, (3, 3), activation = 'relu'))
# model.add(Dense(40, activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(Dropout(0.2))
# model.add(Conv2D(64, (3, 3), activation = 'relu'))
model.add(Conv2D(64, (3, 3), activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(Dropout(0.2))
model.add(Flatten())
# model.add(Dense(512, activation = 'relu'))
model.add(Dense(128, activation = 'relu'))
model.add(Dense(30, activation = 'softmax'))


# Compiling the model-
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics = ['accuracy'])


STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size
STEP_SIZE_VALID=valid_generator.n//valid_generator.batch_size

model.fit_generator(generator=train_generator, steps_per_epoch=STEP_SIZE_TRAIN, epochs=5)

当我尝试执行此代码时,我得到以下消息-

使用TensorFlow后端。找到了属于30个类别的671张图片。找到了300张属于30类的图片。

input_shape=(420, 420, 3)

纪元1/5 2019-02-12 14:48:18.088495:I tensorflow/core/platform/cpu_feature_guard.cc:141]您的cpu支持未编译此tensorflow二进制文件以使用的指令:AVX2 FMA 2019-02-12 14:48:23.270184:W tensorflow/core/framework/allocator.cc:122]670940160的分配超过系统内存的10%。2019-02-12 14:48:31.747262:W tensorflow/core/framework/allocator.cc:122]670940160的分配超过了系统内存的10%。

在此之后,我的系统挂起,我必须重新启动系统。这种情况已经发生了4次。我的系统有英特尔酷睿i5@2.2 GHz与8 GB内存。

怎么了?

共有1个答案

韦辰钊
2023-03-14

尝试将batch_size属性减少到像1或2这样的小数字,然后执行

train_generator = data_generator.flow_from_directory(
    'path_to_the_training_set',
    target_size = (IMG_SIZE,IMG_SIZE),
    batch_size = 2,
    class_mode = 'categorical'
    )

请参考以下链接https://github.com/tensorflow/tensorflow/issues/18736

希望这能有所帮助。

 类似资料:
  • TensorFlow包含图像识别的特殊功能,这些图像存储在特定文件夹中。出于安全目的,经常要识别相同的图像,这个逻辑很容易实现。 图像识别代码实现的文件夹结构如下所示 - dataset_image 文件夹中包含需要加载的相关图像。这里将专注于图像识别,其中定义了徽标。加载“load_data.py”脚本,它记录各种图像识别模块。 图像的训练用于将可识别的图案存储在指定的文件夹中。 上面的代码行生

  • 更新时间:2019-07-19 10:48:36 节点简介 人脸识别/图像识别/OCR节点属于智能节点,区别在于封装的云市场api功能不同。人脸识别节点主要有人数检测、人脸身份证对比、性别年龄情绪识别等功能。图像识别节点主要有烟雾火焰火灾识别、动物识别、植物识别、植物花卉识别等功能。OCR节点主要有驾驶证识别、车牌识别、身份证识别等功能。 使用场景 如果您需要进行人数检测、人脸身份证对比、性别年龄

  • 问题内容: 我一直在寻找网络上图像识别数字的资源。我发现许多链接提供了有关该主题的大量资源。但不幸的是,这比提供帮助更令人困惑,我不知道从哪里开始。 我有一个带有5个数字的图像,没有打扰(没有验证码或类似的东西)。数字在白色背景上为黑色,以标准字体书写。 我的第一步是分离数字。我当前使用的算法非常简单,它只是检查一列是否完全为白色,因此是否为空格。然后,它会修剪每个字符,以使其周围没有白色边框。这

  • 嗨 我们如何识别空白图像(白色图像), 我传递的图像是空的,有一些高度和宽度,我想识别它

  • 问题内容: 我正在寻找一个Java框架来帮助进行一些特定于图像的数据挖掘。我们有一组历史图像,我想对其进行分类和分类。我希望找到类似weka的东西http://www.cs.waikato.ac.nz/ml/weka/或Marsyas http://marsyas.sness.net,但更特定于通过图像数据进行筛选以找到图案。有什么建议? 问题答案: 如何使用OpenCV 库进行处理?从技术上讲,

  • 问题内容: 我在Visual Studio 2013中运行Python 2.7。以前在Spyder中运行该代码正常,但是在运行时: 我最终遇到以下错误: 为什么会这样,我该如何解决? 如建议的那样,我已经在我的Python 2.7中使用了Pillow安装程序。但是奇怪的是,我最终得到了这个: 都失败了! 问题答案: 我有一个同样的问题。 代替 解决了这个问题