从MATLAB到Python的caffe网络正向转换问题

从MATLAB到Python的caffe网络正向转换问题,python,matlab,caffe,Python,Matlab,Caffe,我正在尝试将一些MATLAB代码转换为Python,因为我在MATLAB上运行代码时失败(每当我运行它时,它就会崩溃)。到目前为止,我已经完成了代码的转换并运行了它,但是结果是非常错误的。所以我试着调试它,有些代码仍然给我不确定性,因为我不能在MATLAB上检查结果 这是我想要转换的MATLAB代码 %准备图像 im=重塑(im,[尺寸(im)]);im=单个(im)/255; im_data=im(:,:,[3,2,1]);%从RGB到BGR的通道排列 im_数据=排列(im_数据[2,1,3

我正在尝试将一些MATLAB代码转换为Python,因为我在MATLAB上运行代码时失败(每当我运行它时,它就会崩溃)。到目前为止,我已经完成了代码的转换并运行了它,但是结果是非常错误的。所以我试着调试它,有些代码仍然给我不确定性,因为我不能在MATLAB上检查结果

这是我想要转换的MATLAB代码

%准备图像
im=重塑(im,[尺寸(im)]);im=单个(im)/255;
im_data=im(:,:,[3,2,1]);%从RGB到BGR的通道排列
im_数据=排列(im_数据[2,1,3]);
%传递图像
out_im=net.forward({im_data});
n_out=out_im{2};al_out=out_im{1};light_out=out_im{3};
这是我创建的Python代码

#准备图像(旋转、翻转、更改颜色、重塑形状)
im=np.重塑(im,(im.形状))
im=np.32(im)/255
#已在顶部转换为BGR
#im_数据=cv2.CVT颜色(im,cv2.COLOR_RGB2BGR)
#迪巴利克拉鲁迪基里酒店
im_data=np.转置(im,(1,0,2))
im_data=np.moveaxis(im_data,-1,0)
im_输入=im_数据[np.newaxis,:,:,:]
net.blobs['data'].重塑(*im_input.shape)
net.blobs['data'].data[…]=im_输入
#传递图像
out_im=net.forward()
n_out=out_im['Nconv0'][0]
al_out=out_im['Aconv0'][0]
light\u out=out\u im['fc\u light'][0]
我试着按照caffe用户的教程,输入应该是(N,通道,宽度,高度),所以我将输入转换为(1,3128128),但在MATLAB代码中,我相信形状是(宽度,高度,通道)。上次我试着用3维输入时,我得到了一个错误。

转置时,它是(2,0,1),而不是(1,0,2)

试试这个

inputs = cv.resize(inputs,(128,128))
inputs = inputs * 0.00390625
inputs = inputs.transpose((2,0,1))
inputs = inputs[None,:]
net.forward_all( data = inputs )

请再试一次

您好,谢谢您指出这一点,但我认为我的转置和移动轴组合的结果将与您的答案相同,因此结果仍然相同,但代码更少。我以后再修。我已经试过修改你的代码,输出仍然是一样的,那么这是否意味着这部分代码没有问题呢?我想你应该减去平均值。你使用的是什么网络?我会在完成下面转置问题的修复后立即尝试。似乎我对转置有问题,我不知道他们会把输入从(w,h,d)变成(d,h,w)Hi,所以显然在纠正了所有转置后,我最终得到了我想要的结果,既然你帮我指出了转置问题,我会把第一个标记为答案。我也试过你在这篇文章上的建议,但结果是非常错误的。非常感谢。
inputs = cv.resize(inputs,(128,128))
inputs = inputs * 0.00390625
inputs = inputs.transpose((2,0,1))
inputs = inputs[None,:]
net.forward_all( data = inputs )