2015-11-20 2 views
6

के साथ पायथन में वीजीजी फेस डिस्क्रिप्टर मैं पाइथन में VGG Face Descriptor लागू करना चाहता हूं।कैग

TypeError: can only concatenate list (not "numpy.ndarray") to list

मेरे कोड:

import numpy as np 
import cv2 
import caffe 
img = cv2.imread("ak.png") 
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) 
net = caffe.Net("VGG_FACE_deploy.prototxt","VGG_FACE.caffemodel", caffe.TEST) 
print net.forward(img) 

आप मेरी मदद कर सकते लेकिन मैं एक त्रुटि प्राप्त हो रही?

अद्यतन 1

यह काम कर कोड matlab में उदाहरण

% Copyright (c) 2015, Omkar M. Parkhi 
% All rights reserved. 
img = imread('ak.png'); 
img = single(img); 

    Img = [129.1863,104.7624,93.5940] ; 

img = cat(3,img(:,:,1)-averageImage(1),... 
    img(:,:,2)-averageImage(2),... 
    img(:,:,3)-averageImage(3)); 

img = img(:, :, [3, 2, 1]); % convert from RGB to BGR 
img = permute(img, [2, 1, 3]); % permute width and height 

model = 'VGG_FACE_16_deploy.prototxt'; 
weights = 'VGG_FACE.caffemodel'; 
caffe.set_mode_cpu(); 
net = caffe.Net(model, weights, 'test'); % create net and load weights 

res = net.forward({img}); 
prob = res{1}; 

caffe_ft = net.blobs('fc7').get_data(); 
+0

आप 'caffe.io.load_image' का उपयोग क्यों नहीं कर रहे हैं? – Shai

+0

यदि मैं 'caffe.io.load_image' को आज़माता हूं तो मुझे एक ही त्रुटि मिलती है 'TypeError: केवल सूची को जोड़ सकता है (" numpy.ndarray "नहीं) सूची में। यदि मैं विधि में एक तत्व सूची को पास करने का प्रयास करता हूं तो मुझे त्रुटि मिलती है 'TypeError: unhashable type:' numpy.ndarray'' – Iwn

+0

'forward' के बजाय' net.forward_all' आज़माएं। – Shai

उत्तर

7

अजगर इंटरफ़ेस का उपयोग करने के लिए आप नेट

img = caffe.io.load_image("ak.png") 
img = img[:,:,::-1]*255.0 # convert RGB->BGR 
avg = np.array([93.5940, 104.7624, 129.1863]) # BGR mean values 
img = img - avg # subtract mean (numpy takes care of dimensions :) 

करने के लिए इसे खिला अब imgH -by- W -by-3 numpy सरणी है से पहले इनपुट छवि को बदलने की जरूरत है।
कैफे 4 डी के रूप में इसके इनपुट की अपेक्षा करता है: batch_index x चैनल x चौड़ाई x ऊंचाई।
इसलिए आप इनपुट transpose और प्रमुख आयाम

img = img.transpose((2,0,1)) 
img = img[None,:] # add singleton dimension 

अब आप फॉरवर्ड पास बीजीआर में

out = net.forward_all(data = img) 
+0

@Iwn आप का स्वागत है;) – Shai

+0

यह औसत कहां से आता है? – maxbellec

+0

@maxou यह सवाल का हिस्सा था। – Shai

0

विधि के लिए एक एकल तत्व सूची गुजर प्रयास करें है।

net.forward ([img]) 
+1

Whetn मैं इसे करने की कोशिश मैं इस त्रुटि मिलती है: लेखन त्रुटि: unhashable प्रकार: 'numpy।ndarray ' – Iwn

1

OpenCV पढ़ता चलाने के लिए और करने के लिए बढ़ाया जा सकता है "batch_index" का प्रतिनिधित्व करने के लिए एक सिंगलटन आयाम जोड़ने की जरूरत डिफ़ॉल्ट रूप से 255 प्रारूप, इसलिए:

img = cv2.imread('ak.png') 
avg = np.array([93.5940,104.7624,129.1863]) # BGR mean from VGG 
img -= avg # subtract mean 
img = img.transpose((2,0,1)) # to match image input dimension: 3x224x224 
img = img[None,:] # add singleton dimension to match batch dimension 
out = net.forward_all(data = img)