我是一名初学者,正在使用该keras_flow_from_dataframe课程训练有关糖尿病视网膜病变的图像数据集。但是我的模型一直欠拟合。因此,我尝试使用 OpenCV 的自适应阈值实现,通过编写要在我的图像数据生成器类中传递的自定义预处理函数来进行预处理。当我在 Keras 之外使用它时,该函数运行良好,但是当我将它添加到我的图像数据生成器类并适合我的模型时,它会bad argument type for built-in operation在我的第一个纪元开始之前返回一个类型错误。这是预处理代码:def preprocess(im): im = cv2.imread(im, 1) im= cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) im=cv2.resize(im, (300,300)) im.resize(300, 300, 1) block_size = 73 constant = 2 # ADAPTIVE GAUSSIAN THRESHOLDING thr2 = cv2.adaptiveThreshold(im, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, block_size, constant) return thr2当我用数据帧中的图像测试它时,它在 Keras 之外运行良好,但是当我将它添加到我的图像数据生成器类时,它会引发错误。train_datagen = ImageDataGenerator( rotation_range=30, width_shift_range=0.4, height_shift_range=0.4, shear_range=0.3, zoom_range=0.3, horizontal_flip = True, fill_mode='nearest', preprocessing_function = preprocess)valid_datagen = ImageDataGenerator(preprocessing_function = preprocess)然后我从数据帧加载我的数据集:from keras.preprocessing.image import ImageDataGeneratortraingen = train_datagen.flow_from_dataframe(x_train, x_col='path', y_col='level',class_mode='other', target_size=(300,300), color_mode='grayscale', batch_size=16)validgen = valid_datagen.flow_from_dataframe(valid, x_col='path', y_col='level',class_mode='other', target_size=(300,300), color_mode='grayscale', batch_size=16)然后我使用 拟合模型model.fit_generator,然后抛出类型错误:bad argument type for built-in operation。
2 回答
慕田峪9158850
TA贡献1794条经验 获得超7个赞
我遇到了像你这样的问题,我的老师通过将它指向 tf preprocess_function 的文档来帮助我,它说preprocess_function
参数是一个图像,你可以阅读更多关于这个的信息。
这就是为什么它会在cv2.imread(image)
. 您应该删除该行,因为im
它是生成器为您提供的图像。不需要加载它,因为它已经加载了
我的一个很好用,希望你的也很好。
POPMUISE
TA贡献1765条经验 获得超5个赞
我认为问题在于 Keras 解析 openCV 输出,因为当我使用另一个库执行名为 ImgAUg 的处理时,它运行良好。这是链接。https://pypi.org/project/imgaug/。
所以我只是用库编写了一个预处理函数的脚本,然后我将它传递给了 keras imageDataGenerator 类。它运行良好,并没有向我抛出任何错误。
添加回答
举报
0/150
提交
取消