2017-04-06 1 views
0

J'ai observé que les caractéristiques sont remplacées lorsque je les extrait en utilisant pycaffe. Mon code est le suivant:Pourquoi les fonctionnalités sont remplacées lors de l'extraction à l'aide de pycaffe?

tImg_1 = misc.imread('1.jpg') 
tImg_1 = tImg_1[:,:,::-1] # color channel swap 
tImg_2 = misc.imread('2.jpg') 
tImg_2 = tImg_2[:,:,::-1] # color channel swap 

tImg_1 = (np.float32(tImg_1)- 127.5)/128 # mean substruction 
tImg_2 = (np.float32(tImg_2)- 127.5)/128 # mean substruction 

tI_1 = np.moveaxis(tImg_1, 0, 1) # Transpose 
tI_2 = np.moveaxis(tImg_2, 0, 1) # Transpose 

# Extract features 
tI_1 = np.reshape(tImg_1, (1, tImg_1.shape[2], tImg_1.shape[0], tImg_1.shape[1])) 
tI_2 = np.reshape(tImg_2, (1, tImg_2.shape[2], tImg_2.shape[0],  tImg_2.shape[1]))     

net.blobs['data'].data[...] = tI_1 
net.forward() 
fts_1 = net.blobs['fc5'].data 
print(fts_1[0, 0])     

net.blobs['data'].data[...] = tI_2 
net.forward() 
fts_2 = net.blobs['fc5'].data     

print(fts_2[0, 0])     
print(fts_1[0, 0]) 

L'exécution de cette fournit la sortie suivante:

0.508398 
-0.176945 
-0.176945 

Cela signifie que les valeurs de fts_1 est remplacé par fts_2. Comment puis-je éviter ce problème?

Répondre

1

fts_1 est juste pointant vers net.blobs['fc5'].data. Vous devez faire une copie profonde de l'objet. Donc, votre première affectation devrait être fts_1 = copy.deepcopy(net.blobs['fc5'].data)

+0

Merci. Alors ceci est un problème spécifique de python. Rien à voir avec le café! – Hasnat