Update imagenet example with new softmax output
authorYuan Zhao <yuanzhao@ti.com>
Tue, 27 Nov 2018 23:36:44 +0000 (17:36 -0600)
committerYuan Zhao <yuanzhao@ti.com>
Tue, 27 Nov 2018 23:38:04 +0000 (17:38 -0600)
- MCT-1089

docs/source/example.rst
examples/imagenet/main.cpp

index 03a100293f455fe8fdf27a1c7c5e808f151c1969..5abdb24815267242af439ad4cd8cd94e71aebff4 100644 (file)
@@ -80,7 +80,8 @@ Imagenet
 
 The imagenet example takes an image as input and outputs 1000 probabilities.
 Each probability corresponds to one object in the 1000 objects that the
-network is pre-trained with.  The example outputs top 5 predictions for a given input image.
+network is pre-trained with.  The example outputs top 5 (up to) predictions
+with probabilities of 5% or higher for a given input image.
 
 The following figure and tables shows an input image, top 5 predicted
 objects as output, and the processing time on either EVE or C66x.
@@ -89,15 +90,13 @@ objects as output, and the processing time on either EVE or C66x.
    :width: 600
 
 
-==== ==============
-Rank Object Classes
-==== ==============
-1    tabby
-2    Egyptian_cat
-3    tiger_cat
-4    lynx
-5    Persian_cat
-==== ==============
+==== ============== ===========
+Rank Object Classes Probability
+==== ============== ===========
+1    tabby          52.55%
+2    Egyptian_cat   21.18%
+3    tiger_cat      17.65%
+==== ============== ===========
 
 =======   ====================== ==================== ============
 Device    Device Processing Time Host Processing Time API Overhead
@@ -136,10 +135,6 @@ with single buffering and double buffering,
      - 1021 ms
      - 814 ms
 
-.. note::
-    The predicitions reported here are based on the output of the softmax
-    layer in the network, which are not normalized to the real probabilities.
-
 Segmentation
 ------------
 
@@ -332,15 +327,12 @@ The following listing illustrates how to build and run the examples.
 
 .. code-block:: shell
 
-   root@am57xx-evm:~/tidl-api/examples/imagenet# ./imagenet
+   root@am57xx-evm:~/tidl/examples/imagenet# ./imagenet
    Input: ../test/testvecs/input/objects/cat-pet-animal-domestic-104827.jpeg
-   frame[  0]: Time on EVE0: 106.50 ms, host: 107.96 ms API overhead: 1.35 %
-   1: tabby
-   2: Egyptian_cat
-   3: tiger_cat
-   4: lynx
-   5: Persian_cat
-   Loop total time (including read/write/opencv/print/etc):  202.6ms
+   1: tabby,   prob = 52.55%
+   2: Egyptian_cat,   prob = 21.18%
+   3: tiger_cat,   prob = 17.65%
+   Loop total time (including read/write/opencv/print/etc):  183.3ms
    imagenet PASSED
 
    root@am57xx-evm:~/tidl-api/examples/segmentation# ./segmentation
index 89c203ee93f37f2588cd492c4a7f3c6fa4a720cc..dbb8de4c89b218055c774311b32f9e7858686623 100644 (file)
@@ -296,7 +296,8 @@ bool ReadFrame(ExecutionObjectPipeline &eop,
     return imgutil::PreprocessImage(image, frame_buffer, c);
 }
 
-// Display top 5 classified imagenet classes with probabilities
+// Display top 5 classified imagenet classes with probabilities 5% or higher
+#define REPORT_THRESHOLD   13    // 13/255  = 5.098%
 bool WriteFrameOutput(const ExecutionObjectPipeline &eop)
 {
     const int k = 5;
@@ -331,8 +332,13 @@ bool WriteFrameOutput(const ExecutionObjectPipeline &eop)
     }
 
     for (int i = k - 1; i >= 0; i--)
+    {
+        if (sorted[i].first <= REPORT_THRESHOLD)  break;
         cout << k-i << ": "
-             << object_classes->At(sorted[i].second).label << endl;
+             << object_classes->At(sorted[i].second).label
+             << ",   prob = " << setprecision(4)
+             << ((sorted[i].first * 100) / 255.0f) << "%" << endl;
+    }
 
     return true;
 }