Closed sunbinbin1991 closed 6 years ago
看起来不是第二个问题,BLOB_name就是需要修改的
应该是模型转化的问题,调试发现转化后的最后一层C那个值不对,正常应该是显示类别数2,原始的模型是C=1000,不知道模型转化具体哪里有问题
原始模型的输出,两者是不一样
以前转换caffe的模型也和pc端不一致,不知道现在解决了没有.求解
http://data.dmlc.ml/models/imagenet/squeezenet/ 这里下载的 squeezenet_v1.1-symbol.json squeezenet_v1.1-0000.params 测试了下没问题
跟 caffe 模型的区别是输出的 prob Mat 是 1000 x 1 x 1
@nihui ,多谢回答,之前有个issue,测试是批处理导致结果不一致而这个squeezenet_v1.1中没有用到批处理,不知道是否有测试批处理,多谢!
问题的原因是我用到了flatten层,所以模型转换有问题,@nihui大佬有时间能写一下就好了
试了一下模型转换,结果其中w和c的位置还是颠倒的(使用的是http://data.dmlc.ml/models/imagenet/squeezenet/的模型)
mxnet 模型输出的 prob Mat 是 1000 x 1 x 1 caffe 模型输出的 prob Mat 是 1 x 1 x 1000 squeezenet 没有问题
我在window上测试也是1000✘1✘1,没问题,不过使用我自己编译好的.so文件,却读不出每一层的结果,不知道哪里出现问题,自行编译的so,然后又尝试使用ndk-build编译得到的so文件,都不行,使用是给出的android-ncnn库,不知道哪里的问题
我这边的原因暂时找到了,编译的so文件要对应上具体的模型。一方面jni中Blob_name需要改,同时,Android上应该使用最终的二进制文件(.bin)(..proto的不行): 而pc上VS可以用.proto,判断模型有没有load进去,可以查看打印的值:
背景: 1:使用的是mxnet,使用的模型为修改后的squzenetnet,修改了输入(128128)和最后的一个卷积层. 2:更改了squzenetncnn.jni(只有输入大小),按照非常规方法https://github.com/GarrickLin/cmake_build_ndk,编译出可用的。libsquzenetncnn.so, 3::按照ncnn官方提示在编译出mxnet2ncnn.exe,ncnn2mem.exe,是的原来模型能够输入,获得了如下三个ncnn.bin,ncnn.proto.bin和ncnn.id.h文件 4:直接将 @dangbo 文件中的部分输入修改,并替换libsquzenetncnn.so 结果: 1:模型解决的是二分类问题,然而一直预测的只有一个类,并且结果为‘1’ 猜测: 1:通过背景2方法修改后的jni,编译后获得。so文件是能够显示修改后的变化的,就是说。so文件出错概率不高 2:使用的官网给出的libncnn.a编译而出的。so不知道是否有影响 3:由于在编译过程中提示出过一个错误: 这里修改过。主要是因为生成的ncnn.id.h不一样,如下图(左边改后,右边原始): 求教,预测结果不一致的可能原因 @nihui