Hi, Qcom
I've done these for android example inception_v3 according to bofu's suggestion:
https://developer.qualcomm.com/forum/qdn-forums/software/snapdragon-neur...
And my questions are:
1st, "Error 45: fopen failed for oemconfig.so." what's the logcat error and should I fix it for inception_v3?
2nd, what I missed?
I don't find any information about the logcat error:"com.qualcomm.qti.snpe.NeuralNetwork$InvalidInput: Tensor not amongst network input tensors: data"
My patches for SNPE running inception_V3 show below:
1st, app/src/main/java/com/qualcomm/qti/snpe/imageclassifiers/ModelCatalogueFragmentController.java
@@ -40,7 +40,7 @@ public class ModelCatalogueFragmentController extends
}
private void startModelsExtraction() {
- ModelExtractionService.extractModel(mContext, "alexnet", R.raw.alexnet);
+ ModelExtractionService.extractModel(mContext, "inception_v3", R.raw.inception_v3);
}
2nd,app/src/main/java/com/qualcomm/qti/snpe/imageclassifiers/tasks/ClassifyImageTask.java
@@ -29,7 +29,7 @@ public class ClassifyImageTask extends AsyncTask<Bitmap, Void, String[]> {
private static final String LOG_TAG = ClassifyImageTask.class.getSimpleName();
- public static final String OUTPUT_LAYER = "prob";
+ public static final String OUTPUT_LAYER = "softmax:0";
private static final int FLOAT_SIZE = 4;
@@ -54,7 +54,7 @@ public class ClassifyImageTask extends AsyncTask<Bitmap, Void, String[]> {
final List<String> result = new LinkedList<>();
final FloatTensor tensor = mNeuralNetwork.createFloatTensor(
- mNeuralNetwork.getInputTensorsShapes().get("data"));
+ mNeuralNetwork.getInputTensorsShapes().get("Mul:0"));
final int[] dimensions = tensor.getShape();
final FloatBuffer meanImage = loadMeanImageIfAvailable(mModel.meanImage, tensor.getSize());
@@ -95,15 +95,20 @@ public class ClassifyImageTask extends AsyncTask<Bitmap, Void, String[]> {
}
private void writeRgbBitmapAsFloat(Bitmap image, FloatBuffer meanImage, FloatTensor tensor) {
+ int imageMean = 128;
+ float imageStd = 128.0f;
final int[] pixels = new int[image.getWidth() * image.getHeight()];
image.getPixels(pixels, 0, image.getWidth(), 0, 0,
image.getWidth(), image.getHeight());
for (int y = 0; y < image.getHeight(); y++) {
for (int x = 0; x < image.getWidth(); x++) {
final int rgb = pixels[y * image.getWidth() + x];
- float b = ((rgb) & 0xFF) - meanImage.get();
- float g = ((rgb >> 8) & 0xFF) - meanImage.get();
- float r = ((rgb >> 16) & 0xFF) - meanImage.get();
+ //float b = ((rgb) & 0xFF) - meanImage.get();
+ float b = (((rgb) & 0xFF) - imageMean) / imageStd; // imageMean = 128, imageStd = 128.0f
+ //float g = ((rgb >> 8) & 0xFF) - meanImage.get();
+ float g = (((rgb >> 8) & 0xFF) - imageMean) / imageStd; // imageMean = 128, imageStd = 128.0f
+ //float r = ((rgb >> 16) & 0xFF) - meanImage.get();
+ float r = (((rgb >> 16) & 0xFF) - imageMean) / imageStd; // imageMean = 128, imageStd = 128.0f
3rd, app/src/main/java/com/qualcomm/qti/snpe/imageclassifiers/ModelOverviewFragment.java
@@ -150,7 +150,7 @@ public class ModelOverviewFragment extends Fragment {
}
public void setNetworkDimensions(Map<String, int[]> inputDimensions) {
- mDimensionsText.setText(Arrays.toString(inputDimensions.get("data")));
+ mDimensionsText.setText(Arrays.toString(inputDimensions.get("Mul:0")));
}
But it crashed when I choose one of the picture in this SNPE application and showed: SNPE Image Classifiers has stopped.
And here are logs:
02-06 21:29:19.422 24875-24991/com.qualcomm.qti.snpe.imageclassifiers E/com.qualcomm.qti.snpe.imageclassifiers: vendor/qcom/proprietary/adsprpc/src/apps_std_imp.c:538:Error 45: fopen failed for oemconfig.so. (No such file or directory)
02-06 21:29:19.427 24875-24991/com.qualcomm.qti.snpe.imageclassifiers E/com.qualcomm.qti.snpe.imageclassifiers: vendor/qcom/proprietary/adsprpc/src/apps_std_imp.c:538:Error 45: fopen failed for testsig-0xb75420ea.so. (No such file or directory)
02-06 21:29:19.428 24875-24991/com.qualcomm.qti.snpe.imageclassifiers E/com.qualcomm.qti.snpe.imageclassifiers: vendor/qcom/proprietary/adsprpc/src/apps_std_imp.c:538:Error 45: fopen failed for testsig.so. (No such file or directory)
02-06 21:29:22.579 24875-24986/com.qualcomm.qti.snpe.imageclassifiers E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #4
Process: com.qualcomm.qti.snpe.imageclassifiers, PID: 24875
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:325)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: com.qualcomm.qti.snpe.NeuralNetwork$InvalidInput: Tensor not amongst network input tensors: data
at com.qualcomm.qti.snpe.internal.NativeNetwork.assertInputTensor(NativeNetwork.java:275)
at com.qualcomm.qti.snpe.internal.NativeNetwork.execute(NativeNetwork.java:110)
at com.qualcomm.qti.snpe.imageclassifiers.tasks.ClassifyImageTask.doInBackground(ClassifyImageTask.java:75)
at com.qualcomm.qti.snpe.imageclassifiers.tasks.ClassifyImageTask.doInBackground(ClassifyImageTask.java:28)
at android.os.AsyncTask$2.call(AsyncTask.java:305)
Thanks and waiting for your kind reply.
I've fixed this problem.
app/src/main/java/com/qualcomm/qti/snpe/imageclassifiers/tasks/ClassifyImageTask.java
I just forgot do this.
@@ -70,7 +70,7 @@ public class ClassifyImageTask extends AsyncTask<Bitmap, Void, String[]> {
}
final Map<String, FloatTensor> inputs = new HashMap<>();
- inputs.put("data", tensor);
+ inputs.put("Mul:0", tensor);
Thanks