tutorial learning instalar python computer-vision neural-network deep-learning caffe

learning - Cómo acelerar caffe classifer en python



install caffe pip (2)

Estoy usando python para usar clasificador caffe. Obtuve la imagen de mi cámara y realicé la imagen de predicción del conjunto de entrenamiento. Funciona bien, pero el problema es la velocidad muy lenta. Pienso solo 4 cuadros / segundo. ¿Podría sugerirme alguna forma de mejorar el tiempo de cálculo en mi código? El problema se puede explicar de la siguiente manera. Tengo que volver a cargar un modelo de red age_net.caffemodel que su tamaño es de aproximadamente age_net.caffemodel siguiendo el código

age_net_pretrained=''./age_net.caffemodel'' age_net_model_file=''./deploy_age.prototxt'' age_net = caffe.Classifier(age_net_model_file, age_net_pretrained, mean=mean, channel_swap=(2,1,0), raw_scale=255, image_dims=(256, 256))

Y para cada imagen de entrada ( caffe_input ), llamo a la función de predicción

prediction = age_net.predict([caffe_input])

Creo que debido al tamaño de la red es muy grande. Luego, predecir la función lleva mucho tiempo para predecir la imagen. Creo que el tiempo lento es de eso.
Este es mi código de referencia completo. Cambió por mí.

from conv_net import * import matplotlib.pyplot as plt import numpy as np import cv2 import glob import os caffe_root = ''./caffe'' import sys sys.path.insert(0, caffe_root + ''python'') import caffe DATA_PATH = ''./face/'' cnn_params = ''./params/gender_5x5_5_5x5_10.param'' face_params = ''./params/haarcascade_frontalface_alt.xml'' def format_frame(frame): img = frame.astype(np.float32)/255. img = img[...,::-1] return img if __name__ == ''__main__'': files = glob.glob(os.path.join(DATA_PATH, ''*.*'')) # This is the configuration of the full convolutional part of the CNN # `d` is a list of dicts, where each dict represents a convolution-maxpooling # layer. # Eg c1 - first layer, convolution window size # p1 - first layer pooling window size # f_in1 - first layer no. of input feature arrays # f_out1 - first layer no. of output feature arrays d = [{''c1'':(5,5), ''p1'':(2,2), ''f_in1'':1, ''f_out1'':5}, {''c2'':(5,5), ''p2'':(2,2), ''f_in2'':5, ''f_out2'':10}] # This is the configuration of the mlp part of the CNN # first tuple has the fan_in and fan_out of the input layer # of the mlp and so on. nnet = [(800,256),(256,2)] c = ConvNet(d,nnet, (45,45)) c.load_params(cnn_params) face_cascade = cv2.CascadeClassifier(face_params) cap = cv2.VideoCapture(0) cv2.namedWindow("Image", cv2.WINDOW_NORMAL) plt.rcParams[''figure.figsize''] = (10, 10) plt.rcParams[''image.interpolation''] = ''nearest'' plt.rcParams[''image.cmap''] = ''gray'' mean_filename=''./mean.binaryproto'' proto_data = open(mean_filename, "rb").read() a = caffe.io.caffe_pb2.BlobProto.FromString(proto_data) mean = caffe.io.blobproto_to_array(a)[0] age_net_pretrained=''./age_net.caffemodel'' age_net_model_file=''./deploy_age.prototxt'' age_net = caffe.Classifier(age_net_model_file, age_net_pretrained, mean=mean, channel_swap=(2,1,0), raw_scale=255, image_dims=(256, 256)) age_list=[''(0, 2)'',''(4, 6)'',''(8, 12)'',''(15, 20)'',''(25, 32)'',''(38, 43)'',''(48, 53)'',''(60, 100)''] while(True): val, image = cap.read() if image is None: break image = cv2.resize(image, (320,240)) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5, minSize=(30,30)) for f in faces: x,y,w,h = f cv2.rectangle(image, (x,y), (x+w,y+h), (0,255,255)) face_image_rgb = image[y:y+h, x:x+w] caffe_input = cv2.resize(face_image_rgb, (256, 256)).astype(np.float32) prediction = age_net.predict([caffe_input]) print ''predicted age:'', age_list[prediction[0].argmax()] cv2.imshow(''Image'', image) ch = 0xFF & cv2.waitKey(1) if ch == 27: break #break


Intenta llamar a age_net.predict([caffe_input]) con oversmaple=False :

prediction = age_net.predict([caffe_input], oversample=False)

El comportamiento predeterminado de predict es crear 10 cultivos ligeramente diferentes de la imagen de entrada y alimentarlos a la red para clasificar, al deshabilitar esta opción, debe obtener una aceleración x10.