Tensorflow: [рдкреНрд░рд╢реНрди рдФрд░ рддреНрд░реБрдЯрд┐] рдХреНрдпрд╛ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ-рд▓рд╛рдЗрдЯ рдореЗрдВ рдПрд╕рдПрд╕рдбреА-рдореЛрдмрд╛рдЗрд▓-рдиреЗрдЯ рдЬреИрд╕рд╛ рдбрд┐рдЯреЗрдХреНрд╢рди рдореЙрдбрд▓ рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 26 рджрд┐рд╕ре░ 2017  ┬╖  141рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: tensorflow/tensorflow

рдирдорд╕реНрддреЗред

рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ-рд▓рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ред

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/g3doc/models.md
рдбрд┐рдЯреЗрдХреНрд╢рди рдореЙрдбрд▓ рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рд╕рд╛рде рд╣реА, рдореИрдВ tensorflow-lite-API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ SSD-Inceptionv2 рдХреЛ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдЖрджреЗрд╢


bazel run --config=opt --copt=-msse4.1 --copt=-msse4.2 \
  //tensorflow/contrib/lite/toco:toco -- \
  --input_file=/home/danshin/tensorflow_lite/lite_model/fire_incpetion_v2.pb \
  --output_file=/home/danshin/tensorflow_lite/lite_model/fire_inception_v2.lite \
  --input_format=TENSORFLOW_GRAPHDEF \
  --output_format=TFLITE \
  --inference_type=FLOAT \
  --input_shape=1,300,300,3 \
  --input_array=image_tensor \
  --output_array={detection_boxes,detection_scores,detection_classes,num_detections}

рддреНрд░реБрдЯрд┐ рдХреЛрдб


2017-12-26 14:59:25.159220: I tensorflow/contrib/lite/toco/graph_transformations/graph_transformations.cc:39] Before general graph transformations: 2029 operators, 3459 arrays (0 quantized)
2017-12-26 14:59:25.251633: F tensorflow/contrib/lite/toco/graph_transformations/resolve_tensorflow_switch.cc:95] Check failed: other_op->type == OperatorType::kTensorFlowMerge 

fire_inception_v2 рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯреНрд╕ рд╣реИред
рджрд┐рдХреНрдХрдд рдХреНрдпрд╛ рд╣реИ?

рднреА,
рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдореЙрдбрд▓ рдХреЛ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ?

рдХреГрдкрдпрд╛ рдХреЛрдИ рдореЗрд░реА рдорджрдж рдХрд░реЗрдВ!.

рд╢реБрдХреНрд░рд┐рдпрд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рдЕрдм tensorflow/contrib/lite/examples/android рдкрд░ рд▓рд╛рдЗрд╡ рд╣реИ! рдпрд╣ рдореВрд▓ TF Android рдбреЗрдореЛ рдХрд╛ рдПрдХ рдЕрдзрд┐рдХ рд╕рдВрдкреВрд░реНрдг рдкреЛрд░реНрдЯ рд╣реИ (рдХреЗрд╡рд▓ рд╕реНрдЯрд╛рдЗрд▓рд╛рдЗрдЬрд╝ рдЙрджрд╛рд╣рд░рдг рдХреА рдХрдореА рд╣реИ), рдФрд░ рдЖрдЧреЗ рдЪрд▓рдХрд░ tensorflow/contrib/lite/java/demo рдореЗрдВ рдЕрдиреНрдп рдбреЗрдореЛ рдХреА рдЬрдЧрд╣ рд▓реЗрдЧрд╛ред

рдПрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд TF рд▓рд╛рдЗрдЯ рдлреНрд▓реИрдЯрдмрдлрд░ mobilenet_ssd_tflite_v1.zip рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдк TFLiteObjectDetectionAPIModel.java рдореЗрдВ рдЬрд╛рд╡рд╛ рдЕрдиреБрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдореВрд▓ рдЯреАрдПрдл рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмреЙрдХреНрд╕ рдХреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбреАрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдПрдХ рдмреЙрдХреНрд╕ рдкреВрд░реНрд╡ txt рдлрд╝рд╛рдЗрд▓ рдХреЛ рдРрдкреНрд╕ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдкреИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдореЙрдбрд▓ рдЬрд╝рд┐рдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдПрдХ рдХреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд░реЗрдЦрд╛рдВрдХрди)ред

TOCO рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рджреМрд░рд╛рди рдПрдХ рдЕрд▓рдЧ рдЗрдирдкреБрдЯ рдиреЛрдб (рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░/рдЙрдк) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╡рд┐рднрд┐рдиреНрди рдЖрдЙрдЯрдкреБрдЯ рдиреЛрдбреНрд╕ (concat, concat_1) рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЬреЛ tflite рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдпрд╛ рддреЛ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рдкреБрдирд░реНрдЧрдард┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ TF рд▓рд╛рдЗрдЯ TF рд╕рдорддрд╛ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИред

SSD MobileNet рдореЙрдбрд▓ рдХреЛ tflite рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдореЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рддреНрд╡рд░рд┐рдд рдЪрд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ:

# Download and extract SSD MobileNet model
wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2017_11_17.tar.gz
tar -xvf ssd_mobilenet_v1_coco_2017_11_17.tar.gz 
DETECT_PB=$PWD/ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb
STRIPPED_PB=$PWD/frozen_inference_graph_stripped.pb
DETECT_FB=$PWD/tensorflow/contrib/lite/examples/android/assets/mobilenet_ssd.tflite

# Strip out problematic nodes before even letting TOCO see the graphdef
bazel run -c opt tensorflow/python/tools/optimize_for_inference -- \
--input=$DETECT_PB  --output=$STRIPPED_PB --frozen_graph=True \
--input_names=Preprocessor/sub --output_names=concat,concat_1 \
--alsologtostderr

# Run TOCO conversion.
bazel run tensorflow/contrib/lite/toco:toco -- \
--input_file=$STRIPPED_PB --output_file=$DETECT_FB \
--input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE \
--input_shapes=1,300,300,3 --input_arrays=Preprocessor/sub \
--output_arrays=concat,concat_1 --inference_type=FLOAT --logtostderr

# Build and install the demo
bazel build -c opt --cxxopt='--std=c++11' //tensorflow/contrib/lite/examples/android:tflite_demo
adb install -r -f bazel-bin/tensorflow/contrib/lite/examples/android/tflite_demo.apk

рд╕рднреА 141 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@aselle рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдзрдиреНрдпрд╡рд╛рджред

рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЛрдмрд┐рд▓рдиреЗрдЯ рдПрд╕рдПрд╕рдбреА (рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╕реНрдерд╛рдкрдирд╛ рдПрд╕рдПрд╕рдбреА) рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдСрдкреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рджреВрдВрдЧрд╛ред

рдмрдврд╝рд┐рдпрд╛, рдореИрдВрдиреЗ рдпрд╣рд╛рдБ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдкреНрд░рд╢реНрди рдкреВрдЫрд╛ рд╣реИ: https://github.com/tensorflow/tensorflow/issues/14731

рдЬрдм рддрдХ рдЖрдк рд▓реЛрдЧ ssd-mobilenet рд╕реЗ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ, рддрдм рддрдХ рдЖрдк рдХрдм рддрдХ рдорд╛рдирддреЗ рд╣реИрдВ?

рдзрдиреНрдпрд╡рд╛рдж,
рдорд╛рд░реНрдЯрд┐рди рдкреЗрдирд┐рдпрд╛рдХ

?

рдиреЗрдЧрд┐рдВрдЧ рдЕрд╕рд╛рдЗрдиреА: рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ 14 рджрд┐рди рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдПрдХ рдЕрд╕рд╛рдЗрдиреА рд╣реИред рдХреГрдкрдпрд╛ рддрджрдиреБрд╕рд╛рд░ рд▓реЗрдмрд▓ рдФрд░/рдпрд╛ рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред

рдХреЛрдИ рдЕрдкрдбреЗрдЯреНрд╕?
рдореБрдЭреЗ рднреА рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рджред

@yucheeling

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ " ssd_mobilenet_v1_coco_2017_11_17.tar " рдЬреИрд╕реЗ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЦреБрджрд░рд╛ рджреБрдХрд╛рди рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдзрд╛рди рдкрд╣рдЪрд╛рди рдЬреИрд╕реЗ рдЯреА-рд╢рд░реНрдЯ, рдЬреАрдВрд╕ рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@ rana3579 , рдХреГрдкрдпрд╛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдРрд╕рд╛ рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдВред рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдПрд╕рдПрд╕рдбреА рдкрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдЕрдкрдбреЗрдЯред рдпрд╣ рдкреНрд░рдЧрддрд┐ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ред

@ rana3579 рдореЗрд░реЗ рд╡реАрдбрд┐рдпреЛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рдпрд╣ рдЪрд▓ рд░рд╣рд╛ рд╣реИ movidius, nvidia gpus рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЖрд░реНрдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рднреАред рдореИрдВ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдХрд┐рд╕реА рдХрдВрдкрдиреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ рддреЛ рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рд╕рд╣рдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://www.youtube.com/watch?v=3MinI9cCJrc

@aselle рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЗрд╕ рдкрд░ рд╕реВрдЪрдирд╛рдПрдВ рдХрд╣рд╛рдВ рджреЗрдЦреЗрдВ? рдЕрдЧрд░ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдореИрдВ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдЕрдзрд┐рд╕реВрдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЗрд╕ рдкрд░ рдЖрдкрдХреА рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ!

@andrewharp , рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ tflite рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Java TF рдореЛрдмрд╛рдЗрд▓ рдРрдк рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛ред рддреЛ рднрдВрдбрд╛рд░ рдореЗрдВ рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреВрдБрдЧрд╛ред

рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИ; рдЕрдЧрд▓реЗ рдПрдХ рдпрд╛ рджреЛ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдХреБрдЫ рдмрд╛рд╣рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@andrewharp рдХрдорд╛рд▓ рд╣реИ !! рдХреНрдпрд╛ рдпрд╣ рдЖрдИрдУрдПрд╕ рдХреИрдорд░рд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рднреА рдЬрд╛рддрд╛ рд╣реИ?
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡рдЬрд╝рди рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдЖрдХрд╛рд░ рдХреИрд╕рд╛ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ?
рдЯреАрдПрдлрд▓рд╛рдЗрдЯ рд╡рд░реНрдЧреАрдХрд░рдг рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдЫреЛрдЯрд╛ рд╣реИ рдФрд░ рдЖрдИрдУрдПрд╕ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдмрдЯрд░рд░реА рд╕реНрдореВрдж рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯреАрдПрдлрд▓рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдВред

рдХреБрдЫ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрджрд╛ рдПрд╕рдПрд╕рдбреА рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдкреАрдмреА рдХреЛ рдХреЛрд░рдПрдордПрд▓ рдореЙрдбрд▓ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рд▓рд╛рдкрддрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкрд░рддреЛрдВ рдХреЛ рд▓рд┐рдЦрд╛:
https://github.com/vonholst/SSDMobileNet_CoreML

рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ iPhone 7 рдкрд░ рдХреЗрд╡рд▓ 8-12 fps рдХреА рддрд░рд╣ рд╣реИред

рдирдорд╕реНрддреЗ,
рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди?

рдореИрдВ рднреА рдЙрддреНрд╕реБрдХ рд╣реВрдБ :)

рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рддрд╣рдд рдПрдВрдбреНрд░реЙрдЗрдб рдЯреАрдПрдл рдбреЗрдореЛ рдХреЛ tflite рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдЬреАрдердм рдкрд░ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рдорд╛рдзрд╡рдЬрдп рдпрд╣ рдХреЗрд╡рд▓ рдПрдВрдбреНрд░реЙрдЗрдб рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреВрд░реНрд╡-рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг (рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдирд╛/рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг) рдФрд░ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ (рдмреЙрдХреНрд╕ рдкреБрдЬрд╛рд░рд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЧреИрд░-рдЕрдзрд┐рдХрддрдо рджрдорди рдФрд░ рд╕рдорд╛рдпреЛрдЬрди) рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ tflite MobileNet SSD рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред .

@andrewharp рдпрд╣ рдХрдорд╛рд▓ рд╣реИред рдХреНрдпрд╛ рдЖрдк рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдСрдкрд░реЗрд╢рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ TF рд▓рд╛рдЗрдЯ рдореЗрдВ рдХреНрдпреЛрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рдирд┐рдпрдорд┐рдд рдПрд╕рдПрд╕рдбреА рдкрд░ tfcoreml рд░реВрдкрд╛рдВрддрд░рдг рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдорд╛рдорд▓рд╛ рд▓рдЧрддрд╛ рд╣реИред рд╢рд┐рдХрд╛рдпрдд рди рдХрд░рддреЗ рд╣реБрдП рдХреЗрд╡рд▓ рддрдХрдиреАрдХреА рд░реБрдЪрд┐ рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпрд╛ рд╡реЗ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдореЛрдмрд╛рдЗрд▓ рд╕реНрдЯреИрдХ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реИ рдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ?

Android рдХреЛрдб рдкрд░ рдЖрдкрдХреЗ рд╢рд╛рдирджрд╛рд░ рдкреНрд░рдпрд╛рд╕ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИрдВ!!! рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реВрдВ рдЬреЛ рдЗрд╕ рдкрд░ рдЖрдЧреЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реИ!

@andrewharp , рдФрд░ @aselle TFLite рдХреЗ рд▓рд┐рдП SSD рдЖрдзрд╛рд░рд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЛрдХрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдореЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдпрд╣ рдЕрдм tensorflow/contrib/lite/examples/android рдкрд░ рд▓рд╛рдЗрд╡ рд╣реИ! рдпрд╣ рдореВрд▓ TF Android рдбреЗрдореЛ рдХрд╛ рдПрдХ рдЕрдзрд┐рдХ рд╕рдВрдкреВрд░реНрдг рдкреЛрд░реНрдЯ рд╣реИ (рдХреЗрд╡рд▓ рд╕реНрдЯрд╛рдЗрд▓рд╛рдЗрдЬрд╝ рдЙрджрд╛рд╣рд░рдг рдХреА рдХрдореА рд╣реИ), рдФрд░ рдЖрдЧреЗ рдЪрд▓рдХрд░ tensorflow/contrib/lite/java/demo рдореЗрдВ рдЕрдиреНрдп рдбреЗрдореЛ рдХреА рдЬрдЧрд╣ рд▓реЗрдЧрд╛ред

рдПрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд TF рд▓рд╛рдЗрдЯ рдлреНрд▓реИрдЯрдмрдлрд░ mobilenet_ssd_tflite_v1.zip рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдк TFLiteObjectDetectionAPIModel.java рдореЗрдВ рдЬрд╛рд╡рд╛ рдЕрдиреБрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдореВрд▓ рдЯреАрдПрдл рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмреЙрдХреНрд╕ рдХреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбреАрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдПрдХ рдмреЙрдХреНрд╕ рдкреВрд░реНрд╡ txt рдлрд╝рд╛рдЗрд▓ рдХреЛ рдРрдкреНрд╕ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдкреИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдореЙрдбрд▓ рдЬрд╝рд┐рдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдПрдХ рдХреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд░реЗрдЦрд╛рдВрдХрди)ред

TOCO рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рджреМрд░рд╛рди рдПрдХ рдЕрд▓рдЧ рдЗрдирдкреБрдЯ рдиреЛрдб (рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░/рдЙрдк) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╡рд┐рднрд┐рдиреНрди рдЖрдЙрдЯрдкреБрдЯ рдиреЛрдбреНрд╕ (concat, concat_1) рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЬреЛ tflite рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдпрд╛ рддреЛ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рдкреБрдирд░реНрдЧрдард┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ TF рд▓рд╛рдЗрдЯ TF рд╕рдорддрд╛ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИред

SSD MobileNet рдореЙрдбрд▓ рдХреЛ tflite рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдореЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рддреНрд╡рд░рд┐рдд рдЪрд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ:

# Download and extract SSD MobileNet model
wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2017_11_17.tar.gz
tar -xvf ssd_mobilenet_v1_coco_2017_11_17.tar.gz 
DETECT_PB=$PWD/ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb
STRIPPED_PB=$PWD/frozen_inference_graph_stripped.pb
DETECT_FB=$PWD/tensorflow/contrib/lite/examples/android/assets/mobilenet_ssd.tflite

# Strip out problematic nodes before even letting TOCO see the graphdef
bazel run -c opt tensorflow/python/tools/optimize_for_inference -- \
--input=$DETECT_PB  --output=$STRIPPED_PB --frozen_graph=True \
--input_names=Preprocessor/sub --output_names=concat,concat_1 \
--alsologtostderr

# Run TOCO conversion.
bazel run tensorflow/contrib/lite/toco:toco -- \
--input_file=$STRIPPED_PB --output_file=$DETECT_FB \
--input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE \
--input_shapes=1,300,300,3 --input_arrays=Preprocessor/sub \
--output_arrays=concat,concat_1 --inference_type=FLOAT --logtostderr

# Build and install the demo
bazel build -c opt --cxxopt='--std=c++11' //tensorflow/contrib/lite/examples/android:tflite_demo
adb install -r -f bazel-bin/tensorflow/contrib/lite/examples/android/tflite_demo.apk

@andrewharp рд╣реИрдкреНрдкреА рдИрд╕реНрдЯрд░ рдЖрдк рд▓реАрдЬреЗрдВрдб! :) рджреЗрдЦрддрд╛ рд╣реВрдБ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдБред

рдирдорд╕реНрддреЗ, рдХреНрдпрд╛ рдХреЛрдИ рдкрд░рд┐рдорд╛рдгрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИ?

рдореБрдЭреЗ рдпрд╣ рдКрдкрд░ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рдореЗрд░реЗ рдмреЗрдЬрд╝рд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдХрд╛рд░рдг Android SDK 15
  • рдореИрдВ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рднреА рдирд╣реАрдВ рдЦреЛрд▓ рд╕рдХрддрд╛

@andrewharp рдпрд╣ рдПрдХ рдирдИ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕рдХреА рдУрд░ рдЖрдк рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЧреНрд░реИрдбрд▓ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрдЬрд╝рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдХрд╛рд░рдг рдЕрднреА рдХреБрдЫ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдЕрдЧрд░ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ рддреЛ рдкреАрдЖрд░ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб 7 рдкрд░ рдореЗрд░реЗ рдПрд▓рдЬреА рдЬреА 6 рдкрд░ рдзреАрдорд╛ рд▓рдЧрддрд╛ рд╣реИред
рдХреНрдпрд╛ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдирдПрди рдПрдкреАрдЖрдИ рдХреЗрд╡рд▓ рдПрдВрдбреНрд░реЙрдЗрдб 8 рдкрд░ рд╣реИ?

Android 8 рдкрд░ рдХреЛрдИ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ?

рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдирд┐рд░реНрджреЗрд╢ рдХреЗрд╡рд▓ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдереЗред рдореИрдВрдиреЗ рд╡рд╛рдХреНрдп рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЗ рдмрд╛рдж рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдкрдврд╝рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдЖрдк рдореЙрдбрд▓ рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╣рд╛рдБ, рдореБрдЭреЗ рдкрд┐рдХреНрд╕реЗрд▓ xl рдорд┐рд▓рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдлрд╝реЛрди рдореЗрдВ рдРрд╕рд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЕрдиреБрдорд╛рди рдХреЛ рддреЗрдЬрд╝ рдХрд░ рд╕рдХреЗ рдпрд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдмрддрд╛ рджреВрдВрдЧрд╛ред рдореИрдВ рдорд╛рди рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рджреЛрд╣ рдХреЗ рд╕рд╛рде рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ ...

рдореЗрд░реЗ рдЖрдИрдлреЛрди рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛

31 рдорд╛рд░реНрдЪ 2018 рдХреЛ 20:05 рдмрдЬреЗ рдорд╛рдзрд╡ рдЬрдп рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореБрдЭреЗ рдпрд╣ рдКрдкрд░ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдореЗрд░реЗ рдмреЗрдЬрд╝рд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдХрд╛рд░рдг Android SDK 15
рдореИрдВ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рднреА рдирд╣реАрдВ рдЦреЛрд▓ рд╕рдХрддрд╛
@andrewharp рдпрд╣ рдПрдХ рдирдИ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕рдХреА рдУрд░ рдЖрдк рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЧреНрд░реИрдбрд▓ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрдЬрд╝рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдХрд╛рд░рдг рдЕрднреА рдХреБрдЫ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдЕрдЧрд░ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ рддреЛ рдкреАрдЖрд░ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб 7 рдкрд░ рдореЗрд░реЗ рдПрд▓рдЬреА рдЬреА 6 рдкрд░ рдзреАрдорд╛ рд▓рдЧрддрд╛ рд╣реИред
рдХреНрдпрд╛ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдирдПрди рдПрдкреАрдЖрдИ рдХреЗрд╡рд▓ рдПрдВрдбреНрд░реЙрдЗрдб 8 рдкрд░ рд╣реИ?

Android 8 рдкрд░ рдХреЛрдИ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред

рд╣рд╛рдВ, рдореИрдВрдиреЗ рд╡рд╣реА рдХрд┐рдпрд╛ рдФрд░ рд╕реАрдзреЗ рдХреЛрдб рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЧрдпрд╛ред рдлрд┐рд░ рдЖрдЬ рд╕реБрдмрд╣ рдЖрдкрдХреЗ рдкрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдЬрд╡рд╛рдм рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ рдХрд┐ рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ RTFM'edред рдореИрдВ

рдореИрдВ рдЬреЛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдЙрд╕рд╕реЗ рдПрд▓рдЬреА рдЬреА6 рдПрдирдПрди рдПрдкреАрдЖрдИ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрд╡рд╛рд▓рдХреЙрдо 821 рдПрд╕рдУрд╕реА рдкрд┐рдХреНрд╕реЗрд▓ 1 рдХреЗ рд╕рдорд╛рди рд╣реИред рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдПрд▓рдЬреА рдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб 8 рдпрд╛ 8.1 рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдирд╡реАрдирддрдо рд╡рдВрд╢рд╛рд╡рд▓реА рдмрдирд╛рддрд╛ рд╣реИ рдереЛрдбрд╝рд╛ рд╕реНрдХреЗрдЪреА рджрд┐рдЦрддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб 8.1 рдкрд░ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддрдм рддрдХ рдореИрдВ рдЗрд╕реЗ рд░реЛрдХ рджреВрдВрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдкрд░ рд╕рдХреНрд░рд┐рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╣реЛрдЧрд╛! рдореИрдВ

рдореИрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдбреЗрдореЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдзреАрдорд╛ рдЪрд▓рддрд╛ рд╣реИ ... рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рднреА рдзреАрдорд╛ред
рдореИрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдПрдХреНрд╕рдПрд▓ (рдкреНрд░рдердо рд╕рдВрд╕реНрдХрд░рдг) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ 64 рдмрд┐рдЯ рдЖрд░реНрдХ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреЗ рдбреЗрдореЛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдЯреАрдПрдлрд▓рд╛рдЗрдЯ рдХреЗ рдмрд┐рдирд╛ рднреА рд▓рдЧрднрдЧ рджреЛрдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рд╣реИ ... рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдиреБрдорд╛рди рд╕рдордп рд▓рдЧрднрдЧ 450ms рд╣реИред рдЬрдм рдореИрдВ рдЗрд╕ рдбреЗрдореЛ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рд▓рдЧрднрдЧ 850ms рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдХрднреА-рдХрднреА рдПрдХ рд╕реЗрдХрдВрдб рд╕реЗ рднреА рдЕрдзрд┐рдХред рдХреНрдпрд╛ рдореИрдВрдиреЗ рдХреБрдЫ рдЧрд▓рдд рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдЪреНрдЫреА рдЧрддрд┐ рдХреА рдЙрдореНрдореАрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐-рдЖрд╢рд╛рд╡рд╛рджреА рдерд╛? рдзрдиреНрдпрд╡рд╛рджред

@mpeniak рдореБрдЭреЗ LG G6 рдкрд░ рд╕рдорд╛рди рдЧрддрд┐ рдорд┐рд▓реА, рдбрд┐рдмрдЧ рдСрди рдпрд╛ рдСрдл рдХреЗ рд╕рд╛рде (рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдбрд┐рдмрдЧ рдерд╛)ред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ NNAPI рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╢рд╛рдпрдж рд╣рдореЗрдВ nnapi_lib рдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЦрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ?
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/BUILD

рдирд┐рд░реНрднрд░рддрд╛ рд╕реВрдЪреАрдмрджреНрдз рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ?
рд╢рд╛рдпрдж ./configure . рдореЗрдВ рдХреБрдЫ
(рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдореИрдВрдиреЗ рдПрдХреНрд╕рдПрд▓рдП рдХреЛ рдЕрдкрдиреЗ ./configure рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдерд╛ рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдерд╛ рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдЧрддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдЖрдпрд╛)

@andrewharp
рдореИрдВ рдПрдирдПрдирдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ API Android 8.1> . рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ
рдпрджрд┐ рдпрд╣ 8.1 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ? рдпрд╛ рдХреНрдпрд╛ рдореБрдЭреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрдирдбреАрдХреЗ рдХрд╛рд░реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд▓рд┐рдВрдХ
рдЖрдкрдХрд╛ рджрд┐рди рд╢реБрдн рд╣реЛ XD

@andrewharp , рдореИрдВрдиреЗ tflite_demo рдХреЗ рд▓рд┐рдП NNAPI рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ рдПрдкреАрдХреЗ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдПрдкреАрдХреЗ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ
AddOpsAndParams рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдСрдкрд░реЗрд╢рди tflite::BuiltinOperator_SQUEEZE рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░
nn_op_type -1 рдкрд░ рд╕реЗрдЯ рд╣реИ, рдЬреЛ FATAL рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛, рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ (-1) рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐
рдореВрд▓ рдХрд╛рд░рдгред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдЧрд╛? рдХреНрдпрд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ
NNAPI рдкрде рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП? рдзрдиреНрдпрд╡рд╛рджред

@andrehentz
рдмреЗрдЬрд╝рд▓ рд░рди-рд╕реА рдСрдкреНрдЯ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ/рдкрд╛рдпрдерди/рдЯреВрд▓реНрд╕/рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝_рдлреЙрд░_рдЗрдирдлрд░реЗрдВрд╕ -- \
--input=$DETECT_PB --output=$STRIPPED_PB --frozen_graph=True \
--input_names=рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░/рдЙрдк --output_names=concat,concat_1 \
--alsologtostderr

input_names image_tensor рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?
рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

@рдирд╛рдирд╛рдорд╛рд░реЗ
рдЖрдкрдХреЛ рдлреНрд░реЛрдЬрди_рдЗрдирдлреЗрд░реЗрдВрд╕_рдЧреНрд░рд╛рдл.рдкреАрдмреА рдХреЗ рдмрдЬрд╛рдп рдлреНрд░реЛрдЬрди_рдЗрдирдлреЗрд░реЗрдВрд╕_рдЧреНрд░рд╛рдл_рд╕реНрдЯреНрд░рд┐рдкреНрдб.рдкреАрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
"рдмреЗрдЬрд╝рд▓-рдмрд┐рди/рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ/рдЯреВрд▓реНрд╕/рдЧреНрд░рд╛рдлрд╝_рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо/рд╕рдорд░рд╛рдЗрдЬрд╝_рдЧреНрд░рд╛рдлрд╝ --in_graph=frozen_inference_graph_stripped.pb" рдЖрдЬрд╝рдорд╛рдПрдБ
рдФрд░ рдЖрдк рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
1 рд╕рдВрднрд╛рд╡рд┐рдд рдЗрдирдкреБрдЯ рдорд┐рд▓реЗ: (рдирд╛рдо = рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░/рдЙрдк, рдкреНрд░рдХрд╛рд░ = рдлреНрд▓реЛрдЯ (1), рдЖрдХрд╛рд░ = рдХреЛрдИ рдирд╣реАрдВ)
рдХреЛрдИ рдЪрд░ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ред
2 рд╕рдВрднрд╛рд╡рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓реЗ: (рдирд╛рдо = рдХреЙрдирдХреИрдЯ, рдСрдк = рдХреЙрдирдХреИрдЯ рд╡реА 2) (рдирд╛рдо = рдХреЙрдиреНрдХреИрдЯ_1, рдСрдк = рдХреЙрдиреНрдХреИрдЯ рд╡реА 2)

рдЗрдирдкреБрдЯ рдирд╛рдо рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░/рдЙрдк рдкреЗрдЯ рд╣реИ рдЖрдЙрдЯрдкреБрдЯ рдирд╛рдо рдХреЙрдирдХреИрдЯ рд╣реИред

@рдирд╛рдирд╛рдорд╛рд░реЗ
рдирд╡реАрдирддрдо рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рд▓рд╛рдЗрдЯ рдХреЛрдб рдореЗрдВ NNAPI рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИред

рдХреНрд▓рд╛рд╕ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ: setUseNNAPI(true);
рдЖрдк рд╕реАрдзреЗ рдРрд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@ рдЭрд╛рдВрдЧрдмреЛ0325
рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА setUserNNAPI(true) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рд╛ред
рдпрд╣ рд▓рдЧрднрдЧ рд╕рдорд╛рди рдЕрдиреБрдорд╛рди рдерд╛ рдХрд┐ NNAPI рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдПрдВрдбреНрд░реЙрдЗрдб рд╡рд┐рдирд┐рд░реНрджреЗрд╢: 8.1 рд╕рдВрд╕реНрдХрд░рдгред

@nanamare , рдХреНрдпрд╛ рдЖрдкрдХрд╛ ssd-mobilenet рдЪрд▓ рд░рд╣рд╛ рд╣реИ? рдРрд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП, рдПрдХ SQUEEZE рдСрдкрд░реЗрд╢рди рд╣реИ рдЬреЛ Android NNAPI рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдКрдкрд░ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ред рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ-рд╡реА1 рдХреЗ рд▓рд┐рдП рдпрд╣ рдареАрдХ рд╣реИред

<strong i="5">@andrewharp</strong>  Hi, andrewharp. i just followed your quick steps for converting an SSD MobileNet model to tflite format, and then i tried to  build the demo to use it. But something accurred in apk.
for the tflite from mobilenet_ssd_tflite_v1.zip, everything is ok! i can use mobile to detecter things.
And then i tried to use pet data to fine tune the model from the checkpoint in mobilenet_ssd_tflite_v1.zip. this process is also ok. i check the generated frozen_inference_graph.pb with the object_detection_tutorial.ipynb(https://github.com/tensorflow/models/blob/master/research/object_detection/object_detection_tutorial.ipynb). the result shown this pb can used to object detection. And then i followed the script to convert frozen pb to tflite. Then build demo with tflite, unfortunately something wrong ocurred. Then log is written below. 
It seems the Shape of output target [1, 1917, 4] does not match with the shape of the Tensor [1, 1917, 1, 4]. Because i am new to use object detection api, i donot know how to deal with the problem. 
Hope you can point out some solutions, Thx!

рдореЛрдмрд╛рдЗрд▓ рд▓реЙрдЧ рдпрд╣рд╛рдБ:
04-04 19:46:36.099 28864-28882/org.tensorflow.lite.demo E/AndroidRuntime: рдШрд╛рддрдХ рдЕрдкрд╡рд╛рдж: рдЕрдиреБрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛: org.tensorflow.lite.demo, PID: 28864 java.lang.IllegalArgumentException: рдЖрдЙрдЯрдкреБрдЯ рд▓рдХреНрд╖реНрдп рдХрд╛ рдЖрдХрд╛рд░ [1, 1917, 4] рдЯреЗрдВрд╕рд░ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ [1, 1917, 1, 4]ред org.tensorflow.lite.Tensor.copyTo(Tensor.java:44) рдкрд░ org.tensorflow.lite.Interpreter.runForMultipleInputsOutputs(Interpreter.java:139) рдкрд░ org.tensorflow.demo.TFLiteObjectDetectionAPIModel.RecognizeImage(TFLiteObjectDetectionAPIModel. ) org.tensorflow.demo.DetectorActivity$3.run(DetectorActivity.java:248) рдкрд░ android.os.Handler.handleCallback(Handler.java:761) рдкрд░ android.os.Handler.dispatchMessage(Handler.java:98)рдкрд░ android.os.Looper.loop(Looper.java:156) android.os.HandlerThread.run(HandlerThread.java:61) рдкрд░

рдЕрджреНрднреБрдд! рдЖрдИрдУрдПрд╕ рдкрд░ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЯреЗрдВрд╕рд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдХреИрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░реВрдВ?

interpreter->Invoke();
float* output = interpreter->typed_output_tensor<float>(0);

DetectorActivity рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдЯрдХрд╛ рд╣реБрдЖ рд╣реИ, рдХреНрдпрд╛ рдЖрдк рдореМрдЬреВрдж рд╣реИрдВ, рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ?

@ zhangbo0325 рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЪреВрдВрдХрд┐ рдирд┐рдЪреЛрдбрд╝ рдПрдирдПрдирдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдПрдирдПрдирдПрдкреАрдЖрдИ рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрдорд╛рди рдЙрддрдирд╛ рд╣реА рдзреАрдорд╛ рд░рд╣реЗрдЧрд╛ рдЬрд┐рддрдирд╛ рдХрд┐ рд╣реИ? рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛, рдореБрдЭреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдПрдХреНрд╕рдПрд▓ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рдорд┐рд▓рддрд╛ рд╣реИред рдореИрдВ рдЕрдиреБрдорд╛рди рдХреЗ рд╕рдордп рд▓рдЧрднрдЧ 80-120ms рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВред рдзрдиреНрдпрд╡рд╛рдж!

@mpeniak , рдореИрдВрдиреЗ рд╡рд╣реА рд╕рд╡рд╛рд▓ рдПрдВрдбреНрд░реВрд╡рд░реНрдк рд╕реЗ рдкреВрдЫрд╛ред рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА ssd-mobilenet рдХреЛ tensorflow-lite cpu рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдорджрдж рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдФрд░ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рднреА рдорд┐рд▓рд╛ред

рджреЗрд╡ рд╢рд┐рдЦрд░ рд╕рдореНрдореЗрд▓рди 2018 рдореЗрдВ рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ рд▓рд╛рдЗрдЯ рд╡рд╛рд░реНрддрд╛ рдиреЗ рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдкрд░ 3x рдкреНрд░рджрд░реНрд╢рди рджрд┐рдЦрд╛рдпрд╛:
https://youtu.be/FAMfy7izB6A?t=530

рд╢рд╛рдпрдж рд╡рд╣ рдПрд╕рдПрд╕рдбреА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ?
рд╕рдВрднрд╡рддрдГ рдкрд╣рд▓реЗ рд╡рдЬрди рдкрд░рд┐рдорд╛рдгреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдореИрдВрдиреЗ рдореЛрдмрд┐рд▓рдиреЗрдЯ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ, рдпрд╣ рдореЛрдмрд┐рд▓рдиреЗрдЯ-рдПрд╕рдПрд╕рдбреА рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ ...

рдЙрджрд╛рд╕ рдкрд╛рдВрдбрд╛ я╕ПЁЯР╝
@andrewharp рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдЬрдм рдПрдХ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рдПрд╕рдПрд╕рдбреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛? рдХреНрдпрд╛ рдпрд╣ рд╡рдЬрди рдкрд░рд┐рдорд╛рдгреАрдХрд░рдг рдХрд╛ рдкреНрд░рд╢реНрди рд╣реИ?

рдореБрдЭреЗ TensorFlowLite рдкрд░ ssd-mobilenet рдХреЗ рд▓рд┐рдП рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рднреА рдорд┐рд▓рд╛ :(
рд▓реЗрдХрд┐рди, рдореЗрд░рд╛ рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╕реНрдХреЛрд░ 1 рд╕реЗ рдЕрдзрд┐рдХ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ?

@ a1103304122 рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд╕реНрдХреЛрд░ рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ рд╕реЗ рдкрд╣рд▓реЗ рдиреЛрдб "рдХреЙрдирдХреИрдЯ" рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

TOCO рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рджреМрд░рд╛рди рдПрдХ рдЕрд▓рдЧ рдЗрдирдкреБрдЯ рдиреЛрдб (рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░/рдЙрдк) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╡рд┐рднрд┐рдиреНрди рдЖрдЙрдЯрдкреБрдЯ рдиреЛрдбреНрд╕ (concat, concat_1) рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЬреЛ tflite рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдпрд╛ рддреЛ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рдкреБрдирд░реНрдЧрдард┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ TF рд▓рд╛рдЗрдЯ TF рд╕рдорддрд╛ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореЙрдбрд▓ рдореЗрдВ TFlite TFmobile рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛ рдХреНрдпреЛрдВ рд╣реИ?

@andrewharp рдХреНрдпрд╛ TF рд▓рд╛рдЗрдЯ SSD рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдХреНрдпрд╛ рдкрд░рд┐рдорд╛рдгреАрдХрд░рдг рднреА рд╕рдВрднрд╡/рдЖ рд░рд╣рд╛ рд╣реИ? рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд▓реЛрдЧ рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд╣рд┐рдЪрдХреА рд╣реИ рдпрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ

@andrewharp рдЖрдкрдХреА рд╢рд╛рдирджрд╛рд░ рдкреЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рдХрджрдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╢реНрди рд╣реИред

TOCO рдХреЛ рдЧреНрд░рд╛рдлрд╝рдбреЗрдлрд╝ рджреЗрдЦрдиреЗ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдиреЛрдбреНрд╕ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ

рдмреЗрдЬрд╝рд▓ рд░рди-рд╕реА рдСрдкреНрдЯ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ/рдкрд╛рдпрдерди/рдЯреВрд▓реНрд╕/рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝_рдлреЙрд░_рдЗрдирдлрд░реЗрдВрд╕ -- \
--input=$DETECT_PB --output=$STRIPPED_PB --frozen_graph=True \
--input_names=рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░/рдЙрдк --output_names=concat,concat_1 \
--alsologtostderr

рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рдирд╣реАрдВ рд╕рдордЭрддрд╛, рддреЛ рдЖрдк рдпрд╣рд╛рдБ STRIPPED_PB рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣реИ рдирд╛? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рд╣рдорд╛рд░реА рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЗрдирдкреБрдЯ image_tensor рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рд╣рдо рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░/рдЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рджреВрд╕рд░реЗ, рдпрд╣рд╛рдВ рд╣рдо рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝_рдлреЙрд░_рдЗрдирдлреЗрд░реЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рд╣рдо рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо_рдЧреНрд░рд╛рдл рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпреЛрдВрдХрд┐ рдирдпрд╛ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝_рдлрд╝реЛрд░_рдЗрдирдлрд╝рд░реЗрдВрд╕ рдХреЗ рдмрдЬрд╛рдп рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо_рдЧреНрд░рд╛рдлрд╝ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред

@mpeniak рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ? рдХреГрдкрдпрд╛ рдХреБрдЫ рд╡рд┐рд╡рд░рдг рдмрддрд╛рдПрдВред

org.tensorflow.lite.demo E/AndroidRuntime: рдШрд╛рддрдХ рдЕрдкрд╡рд╛рдж: рдЕрдиреБрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛: org.tensorflow.lite.demo, PID: 28864 java.lang.IllegalArgumentException: рдЖрдЙрдЯрдкреБрдЯ рд▓рдХреНрд╖реНрдп рдХрд╛ рдЖрдХрд╛рд░ [1, 1917, 4] рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рдЯреЗрдВрд╕рд░ рдХрд╛ рдЖрдХрд╛рд░ [1, 1917, 1, 4]ред

@Haijunlv рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХреА рд╣реИ? рдХреНрдпрд╛ рдЖрдк рд╕рдорд╛рдзрд╛рди рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЯреАрдПрдл рд▓рд╛рдЗрдЯ рдирдпрд╛ рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрдореЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдкрд░ рдореБрдЭреЗ рдУрдПрд╕ рдПрдХреНрд╕ рдкрд░ Error:Plugin with id 'com.android.application' not found. рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред

@csmith105 рдЬреИрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛! рдореИрдВ bazel рдХреЗ рд╕рд╛рде рдбреЗрдореЛ рдмрдирд╛рдиреЗ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рд▓реЗрдХрд┐рди рдореИрдВ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдпрд╛ рдЪрд▓рд╛ рдирд╣реАрдВ рд╕рдХрддрд╛ ... рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди?

@ рдПрдбреА-рдЭреЗрдВрдЧ рдпрджрд┐ рдЖрдкрдиреЗ рдлреНрд░реЛрдЬрди рдЧреНрд░рд╛рдл рдореЗрдВ рдиреЛрдб "рдХреЙрдирдХреИрдЯ" рджреЗрдЦрд╛ рд╣реИ, рддреЛ рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреЙрдирдХреИрдЯ рдСрдк рдХреЗ рдмрд╛рдж рдирд┐рдЪреЛрдбрд╝ рд╕реЗрд╢рди рдПрдХреНрд╕рд╛рдЗрдЯреЗрдб рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдХрд╛рд░ рдЕрд╕рдВрдЧрдд рд╣реИред рдореИрдВрдиреЗ рдирд┐рдЪреЛрдбрд╝ рд╕реЗрд╢рди рдХреА рдЧрддрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред

  1. рдирд┐рдЪреЛрдбрд╝ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕реЗрд╢рди рдХрд╛ рдХреНрд░рдо рдмрджрд▓реЗрдВред Ssd_meta_arch.py тАЛтАЛрдореЗрдВ, рдереЛрдбрд╝рд╛ рдмрджрд▓реЗрдВ " box_encodings = tf.squeeze(tf.concat(prediction_dict['box_encodings'],axis=1),axis=2)"
  2. рдЖрдХреГрддрд┐ 1 рдХреЛ рдЕрдХреНрд╖ 2 рдкрд░ рд╕реАрдзреЗ рдорд╛рд░реЗрдВред box_predictor.py рдореЗрдВ, рдереЛрдбрд╝рд╛ рд╕рд╛ рдмрджрд▓реЗрдВ " box_encodings =tf.reshape(
    box_encodings, tf.stack([combined_feature_map_shape[0],
    рд╕рдВрдпреБрдХреНрдд_рдлреАрдЪрд░_рдореИрдк_рдЖрдХрд╛рд░[1] *
    рд╕рдВрдпреБрдХреНрдд_рдлреАрдЪрд░_рдореИрдк_рдЖрдХрд╛рд░[2] *
    num_predictions_per_location,
    1, рд╕реНрд╡._рдмреЙрдХреНрд╕_рдХреЛрдб_рд╕рд╛рдЗрдЬрд╝]))"

рдЕрд╕рд▓ рдореЗрдВ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд "1" рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЯреЗрдВрд╕рд░ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдХреНрдпреЛрдВ рдмрджрд▓реЗрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмреЗрдорд╛рдиреА рд╣реИ
рд╕реЗрд╢рдиред
рдореИрдВрдиреЗ рдореЛрдмрд╛рдЗрд▓ рдореЗрдВ рдореЙрдбрд▓ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛ 1 рдФрд░ рд╕рдлрд▓рддрд╛ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдереЛрдбрд╝рд╛ рдзреАрдорд╛ред рдмрд╛рдж рдореЗрдВ рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛ 2 рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдЧрддрд┐ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ

@Haijunlv рдбрд┐рдЯреЗрдХреНрд╢рди рдХрд┐рддрдиреЗ рдЕрдЪреНрдЫреЗ рд╣реИрдВ? @andrewharp рдХреЗ рдбреЗрдореЛ рд╕реЗ рд▓рд╛рдЗрдЯ рдореЙрдбрд▓ рдЧреНрд░рд╛рдл рд╕реЗ рд╕рднреА рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдФрд░ рдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕ рдиреЛрдбреНрд╕ (рдЙрдирдореЗрдВ рд╕реЗ рд╣рдЬрд╛рд░реЛрдВ) рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЛрдб рдХреА рдХрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ ..

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рдЧреНрд░реЗрдбрд▓ рдореБрджреНрджреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред (рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рдпрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ):

  • рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ Bazel рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдЕрдВрджрд░ рдЧреНрд░реИрдбрд▓ рдХреЛ "рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо AS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Bazel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛ рдФрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

  • рдореИрдВрдиреЗ рдмрд╛рдЬрд╝реЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд▓реЗрдЦ рдкрдврд╝реЗ рдФрд░ рдореИрдВ Quora рдореЗрдВ рдЗрд╕ рдкреНрд░рд╢реНрди рдкрд░ рдЖрдпрд╛ .. рдФрд░ рдЙрддреНрддрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдмрд╛рдЬрд╝реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдврд╛рдВрдЪреЗ рдХрд╛ рдмреЗрд╣рддрд░ рд╢реЛрд╖рдг рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ .. рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдФрд░ рдЧреНрд░реИрдбрд▓ рдХреЛ рддрдм рддрдХ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджреЗрдВ рдЬрдм рддрдХ рдХрд┐ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдЗрд╕рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рди рдХрд░ рджреЗред

@davidfant
рдХреНрдпрд╛ рдЖрдкрдиреЗ TensorFlow Lite C++ рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд┐рдпрд╛ рд╣реИ?

interpreter->Invoke();
???? output = interpreter->typed_output_tensor<?????>(0);

рдореИрдВ рдкреНрд░рдЧрддрд┐ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╕реА ++ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ? рдЗрд╕ рд╕рдордп рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣реА рд╣реИред рд╕реНрдХреЛрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдбреЗрдЯрд╛ рд╕рд░рдгреА рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪрдирд╛ рд╣реИ?

(fill inputs)
.......
intepreter->Invoke();
const std::vector<int>& results = interpreter->outputs();
TfLiteTensor* outputLocations = interpreter->tensor(results[0]);
TfLiteTensor* outputClasses   = interpreter->tensor(results[1]);
float *data = tflite::GetTensorData<float>(outputClasses);
for(int i=0;i<NUM_RESULTS;i++)
{
   for(int j=1;j<NUM_CLASSES;j++)
   {
      float score = expit(data[i*NUM_CLASSES+j]); // ┬┐?
    }
}

@JaviBonilla рдореИрдВрдиреЗ рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрдореЛ рдРрдк рд╕реЗ рдХрдЯрдСрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢реЛрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЧреНрд░рд╛рдл рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдВрд╕рд░рдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рд▓рд╛рдЗрдЯ рдореЙрдбрд▓ рд╣рдЬрд╛рд░реЛрдВ рдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕ рдиреЛрдбреНрд╕ рдХреЛ рдХрд╛рдЯ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореМрдЬреВрджрд╛ рддрд░реАрдХрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рд▓рд╛рдЗрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрди рдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕ рдиреЛрдбреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧреА, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рдо рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВред

рдзрдиреНрдпрд╡рд╛рдж @YijinLiuред рдореИрдВрдиреЗ рдЖрдкрдХрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА tf-cpu рджреЗрдЦрд╛, рдореИрдВ рдЖрдкрдХреЗ рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реВрдВрдЧрд╛ рдХрд┐ рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╣реА рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВ, рднрд▓реЗ рд╣реА рд╡реЗ рдЕрдЪреНрдЫреЗ рди рд╣реЛрдВред

@JaviBonilla рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдкрдиреЗ C ++ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЪрд▓рдирд╛ рд╣реИ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИ! рдореИрдВ

рд╣рд╛рдп @davidfant ,

рдореБрдЭреЗ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди @YijinLiu рдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╕рдордЭ рд▓рд┐рдпрд╛ рд╣реИ!

рдЙрд╕рдХреЗ рднрдВрдбрд╛рд░ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ (https://github.com/YijinLiu/tf-cpu)ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдк tf-cpu/benchmark/obj_detect_lite.cc рдлрд╝рд╛рдЗрд▓, AnnotateMat() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ Interpreter->Invoke() рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@JaviBonilla рдореИрдВрдиреЗ obj_detect_lite.cc рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдбрд┐рдЯреЗрдХреНрд╢рди рдмреЙрдХреНрд╕ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрдЬрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдореИрдВрдиреЗ рдЬреЛ рдкрд╛рдпрд╛ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реНрдХреЛрд░ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢реЛрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреБрдЫ рдЕрдЪреНрдЫреА рдкрд╣рдЪрд╛рди рдЦреЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрди рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рд╕реНрдХреЛрд░ рдХреЛ рдЕрдВрддрд┐рдо рд╕рдВрднрд╛рд╡рдирд╛ рд╕реНрдХреЛрд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрди рдиреЛрдбреНрд╕ рдХреЛ рджреЗрдЦрд╛ред рд╣рдЬрд╛рд░реЛрдВ рдЧрд╛рдВрдареЗрдВ рд╣реИрдВ...

@YijinLiu рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдлрд┐рд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП TensorFlow Lite рдореЗрдВ рдФрд░ рд╕реБрдзрд╛рд░ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рд╡реИрд╕реЗ рднреА, рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдордп рд╣реИ рддреЛ рдореИрдВ рд╕реА ++ рдореЗрдВ рдбрд┐рдЯреЗрдХреНрд╢рди рдмреЙрдХреНрд╕ рдХреЛ рдбреАрдХреЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

рд╣рд╛рдп @andrewharp ,

рдирдпрд╛ рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ tensorflow/contrib/lite/examples/android рдореЗрдВ рдПрдХ readme.md рдпрд╛ рдХреБрдЫ рд╡рд┐рд╡рд░рдг рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рд╕рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рд▓рд╛рдЗрдЯ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдордЭ рд╕рдХреЗрдВ? рдзрдиреНрдпрд╡рд╛рдж ~!

рд╣реИрд▓реЛ, рдореИрдВрдиреЗ ssd_mobilenet_v1_coco_2017_11_17 рдбреЗрдореЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓рд╛рдпрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдПрдХ рдареАрдХ-рдареАрдХ рдореЙрдбрд▓ рдорд┐рд▓рддрд╛ рд╣реИред рдЬрдм рдореИрдВ рдЙрд╕ рдкрд░ @andrehentz рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ:
bazel run tensorflow/contrib/lite/toco:toco -- --input_file=$STRIPPED_PB --output_file=$DETECT_FB --input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE --input_shapes=1,300,300,3 --input_arrays=Preprocessor/sub --output_arrays=concat,concat_1 --inference_type=FLOAT --logtostderr

рдЕрдкреНрд░рдпреБрдХреНрдд рдСрдкреНрд╕ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ: 586 рдСрдкрд░реЗрдЯрд░, 871 рд╕рд░рдгрд┐рдпрд╛рдБ (0 рдорд╛рддреНрд░рд╛рдмрджреНрдз)
2018-06-12 15:29:54.273221: рдореИрдВ tensorflow/contrib/lite/toco/graph_transformations/graph_transformations.cc:39] рд╕рд╛рдорд╛рдиреНрдп рдЧреНрд░рд╛рдл рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкрд╣рд▓реЗ: 586 рдСрдкрд░реЗрдЯрд░реЛрдВ, 871 рд╕рд░рдгрд┐рдпреЛрдВ (0 рдорд╛рддреНрд░рд╛рдмрджреНрдз)
2018-06-12 15:29:54.300213: рдореИрдВ tensorflow/contrib/lite/toco/graph_transformations/graph_transformations.cc:39] рд╕рд╛рдорд╛рдиреНрдп рдЧреНрд░рд╛рдл рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж 1: 409 рдСрдкрд░реЗрдЯрд░реЛрдВ, 688 рд╕рд░рдгрд┐рдпреЛрдВ (0 рдорд╛рддреНрд░рд╛рдмрджреНрдз)
2018-06-12 15:29:54.309735: рдореИрдВ tensorflow/contrib/lite/toco/graph_transformations/graph_transformations.cc:39] dequantization рдЧреНрд░рд╛рдл рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкрд╣рд▓реЗ: 409 рдСрдкрд░реЗрдЯрд░реЛрдВ, 688 рд╕рд░рдгрд┐рдпреЛрдВ (0 рдорд╛рддреНрд░рд╛рдмрджреНрдз)
2018-06-12 15:29:54.317395: рдореИрдВ tensorflow/contrib/lite/toco/allocate_transient_arrays.cc:329] рдХреБрд▓ рдХреНрд╖рдгрд┐рдХ рд╕рд░рдгреА рдЖрд╡рдВрдЯрд┐рдд рдЖрдХрд╛рд░: 2880256 рдмрд╛рдЗрдЯреНрд╕, рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЗрд╖реНрдЯрддрдо рдореВрд▓реНрдп: 2880128 рдмрд╛рдЗрдЯреНрд╕ред
2018-06-12 15:29:54.319173: F tensorflow/contrib/lite/toco/tflite/export.cc:330] рдореЙрдбрд▓ рдХреЗ рдХреБрдЫ рдСрдкрд░реЗрдЯрд░ рдорд╛рдирдХ TensorFlow Lite рд░рдирдЯрд╛рдЗрдо рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рддреЛ рдЖрдк рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ --allow_custom_ops рдХреЗ рд╕рд╛рде рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ tf.contrib.lite.toco_convert() рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп allow_custom_ops=True рд╕реЗрдЯ рдХрд░рдХреЗ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдЙрди рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: RSQRT, SquaredDifference, Stack, TensorFlowShapeред

рдпреЗ рд░рд╣рд╛ рдореЗрд░рд╛ рдореЙрдбрд▓ https://drive.google.com/open?id=1IxRSU4VSmVmhUtUpSQew_5anEfxTg3Ca

рдХреНрдпрд╛ рдХреЛрдИ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
@andrehentz

@JaviBonilla рдФрд░ @YijinLiu рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ Google рдХреЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд SSD MobileNet V{1,2} рдФрд░ SSDLIte MobileNet V2 рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред рдпрд╣рд╛рдВ рд╕рд░рд▓ рджрд╕реНрддрд╛рд╡реЗрдЬ рджреЗрдЦреЗрдВред

@freedomtan рдЖрдк tf рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рдЯреАрдПрдл 1.8?

tflite рджреБрднрд╛рд╖рд┐рдпрд╛ рдкрд╛рдпрдерди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ (29c129c6) рдХреЗ рдмрд╛рдж @hengshanji рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ 1.8 рдореЗрдВ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╣реИред

@freedomtan tf1.8 рдореЗрдВ рджреБрднрд╛рд╖рд┐рдпрд╛ рдкрд╛рдпрдерди рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ "nnapi рддреНрд░реБрдЯрд┐: рд▓рд╛рдЗрдмреНрд░реЗрд░реА libneuralnetworks.so рдЦреЛрд▓рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде" рдорд┐рд▓рддреА рд╣реИред рдпрд╣ рдХрд╣рд╛рдБ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ .so рдпрд╛ рдЗрд╕реЗ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ? рдзрдиреНрдпрд╡рд╛рджред

рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ :) рдпрд╣ Android NNAPI рдХреЗ рд▓рд┐рдП рд╣реИред

@freedomtan рдХреНрдпрд╛ рдЖрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдпрд╛ рдкреАрд╕реА рдкрд░ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛? рдЬрдм рдореИрдВ рдЗрд╕реЗ рдкреАрд╕реА рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ android-28/x86 libneuralnetworks.so рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╣ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рддрд╛ рд╣реИ "tflite рдХреЗ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдирд┐рд░рд╕реНрдд рдХрд░рдирд╛"ред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдХреГрдкрдпрд╛ рдЙрд╕ рдПрдирдПрдирдПрдкреАрдЖрдИ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВред рдЖрдкрд╕реЗ libneuralnetwork.so рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдПрдХ x86 рдЙрдмрдВрдЯреВ рдФрд░ рдПрдХ рдПрдЖрд░рдПрдорд╡реА 8 рдмреЛрд░реНрдб рдбреЗрдмрд┐рдпрди рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рджреЛрдиреЛрдВ рдкрд░ рдХрд┐рдпрд╛ред

@freedomtan , рдХреЛрдб рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рднрдВрдбрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ (https://github.com/YijinLiu/tf-cpu)ред рдореИрдВрдиреЗ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП tf-cpu/benchmark/obj_detect_lite.cc рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ AnnotateMat() output_locations рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП decodeCenterSizeBoxes рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ, рдлрд┐рд░ рдЗрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП nms рдХрд░реЗрдВред
рдЙрд╕реА рд╕рдордп, libtensorflow-lite.a рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/tensorflow/tensorflow/issues/14688 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ x86 рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ Ubuntu рдФрд░ ssdlite_mobilenet_v2_coco_2018_05_09 рдореЗрдВ tflite рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рджреЛрдиреЛрдВ рдкрд░ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред tar.gz
рд╕рдмрдХреЛ рд╢реБрдХреНрд░реАрдпрд╛ред

@WeiboXu рдХреНрдпрд╛ рдЖрдк рдпрд╣рд╛рдВ рдХреЛрдб рдФрд░ рдореЙрдбрд▓ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдпрд╣рд╛рдБ obj_detect_lite.cc рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдХреЛрдб рд╣реИ
obj_detect_lite.cc.zip

рдореЙрдбрд▓ рд╣реИ http://download.tensorflow.org/models/object_detection/ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz

@freedomtan рдЖрдкрдХреЗ рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛрдб рдореЗрдВ, рдПрдХ рдлрд╝рд╛рдЗрд▓ "/tmp/box_priors.txt" рд╣реИ, рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ? рдпрд╛ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХреА рдЧрдИ? рдЖрдХрд╛рд░ 300X300 рдХреЗ рд╕рд╛рде рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди, 224X224 рдЖрдХрд╛рд░ рд╡рд╛рд▓реА рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдкрд░ рдЕрдиреБрдорд╛рди рд╕рдЯреАрдХрддрд╛ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧреА

@freedomtan , @andrewharp , рдЗрд╕ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ рдкрд┐рдЫрд▓рд╛ рдореЙрдбрд▓ рдирд╡реАрдирддрдо TFLite рдбреЗрдореЛ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╡рд╣ рдорд╛рддреНрд░рд╛рдмрджреНрдз рд╣реЛ рдпрд╛ рдлреНрд▓реЛрдЯ, рдХреНрдпреЛрдВрдХрд┐ рдирд╡реАрдирддрдо TFLite рдбреЗрдореЛ рдореЗрдВ tflite рдореЙрдбрд▓ рдХреЛ 4 рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдкрд┐рдЫрд▓рд╛ рдореЙрдбрд▓ рдореЗрдВ рдХреЗрд╡рд▓ 2 рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддреЗ рд╣реИрдВ ( рдХреЙрдирдХреИрдЯ, рдХреЙрдирдХреИрдЯ 1)ред

рдХреГрдкрдпрд╛ рдорджрдж рдХрд░реЗрдВ, рдзрдиреНрдпрд╡рд╛рдж!

рдлрд┐рд▓рд╣рд╛рд▓ рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдЕрджреНрдпрддрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗред

@frontword /tmp/box_priors.txt рдореЗрдВ рдкреЛрд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмреЙрдХреНрд╕ рдХреНрдпрд╛ рд╣реИрдВред рдпрджрд┐ рдЖрдк @WenguoLi рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдирдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдБ, рдЙрди рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдСрдкреНрд╕ рдХреЛ TF рд▓рд╛рдЗрдЯ рдХрд╕реНрдЯрдо рдСрдкреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдПрдирдПрдирдПрдкреАрдЖрдИ рддреНрд╡рд░рдХ рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рддреЗрдЬ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдЫрд╡рд┐ рдЖрдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ SSD300 рдХреЛ 224x224 рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЦрд┐рд▓рд╛рдирд╛ (Google рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдХреЛ 300x300 рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдФрд░ рдЦрд░рд╛рдм рд╕рдЯреАрдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдирд╣реАрдВ рд╣реИред

@WenguoLi рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЕрджреНрдпрддрди рдореЙрдбрд▓ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред рдореЗрд░реА рдЕрджреНрдпрддрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЗрдЦреЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдВрдХрдбрд╝рд╛ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

python  tensorflow/contrib/lite/examples/python/object_detection.py --image /tmp/image2.jpg  --show_image True

image

1 рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрдорд╛рди рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕реНрдХреЛрд░ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рд╡рд┐рдзрд┐ TrackedObject.getCurrentCorrelation() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ 1 рд╕реЗ рдХрдо рдХреБрдЫ рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╣реИ рдпрд╛ рдирд╣реАрдВ)ред TFLite Android рдЙрджрд╛рд╣рд░рдг Recognition.getConfidence() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ 1 . рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рд▓реМрдЯрд╛рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ

@mpeniak рдЖрдкрдиреЗ Movidius рдкрд░ ssd mobilenet tflite рдореЙрдбрд▓ рдЪрд▓рд╛рдпрд╛ред рдореИрдВ рднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдереЛрдбрд╝рд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛?

@achowdhery рдирдорд╕реНрддреЗ, рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдирд╡реАрдирддрдо рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдХреБрдЫ рдЕрдкрдбреЗрдЯ рджреЗрдЦреЗ (https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/examples/android/app), рд▓реЗрдХрд┐рди рдпрд╣ рдпрд╣ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрдореЗ рд╣реБрдП pb рдореЙрдбрд▓ рдХреЛ tflite рдореЙрдбрд▓ рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдорд╛рддреНрд░рд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗред tflite рдЬреЛ рдирд╡реАрдирддрдо рдбреЗрдореЛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдкрд░рд┐рдорд╛рдгрд┐рдд рдореЙрдбрд▓ рд░реВрдкрд╛рдВрддрд░рдг рдкреНрд░рд╡рд╛рд╣ рдкрд░ рдХреЛрдИ рдФрд░ рдирд┐рд░реНрджреЗрд╢? рд╕рд╛рде рд╣реА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдпрд╣рд╛рдВ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирдХрд▓реА рдкрд░рд┐рдорд╛рдгреАрдХрд░рдг рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде рдорд╛рддреНрд░рд╛рддреНрдордХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (https://www.tensorflow.org/performance/quantization) рдФрд░ рдлрд┐рд░ рдореЙрдбрд▓ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░реЗрдВ, рд╕рд╣реА рд╣реИ? рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдирд╡реАрдирддрдо рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрдореЛ рдореЗрдВ рдПрдирдПрдирдПрдкреАрдЖрдИ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдореИрдВрдиреЗ TFLiteObjectDetectionAPIModel.java рдореЗрдВ tfLite.setUseNNAPI(true) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ Pixel 2 рдкрд░ Android 8.1 рдЪрд▓рд╛ рд░рд╣рд╛ рдерд╛ (рдпрд╣ NNAPI рдХреЗ рдмрд┐рдирд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред рдХреЛрдИ рд╕реБрдЭрд╛рд╡? рдзрдиреНрдпрд╡рд╛рдж!

@tenoyart рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрддреНрддрд░ "рдХреНрдпрд╛ рдирд╡реАрдирддрдо рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрдореЛ рдореЗрдВ рдПрдирдПрдирдПрдкреАрдЖрдИ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?" рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрддрдирд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрддреНрддрд░ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЯреАрдПрдл рд▓рд╛рдЗрдЯ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдореЙрдбрд▓ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдпрд╛ рдПрдирдПрдирдПрдкреАрдЖрдИ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╕реНрдЯрдо рдСрдкреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

@achowdhery рдореИрдВрдиреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ TensorFlow рдмреНрд▓реЙрдЧ рдЖрд▓реЗрдЦ рджреЗрдЦрд╛ред рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ рдпрд╛ рдЕрдзрд┐рдХ рдЖ рд░рд╣реЗ рд╣реИрдВ?

рд╣рд╛рдВред рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдореЙрдбрд▓ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред

@freedomtan рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдирд╡реАрдирддрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЖрдк рдХрд┐рд╕ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рдХреНрдпрд╛ рдЖрдкрдиреЗ Optimize_for_inference.py рдХрд╛ рддрд░реНрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдерд╛
--input_names="рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░/рдЙрдк"
--output_names="detection_boxes,detection_scores,num_detections,detection_classes"

рдХреНрдпрд╛ рдЖрдк рдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде/рдмрд┐рдирд╛ рдХреЛрдИ рдЕрдВрддрд░ рджреЗрдЦрддреЗ рд╣реИрдВ?

рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рд╕реНрдХреНрд╡реАрдЬрд╝рдиреЗрдЯ рдореЙрдбрд▓ рдХреЛ 4 рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде tflite рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

@chanchanzhang рдХреГрдкрдпрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ https://medium.com/tensorflow/training-and-serving-a-realtime-mobile-object-detector-in-30-minutes-with-cloud-tpus рдореЗрдВ рдирдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ Optimize_for_inference.py . рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рднрд┐рдиреНрди рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ

@ashwaniag рдпрджрд┐ рдЖрдк рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП SSD рд░рдЦрддреЗ рд╣реБрдП Mobilenet рдХреЛ рд╕реНрдХреНрд╡реАрдЬрд╝рдиреЗрдЯ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИред

@achowdhery ssd mobilenet v1 рдкрд░ TF рд▓рд╛рдЗрдЯ рдореЙрдбрд▓ рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред рдХреНрдпрд╛ TF рд▓рд╛рдЗрдЯ ssdlite mobilenet v2 рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ?

@tenoyart рд╣рд╛рдБред рдХреЛрдИ рднреА Mobilenet SSD рдЗрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдЬрд░рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧреАред рд╣рдордиреЗ рдУрдкрди рд╕реЛрд░реНрд╕ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд tflite рдлрд╛рдЗрд▓реЗрдВ рдЬрд╛рд░реА рдирд╣реАрдВ рдХреА рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдЖрддреА рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдмрдЧ рджрд░реНрдЬ рдХрд░реЗрдВред

@chanchanzhang рдХреЗ рд░реВрдк рдореЗрдВ @achowdhery рдиреЗ рдХрд╣рд╛, рдХреГрдкрдпрд╛ optimized_for_inference.py рдХреЗ рдмрдЬрд╛рдп optimized_for_inference.py object_detection/export_tflite_ssd_graph.py рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдФрд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА tflite рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ Android рдЙрджрд╛рд╣рд░рдг рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╣реИред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@achowdhery рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ssd_mobilenet_v1_quantized_coco рдФрд░ ssd_mobilenet_v1_0.75_depth_quantized_coco рдХреА рдЪреМрдХрд┐рдпреЛрдВ рдореЗрдВ FakeQuant рдиреЛрдбреНрд╕ рдФрд░ рдЯреЗрдВрд╕рд░ рдирд╣реАрдВ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рдЙрдирдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@freedomtan рдореИрдВ object_detection/export_tflite_ssd_graph.py рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдЧреНрд░рд╛рдл рдореЗрдВ weight_quant рдФрд░ act_quant рдиреЛрдбреНрд╕ рджреЗрдЦрддрд╛ рд╣реВрдВред
рдХреГрдкрдпрд╛ рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдпрд╛ рд╕рдЯреАрдХ рдирд┐рд░реНрджреЗрд╢ рджреЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдХреИрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдлреЗрдХрдХреНрд╡рд╛рдВрдЯ рдиреЛрдб рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдЪреМрдХрд┐рдпреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрджрд▓рдиреЗ рдореЗрдВ рднреА рд╕рдХреНрд╖рдо рд╣реВрдВ

@achowdhery рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЬрдм рдореИрдВрдиреЗ рдЙрди рджреЛрдиреЛрдВ рдкрд░ export_tflite_ssd_graph.py рдЪрд▓рд╛рдпрд╛, рддреЛ рдореБрдЭреЗ tflite рдореЙрдбрд▓ рдирд╣реАрдВ рдорд┐рд▓реЗ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЪреМрдХрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ

curl http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_quantized_300x300_coco14_sync_2018_07_03.tar.gz | tar xzvf -
cd ssd_mobilenet_v1_quantized_300x300_coco14_sync_2018_07_03
strings model.ckpt.index  |grep quant

рдХреБрдЫ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ред

@andrewharp рдЖрдкрдХреЗ рдХрдЯреЛрд╕рдо рдЕрдиреБрдорд╛рди рд╡рд░реНрдЧ TFLiteObjectDetectionAPIModel.java рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрдкрдХреЗ ssd mobilenet v1 tflite mobilenet_ssd_tflite_v1.zip рдХреЗ рд╕рд╛рде рдЖрдЬрд╝рдорд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдРрдк рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИ рдкрд╣рдЪрд╛рди рдЫрд╡рд┐ (рдЕрдВрддрд┐рдо рдмрд┐рдЯрдореИрдк рдмрд┐рдЯрдореИрдк) рдЬрдм рдореИрдВ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ tfLite.runForMultipleInputsOutputs (рдЗрдирдкреБрдЯрдЕрд░реЗ, рдЖрдЙрдЯрдкреБрдЯ рдореИрдк); рдпрд╣ рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ

07-18 10:37:02.416 19957-19996/com.app.cerist.realtimeobjectdetectionapi E/AndroidRuntime: FATAL EXCEPTION: Camera
    Process: com.app.cerist.realtimeobjectdetectionapi, PID: 19957
    java.lang.IllegalArgumentException: Output error: Outputs do not match with model outputs.
        at org.tensorflow.lite.Interpreter.runForMultipleInputsOutputs(Interpreter.java:170)
        at com.app.cerist.realtimeobjectdetectionapi.ImageClassifierTFLiteAPI.recognizeImage(ImageClassifierTFLiteAPI.java:207)
        at com.app.cerist.realtimeobjectdetectionapi.MainActivity.classifyFrame(MainActivity.java:421)
        at com.app.cerist.realtimeobjectdetectionapi.MainActivity.access$1000(MainActivity.java:48)
        at com.app.cerist.realtimeobjectdetectionapi.MainActivity$4.run(MainActivity.java:455)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:159)
        at android.os.HandlerThread.run(HandlerThread.java:61)
07-18 10:37:02.436 19957-19996/com.app.cerist.realtimeobjectdetectionapi V/Process: killProcess [19957] Callers=com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException:99 java.lang.ThreadGroup.uncaughtException:693 java.lang.ThreadGroup.uncaughtException:690 <bottom of call stack> 
07-18 10:37:02.436 19957-19996/com.app.cerist.realtimeobjectdetectionapi I/Process: Sending signal. PID: 19957 SIG: 9

рддреНрд░реБрдЯрд┐ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдЗрдирдкреБрдЯ рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рдмрдбрд╝реА рд╣реИ
Interpreter.java рдореЗрдВ рдпрд╣ рд╕реНрдерд┐рддрд┐ рд╣реИ

public void runForMultipleInputsOutputs(Object[] inputs, <strong i="7">@NonNull</strong> Map<Integer, Object> outputs) {
        if (this.wrapper == null) {
            throw new IllegalStateException("Internal error: The Interpreter has already been closed.");
        } else {
            Tensor[] tensors = this.wrapper.run(inputs);
            if (outputs != null && tensors != null && outputs.size() <= tensors.length) {
                int size = tensors.length;
                Iterator var5 = outputs.keySet().iterator();
            }
       }
}

рдФрд░ рдпрд╣ рдореЗрд░рд╛ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕рд░рдгрд┐рдпрд╛рдБ рд╣реИ:

d.imgData = ByteBuffer.allocateDirect(1 * d.inputSize * d.inputSize * 3 * numBytesPerChannel);
d.imgData.order(ByteOrder.nativeOrder());
d.intValues = new int[d.inputSize * d.inputSize];
 imgData.rewind();
        for (int i = 0; i < inputSize; ++i) {
            for (int j = 0; j < inputSize; ++j) {
                int pixelValue = intValues[i * inputSize + j];
                if (isModelQuantized) {
                    // Quantized model
                    imgData.put((byte) ((pixelValue >> 16) & 0xFF));
                    imgData.put((byte) ((pixelValue >> 8) & 0xFF));
                    imgData.put((byte) (pixelValue & 0xFF));
                } else { // Float model
                    imgData.putFloat((((pixelValue >> 16) & 0xFF) - IMAGE_MEAN) / IMAGE_STD);
                    imgData.putFloat((((pixelValue >> 8) & 0xFF) - IMAGE_MEAN) / IMAGE_STD);
                    imgData.putFloat(((pixelValue & 0xFF) - IMAGE_MEAN) / IMAGE_STD);

рдЖрдЙрдЯрдкреБрдЯ рд╕рд░рдгреА:

// Copy the input data into TensorFlow.
        Trace.beginSection("feed");
        outputLocations = new float[1][NUM_DETECTIONS][4];
        outputClasses = new float[1][NUM_DETECTIONS];
        outputScores = new float[1][NUM_DETECTIONS];
        numDetections = new float[1];

        Object[] inputArray = {imgData};
        Map<Integer, Object> outputMap = new HashMap<>();
        outputMap.put(0, outputLocations);
        outputMap.put(1, outputScores);
        outputMap.put(2, numDetections);
        outputMap.put(3, outputClasses);
        Trace.endSection();

рдФрд░ рдЕрдиреБрдорд╛рди:

// Run the inference call.
        Trace.beginSection("run");
        Log.d("TAG_INPUT",""+String.valueOf(inputArray.length));
        Log.d("TAG_OUTPUT",""+String.valueOf(outputMap.size()));

        tfLite.runForMultipleInputsOutputs(inputArray, outputMap);
        Trace.endSection();

рдореБрдЭреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рдЕрд░реНрде рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЖрдкрдХреЗ TFLiteObjectDetectionAPIModel.java рд╡рд░реНрдЧ рдХреЗ рд╕рдорд╛рди рд╣реА рдХрд┐рдпрд╛ рдерд╛ред
рдорджрдж рдХреЗ рд▓рд┐рдП рд╢реБрдХреНрд░рд┐рдпрд╛

@achowdhery рдирдорд╕реНрддреЗ, рдЖрдкрдХреЗ рдмреНрд▓реЙрдЧ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реБрдП рдореИрдВрдиреЗ рдореЙрдбрд▓ рдХреЛ ssd_mobilenet_v1_coco_2017_11_17. рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЬрдм рдореИрдВрдиреЗ tflite_demo.apk рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд mobilenet_ssd.tflite рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА:

    java.lang.IllegalArgumentException: Cannot copy between a TensorFlowLite tensor with shape [1, 1917, 4] and a Java object with shape [1, 10, 4].

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдореБрдЭреЗ рдпрд╣ рдХреНрдпреЛрдВ рдорд┐рд▓рд╛? рдзрдиреНрдпрд╡рд╛рджред

рдпрд╣ рдПрдХ рдЖрдХрд╛рд░ рдмреЗрдореЗрд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдЯреЗрдВрд╕рд░ 1,10,4 рдЖрдХрд╛рд░ рдореЗрдВ 1,1917,4 рдирд╣реАрдВ рд╣реИред рдкреБрд░рд╛рдиреЗ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдордИ рдХреЗ рдбреЗрдореЛ рдРрдк рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдиреНрдпрдерд╛ рдХреГрдкрдпрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдирд╡реАрдирддрдо рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдореЙрдбрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

@achowdhery рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ tflite рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдЬрдм рдореИрдВ рдЗрд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реВрдВред рджреБрднрд╛рд╖рд┐рдпрд╛-> рдЖрд╣реНрд╡рд╛рди () рдХреЙрд▓ рдПрдХ seg рдЧрд▓рддреА рдлреЗрдВрдХрддрд╛ рд╣реИред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

@ashwaniag рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ https://medium.com/tensorflow/training-and-serving-a-realtime-mobile-object-detector-in-30-minutes-with-cloud-tpus-b78971cf1193 рдкрд░ рдХрд░реЗрдВ
рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди?
рдпрджрд┐ рд╣рд╛рдБ, рддреЛ рдХреГрдкрдпрд╛ рдирдП рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬрд┐рдирдХрд╛ рдЖрдк рдЕрднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЛ seg рджреЛрд╖ рдорд┐рд▓рддрд╛ рд╣реИ?
рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░/рдЖрдХрд╛рд░ рдЖрджрд┐ рдореЗрдВ рдПрдХ рдмреЗрдореЗрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@achowdhery рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ред рдореИрдВ рдЧрд▓рдд input_arrays рджреЗ рд░рд╣рд╛ рдерд╛ред рдлрд┐рд░ рднреА рдзрдиреНрдпрд╡рд╛рдж!

рдпрджрд┐ рдЖрдкрдиреЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЕрджреНрдпрддрди ssd_mobilenet_v1_quantized_coco рдФрд░ ssd_mobilenet_v1_0.75_depth_quantized_coco рдХрд╛рд░реНрдпред рдзрдиреНрдпрд╡рд╛рдж @achowdheryред

рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдбреЗрдореЛ рдРрдк рдореЗрдВ TFLiteObjectDetectionAPIModel.java рджреЗрдЦ рд░рд╣рд╛ рдерд╛ред рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ outputLocations , outputClasses , outputScores рдФрд░ numDetections рдпрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ recognizeImage рдХреЙрд▓ рдкрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред
рдореИрдВрдиреЗ рдкреНрд░реАрд▓реЛрдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХрд╡рд░ рдХреЗ рддрд╣рдд рдХреБрдЫ рднреА рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдмрд╛рдж рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреЗрд╢ рдХрд░реЗрдЧрд╛ред

Preallocating рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИред рдЖрдк рдХрд╣рд╛рдБ рдкреНрд░рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдкреВрд░реНрд╡рд╛рднрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЙрддреНрддрд░ @achowdhery рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рд╕реНрдерд┐рд░ create рд╡рд┐рдзрд┐ рдореЗрдВ рдкреНрд░реАрд▓реЛрдХреЗрд╢рди рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реА рдПрдХрдорд╛рддреНрд░ рдЪрд┐рдВрддрд╛ рдпрд╣ рдереА рдХрд┐ рдХреЛрдб рдкреНрд░реАрд▓реЛрдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ (рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐ рд╕рд░рдгреА рдХреЛ рдкреВрд░реНрд╡рд╡рдд рдХрд░рддреА рд╣реИ), рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдкрд░ рд╕рд░рдгреА рдкреБрди: рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред

рдирдорд╕реНрддреЗ @achowdhery , рдореИрдВрдиреЗ рдирдП Android tflite рдРрдк рдбреЗрдореЛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред рдпрд╣ ssd_mobilenet_v1_coco, ssd_mobilenet_v1_0.75_depth_coco, ssd_mobilenet_v1_quantized_coco рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдиреНрдп ssd-mobilenet рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдкрд╡рд╛рдж рдорд┐рд▓рд╛:

07-25 07:41:25.292 31515-31532/org.tensorflow.lite.demo E/AndroidRuntime: FATAL EXCEPTION: inference
    Process: org.tensorflow.lite.demo, PID: 31515
    java.lang.ArrayIndexOutOfBoundsException: length=160; index=-2147483648
        at java.util.Vector.elementData(Vector.java:734)
        at java.util.Vector.get(Vector.java:750)
        at org.tensorflow.demo.TFLiteObjectDetectionAPIModel.recognizeImage(TFLiteObjectDetectionAPIModel.java:218)
        at org.tensorflow.demo.DetectorActivity$3.run(DetectorActivity.java:249)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.os.HandlerThread.run(HandlerThread.java:65)

tflite рдореЙрдбрд▓ рдиреЗ рдЧрд▓рдд рдХреНрд▓рд╛рд╕ рдЗрдВрдбреЗрдХреНрд╕ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ред рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЕрдкрд╡рд╛рдж рдРрдк рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
ssd_mobilenet_v1_ppn_coco рдЧрд▓рдд рдореЗрд╕реА рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕, рд▓реЗрдмрд▓ рднреА рдмрдирд╛рддрд╛ рд╣реИред

PPN рдПрдХ рдлреНрд▓реЛрдЯ рдореЙрдбрд▓ рд╣реИ: рдХреНрдпрд╛ рдЖрдк рдлреНрд▓реЛрдЯ рд░реВрдкрд╛рдВрддрд░рдг рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ TFLITE рдореЙрдбрд▓ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_on_mobile_tensorflowlite.md
рдлрд┐рд░ рдЖрдкрдХреЛ DetectorActivity.java рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рднреА рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:
рдирд┐рдЬреА рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо рдмреВрд▓рд┐рдпрди TF_OD_API_IS_QUANTIZED = true;

рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ config. рджрд░рдЕрд╕рд▓ рдЬрдм рд╡рд╣ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдРрдк рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдЪрд▓ рд╕рдХрддрд╛ред
рдХреНрдпрд╛ рдЖрдк ArrayIndexOutOfBoundsException рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдбреЙрдХрд░ рдХреЛ рднреА рдЖрдЬрдорд╛рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣реА рд╣реИред

рдареАрдХред рдХреГрдкрдпрд╛ рд╕рдЯреАрдХ рд░реЗрдкреНрд░реЛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдЧрд┐рдЯрд╣рдм рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░реЗрдВред рдкреАрдкреАрдПрди рдореЙрдбрд▓ рдЬрд╛рд╡рд╛ рдРрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдлреАрдЪрд░ рдЕрдиреБрд░реЛрдз рд╣реИ - рдЬрдм рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЬрд╡рд╛рдм рджреЗрдВрдЧреЗ

рдзрдиреНрдпрд╡рд╛рджред ArrayIndexOutOfBoundsException ssd_mobilenet_v1_0.75_depth_quantized_coco, ssdlite_mobilenet_v2_coco рдХреЗ рд╕рд╛рде рднреА рд╣реЛрддрд╛ рд╣реИред рдкреАрдкреАрдПрди рд╕реЗ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕ рдЕрдкрд╡рд╛рдж рд╕реЗ рдРрдк рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред

@achowdhery рдХреНрдпрд╛ рд╡реИрд╕реЗ рднреА tflite рдХреЗ рд▓рд┐рдП 4 рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд░рд╛рд╕рдд/train.py рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдирдП model_main.py рдореЗрдВ рдмрдЧ рд╣реИрдВ?
https://github.com/tensorflow/models/issues/4798

@ashwaniag рдЖрдк рджреЛ рдХреЛрдб рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдорд╛рддреНрд░рд╛рдХрд░рдг рдЬреЛрдбрд╝рддрд╛ рд╣реИ: рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ graph_rewriter рдлрд╝рдВрдХреНрд╢рди рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдХреНрд╡рд╛рдВрдЯрд┐рдЬрд╝реЗрд╢рди рдСрдкреНрд╕ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

@achowdhery : https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_on_mobile_tensorflowlite.md
рдЖрдИрдУрдПрд╕ рдореЗрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдпрд╛ рдирдореВрдирд╛ рдХреЛрдб рд╣реИред рдЕрдм рддрдХ рдореБрдЭреЗ рдЬреЛ рд╕рдмрд╕реЗ рдирдЬрд╝рджреАрдХреА рдЪреАрдЬрд╝ рдорд┐рд▓реА рд╣реИ, рд╡рд╣ рдпрд╣ https://github.com/YijinLiu/tf-cpu/blob/master/benchmark/obj_detect_lite.cc рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИред

рд╡рд░реНрддрдорд╛рди рдЖрдИрдУрдПрд╕ рдбреЗрдореЛ рдРрдк рдПрд╕рдПрд╕рдбреА рдФрд░ рдлреНрд▓реЛрдЯ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

@achowdhery рдореИрдВрдиреЗ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ v1.9.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ред рдмреНрд▓реЙрдЧ рдореЗрдВ рджрд┐рдП рдЧрдП рдЪрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ tflite рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдореБрдЭреЗ рдХреЛрдИ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЖрдЗрдбрд┐рдпрд╛ рд╣реИ?

@ashwaniag COCO рдпрд╛ рдкрд╛рд▓рддреВ рдЬрд╛рдирд╡рд░? рдХреГрдкрдпрд╛ рд╕рдЯреАрдХ рд░реЗрдкреНрд░реЛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдмрдЧ рдЦреЛрд▓реЗрдВред рдЕрдиреНрдп GitHub рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ Tensorflow 1.10 . рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рд╣реИ

@achowdhery рдпрд╣ рдореЗрд░рд╛ рдЕрдкрдирд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╣реИред рдореИрдВрдиреЗ mobilenetv2 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд▓рд┐рдпрд╛ред рдЬрдм рдореИрдВ .pb рдореЙрдбрд▓ (рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдореЙрдбрд▓) рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ
рдирд╣реАрдВ рдорд┐рд▓рд╛: VAL5-04 рдкрд░ рдЪрд▓ рд░рд╣реЗ рдмрд╛рдЗрдирд░реА рдореЗрдВ Op рдкреНрд░рдХрд╛рд░ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рд╣реИ 'NonMaxSuppressionV3'ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ Op рдФрд░ рдХрд░реНрдиреЗрд▓ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ?

@ashwaniag рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдмрдЧ рдЦреЛрд▓реЗрдВ рдФрд░ рд╕рдЯреАрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ

@ashwaniag рдЗрди рджреЛрдиреЛрдВ рдореБрджреНрджреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ, рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА: #10254 рдФрд░ # 19854

@ рдЕрдЪрд░рдл-рдмреМрд╕рд╛рджрд╛ рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ рддрдп рдХрд░ рд▓рд┐рдпрд╛ред рдпрд╣ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдмреЗрдореЗрд▓ рдореБрджреНрджрд╛ рдерд╛ред
@achowdhery рдЕрдм, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреВрд░реНрдг рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдореЙрдбрд▓ рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди tflite рдореЙрдбрд▓ рдмрд╣реБрдд рдЦрд░рд╛рдм рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред

@ashwaniag рдХреГрдкрдпрд╛ рдмрд╣реБрдд рдЦрд░рд╛рдм рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЫреЛрдЯреА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ? рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рдПрдХ рдореЙрдбрд▓ рдЪреЗрдХрдкреЙрдЗрдВрдЯ, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рд▓реЗрдмрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рдирдореВрдирд╛ рдЫрд╡рд┐ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред рдзрдиреНрдпрд╡рд╛рдж

@oopsodd рд╣реИрд▓реЛ, рдореБрдЭреЗ рдпрд╛ рддреЛ рдЧрд▓рдд рдХреНрд▓рд╛рд╕ рдЗрдВрдбреЗрдХреНрд╕ рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕рдиреЗ рд╢рд┐рдХрд╛рдпрдд рдХреА "java.lang.ArrayIndexOutOfBoundsException: length=10; index=-739161663", рдХреНрдпрд╛ рдЖрдк рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдиреЛрдЯ рдореИрдВрдиреЗ iOS рдФрд░ Android рдХреЗ рд▓рд┐рдП TensorFlow Lite SSD (рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди) рдиреНрдпреВрдирддрдо рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдП рд╣реИрдВ; https://github.com/baxterai/tfliteSSDminimalWorkingрдЙрджрд╛рд╣рд░рдгред IOS рд╕рдВрд╕реНрдХрд░рдг YijinLiu рджреНрд╡рд╛рд░рд╛ obj_detect_lite.cc рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ (WeiboXu рджреНрд╡рд╛рд░рд╛ nms рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде), рдФрд░ Android рд╕рдВрд╕реНрдХрд░рдг https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/examples/ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

@baxterai рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо! рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реВрдВрдЧрд╛ред

рдЖрдкрдХреЗ рдЕрджреНрднреБрдд рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж! рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рд╣реИред

рдкреВрд░реНрд╡ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд ssd_mobilenet_v1_quantized_coco . рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдлреНрд░реЗрдо рдореЗрдВ рд╢реАрд░реНрд╖ 10 рдбрд┐рдЯреЗрдХреНрд╢рди рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рднрд▓реЗ рд╣реА рдореЙрдбрд▓/рд╢реЛрдз/рдСрдмреНрдЬреЗрдХреНрдЯ_рдбрд┐рдЯреЗрдХреНрд╢рди/рдирдореВрдиреЗ/рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди/рдЬреИрд╕реЗ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
ssd_mobilenet_v1_quantized_300x300_coco14_sync.config рд╕рднреА рдХреБрд▓ рдкрд╣рдЪрд╛рди рдХреА рдПрдХ рдЙрдЪреНрдЪ рд╕реАрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред

post_processing { batch_non_max_suppression { score_threshold: 1e-8 iou_threshold: 0.6 max_detections_per_class: 100 max_total_detections: 100 } score_converter: SIGMOID }

рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдЗрд╕рдХреА рдЖрдпрд╛рдореАрддрд╛ рд╣реИ
рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджреНрд╡рд╛рд░рд╛ 'TFLite_Detection_PostProcess' рдХреЛ 10 рдкрд░ рдирд┐рдпрдд рдХрд┐рдпрд╛ рдЧрдпрд╛?

@ рдЬреЙрд░реНрдЬ-рдбрдмреНрд▓реНрдпреВ рдЖрдкрдХреЛ Export_tflite_ssd_graph.py рдореЗрдВ рднреА рдЕрдзрд┐рдХрддрдо рдкрд╣рдЪрд╛рди рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рд╣реИред

@achowdhery рдЖрд╣ рдзрдиреНрдпрд╡рд╛рдж! рд╡рд╣реА рдореИрдВ рдЪреВрдХ рдЧрдпрд╛ред

@andrewharp рдЖрдкрдХреЗ рдХрдЯреЛрд╕рдо рдЕрдиреБрдорд╛рди рд╡рд░реНрдЧ TFLiteObjectDetectionAPIModel.java рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрдкрдХреЗ ssd mobilenet v1 tflite mobilenet_ssd_tflite_v1.zip рдХреЗ рд╕рд╛рде рдЖрдЬрд╝рдорд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдРрдк рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИ рдкрд╣рдЪрд╛рди рдЫрд╡рд┐ (рдЕрдВрддрд┐рдо рдмрд┐рдЯрдореИрдк рдмрд┐рдЯрдореИрдк) рдЬрдм рдореИрдВ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ tfLite.runForMultipleInputsOutputs (рдЗрдирдкреБрдЯрдЕрд░реЗ, рдЖрдЙрдЯрдкреБрдЯ рдореИрдк); рдпрд╣ рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ

07-18 10:37:02.416 19957-19996/com.app.cerist.realtimeobjectdetectionapi E/AndroidRuntime: FATAL EXCEPTION: Camera
    Process: com.app.cerist.realtimeobjectdetectionapi, PID: 19957
    java.lang.IllegalArgumentException: Output error: Outputs do not match with model outputs.
        at org.tensorflow.lite.Interpreter.runForMultipleInputsOutputs(Interpreter.java:170)
        at com.app.cerist.realtimeobjectdetectionapi.ImageClassifierTFLiteAPI.recognizeImage(ImageClassifierTFLiteAPI.java:207)
        at com.app.cerist.realtimeobjectdetectionapi.MainActivity.classifyFrame(MainActivity.java:421)
        at com.app.cerist.realtimeobjectdetectionapi.MainActivity.access$1000(MainActivity.java:48)
        at com.app.cerist.realtimeobjectdetectionapi.MainActivity$4.run(MainActivity.java:455)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:159)
        at android.os.HandlerThread.run(HandlerThread.java:61)
07-18 10:37:02.436 19957-19996/com.app.cerist.realtimeobjectdetectionapi V/Process: killProcess [19957] Callers=com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException:99 java.lang.ThreadGroup.uncaughtException:693 java.lang.ThreadGroup.uncaughtException:690 <bottom of call stack> 
07-18 10:37:02.436 19957-19996/com.app.cerist.realtimeobjectdetectionapi I/Process: Sending signal. PID: 19957 SIG: 9

рддреНрд░реБрдЯрд┐ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдЗрдирдкреБрдЯ рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рдмрдбрд╝реА рд╣реИ
Interpreter.java рдореЗрдВ рдпрд╣ рд╕реНрдерд┐рддрд┐ рд╣реИ

public void runForMultipleInputsOutputs(Object[] inputs, <strong i="14">@NonNull</strong> Map<Integer, Object> outputs) {
        if (this.wrapper == null) {
            throw new IllegalStateException("Internal error: The Interpreter has already been closed.");
        } else {
            Tensor[] tensors = this.wrapper.run(inputs);
            if (outputs != null && tensors != null && outputs.size() <= tensors.length) {
                int size = tensors.length;
                Iterator var5 = outputs.keySet().iterator();
            }
       }
}

рдФрд░ рдпрд╣ рдореЗрд░рд╛ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕рд░рдгрд┐рдпрд╛рдБ рд╣реИ:

d.imgData = ByteBuffer.allocateDirect(1 * d.inputSize * d.inputSize * 3 * numBytesPerChannel);
d.imgData.order(ByteOrder.nativeOrder());
d.intValues = new int[d.inputSize * d.inputSize];

```
imgData.rewind ();
рдХреЗ рд▓рд┐рдП (int i = 0; i <рдЗрдирдкреБрдЯ рдЖрдХрд╛рд░; ++i) {
рдХреЗ рд▓рд┐рдП (рдЗрдВрдЯ рдЬреЗ = 0; рдЬреЗ <рдЗрдирдкреБрдЯ рдЖрдХрд╛рд░; ++ рдЬреЗ) {
int pixelValue = intValues[i * inputSize + j];
рдЕрдЧрд░ (isModelQuantized) {
// рдорд╛рддреНрд░рд╛рдмрджреНрдз рдореЙрдбрд▓
imgData.put ((рдмрд╛рдЗрдЯ) ((рдкрд┐рдХреНрд╕реЗрд▓рд╡реИрд▓реНрдпреВ >> 16) рдФрд░ 0xFF));
imgData.put ((рдмрд╛рдЗрдЯ) ((рдкрд┐рдХреНрд╕реЗрд▓рд╡реИрд▓реНрдпреВ >> 8) рдФрд░ 0xFF));
imgData.put ((рдмрд╛рдЗрдЯ) (рдкрд┐рдХреНрд╕реЗрд▓рд╡реИрд▓реНрдпреВ рдФрд░ 0xFF));
} рдФрд░ {// рдлреНрд▓реЛрдЯ рдореЙрдбрд▓
imgData.putFloat ((((рдкрд┐рдХреНрд╕реЗрд▓рд╡реИрд▓реНрдпреВ >> 16) рдФрд░ 0xFF) - IMAGE_MEAN) / IMAGE_STD);
imgData.putFloat ((((рдкрд┐рдХреНрд╕реЗрд▓рд╡реИрд▓реНрдпреВ >> 8) рдФрд░ 0xFF) - IMAGE_MEAN) / IMAGE_STD);
imgData.putFloat (((рдкрд┐рдХреНрд╕реЗрд▓рд╡реИрд▓реНрдпреВ рдФрд░ 0xFF) - IMAGE_MEAN) / IMAGE_STD);

The outputs array :

// рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ TensorFlow рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред
Trace.beginSection ("рдлрд╝реАрдб");
рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдерд╛рди = рдирдпрд╛ рдлреНрд▓реЛрдЯ [1] [NUM_DETECTIONS][4];
рдЖрдЙрдЯрдкреБрдЯ рдХреНрд▓рд╛рд╕реЗрд╕ = рдирдпрд╛ рдлреНрд▓реЛрдЯ [1] [NUM_DETECTIONS];
рдЖрдЙрдЯрдкреБрдЯрд╕реНрдХреЛрд░ = рдирдпрд╛ рдлреНрд▓реЛрдЯ [1] [NUM_DETECTIONS];
numDetections = рдирдпрд╛ рдлреНрд▓реЛрдЯ [1];

    Object[] inputArray = {imgData};
    Map<Integer, Object> outputMap = new HashMap<>();
    outputMap.put(0, outputLocations);
    outputMap.put(1, outputScores);
    outputMap.put(2, numDetections);
    outputMap.put(3, outputClasses);
    Trace.endSection();
And the Inference :

// рдЕрдиреБрдорд╛рди рдХреЙрд▓ рдЪрд▓рд╛рдПрдБред
рдЯреНрд░реЗрд╕.рдмреЗрдЧрд┐рдирд╕реЗрдХреНрд╢рди ("рд░рди");
Log.d("TAG_INPUT",""+String.valueOf(inputArray.length));
Log.d("TAG_OUTPUT",""+String.valueOf(outputMap.size ()));

    tfLite.runForMultipleInputsOutputs(inputArray, outputMap);
    Trace.endSection();

```
рдореБрдЭреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рдЕрд░реНрде рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЖрдкрдХреЗ TFLiteObjectDetectionAPIModel.java рд╡рд░реНрдЧ рдХреЗ рд╕рдорд╛рди рд╣реА рдХрд┐рдпрд╛ рдерд╛ред
рдорджрдж рдХреЗ рд▓рд┐рдП рд╢реБрдХреНрд░рд┐рдпрд╛

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ .. рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛?
рдзрдиреНрдпрд╡рд╛рдж..

@ рдЬреЙрд░реНрдЬ-рдбрдмреНрд▓реНрдпреВ рдЖрдкрдХреЛ Export_tflite_ssd_graph.py рдореЗрдВ рднреА рдЕрдзрд┐рдХрддрдо рдкрд╣рдЪрд╛рди рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рд╣реИред

рдирдорд╕реНрддреЗ

рдореИрдВ рдЫрд╡рд┐ рдореЗрдВ 10 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ)
рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
рдмреЗрдЬрд╝рд▓ рд░рди-рд╕реА рдСрдкреНрдЯ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ/рдХрдВрдЯреНрд░реАрдм/рд▓рд╛рдЗрдЯ/ рдЯреЛрдХреЛ: рдЯреЛрдХреЛ -- --input_file=$OUTPUT_DIR/tflite_graph.pb --output_file=$OUTPUT_DIR/mobile_net_500.tflite --input_shapes=1,300,300,3 --input_arrays=normalized_input_input_input_input_input output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_Po stProcess:1 ','TFLite_Detection_Po stProcess:2 ','TFLite_Detection_Po stProcess:3 ' --inference_type=FLOAT --max_detections=500 --max_classes_per_detection=1

рдореИрдВрдиреЗ рднреА рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛
Export_tflite_ssd_graph.py
рдЭрдВрдбреЗредDEFINE_integer('max_detections', 500 <--- рдХреЗ рдмрдЬрд╛рдп 10,
'рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд╣рдЪрд╛рди (рдмрдХреНрд╕реЗ) рд╣реИрдВред')
рдЭрдВрдбреЗредDEFINE_integer('max_classes_per_detection', 1,
'рдкреНрд░рддрд┐ рдбрд┐рдЯреЗрдХреНрд╢рди рдмреЙрдХреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред')

рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдПрдВрдбреНрд░реЙрдЗрдб [1,10,4] рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ 10 рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗ рд░рд╣рд╛ рд╣реИред

рдХреЛрдИ рдЙрдкрд╛рдп?

рдореБрдЭреЗ @KaviSanth рдореБрджреНрджреЗ рдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рднреА рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреАред

@Stevelb рдХрд╛ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реНрд░реАрдЬрд╝ рдХрд┐рдП рдЧрдП рдЧреНрд░рд╛рдлрд╝ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ max_detections рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рд╣реИред

@achowdhery рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ @andrewharp рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЯреЛрдХреЛ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рд╕реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЬреАрдердм рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╕реЗ рдорд╛рд╕реНрдЯрд░ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдЖрд░ 1.95 рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдмреЗрдЬрд╝рд▓ рд░рди рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ/рдХрдВрдЯреНрд░реАрдм/рд▓рд╛рдЗрдЯ/ рдЯреЛрдХреЛ: рдЯреЛрдХреЛ -- --input_file=$STRIPPED_PB --output_file=$DETECT_FB --input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE --input_shapes=1,300,300,3 --input_subs -=рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ -output_arrays=concat,concat_1 --inference_type=FLOAT --logtostderr
рдЬрд╛рдирдХрд╛рд░реА: рдЖрдордВрддреНрд░рдг рдЖрдИрдбреА: 0e58a5ef-9fee-4619-b760-aeb1c83c9661
рддреНрд░реБрдЯрд┐: 'рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ/рдХрдВрдЯреНрд░реАрдм/рд▓рд╛рдЗрдЯ/ рдЯреЛрдХреЛ: рдЯреЛрдХреЛ ' рдХреЛ рдЫреЛрдбрд╝рдирд╛: рдРрд╕рд╛ рдХреЛрдИ рдкреИрдХреЗрдЬ рдирд╣реАрдВ 'рдЯреЗрдиреНрд╕рд░рдлрд╝реНрд▓реЛ/рдХрдВрдЯреНрд░реАрдм/рд▓рд╛рдЗрдЯ/рдЯреЛрдХреЛ': рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдкреИрдХреЗрдЬ рдкрде рдкрд░ рдирд╣реАрдВ рдорд┐рд▓реА
рдЪреЗрддрд╛рд╡рдиреА: рд▓рдХреНрд╖реНрдп рдкреИрдЯрд░реНрди рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╡рд┐рдлрд▓ред
рддреНрд░реБрдЯрд┐: рдРрд╕рд╛ рдХреЛрдИ рдкреИрдХреЗрдЬ 'рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ/рдХрдВрдЯреНрд░реАрдм/рд▓рд╛рдЗрдЯ/рдЯреЛрдХреЛ' рдирд╣реАрдВ: рдкреИрдХреЗрдЬ рдкрде рдкрд░ рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдорд┐рд▓реА
рдЬрд╛рдирдХрд╛рд░реА: рдмреАрддрд╛ рд╣реБрдЖ рд╕рдордп: 0.179s
рдЬрд╛рдирдХрд╛рд░реА: 0 рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВред
рд╡рд┐рдлрд▓: рдмрд┐рд▓реНрдб рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реБрдЖ (0 рдкреИрдХреЗрдЬ рд▓реЛрдб рдХрд┐рдП рдЧрдП)
рд╡рд┐рдлрд▓: рдмрд┐рд▓реНрдб рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реБрдЖ (0 рдкреИрдХреЗрдЬ рд▓реЛрдб рдХрд┐рдП рдЧрдП)
рдореБрдЭреЗ рд╕рдВрд╢реЛрдзрди рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЙрди рдЖрджреЗрд╢реЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЧрд┐рдЯ рд╕реЗ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рдерд╛ред

рдореБрдЭреЗ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ/рд▓рд╛рдЗрдЯ/рдЯреЛрдХреЛ рдХреЗ рддрд╣рдд рдПрдХ рдЯреЛрдХреЛ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЕрднреА рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдареАрдХ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдЯреЛрдХреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдкрдХреЛ $DETECT_FB рдкрде рдХреЛ $PWD/ssd_mobilenet.tflite рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЙрдиреНрдЯреНрд░рд┐рдм/рд▓рд╛рдЗрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдкрд╛рдпрдерди рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдХреБрдЫ рдирд╣реАрдВред

https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android (https://github.com/tensorflow/tensorflow/blob рд╕реЗ рдбрд┐рдЯреЗрдХреНрдЯрд░рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдореЗрдВ .tflite рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдПрдХ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред /master/tensorflow/examples/android/src/org/tensorflow/demo/DetectorActivity.java) рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде

private static final String TF_OD_API_MODEL_FILE =
            "file:///android_asset/ssd_mobilenet_v1.tflite";

рдИ/рдПрдВрдбреНрд░реЙрдпрдбрд░рдирдЯрд╛рдЗрдо: рдШрд╛рддрдХ рдЕрдкрд╡рд╛рдж: рдореБрдЦреНрдп
рдкреНрд░рдХреНрд░рд┐рдпрд╛: рдорд╛рдпрдкреНрд░реЛрд╕реЗрд╕, рдкреАрдЖрдИрдбреА: 32611
java.lang.RuntimeException: рдЗрдирдкреБрдЯ рдиреЛрдб 'image_tensor' рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓
myPackage.myClass.TensorFlowObjectDetectionAPIModel.create(TensorFlowObjectDetectionAPIModel.java:106) рдкрд░

рдХреНрдпрд╛ рдЙрд╕ рдРрдк рдореЗрдВ .tflite рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ?

@ defaultUser3214 рдЖрдк рдбрд┐рдЯреЗрдХреНрд╢рди рдРрдк рдореЗрдВ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред MobileNet v1 рд╡рд░реНрдЧреАрдХрд░рдг рдореЙрдбрд▓ рд╣реИред рдХреГрдкрдпрд╛ MobileNet SSD рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

@achowdhery рдзрдиреНрдпрд╡рд╛рдж! wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2017_11_17.tar.gz рд╕реЗ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╡рд╣ рддреНрд░реБрдЯрд┐ рд╣реБрдИред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдПрд╕рдПрд╕рдбреА рд╕рдВрд╕реНрдХрд░рдг рдерд╛?

рд▓реЗрдХрд┐рди ssd_mobilenet_v1_android_export.pb рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ .tflite рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдкрд╣рд▓реЗ .pb рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

@ defaultUser3214 рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬреЛ рдЬреБрд▓рд╛рдИ 2018 рдореЗрдВ рдЬрд╛рд░реА рдирд╡реАрдирддрдо рдбреЗрдореЛ рдРрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдХреГрдкрдпрд╛ рдЬреБрд▓рд╛рдИ 2018 рдореЗрдВ рдирд╡реАрдирддрдо рдореЙрдбрд▓ рдбрд┐рдЯреЗрдХреНрд╢рди рдореЙрдбрд▓ рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ: рд╡реЗ рдРрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдпрд╣ рдЕрднреА рднреА рдЕрд╡рд░реБрджреНрдз рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред

@SteveIb рдЖрдкрдХреЛ TFLiteObjectDetectionAPIModel.java рдореЗрдВ NUM_DETECTIONS = 500 рдмрджрд▓рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

ssdmobilenet v1 .pb рдХреЛ .tflite . рдореЗрдВ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ
Tensorflow рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдПрдкреАрдЖрдИ @aselle @achowdhery . рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрддреНрдкрдиреНрди pb

рдЗрд╕ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐? рдлреНрд░реЛрдЬрди_рдЗрдирдлреЗрд░реЗрдВрд╕_рдЧреНрд░рд╛рдл.рдкреАрдмреА рдХреЛ .TFLITE рдлрд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ

java.lang.IllegalArgumentException: Cannot convert between a TensorFlowLite buffer with 49152 bytes and a ByteBuffer with 270000 bytes

Android рдореЗрдВ рдХрд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдПред рд╡рд┐рднрд┐рдиреНрди рд░реВрдкрд╛рдВрддрд░рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдпрд╣рд╛рдВ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдмрд╛рдж рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ рд╕реАрдЦрд╛ ssd_mobilenet_v1_pets рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░реЗрдВ: https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10

рдЗрд╕ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐? рдлреНрд░реЛрдЬрди_рдЗрдирдлреЗрд░реЗрдВрд╕_рдЧреНрд░рд╛рдл.рдкреАрдмреА рдХреЛ .TFLITE рдлрд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ

java.lang.IllegalArgumentException: Cannot convert between a TensorFlowLite buffer with 49152 bytes and a ByteBuffer with 270000 bytes

Android рдореЗрдВ рдХрд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдПред рд╡рд┐рднрд┐рдиреНрди рд░реВрдкрд╛рдВрддрд░рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдпрд╣рд╛рдВ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдмрд╛рдж рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ рд╕реАрдЦрд╛ ssd_mobilenet_v1_pets рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░реЗрдВ: https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10

рдмрд╕ рдЗрд╕ рдкрд░ рдЕрдиреБрд╡рд░реНрддреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХрд┐рд╕реА рдФрд░ рдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рдереА - рдпрд╣ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдореЙрдбрд▓ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ .tflite рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореЙрдбрд▓ рдХреЛ MobileNet рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдорд╛рддреНрд░рд╛рдмрджреНрдз рднреА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рдореЗрдВ рдХреЛрдб рдХрд╛ рдпрд╣ рдЦрдВрдб рдпрд╛ .config рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рд╕рдорд╛рди рд╣реЛрдЧрд╛:

graph_rewriter { quantization { delay: 48000 weight_bits: 8 activation_bits: 8 } }

рдпрд╣ рдЕрдм tensorflow/contrib/lite/examples/android рдкрд░ рд▓рд╛рдЗрд╡ рд╣реИ! рдпрд╣ рдореВрд▓ TF Android рдбреЗрдореЛ рдХрд╛ рдПрдХ рдЕрдзрд┐рдХ рд╕рдВрдкреВрд░реНрдг рдкреЛрд░реНрдЯ рд╣реИ (рдХреЗрд╡рд▓ рд╕реНрдЯрд╛рдЗрд▓рд╛рдЗрдЬрд╝ рдЙрджрд╛рд╣рд░рдг рдХреА рдХрдореА рд╣реИ), рдФрд░ рдЖрдЧреЗ рдЪрд▓рдХрд░ tensorflow/contrib/lite/java/demo рдореЗрдВ рдЕрдиреНрдп рдбреЗрдореЛ рдХреА рдЬрдЧрд╣ рд▓реЗрдЧрд╛ред

рдПрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд TF рд▓рд╛рдЗрдЯ рдлреНрд▓реИрдЯрдмрдлрд░ mobilenet_ssd_tflite_v1.zip рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдк TFLiteObjectDetectionAPIModel.java рдореЗрдВ рдЬрд╛рд╡рд╛ рдЕрдиреБрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдореВрд▓ рдЯреАрдПрдл рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмреЙрдХреНрд╕ рдХреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбреАрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдПрдХ рдмреЙрдХреНрд╕ рдкреВрд░реНрд╡ txt рдлрд╝рд╛рдЗрд▓ рдХреЛ рдРрдкреНрд╕ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдкреИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдореЙрдбрд▓ рдЬрд╝рд┐рдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдПрдХ рдХреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд░реЗрдЦрд╛рдВрдХрди)ред

TOCO рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рджреМрд░рд╛рди рдПрдХ рдЕрд▓рдЧ рдЗрдирдкреБрдЯ рдиреЛрдб (рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░/рдЙрдк) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╡рд┐рднрд┐рдиреНрди рдЖрдЙрдЯрдкреБрдЯ рдиреЛрдбреНрд╕ (concat, concat_1) рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЬреЛ tflite рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдпрд╛ рддреЛ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рдкреБрдирд░реНрдЧрдард┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ TF рд▓рд╛рдЗрдЯ TF рд╕рдорддрд╛ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИред

SSD MobileNet рдореЙрдбрд▓ рдХреЛ tflite рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдореЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рддреНрд╡рд░рд┐рдд рдЪрд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ:

# Download and extract SSD MobileNet model
wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2017_11_17.tar.gz
tar -xvf ssd_mobilenet_v1_coco_2017_11_17.tar.gz 
DETECT_PB=$PWD/ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb
STRIPPED_PB=$PWD/frozen_inference_graph_stripped.pb
DETECT_FB=$PWD/tensorflow/contrib/lite/examples/android/assets/mobilenet_ssd.tflite

# Strip out problematic nodes before even letting TOCO see the graphdef
bazel run -c opt tensorflow/python/tools/optimize_for_inference -- \
--input=$DETECT_PB  --output=$STRIPPED_PB --frozen_graph=True \
--input_names=Preprocessor/sub --output_names=concat,concat_1 \
--alsologtostderr

# Run TOCO conversion.
bazel run tensorflow/contrib/lite/toco:toco -- \
--input_file=$STRIPPED_PB --output_file=$DETECT_FB \
--input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE \
--input_shapes=1,300,300,3 --input_arrays=Preprocessor/sub \
--output_arrays=concat,concat_1 --inference_type=FLOAT --logtostderr

# Build and install the demo
bazel build -c opt --cxxopt='--std=c++11' //tensorflow/contrib/lite/examples/android:tflite_demo
adb install -r -f bazel-bin/tensorflow/contrib/lite/examples/android/tflite_demo.apk

рдпрд╣ рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

kepricon picture kepricon  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Billy4195 picture Billy4195  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

waleedka picture waleedka  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

myme5261314 picture myme5261314  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

indiejoseph picture indiejoseph  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ