Android 如何获得我对caffe mobile预测的信心?
我正在努力获得我对caffe mobile的预测的信心。在python中,很容易获得它,我只是:Android 如何获得我对caffe mobile预测的信心?,android,android-ndk,convolution,caffe,conv-neural-network,Android,Android Ndk,Convolution,Caffe,Conv Neural Network,我正在努力获得我对caffe mobile的预测的信心。在python中,很容易获得它,我只是: prediction = mNet.predict([image]) print prediction 我得到以下输出: [ 0.32693869 0.20242123 0.26447725 0.20616281] Caffe 1.0 Caffe 0.0 Caffe 0.0 Caffe 0.0 我有四节课,所以这些是我班的信心 在android上,如果我这样做: int[] predic
prediction = mNet.predict([image])
print prediction
我得到以下输出:
[ 0.32693869 0.20242123 0.26447725 0.20616281]
Caffe 1.0
Caffe 0.0
Caffe 0.0
Caffe 0.0
我有四节课,所以这些是我班的信心
在android上,如果我这样做:
int[] prediction = caffeMobile.predictImage(imgPath);
for (int i = 0; i < prediction.length; i++) {
Log.i("Caffe", String.valueOf(prediction[i]));
}
我认为我必须实现这个方法,因为prediction
的大小是1。但我如何改变,我必须改变哪些文件才能让它在android上工作
那么,我如何使用android来实现这一点呢
更新:
我在caffe_jni.cpp中添加了以下内容:
JNIEXPORT jfloatArray JNICALL
Java_com_sh1r0_caffe_1android_1lib_CaffeMobile_getConfidence(JNIEnv *env,
jobject thiz,
jstring imgPath) {
CaffeMobile *caffe_mobile = CaffeMobile::Get();
vector<float> confidence = caffe_mobile->GetConfidence(jstring2string(env, imgPath));
jfloatArray result;
result = env->NewFloatArray(4);
if (result == NULL) {
return NULL; /* out of memory error thrown */
}
env->SetFloatArrayRegion(result, 0, 4, &confidence[0]);
return result;
}
vector<float> CaffeMobile::GetConfidence(const string &img_path) {
const vector<float> probs = Forward(img_path);
return probs;
}
我将此添加到caffe android类:
public native float[] getConfidence(String imgPath);
并称之为这个方法
float[] confidence = caffeMobile.getConfidence(imgPath);
但是,它只返回一个四舍五入的值(我认为)
如果4
,则输出(我有4个类)
因此:
或者,如果尝试将标记为2的图像分类,则这是输出:
Caffe 0.0
Caffe 1.0
Caffe 0.0
Caffe 0.0
我做错了什么,还是不可能
for (int i = 0; i < confidence.length; i++) {
Log.i("Caffe", String.valueOf(confidence[i]));
}
Caffe 1.0
Caffe 0.0
Caffe 0.0
Caffe 0.0
Caffe 0.0
Caffe 1.0
Caffe 0.0
Caffe 0.0