From 0e336be4516833fa5a07ccb1a9578701b148212e Mon Sep 17 00:00:00 2001 From: pyrator Date: Sat, 3 Apr 2021 17:24:26 +0100 Subject: [PATCH 1/4] Create FasterRcnnInception.java Sample code to load image and perform Object detection with faster_rcnn/inception_resnet_v2_1024x1024 --- .../objectdetection/FasterRcnnInception.java | 302 ++++++++++++++++++ 1 file changed, 302 insertions(+) create mode 100644 tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/FasterRcnnInception.java diff --git a/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/FasterRcnnInception.java b/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/FasterRcnnInception.java new file mode 100644 index 0000000..317cf0c --- /dev/null +++ b/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/FasterRcnnInception.java @@ -0,0 +1,302 @@ +package org.tensorflow.model.examples.objectdetection; +/* + +download the model from https://tfhub.dev/tensorflow/faster_rcnn/inception_resnet_v2_1024x1024/1 + +unzip then untar the model to a local folder - I've used models/faster_rcnn_inception_resnet_v2_1024x1024 +From the web page this is the output dictionary +Add some test images into a testimages folder +num_detections: a tf.int tensor with only one value, the number of detections [N]. +detection_boxes: a tf.float32 tensor of shape [N, 4] containing bounding box coordinates in the following order: [ymin, xmin, ymax, xmax]. +detection_classes: a tf.int tensor of shape [N] containing detection class index from the label file. +detection_scores: a tf.float32 tensor of shape [N] containing detection scores. +raw_detection_boxes: a tf.float32 tensor of shape [1, M, 4] containing decoded detection boxes without Non-Max suppression. M is the number of raw detections. +raw_detection_scores: a tf.float32 tensor of shape [1, M, 90] and contains class score logits for raw detection boxes. M is the number of raw detections. +detection_anchor_indices: a tf.float32 tensor of shape [N] and contains the anchor indices of the detections after NMS. +detection_multiclass_scores: a tf.float32 tensor of shape [1, N, 90] and contains class score distribution (including background) for detection boxes in the image including background class. + +However using +venv\Scripts\python.exe venv\Lib\site-packages\tensorflow\python\tools\saved_model_cli.py show --dir models\faster_rcnn_inception_resnet_v2_1024x1024 --all +2021-03-19 12:25:37.000143: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library cudart64_110.dll + +MetaGraphDef with tag-set: 'serve' contains the following SignatureDefs: + +signature_def['__saved_model_init_op']: + The given SavedModel SignatureDef contains the following input(s): + The given SavedModel SignatureDef contains the following output(s): + outputs['__saved_model_init_op'] tensor_info: + dtype: DT_INVALID + shape: unknown_rank + name: NoOp + Method name is: + +signature_def['serving_default']: + The given SavedModel SignatureDef contains the following input(s): + inputs['input_tensor'] tensor_info: + dtype: DT_UINT8 + shape: (1, -1, -1, 3) + name: serving_default_input_tensor:0 + The given SavedModel SignatureDef contains the following output(s): + outputs['detection_anchor_indices'] tensor_info: + dtype: DT_FLOAT + shape: (1, 300) + name: StatefulPartitionedCall:0 + outputs['detection_boxes'] tensor_info: + dtype: DT_FLOAT + shape: (1, 300, 4) + name: StatefulPartitionedCall:1 + outputs['detection_classes'] tensor_info: + dtype: DT_FLOAT + shape: (1, 300) + name: StatefulPartitionedCall:2 + outputs['detection_multiclass_scores'] tensor_info: + dtype: DT_FLOAT + shape: (1, 300, 91) + name: StatefulPartitionedCall:3 + outputs['detection_scores'] tensor_info: + dtype: DT_FLOAT + shape: (1, 300) + name: StatefulPartitionedCall:4 + outputs['num_detections'] tensor_info: + dtype: DT_FLOAT + shape: (1) + name: StatefulPartitionedCall:5 + outputs['raw_detection_boxes'] tensor_info: + dtype: DT_FLOAT + shape: (1, 300, 4) + name: StatefulPartitionedCall:6 + outputs['raw_detection_scores'] tensor_info: + dtype: DT_FLOAT + shape: (1, 300, 91) + name: StatefulPartitionedCall:7 + Method name is: tensorflow/serving/predict + +Defined Functions: + Function Name: '__call__' + Option #1 + Callable with: + Argument #1 + input_tensor: TensorSpec(shape=(1, None, None, 3), dtype=tf.uint8, name='input_tensor') + +So it appears there's a discrepancy between the web page and running saved_model_cli. +*/ + +import org.tensorflow.*; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.image.DecodeJpeg; +import org.tensorflow.op.io.ReadFile; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUint8; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.TreeMap; + +public class FasterRcnnInception { + + private final static String[] cocoLabels = new String[]{ + "person", + "bicycle", + "car", + "motorcycle", + "airplane", + "bus", + "train", + "truck", + "boat", + "traffic light", + "fire hydrant", + "street sign", + "stop sign", + "parking meter", + "bench", + "bird", + "cat", + "dog", + "horse", + "sheep", + "cow", + "elephant", + "bear", + "zebra", + "giraffe", + "hat", + "backpack", + "umbrella", + "shoe", + "eye glasses", + "handbag", + "tie", + "suitcase", + "frisbee", + "skis", + "snowboard", + "sports ball", + "kite", + "baseball bat", + "baseball glove", + "skateboard", + "surfboard", + "tennis racket", + "bottle", + "plate", + "wine glass", + "cup", + "fork", + "knife", + "spoon", + "bowl", + "banana", + "apple", + "sandwich", + "orange", + "broccoli", + "carrot", + "hot dog", + "pizza", + "donut", + "cake", + "chair", + "couch", + "potted plant", + "bed", + "mirror", + "dining table", + "window", + "desk", + "toilet", + "door", + "tv", + "laptop", + "mouse", + "remote", + "keyboard", + "cell phone", + "microwave", + "oven", + "toaster", + "sink", + "refrigerator", + "blender", + "book", + "clock", + "vase", + "scissors", + "teddy bear", + "hair drier", + "toothbrush", + "hair brush" + }; + + public static void main(String[] params) { + + + // get path to model folder (currently in resources + String modelPath = "models/faster_rcnn_inception_resnet_v2_1024x1024"; + // load saved model + SavedModelBundle model = SavedModelBundle.load(modelPath, "serve"); + TreeMap cocoTreeMap = new TreeMap<>(); + float cocoCount = 0; + for (String cocoLabel : cocoLabels) { + cocoTreeMap.put(cocoCount, cocoLabel); + cocoCount++; + } + try (Graph g = new Graph(); Session s = new Session(g)) { + + Ops tf = Ops.create(g); + + //my test image + String imagePath = "testimages/image2.jpg"; + + Constant fileName = tf.constant(imagePath); + + ReadFile readFile = tf.io.readFile(fileName); + + Session.Runner runner = s.runner(); + s.run(tf.init()); + + DecodeJpeg.Options options = DecodeJpeg.channels(3L); + DecodeJpeg decodeImage = tf.image.decodeJpeg(readFile.contents(), options); + //fetch image from file + TUint8 outputImage = (TUint8) runner.fetch(decodeImage).run().get(0); + Shape imageShape = outputImage.shape(); + long[] shapeArray = imageShape.asArray(); + + //The given SavedModel SignatureDef input + Map feed_dict = new HashMap<>(); + feed_dict.put("input_tensor", reshapeTensor(outputImage)); + //The given SavedModel MetaGraphDef key + Map outputTensorMap = model.function("serving_default").call(feed_dict); + + //detection_classes is a model output name + TFloat32 detectionClasses = (TFloat32) outputTensorMap.get("detection_classes"); + TFloat32 detectionBoxes = (TFloat32) outputTensorMap.get("detection_boxes"); + TFloat32 numDetections = (TFloat32) outputTensorMap.get("num_detections"); + TFloat32 detectionScores = (TFloat32) outputTensorMap.get("detection_scores"); + + int numDetects = (int) numDetections.getFloat(0); + if (numDetects > 0) { + try { + BufferedImage bufferedImage = ImageIO.read(new File(imagePath)); + Graphics2D graphics2D = bufferedImage.createGraphics(); + + //TODO tf.image.combinedNonMaxSuppression + for (int n = 0; n < numDetects; n++) { + //put probability and position in outputMap + if(detectionScores.getFloat(0,n)> 0.3f) { + Float classVal = detectionClasses.getFloat(0, n); + //TODO tf.image.drawBoundingBoxes + int x1 = (int) (shapeArray[1] * detectionBoxes.getFloat(0, n, 1)); + int y1 = (int) (shapeArray[0] * detectionBoxes.getFloat(0, n, 0)); + int x2 = (int) (shapeArray[1] * detectionBoxes.getFloat(0, n, 3)); + int y2 = (int) (shapeArray[0] * detectionBoxes.getFloat(0, n, 2)); + graphics2D.setPaint(Color.RED); + graphics2D.setStroke(new BasicStroke(5)); + graphics2D.drawRect(x1, y1, x2 - x1, y2 - y1); + graphics2D.setPaint(Color.BLACK); + graphics2D.drawString(cocoTreeMap.get(classVal - 1) + " " + classVal, x1, y1); + } + } + //TODO tf.image.encodeJpeg + ImageIO.write(bufferedImage, "jpg", new File("image2rcnn.jpg")); + } catch (IOException e) { + + } + } + } + } + + /** + * return a 4D tensor from 3D tensor + * + * @param tUint8Tensor 3D tensor + * @return 4D tensor + */ + private static TUint8 reshapeTensor(TUint8 tUint8Tensor) { + Ops tf = Ops.create(); + return tf.reshape(tf.constant(tUint8Tensor), + tf.array(1, + tUint8Tensor.shape().asArray()[0], + tUint8Tensor.shape().asArray()[1], + tUint8Tensor.shape().asArray()[2] + ) + ).asTensor(); + } + + private static TUint8 drawBoundingBoxes(TUint8 images, TFloat32 boxes, TFloat32 colors ){ + Ops tf = Ops.create(); + Operand imagesOp = tf.constant(images); + Operand boxesOp = tf.constant(boxes); + Operand colorsOp = tf.constant(colors); + return tf.image.drawBoundingBoxes(imagesOp,boxesOp,colorsOp).asTensor(); + } + +} From 3002c297f352d450b94f5723b56922d43ab095a2 Mon Sep 17 00:00:00 2001 From: pyrator Date: Tue, 6 Apr 2021 07:47:39 +0100 Subject: [PATCH 2/4] Added copyright and markdown file closed tensors plus other tidy up, Amended file to match requested changes --- .../objectdetection/FasterRcnnInception.java | 156 ++++++++++-------- .../model/examples/objectdetection/Readme.md | 13 ++ .../examples/objectdetection/image2rcnn.jpg | Bin 0 -> 151543 bytes 3 files changed, 104 insertions(+), 65 deletions(-) create mode 100644 tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/Readme.md create mode 100644 tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/image2rcnn.jpg diff --git a/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/FasterRcnnInception.java b/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/FasterRcnnInception.java index 317cf0c..62e3581 100644 --- a/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/FasterRcnnInception.java +++ b/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/FasterRcnnInception.java @@ -1,11 +1,25 @@ -package org.tensorflow.model.examples.objectdetection; /* + * Copyright 2020 The TensorFlow Authors. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================= + */ -download the model from https://tfhub.dev/tensorflow/faster_rcnn/inception_resnet_v2_1024x1024/1 +package org.tensorflow.model.examples.objectdetection; +/* -unzip then untar the model to a local folder - I've used models/faster_rcnn_inception_resnet_v2_1024x1024 From the web page this is the output dictionary -Add some test images into a testimages folder + num_detections: a tf.int tensor with only one value, the number of detections [N]. detection_boxes: a tf.float32 tensor of shape [N, 4] containing bounding box coordinates in the following order: [ymin, xmin, ymax, xmax]. detection_classes: a tf.int tensor of shape [N] containing detection class index from the label file. @@ -78,13 +92,23 @@ The given SavedModel SignatureDef contains the following output(s): Argument #1 input_tensor: TensorSpec(shape=(1, None, None, 3), dtype=tf.uint8, name='input_tensor') -So it appears there's a discrepancy between the web page and running saved_model_cli. +So it appears there's a discrepancy between the web page and running saved_model_cli as +num_detections: a tf.int tensor with only one value, the number of detections [N]. +but the actual tensor is DT_FLOAT according to saved_model_cli +also the web page states +detection_classes: a tf.int tensor of shape [N] containing detection class index from the label file. +but again the actual tensor is DT_FLOAT according to saved_model_cli. */ -import org.tensorflow.*; + +import org.tensorflow.Graph; +import org.tensorflow.SavedModelBundle; +import org.tensorflow.Session; +import org.tensorflow.Tensor; import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Ops; import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Reshape; import org.tensorflow.op.image.DecodeJpeg; import org.tensorflow.op.io.ReadFile; import org.tensorflow.types.TFloat32; @@ -96,10 +120,17 @@ The given SavedModel SignatureDef contains the following output(s): import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; +import java.text.DecimalFormat; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; + +/** + * Loads an image using ReadFile and DecodeJpeg and then uses the saved model + * faster_rcnn/inception_resnet_v2_1024x1024/1 to detect objects with a detection score greater than 0.3 + */ + public class FasterRcnnInception { private final static String[] cocoLabels = new String[]{ @@ -199,10 +230,12 @@ public class FasterRcnnInception { public static void main(String[] params) { - // get path to model folder (currently in resources + // get path to model folder String modelPath = "models/faster_rcnn_inception_resnet_v2_1024x1024"; // load saved model SavedModelBundle model = SavedModelBundle.load(modelPath, "serve"); + + //create a map of the COCO 2017 labels TreeMap cocoTreeMap = new TreeMap<>(); float cocoCount = 0; for (String cocoLabel : cocoLabels) { @@ -225,78 +258,71 @@ public static void main(String[] params) { DecodeJpeg.Options options = DecodeJpeg.channels(3L); DecodeJpeg decodeImage = tf.image.decodeJpeg(readFile.contents(), options); + //fetch image from file TUint8 outputImage = (TUint8) runner.fetch(decodeImage).run().get(0); Shape imageShape = outputImage.shape(); + //dimensions of test image long[] shapeArray = imageShape.asArray(); - + //reshape the tensor to 4D for input to model + Reshape reshape = tf.reshape(tf.constant(outputImage), + tf.array(1, + outputImage.shape().asArray()[0], + outputImage.shape().asArray()[1], + outputImage.shape().asArray()[2] + ) + ); + TUint8 reshapeTensor = (TUint8) runner.fetch(reshape).run().get(1); + Map feedDict = new HashMap<>(); //The given SavedModel SignatureDef input - Map feed_dict = new HashMap<>(); - feed_dict.put("input_tensor", reshapeTensor(outputImage)); + feedDict.put("input_tensor", reshapeTensor);//reshapeTensor(outputImage)); //The given SavedModel MetaGraphDef key - Map outputTensorMap = model.function("serving_default").call(feed_dict); + Map outputTensorMap = model.function("serving_default").call(feedDict); //detection_classes is a model output name - TFloat32 detectionClasses = (TFloat32) outputTensorMap.get("detection_classes"); - TFloat32 detectionBoxes = (TFloat32) outputTensorMap.get("detection_boxes"); - TFloat32 numDetections = (TFloat32) outputTensorMap.get("num_detections"); - TFloat32 detectionScores = (TFloat32) outputTensorMap.get("detection_scores"); + try (TFloat32 detectionClasses = (TFloat32) outputTensorMap.get("detection_classes"); + TFloat32 detectionBoxes = (TFloat32) outputTensorMap.get("detection_boxes"); + TFloat32 numDetections = (TFloat32) outputTensorMap.get("num_detections"); + TFloat32 detectionScores = (TFloat32) outputTensorMap.get("detection_scores")) { - int numDetects = (int) numDetections.getFloat(0); - if (numDetects > 0) { - try { - BufferedImage bufferedImage = ImageIO.read(new File(imagePath)); - Graphics2D graphics2D = bufferedImage.createGraphics(); + int numDetects = (int) numDetections.getFloat(0); + if (numDetects > 0) { + try { + BufferedImage bufferedImage = ImageIO.read(new File(imagePath)); + Graphics2D graphics2D = bufferedImage.createGraphics(); - //TODO tf.image.combinedNonMaxSuppression - for (int n = 0; n < numDetects; n++) { - //put probability and position in outputMap - if(detectionScores.getFloat(0,n)> 0.3f) { - Float classVal = detectionClasses.getFloat(0, n); - //TODO tf.image.drawBoundingBoxes - int x1 = (int) (shapeArray[1] * detectionBoxes.getFloat(0, n, 1)); - int y1 = (int) (shapeArray[0] * detectionBoxes.getFloat(0, n, 0)); - int x2 = (int) (shapeArray[1] * detectionBoxes.getFloat(0, n, 3)); - int y2 = (int) (shapeArray[0] * detectionBoxes.getFloat(0, n, 2)); - graphics2D.setPaint(Color.RED); - graphics2D.setStroke(new BasicStroke(5)); - graphics2D.drawRect(x1, y1, x2 - x1, y2 - y1); - graphics2D.setPaint(Color.BLACK); - graphics2D.drawString(cocoTreeMap.get(classVal - 1) + " " + classVal, x1, y1); + //TODO tf.image.combinedNonMaxSuppression + for (int n = 0; n < numDetects; n++) { + //put probability and position in outputMap + float detectionScore = detectionScores.getFloat(0, n); + //only include those classes with detection score greater than 0.3f + if (detectionScore > 0.3f) { + Float classVal = detectionClasses.getFloat(0, n); + //TODO tf.image.drawBoundingBoxes + int x1 = (int) (shapeArray[1] * detectionBoxes.getFloat(0, n, 1)); + int y1 = (int) (shapeArray[0] * detectionBoxes.getFloat(0, n, 0)); + int x2 = (int) (shapeArray[1] * detectionBoxes.getFloat(0, n, 3)); + int y2 = (int) (shapeArray[0] * detectionBoxes.getFloat(0, n, 2)); + graphics2D.setPaint(Color.RED); + graphics2D.setStroke(new BasicStroke(5)); + graphics2D.drawRect(x1, y1, x2 - x1, y2 - y1); + graphics2D.setPaint(Color.BLACK); + //add a label with percentage score + graphics2D.drawString(cocoTreeMap.get(classVal - 1) + " " + + (new DecimalFormat("#.##").format(detectionScore * 100)) + + "%", x1, y1); + } } + //TODO tf.image.encodeJpeg + ImageIO.write(bufferedImage, "jpg", new File("image2rcnn.jpg")); + } catch (IOException e) { + System.err.println("Exception with writing image " + e.getMessage()); } - //TODO tf.image.encodeJpeg - ImageIO.write(bufferedImage, "jpg", new File("image2rcnn.jpg")); - } catch (IOException e) { - } + } + reshapeTensor.close(); + outputImage.close(); } } - - /** - * return a 4D tensor from 3D tensor - * - * @param tUint8Tensor 3D tensor - * @return 4D tensor - */ - private static TUint8 reshapeTensor(TUint8 tUint8Tensor) { - Ops tf = Ops.create(); - return tf.reshape(tf.constant(tUint8Tensor), - tf.array(1, - tUint8Tensor.shape().asArray()[0], - tUint8Tensor.shape().asArray()[1], - tUint8Tensor.shape().asArray()[2] - ) - ).asTensor(); - } - - private static TUint8 drawBoundingBoxes(TUint8 images, TFloat32 boxes, TFloat32 colors ){ - Ops tf = Ops.create(); - Operand imagesOp = tf.constant(images); - Operand boxesOp = tf.constant(boxes); - Operand colorsOp = tf.constant(colors); - return tf.image.drawBoundingBoxes(imagesOp,boxesOp,colorsOp).asTensor(); - } - } diff --git a/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/Readme.md b/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/Readme.md new file mode 100644 index 0000000..54a2e9d --- /dev/null +++ b/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/Readme.md @@ -0,0 +1,13 @@ +# FasterRcnnInception + +Download the model from https://tfhub.dev/tensorflow/faster_rcnn/inception_resnet_v2_1024x1024/1 + +Unzip then untar the model to a local folder - I've used models/faster_rcnn_inception_resnet_v2_1024x1024. + +Create a testimages folder then add some test images into a testimages folder + + +### Example +Using the image2.jpg image from https://github.com/tensorflow/models/tree/master/research/object_detection/test_images +![image2rcnn.jpg.](image2rcnn.jpg "Beach") + diff --git a/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/image2rcnn.jpg b/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/image2rcnn.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03a1b567ce808e511edbe5458cd4798a8f976c67 GIT binary patch literal 151543 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

13q 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 GfB)G< Date: Wed, 7 Apr 2021 09:34:34 +0100 Subject: [PATCH 3/4] Moved to new package, plus clean ups Changed copyright year, added parameters for input and output images, close tensors, created new runner --- .../fastrcnn}/FasterRcnnInception.java | 102 ++++++++++-------- .../fastrcnn}/Readme.md | 5 +- .../fastrcnn}/image2rcnn.jpg | Bin 3 files changed, 62 insertions(+), 45 deletions(-) rename tensorflow-examples/src/main/java/org/tensorflow/model/examples/{objectdetection => cnn/fastrcnn}/FasterRcnnInception.java (75%) rename tensorflow-examples/src/main/java/org/tensorflow/model/examples/{objectdetection => cnn/fastrcnn}/Readme.md (76%) rename tensorflow-examples/src/main/java/org/tensorflow/model/examples/{objectdetection => cnn/fastrcnn}/image2rcnn.jpg (100%) diff --git a/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/FasterRcnnInception.java b/tensorflow-examples/src/main/java/org/tensorflow/model/examples/cnn/fastrcnn/FasterRcnnInception.java similarity index 75% rename from tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/FasterRcnnInception.java rename to tensorflow-examples/src/main/java/org/tensorflow/model/examples/cnn/fastrcnn/FasterRcnnInception.java index 62e3581..58471a4 100644 --- a/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/FasterRcnnInception.java +++ b/tensorflow-examples/src/main/java/org/tensorflow/model/examples/cnn/fastrcnn/FasterRcnnInception.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 The TensorFlow Authors. All Rights Reserved. + * Copyright 2021 The TensorFlow Authors. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ * ======================================================================= */ -package org.tensorflow.model.examples.objectdetection; +package org.tensorflow.model.examples.cnn.fastrcnn; /* From the web page this is the output dictionary @@ -229,6 +229,13 @@ public class FasterRcnnInception { public static void main(String[] params) { + if (params.length != 2 ){ + throw new IllegalArgumentException("Exactly 2 parameters required !"); + } + + //my test image + String outputImagePath = params[1]; + String imagePath = params[0]; // get path to model folder String modelPath = "models/faster_rcnn_inception_resnet_v2_1024x1024"; @@ -246,8 +253,8 @@ public static void main(String[] params) { Ops tf = Ops.create(g); - //my test image - String imagePath = "testimages/image2.jpg"; + + Constant fileName = tf.constant(imagePath); @@ -272,55 +279,62 @@ public static void main(String[] params) { outputImage.shape().asArray()[2] ) ); - TUint8 reshapeTensor = (TUint8) runner.fetch(reshape).run().get(1); + + //fresh runner for reshape + runner = s.runner(); + s.run(tf.init()); + TUint8 reshapeTensor = (TUint8) runner.fetch(reshape).run().get(0); Map feedDict = new HashMap<>(); //The given SavedModel SignatureDef input - feedDict.put("input_tensor", reshapeTensor);//reshapeTensor(outputImage)); + feedDict.put("input_tensor", reshapeTensor); //The given SavedModel MetaGraphDef key Map outputTensorMap = model.function("serving_default").call(feedDict); - //detection_classes is a model output name - try (TFloat32 detectionClasses = (TFloat32) outputTensorMap.get("detection_classes"); - TFloat32 detectionBoxes = (TFloat32) outputTensorMap.get("detection_boxes"); - TFloat32 numDetections = (TFloat32) outputTensorMap.get("num_detections"); - TFloat32 detectionScores = (TFloat32) outputTensorMap.get("detection_scores")) { - - int numDetects = (int) numDetections.getFloat(0); - if (numDetects > 0) { - try { - BufferedImage bufferedImage = ImageIO.read(new File(imagePath)); - Graphics2D graphics2D = bufferedImage.createGraphics(); - - //TODO tf.image.combinedNonMaxSuppression - for (int n = 0; n < numDetects; n++) { - //put probability and position in outputMap - float detectionScore = detectionScores.getFloat(0, n); - //only include those classes with detection score greater than 0.3f - if (detectionScore > 0.3f) { - Float classVal = detectionClasses.getFloat(0, n); - //TODO tf.image.drawBoundingBoxes - int x1 = (int) (shapeArray[1] * detectionBoxes.getFloat(0, n, 1)); - int y1 = (int) (shapeArray[0] * detectionBoxes.getFloat(0, n, 0)); - int x2 = (int) (shapeArray[1] * detectionBoxes.getFloat(0, n, 3)); - int y2 = (int) (shapeArray[0] * detectionBoxes.getFloat(0, n, 2)); - graphics2D.setPaint(Color.RED); - graphics2D.setStroke(new BasicStroke(5)); - graphics2D.drawRect(x1, y1, x2 - x1, y2 - y1); - graphics2D.setPaint(Color.BLACK); - //add a label with percentage score - graphics2D.drawString(cocoTreeMap.get(classVal - 1) + " " + - (new DecimalFormat("#.##").format(detectionScore * 100)) + - "%", x1, y1); - } + TFloat32 detectionClasses = (TFloat32) outputTensorMap.get("detection_classes"); + TFloat32 detectionBoxes = (TFloat32) outputTensorMap.get("detection_boxes"); + TFloat32 numDetections = (TFloat32) outputTensorMap.get("num_detections"); + TFloat32 detectionScores = (TFloat32) outputTensorMap.get("detection_scores"); + + int numDetects = (int) numDetections.getFloat(0); + if (numDetects > 0) { + try { + BufferedImage bufferedImage = ImageIO.read(new File(imagePath)); + Graphics2D graphics2D = bufferedImage.createGraphics(); + + //TODO tf.image.combinedNonMaxSuppression + for (int n = 0; n < numDetects; n++) { + //put probability and position in outputMap + float detectionScore = detectionScores.getFloat(0, n); + //only include those classes with detection score greater than 0.3f + if (detectionScore > 0.3f) { + float classVal = detectionClasses.getFloat(0, n); + //TODO tf.image.drawBoundingBoxes + int x1 = (int) (shapeArray[1] * detectionBoxes.getFloat(0, n, 1)); + int y1 = (int) (shapeArray[0] * detectionBoxes.getFloat(0, n, 0)); + int x2 = (int) (shapeArray[1] * detectionBoxes.getFloat(0, n, 3)); + int y2 = (int) (shapeArray[0] * detectionBoxes.getFloat(0, n, 2)); + graphics2D.setPaint(Color.RED); + graphics2D.setStroke(new BasicStroke(5)); + graphics2D.drawRect(x1, y1, x2 - x1, y2 - y1); + graphics2D.setPaint(Color.BLACK); + //add a label with percentage score + graphics2D.drawString(cocoTreeMap.get(classVal - 1) + " " + + (new DecimalFormat("#.##").format(detectionScore * 100)) + + "%", x1, y1); } - //TODO tf.image.encodeJpeg - ImageIO.write(bufferedImage, "jpg", new File("image2rcnn.jpg")); - } catch (IOException e) { - System.err.println("Exception with writing image " + e.getMessage()); } + //TODO tf.image.encodeJpeg + ImageIO.write(bufferedImage, "jpg", new File(outputImagePath)); + } catch (IOException e) { + System.err.println("Exception with writing image " + e.getMessage()); } - } + //close all tensors in outputTensorMap + for (String key : outputTensorMap.keySet()){ + Tensor tensor = outputTensorMap.get(key); + tensor.close(); + } + reshapeTensor.close(); outputImage.close(); } diff --git a/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/Readme.md b/tensorflow-examples/src/main/java/org/tensorflow/model/examples/cnn/fastrcnn/Readme.md similarity index 76% rename from tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/Readme.md rename to tensorflow-examples/src/main/java/org/tensorflow/model/examples/cnn/fastrcnn/Readme.md index 54a2e9d..adb381b 100644 --- a/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/Readme.md +++ b/tensorflow-examples/src/main/java/org/tensorflow/model/examples/cnn/fastrcnn/Readme.md @@ -6,8 +6,11 @@ Unzip then untar the model to a local folder - I've used models/faster_rcnn_ince Create a testimages folder then add some test images into a testimages folder +To run the example add the input image and output image as parameters: -### Example +FasterRcnnInception testimages/image2.jpg image2rcnn.jpg + +### Example output Using the image2.jpg image from https://github.com/tensorflow/models/tree/master/research/object_detection/test_images ![image2rcnn.jpg.](image2rcnn.jpg "Beach") diff --git a/tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/image2rcnn.jpg b/tensorflow-examples/src/main/java/org/tensorflow/model/examples/cnn/fastrcnn/image2rcnn.jpg similarity index 100% rename from tensorflow-examples/src/main/java/org/tensorflow/model/examples/objectdetection/image2rcnn.jpg rename to tensorflow-examples/src/main/java/org/tensorflow/model/examples/cnn/fastrcnn/image2rcnn.jpg From 79de2be66b4a7b3db35dda104b7e495360cae997 Mon Sep 17 00:00:00 2001 From: pyrator Date: Wed, 7 Apr 2021 17:36:40 +0100 Subject: [PATCH 4/4] Encapsulated tensors Encapsulated all tensors and a further tidy up --- .../cnn/fastrcnn/FasterRcnnInception.java | 144 ++++++++---------- 1 file changed, 64 insertions(+), 80 deletions(-) diff --git a/tensorflow-examples/src/main/java/org/tensorflow/model/examples/cnn/fastrcnn/FasterRcnnInception.java b/tensorflow-examples/src/main/java/org/tensorflow/model/examples/cnn/fastrcnn/FasterRcnnInception.java index 58471a4..da72f85 100644 --- a/tensorflow-examples/src/main/java/org/tensorflow/model/examples/cnn/fastrcnn/FasterRcnnInception.java +++ b/tensorflow-examples/src/main/java/org/tensorflow/model/examples/cnn/fastrcnn/FasterRcnnInception.java @@ -229,19 +229,16 @@ public class FasterRcnnInception { public static void main(String[] params) { - if (params.length != 2 ){ + if (params.length != 2) { throw new IllegalArgumentException("Exactly 2 parameters required !"); } - //my test image - String outputImagePath = params[1]; + String outputImagePath = params[1]; String imagePath = params[0]; - // get path to model folder String modelPath = "models/faster_rcnn_inception_resnet_v2_1024x1024"; // load saved model SavedModelBundle model = SavedModelBundle.load(modelPath, "serve"); - //create a map of the COCO 2017 labels TreeMap cocoTreeMap = new TreeMap<>(); float cocoCount = 0; @@ -250,93 +247,80 @@ public static void main(String[] params) { cocoCount++; } try (Graph g = new Graph(); Session s = new Session(g)) { - Ops tf = Ops.create(g); - - - - Constant fileName = tf.constant(imagePath); - ReadFile readFile = tf.io.readFile(fileName); - Session.Runner runner = s.runner(); s.run(tf.init()); - DecodeJpeg.Options options = DecodeJpeg.channels(3L); DecodeJpeg decodeImage = tf.image.decodeJpeg(readFile.contents(), options); - //fetch image from file - TUint8 outputImage = (TUint8) runner.fetch(decodeImage).run().get(0); - Shape imageShape = outputImage.shape(); - //dimensions of test image - long[] shapeArray = imageShape.asArray(); - //reshape the tensor to 4D for input to model - Reshape reshape = tf.reshape(tf.constant(outputImage), - tf.array(1, - outputImage.shape().asArray()[0], - outputImage.shape().asArray()[1], - outputImage.shape().asArray()[2] - ) - ); - - //fresh runner for reshape - runner = s.runner(); - s.run(tf.init()); - TUint8 reshapeTensor = (TUint8) runner.fetch(reshape).run().get(0); - Map feedDict = new HashMap<>(); - //The given SavedModel SignatureDef input - feedDict.put("input_tensor", reshapeTensor); - //The given SavedModel MetaGraphDef key - Map outputTensorMap = model.function("serving_default").call(feedDict); - //detection_classes is a model output name - TFloat32 detectionClasses = (TFloat32) outputTensorMap.get("detection_classes"); - TFloat32 detectionBoxes = (TFloat32) outputTensorMap.get("detection_boxes"); - TFloat32 numDetections = (TFloat32) outputTensorMap.get("num_detections"); - TFloat32 detectionScores = (TFloat32) outputTensorMap.get("detection_scores"); - - int numDetects = (int) numDetections.getFloat(0); - if (numDetects > 0) { - try { - BufferedImage bufferedImage = ImageIO.read(new File(imagePath)); - Graphics2D graphics2D = bufferedImage.createGraphics(); - - //TODO tf.image.combinedNonMaxSuppression - for (int n = 0; n < numDetects; n++) { - //put probability and position in outputMap - float detectionScore = detectionScores.getFloat(0, n); - //only include those classes with detection score greater than 0.3f - if (detectionScore > 0.3f) { - float classVal = detectionClasses.getFloat(0, n); - //TODO tf.image.drawBoundingBoxes - int x1 = (int) (shapeArray[1] * detectionBoxes.getFloat(0, n, 1)); - int y1 = (int) (shapeArray[0] * detectionBoxes.getFloat(0, n, 0)); - int x2 = (int) (shapeArray[1] * detectionBoxes.getFloat(0, n, 3)); - int y2 = (int) (shapeArray[0] * detectionBoxes.getFloat(0, n, 2)); - graphics2D.setPaint(Color.RED); - graphics2D.setStroke(new BasicStroke(5)); - graphics2D.drawRect(x1, y1, x2 - x1, y2 - y1); - graphics2D.setPaint(Color.BLACK); - //add a label with percentage score - graphics2D.drawString(cocoTreeMap.get(classVal - 1) + " " + - (new DecimalFormat("#.##").format(detectionScore * 100)) + - "%", x1, y1); + try (TUint8 outputImage = (TUint8) runner.fetch(decodeImage).run().get(0)) { + Shape imageShape = outputImage.shape(); + //dimensions of test image + long[] shapeArray = imageShape.asArray(); + //reshape the tensor to 4D for input to model + Reshape reshape = tf.reshape(tf.constant(outputImage), + tf.array(1, + outputImage.shape().asArray()[0], + outputImage.shape().asArray()[1], + outputImage.shape().asArray()[2] + ) + ); + //fresh runner for reshape + runner = s.runner(); + s.run(tf.init()); + try (TUint8 reshapeTensor = (TUint8) runner.fetch(reshape).run().get(0)) { + Map feedDict = new HashMap<>(); + //The given SavedModel SignatureDef input + feedDict.put("input_tensor", reshapeTensor); + //The given SavedModel MetaGraphDef key + Map outputTensorMap = model.function("serving_default").call(feedDict); + //detection_classes, detectionBoxes etc. are model output names + try (TFloat32 detectionClasses = (TFloat32) outputTensorMap.get("detection_classes"); + TFloat32 detectionBoxes = (TFloat32) outputTensorMap.get("detection_boxes"); + TFloat32 rawDetectionBoxes = (TFloat32) outputTensorMap.get("raw_detection_boxes"); + TFloat32 numDetections = (TFloat32) outputTensorMap.get("num_detections"); + TFloat32 detectionScores = (TFloat32) outputTensorMap.get("detection_scores"); + TFloat32 rawDetectionScores = (TFloat32) outputTensorMap.get("raw_detection_scores"); + TFloat32 detectionAnchorIndices = (TFloat32) outputTensorMap.get("detection_anchor_indices"); + TFloat32 detectionMulticlassScores = (TFloat32) outputTensorMap.get("detection_multiclass_scores")) { + int numDetects = (int) numDetections.getFloat(0); + if (numDetects > 0) { + try { + BufferedImage bufferedImage = ImageIO.read(new File(imagePath)); + Graphics2D graphics2D = bufferedImage.createGraphics(); + //TODO tf.image.combinedNonMaxSuppression + for (int n = 0; n < numDetects; n++) { + //put probability and position in outputMap + float detectionScore = detectionScores.getFloat(0, n); + //only include those classes with detection score greater than 0.3f + if (detectionScore > 0.3f) { + float classVal = detectionClasses.getFloat(0, n); + //TODO tf.image.drawBoundingBoxes + int x1 = (int) (shapeArray[1] * detectionBoxes.getFloat(0, n, 1)); + int y1 = (int) (shapeArray[0] * detectionBoxes.getFloat(0, n, 0)); + int x2 = (int) (shapeArray[1] * detectionBoxes.getFloat(0, n, 3)); + int y2 = (int) (shapeArray[0] * detectionBoxes.getFloat(0, n, 2)); + graphics2D.setPaint(Color.RED); + graphics2D.setStroke(new BasicStroke(5)); + graphics2D.drawRect(x1, y1, x2 - x1, y2 - y1); + graphics2D.setPaint(Color.BLACK); + //add a label with percentage score + graphics2D.drawString(cocoTreeMap.get(classVal - 1) + " " + + (new DecimalFormat("#.##").format(detectionScore * 100)) + + "%", x1, y1); + } + } + //TODO tf.image.encodeJpeg + ImageIO.write(bufferedImage, "jpg", new File(outputImagePath)); + } catch (IOException e) { + System.err.println("Exception with writing image " + e.getMessage()); + } } } - //TODO tf.image.encodeJpeg - ImageIO.write(bufferedImage, "jpg", new File(outputImagePath)); - } catch (IOException e) { - System.err.println("Exception with writing image " + e.getMessage()); } } - //close all tensors in outputTensorMap - for (String key : outputTensorMap.keySet()){ - Tensor tensor = outputTensorMap.get(key); - tensor.close(); - } - - reshapeTensor.close(); - outputImage.close(); } } }