Running Tensorflow MobileNet from Java2019 Community Moderator ElectionTesting a tensorflow network: in_top_k() replacement for multilabel classificationTensorFlow doesn't learn when input=output (or probably I am missing something)Neural Network for Multiple Output RegressionFine-tuning a model from an existing checkpoint with TensorFlow-SlimTensorFlow: Regression using Deep Neural NetworkTensorflow predicting same value for every rowIssue with Custom object detection using tensorflow when Training on a single type of objectWhy normalize when all features are on the same scale?How to split a keras model into submodels after it's created

How to report a triplet of septets in NMR tabulation?

How can I fix this gap between bookcases I made?

DOS, create pipe for stdin/stdout of command.com(or 4dos.com) in C or Batch?

Can an x86 CPU running in real mode be considered to be basically an 8086 CPU?

The use of multiple foreign keys on same column in SQL Server

Is Social Media Science Fiction?

How do you conduct xenoanthropology after first contact?

Pronouncing Dictionary.com's W.O.D "vade mecum" in English

TGV timetables / schedules?

Infinite past with a beginning?

I’m planning on buying a laser printer but concerned about the life cycle of toner in the machine

Motorized valve interfering with button?

Banach space and Hilbert space topology

What do you call something that goes against the spirit of the law, but is legal when interpreting the law to the letter?

If Manufacturer spice model and Datasheet give different values which should I use?

Set-theoretical foundations of Mathematics with only bounded quantifiers

What are these boxed doors outside store fronts in New York?

What defenses are there against being summoned by the Gate spell?

Prevent a directory in /tmp from being deleted

Why are only specific transaction types accepted into the mempool?

How to make payment on the internet without leaving a money trail?

Why is the design of haulage companies so “special”?

What is the command to reset a PC without deleting any files

How long does it take to type this?



Running Tensorflow MobileNet from Java



2019 Community Moderator ElectionTesting a tensorflow network: in_top_k() replacement for multilabel classificationTensorFlow doesn't learn when input=output (or probably I am missing something)Neural Network for Multiple Output RegressionFine-tuning a model from an existing checkpoint with TensorFlow-SlimTensorFlow: Regression using Deep Neural NetworkTensorflow predicting same value for every rowIssue with Custom object detection using tensorflow when Training on a single type of objectWhy normalize when all features are on the same scale?How to split a keras model into submodels after it's created










2












$begingroup$


I am trying to run Tensorflow for image recognition (classification) in Java (JSE not Android).



I am using the code from here, and here.



It works for Inceptionv3 models, and for models retrained from Inceptionv3.



But for MobileNet models it does not work, (such as following this article).



The code works, but gives the wrong results (wrong classify labels). What code/settings are required to use MobileNet from Java?



The code that works for Inceptionv3 is



try (Tensor image = Tensor.create(imageBytes)) 
float[] labelProbabilities = executeInceptionGraph(graphDef, image);
int bestLabelIdx = maxIndex(labelProbabilities);
result.setText("");
result.setText(String.format(
"BEST MATCH: %s (%.2f%% likely)",
labels.get(bestLabelIdx), labelProbabilities[bestLabelIdx] * 100f));
System.out.println(
String.format(
"BEST MATCH: %s (%.2f%% likely)",
labels.get(bestLabelIdx), labelProbabilities[bestLabelIdx] * 100f));



This works of Inceptionv3 models, but not MobileNet,
Gives the error, "Expects args[0] to be float but string is provided"



For MobileNet we tried the code,



try (Graph g = new Graph()) 
GraphBuilder b = new GraphBuilder(g);
// Some constants specific to the pre-trained model at:
// https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip
//
// - The model was trained with images scaled to 224x224 pixels.
// - The colors, represented as R, G, B in 1-byte each were converted to
// float using (value - Mean)/Scale.
final int H = 224;
final int W = 224;
final float mean = 128f;
final float scale = 1f;

// Since the graph is being constructed once per execution here, we can use a constant for the
// input image. If the graph were to be re-used for multiple input images, a placeholder would
// have been more appropriate.
final Output<String> input = b.constant("input", imageBytes);
final Output<Float> output =
b.div(
b.sub(
b.resizeBilinear(
b.expandDims(
b.cast(b.decodeJpeg(input, 3), Float.class),
b.constant("make_batch", 0)),
b.constant("size", new int[] H, W)),
b.constant("mean", mean)),
b.constant("scale", scale));
try (Session s = new Session(g))
return s.runner().fetch(output.op().name()).run().get(0).expect(Float.class);




This works, but gives the wrong labels.










share|improve this question











$endgroup$











  • $begingroup$
    Have you found an answer to your question? Did you manage to get MobileNet to run without using TensorFlow lite?
    $endgroup$
    – Henry
    Aug 25 '18 at 10:49






  • 1




    $begingroup$
    No, we gave up running Tensorflow in Java, and switched to Python.
    $endgroup$
    – James
    Aug 26 '18 at 12:30










  • $begingroup$
    Thanks, I am currently also failing at setting up MobileNet. I might switch to Python, too.
    $endgroup$
    – Henry
    Aug 26 '18 at 12:52















2












$begingroup$


I am trying to run Tensorflow for image recognition (classification) in Java (JSE not Android).



I am using the code from here, and here.



It works for Inceptionv3 models, and for models retrained from Inceptionv3.



But for MobileNet models it does not work, (such as following this article).



The code works, but gives the wrong results (wrong classify labels). What code/settings are required to use MobileNet from Java?



The code that works for Inceptionv3 is



try (Tensor image = Tensor.create(imageBytes)) 
float[] labelProbabilities = executeInceptionGraph(graphDef, image);
int bestLabelIdx = maxIndex(labelProbabilities);
result.setText("");
result.setText(String.format(
"BEST MATCH: %s (%.2f%% likely)",
labels.get(bestLabelIdx), labelProbabilities[bestLabelIdx] * 100f));
System.out.println(
String.format(
"BEST MATCH: %s (%.2f%% likely)",
labels.get(bestLabelIdx), labelProbabilities[bestLabelIdx] * 100f));



This works of Inceptionv3 models, but not MobileNet,
Gives the error, "Expects args[0] to be float but string is provided"



For MobileNet we tried the code,



try (Graph g = new Graph()) 
GraphBuilder b = new GraphBuilder(g);
// Some constants specific to the pre-trained model at:
// https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip
//
// - The model was trained with images scaled to 224x224 pixels.
// - The colors, represented as R, G, B in 1-byte each were converted to
// float using (value - Mean)/Scale.
final int H = 224;
final int W = 224;
final float mean = 128f;
final float scale = 1f;

// Since the graph is being constructed once per execution here, we can use a constant for the
// input image. If the graph were to be re-used for multiple input images, a placeholder would
// have been more appropriate.
final Output<String> input = b.constant("input", imageBytes);
final Output<Float> output =
b.div(
b.sub(
b.resizeBilinear(
b.expandDims(
b.cast(b.decodeJpeg(input, 3), Float.class),
b.constant("make_batch", 0)),
b.constant("size", new int[] H, W)),
b.constant("mean", mean)),
b.constant("scale", scale));
try (Session s = new Session(g))
return s.runner().fetch(output.op().name()).run().get(0).expect(Float.class);




This works, but gives the wrong labels.










share|improve this question











$endgroup$











  • $begingroup$
    Have you found an answer to your question? Did you manage to get MobileNet to run without using TensorFlow lite?
    $endgroup$
    – Henry
    Aug 25 '18 at 10:49






  • 1




    $begingroup$
    No, we gave up running Tensorflow in Java, and switched to Python.
    $endgroup$
    – James
    Aug 26 '18 at 12:30










  • $begingroup$
    Thanks, I am currently also failing at setting up MobileNet. I might switch to Python, too.
    $endgroup$
    – Henry
    Aug 26 '18 at 12:52













2












2








2





$begingroup$


I am trying to run Tensorflow for image recognition (classification) in Java (JSE not Android).



I am using the code from here, and here.



It works for Inceptionv3 models, and for models retrained from Inceptionv3.



But for MobileNet models it does not work, (such as following this article).



The code works, but gives the wrong results (wrong classify labels). What code/settings are required to use MobileNet from Java?



The code that works for Inceptionv3 is



try (Tensor image = Tensor.create(imageBytes)) 
float[] labelProbabilities = executeInceptionGraph(graphDef, image);
int bestLabelIdx = maxIndex(labelProbabilities);
result.setText("");
result.setText(String.format(
"BEST MATCH: %s (%.2f%% likely)",
labels.get(bestLabelIdx), labelProbabilities[bestLabelIdx] * 100f));
System.out.println(
String.format(
"BEST MATCH: %s (%.2f%% likely)",
labels.get(bestLabelIdx), labelProbabilities[bestLabelIdx] * 100f));



This works of Inceptionv3 models, but not MobileNet,
Gives the error, "Expects args[0] to be float but string is provided"



For MobileNet we tried the code,



try (Graph g = new Graph()) 
GraphBuilder b = new GraphBuilder(g);
// Some constants specific to the pre-trained model at:
// https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip
//
// - The model was trained with images scaled to 224x224 pixels.
// - The colors, represented as R, G, B in 1-byte each were converted to
// float using (value - Mean)/Scale.
final int H = 224;
final int W = 224;
final float mean = 128f;
final float scale = 1f;

// Since the graph is being constructed once per execution here, we can use a constant for the
// input image. If the graph were to be re-used for multiple input images, a placeholder would
// have been more appropriate.
final Output<String> input = b.constant("input", imageBytes);
final Output<Float> output =
b.div(
b.sub(
b.resizeBilinear(
b.expandDims(
b.cast(b.decodeJpeg(input, 3), Float.class),
b.constant("make_batch", 0)),
b.constant("size", new int[] H, W)),
b.constant("mean", mean)),
b.constant("scale", scale));
try (Session s = new Session(g))
return s.runner().fetch(output.op().name()).run().get(0).expect(Float.class);




This works, but gives the wrong labels.










share|improve this question











$endgroup$




I am trying to run Tensorflow for image recognition (classification) in Java (JSE not Android).



I am using the code from here, and here.



It works for Inceptionv3 models, and for models retrained from Inceptionv3.



But for MobileNet models it does not work, (such as following this article).



The code works, but gives the wrong results (wrong classify labels). What code/settings are required to use MobileNet from Java?



The code that works for Inceptionv3 is



try (Tensor image = Tensor.create(imageBytes)) 
float[] labelProbabilities = executeInceptionGraph(graphDef, image);
int bestLabelIdx = maxIndex(labelProbabilities);
result.setText("");
result.setText(String.format(
"BEST MATCH: %s (%.2f%% likely)",
labels.get(bestLabelIdx), labelProbabilities[bestLabelIdx] * 100f));
System.out.println(
String.format(
"BEST MATCH: %s (%.2f%% likely)",
labels.get(bestLabelIdx), labelProbabilities[bestLabelIdx] * 100f));



This works of Inceptionv3 models, but not MobileNet,
Gives the error, "Expects args[0] to be float but string is provided"



For MobileNet we tried the code,



try (Graph g = new Graph()) 
GraphBuilder b = new GraphBuilder(g);
// Some constants specific to the pre-trained model at:
// https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip
//
// - The model was trained with images scaled to 224x224 pixels.
// - The colors, represented as R, G, B in 1-byte each were converted to
// float using (value - Mean)/Scale.
final int H = 224;
final int W = 224;
final float mean = 128f;
final float scale = 1f;

// Since the graph is being constructed once per execution here, we can use a constant for the
// input image. If the graph were to be re-used for multiple input images, a placeholder would
// have been more appropriate.
final Output<String> input = b.constant("input", imageBytes);
final Output<Float> output =
b.div(
b.sub(
b.resizeBilinear(
b.expandDims(
b.cast(b.decodeJpeg(input, 3), Float.class),
b.constant("make_batch", 0)),
b.constant("size", new int[] H, W)),
b.constant("mean", mean)),
b.constant("scale", scale));
try (Session s = new Session(g))
return s.runner().fetch(output.op().name()).run().get(0).expect(Float.class);




This works, but gives the wrong labels.







tensorflow java inception






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Feb 15 '18 at 17:14









Stephen Rauch

1,52551330




1,52551330










asked Feb 15 '18 at 16:58









JamesJames

8615




8615











  • $begingroup$
    Have you found an answer to your question? Did you manage to get MobileNet to run without using TensorFlow lite?
    $endgroup$
    – Henry
    Aug 25 '18 at 10:49






  • 1




    $begingroup$
    No, we gave up running Tensorflow in Java, and switched to Python.
    $endgroup$
    – James
    Aug 26 '18 at 12:30










  • $begingroup$
    Thanks, I am currently also failing at setting up MobileNet. I might switch to Python, too.
    $endgroup$
    – Henry
    Aug 26 '18 at 12:52
















  • $begingroup$
    Have you found an answer to your question? Did you manage to get MobileNet to run without using TensorFlow lite?
    $endgroup$
    – Henry
    Aug 25 '18 at 10:49






  • 1




    $begingroup$
    No, we gave up running Tensorflow in Java, and switched to Python.
    $endgroup$
    – James
    Aug 26 '18 at 12:30










  • $begingroup$
    Thanks, I am currently also failing at setting up MobileNet. I might switch to Python, too.
    $endgroup$
    – Henry
    Aug 26 '18 at 12:52















$begingroup$
Have you found an answer to your question? Did you manage to get MobileNet to run without using TensorFlow lite?
$endgroup$
– Henry
Aug 25 '18 at 10:49




$begingroup$
Have you found an answer to your question? Did you manage to get MobileNet to run without using TensorFlow lite?
$endgroup$
– Henry
Aug 25 '18 at 10:49




1




1




$begingroup$
No, we gave up running Tensorflow in Java, and switched to Python.
$endgroup$
– James
Aug 26 '18 at 12:30




$begingroup$
No, we gave up running Tensorflow in Java, and switched to Python.
$endgroup$
– James
Aug 26 '18 at 12:30












$begingroup$
Thanks, I am currently also failing at setting up MobileNet. I might switch to Python, too.
$endgroup$
– Henry
Aug 26 '18 at 12:52




$begingroup$
Thanks, I am currently also failing at setting up MobileNet. I might switch to Python, too.
$endgroup$
– Henry
Aug 26 '18 at 12:52










1 Answer
1






active

oldest

votes


















0












$begingroup$

Don't give to use in java :)



I had the same problem, try to change the scale value, I had the same labels from java and python after that.



 // - The model was trained with images scaled to 224x224 pixels.
// - The colors, represented as R, G, B in 1-byte each were converted to
// float using (value - Mean)/Scale.
final int H = 224;
final int W = 224;
final float mean = 117f;
final float scale = 255f;





share|improve this answer









$endgroup$













    Your Answer





    StackExchange.ifUsing("editor", function ()
    return StackExchange.using("mathjaxEditing", function ()
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
    );
    );
    , "mathjax-editing");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "557"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdatascience.stackexchange.com%2fquestions%2f27858%2frunning-tensorflow-mobilenet-from-java%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0












    $begingroup$

    Don't give to use in java :)



    I had the same problem, try to change the scale value, I had the same labels from java and python after that.



     // - The model was trained with images scaled to 224x224 pixels.
    // - The colors, represented as R, G, B in 1-byte each were converted to
    // float using (value - Mean)/Scale.
    final int H = 224;
    final int W = 224;
    final float mean = 117f;
    final float scale = 255f;





    share|improve this answer









    $endgroup$

















      0












      $begingroup$

      Don't give to use in java :)



      I had the same problem, try to change the scale value, I had the same labels from java and python after that.



       // - The model was trained with images scaled to 224x224 pixels.
      // - The colors, represented as R, G, B in 1-byte each were converted to
      // float using (value - Mean)/Scale.
      final int H = 224;
      final int W = 224;
      final float mean = 117f;
      final float scale = 255f;





      share|improve this answer









      $endgroup$















        0












        0








        0





        $begingroup$

        Don't give to use in java :)



        I had the same problem, try to change the scale value, I had the same labels from java and python after that.



         // - The model was trained with images scaled to 224x224 pixels.
        // - The colors, represented as R, G, B in 1-byte each were converted to
        // float using (value - Mean)/Scale.
        final int H = 224;
        final int W = 224;
        final float mean = 117f;
        final float scale = 255f;





        share|improve this answer









        $endgroup$



        Don't give to use in java :)



        I had the same problem, try to change the scale value, I had the same labels from java and python after that.



         // - The model was trained with images scaled to 224x224 pixels.
        // - The colors, represented as R, G, B in 1-byte each were converted to
        // float using (value - Mean)/Scale.
        final int H = 224;
        final int W = 224;
        final float mean = 117f;
        final float scale = 255f;






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Feb 25 at 20:59









        Eduardo SantAna da SilvaEduardo SantAna da Silva

        1




        1



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Data Science Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            Use MathJax to format equations. MathJax reference.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdatascience.stackexchange.com%2fquestions%2f27858%2frunning-tensorflow-mobilenet-from-java%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Quoting Keynes in a lectureIs differentiated instruction permitted by universities?How to make students learn prerequisitesUnsatisfactory Instructor Evaluations: balancing of expectations of engineering studentsWhat is the difference between a “statistician”, “applied statistician”, and an academic applying advanced stats within their field?Listing in reference section, but not quotingHow to efficiently use time while preparing for a class?Graduate Admissions: Teaching Emphasisstrategies for sharing teaching information with universities I don't personally have contacts withIs there an efficient way to give a large class of students feedback about their assignments?Is it unreasonable to expect students to read the lecture notes before attending the first class?

            Rank groups within a grouped sequence of TRUE/FALSE and NAGrouping functions (tapply, by, aggregate) and the *apply familyCharacters counting and subletting specific patternsWhat is the purpose of setting a key in data.table?data.table vs dplyr: can one do something well the other can't or does poorly?how to make a bar plot for a list of dataframes?How to group by unique values in a list in RPandas - Alternative to rank() function that gives unique ordinal ranks for a columnRank within group in for loop in RData transformation: from dyadic to observational data in RGetting map from purrr to work with paste0

            Are all passive ability checks floors for active ability checks?Does passive perception supersede active perception?Which skills can be used passively?Active Opposition with Free-Form Professions in Fate5E Trap/Ambush/Stealth Mechanics VS Passive Perception ConfusionInteraction between perception and stealth in obscured conditionsHow does Keen Sight affect Passive Perception?Are all d20 rolls either attacks, saves or ability checks?Can players declare that they are making a specific ability check?Can I see a Hidden creature that is not obscured at all?Can a Stealth check ever be made passively?Is this alternate version of the Observant feat balanced?What is the minimum amount of skill points per HD?