考虑一下,我有一组手表的图像,我愿意使用CNN来识别其他手表,但是其中有问题。问题是为了使分类算法正常工作,我们需要另一个类(二进制分类)。
所以我添加了另一个类,现在我有两组图像。第一组是单独的手表图像,另一组是一些随机图像(没有手表的任何图像)。我的准确度很低。
您能举一个如何使用CNN来实现它的示例吗?仅使用一组图像来识别其他图像?例如CNN中的对象识别。
我尝试了以下代码:
from keras.models import Sequential
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
# For preprocessing
from keras.preprocessing.image import load_img, img_to_array
# For numeric computation
import numpy as np
classifier = Sequential()
# Add our first convolutional layer
classifier.add(Convolution2D(32, 3, 3, input_shape=(64,64,3), activation="relu"))
classifier.add(MaxPooling2D(pool_size=(2,2)))
# Add our second convolution layer
classifier.add(Convolution2D(64, 3,3, activation="relu"))
classifier.add(MaxPooling2D(pool_size=(2, 2)))
# Add the dense layers and compile the classifier
classifier.add(Dense(output_dim=1000, activation="sigmoid"))
classifier.add(Dense(output_dim=1, activation="sigmoid"))
classifier.compile(optimizer="sgd", loss="binary_crossentropy", metrics=["accuracy"])
# Create training data
X_train = []
y_train = []
# And the necessary libaries to load the images
import glob
plastic = glob.glob("watches/*.*")
paper = glob.glob("random/*.*")
for i in plastic:
array = img_to_array(load_img(i, target_size=(64, 64)))
X_train.append(array)
y_train.append(1)
for i in paper:
array = img_to_array(load_img(i, target_size=(64, 64)))
X_train.append(array)
y_train.append(0)
X_train = np.array(X_train)
y_train = np.array(y_train)
classifier.fit(X_train, y_train, batch_size=20, epochs=100)
我知道ResNet和其他类似的体系结构,但是我需要检测自定义对象。