CNN:如何提高预测速度?

时间:2017-09-07 12:17:11

标签: performance computer-vision keras conv-neural-network

我使用CNN(Keras / Theano)识别数独谜题中的给定数字。因为我在"增强现实中显示解决方案"我正在寻找最小化图像处理任务和数字识别任务的速度,以便显示保持平滑。目前,我获得每秒7帧的速率(您可以在这里查看:Augmented Reality Sudoku solver : OpenCV, Keras

处理时间的很大一部分花费在预测任务上:对每个小的非空方块(其中带有数字的正方形)进行预测。平均来说,一个预测需要3.6毫秒,一个拼图有大约25个非空方块,所以每个图像大约90毫秒只是为了识别给定的数字。

我用于预测任务的CNN模型几乎就是F.Chollet在Keras MNIST example中提出的模型:

img_rows, img_cols = 28, 28 # Image size of the small square
num_classes = 9  # We want to recognize the numbers from 1 to 9
input_shape = (1, img_rows, img_cols)
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
             activation='relu',
             input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
          optimizer=keras.optimizers.Adadelta(),
          metrics=['accuracy'])

我使用这个模型获得的准确度非常好,非常好,我想知道我是否可以使用"更小的"模型。我认为较小的模型也意味着更快(我只关注预测速度的提高,训练速度并不重要)。

你认为我的假设("较小意味着更快")是正确的,是否值得尝试制作更小的模型?在卷积部分和密集部分之间,哪个(s)我应该尝试缩小?

关于如何提高预测速度的其他建议?

谢谢

编辑:

我的CPU是旧的i5 4210U,没有nvidia GPU。

预测代码:

def predict(img): # img: 28x28 binary image

   img = img.astype('float32')
   img /= 255.
   result=model.predict(np.array([[img]]))
   result=result[0]        
   idx=np.argsort(result)
   best=idx[-1]+1
   return best,result[best-1]

0 个答案:

没有答案