рдЧрд┐рдЯрд╣рдм рдореБрджреНрджреЗ рдмрдЧ/рд╕реНрдерд╛рдкрдирд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ/рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВред
рд╕рдореБрджрд╛рдп рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП, StackOverflow рджреЗрдЦреЗрдВред
рдмрдЧ рдФрд░ рдлреАрдЪрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрди рдореБрджреНрджреЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЧрд┐рдЯрд╣рдм рдореБрджреНрджреЛрдВ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред
рдмрдЧ рдпрд╛ рд╕реНрдерд╛рдкрдирд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
рдЖрдк рдЬрд┐рддрдиреА рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдЙрддрдиреА рд╣реА рдЖрд╕рд╛рдиреА рд╕реЗ рдкреЗрд╢рдХрд╢ рдХрд░ рдкрд╛рдПрдВрдЧреЗ
рдорджрдж рдФрд░ рд╕рд▓рд╛рд╣ред
рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо: рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдбреЙрдХрд░
CUDA рдФрд░ cuDNN рдХрд╛ рд╕реНрдерд╛рдкрд┐рдд рд╕рдВрд╕реНрдХрд░рдг:
(рдХреГрдкрдпрд╛ ls -l /path/to/cuda/lib/libcud*
рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ):
рдпрджрд┐ рдмрд╛рдЗрдирд░реА рдкрд╛рдЗрдк рдкреИрдХреЗрдЬ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ:
python -c "import tensorflow; print(tensorflow.__version__)"
рд╕реЗ рдЖрдЙрдЯрдкреБрдЯредрдпрджрд┐ рд╕реНрд░реЛрдд рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рддреЛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ
git rev-parse HEAD
)bazel version
. рдХрд╛ рдЖрдЙрдЯрдкреБрдЯрд╕рдВрджрд░реНрдн: https://github.com/tensorflow/tensorflow/issues/1269
рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреАрдЬреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:
1. рдЕрдкрдиреЗ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдмрд┐рд▓реНрдб рдХреЗ google/protobuf рд╕реЗрдХреНрд╢рди рдореЗрдВ coded_stream.h рдвреВрдВрдвреЗрдВ рдФрд░ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдореЗрдВ 64 рд╕реЗ 256 рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ:
рд╕реНрдерд┐рд░ рд╕реНрдерд┐рд░рд╛рдВрдХ int kDefaultTotalBytesLimit = 64 << 20; // 64 рд╕реЗ 256 рдПрдордмреА рдмрджрд▓реЗрдВ
2. TensorflowImageListener.java рдореЗрдВ рдХреЗрд╡рд▓ input_size рдХреЛ 299 рдФрд░ image_mean рдХреЛ 128 рдореЗрдВ рдмрджрд▓реЗрдВ
3. рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрдореЛ рдореЗрдВ tensorflow_jni.cc рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ:
input_tensor_mapped(0, i, j, 0) =
(static_cast<float>(src->red) - g_image_mean)/g_image_mean;
input_tensor_mapped(0, i, j, 1) =
(static_cast<float>(src->green) - g_image_mean)/g_image_mean;
input_tensor_mapped(0, i, j, 2) =
(static_cast<float>(src->blue) - g_image_mean)/g_image_mean;
++src;
std::vector<:pair i="47"> > input_tensors(
{{"рдореВрд▓", input_tensor}});
std::vectorstd::string output_names({"softmax"});
4. TensorflowImageListerner.java рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ:
рдирд┐рдЬреА рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ MODEL_FILE = "рдлрд╝рд╛рдЗрд▓: ///android_asset/retrained_graph.pb";
рдирд┐рдЬреА рд╕реНрдерд┐рд░ рдЕрдВрддрд┐рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ LABEL_FILE =
"рдлрд╝рд╛рдЗрд▓: ///android_asset/retrained_labels.txt";
(рдпрджрд┐ рд▓реЙрдЧ рдмрдбрд╝реЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдЯреИрдЪрдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ)ред
08-01 17:36:50.015 14978-15121/org.tensorflow.tensorflowdemo рдПрдХ/рджреЗрд╢реА: jni_utils.cc:107 рдЬрд╛рдБрдЪ рд╡рд┐рдлрд▓: рд╕рдВрджреЗрд╢-> ParseFromZeroCopyStream(&adaptor)
08-01 17:36:50.015 14978-15121/org.tensorflow.tensorflowdemo A/libc: рдШрд╛рддрдХ рд╕рдВрдХреЗрдд 6 (SIGABRT), рдХреЛрдб -6 tid 15121 рдореЗрдВ (ImageListener)
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрдВрд╕реЗрдкреНрд╢рди v3 рдФрд░ рдЗрдВрд╕реЗрдкреНрд╢рди 5h рдХреЗ рдЕрд╕рдВрдЧрдд рдЪрд░ рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ Android рдбреЗрдореЛ рдореЙрдбрд▓ рдЗрдВрд╕реЗрдкреНрд╢рди 5h рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдирдП рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдЗрдВрд╕реЗрдкреНрд╢рди 3v рд╣реИред рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЪрд░реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ: https://github.com/tensorflow/tensorflow/issues/1269ред
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВред рдХреЛрдИ рднреА рдореБрдЭреЗ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрдореЛ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдореЗрд░реЗ рдирдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП?
StackOverflow рдкрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рд╢реНрди рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдкреВрдЫрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдлрд╝реЛрд░рдо рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд▓рд┐рдП рд╣реИред рдХреГрдкрдпрд╛ рд╡рд╣рд╛рдВ рдЕрдкрдирд╛ рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдВ, 'рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ' рдХреЗ рд╕рд╛рде рдЯреИрдЧ рдХрд░рдирд╛ред
рдпрджрд┐ рдЖрдкрдХреЛ рдмреЗрдЬрд╝рд▓ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ, рддреЛ рдЖрдк рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВред