Forums - How to enable SNPE android example for inception_v3?

2 posts / 0 new
Last post
How to enable SNPE android example for inception_v3?
Starlitsky2010
Join Date: 13 Jan 18
Posts: 7
Posted: Wed, 2018-01-17 01:37

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.

 

  • Up0
  • Down0
Starlitsky2010
Join Date: 13 Jan 18
Posts: 7
Posted: Wed, 2018-01-17 19:43

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

  • Up0
  • Down0
or Register

Opinions expressed in the content posted here are the personal opinions of the original authors, and do not necessarily reflect those of Qualcomm Incorporated or its subsidiaries (“Qualcomm”). The content is provided for informational purposes only and is not meant to be an endorsement or representation by Qualcomm or any other party. This site may also provide links or references to non-Qualcomm sites and resources. Qualcomm makes no representations, warranties, or other commitments whatsoever about any non-Qualcomm sites or third-party resources that may be referenced, accessible from, or linked to this site.