Tensorflow: Android ์นด๋ฉ”๋ผ ๋ฐ๋ชจ์—์„œ ์žฌํ•™์Šต๋œ ์นดํ…Œ๊ณ ๋ฆฌ ์‚ฌ์šฉ

์— ๋งŒ๋“  2016๋…„ 08์›” 01์ผ  ยท  1๋…ผํ‰  ยท  ์ถœ์ฒ˜: tensorflow/tensorflow

GitHub ๋ฌธ์ œ๋Š” ๋ฒ„๊ทธ/์„ค์น˜ ๋ฌธ์ œ/๊ธฐ๋Šฅ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ผ๋ฐ˜์ ์ธ ์ง€์›์€ StackOverflow ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
๋ฒ„๊ทธ ๋ฐ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹์ฐพ๊ณ  ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์Œ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
GitHub ๋ฌธ์ œ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ StackOverflow๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

๋ฒ„๊ทธ ๋˜๋Š” ์„ค์น˜ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.
๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ• ์ˆ˜๋ก ๋” ์‰ฝ๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋„์›€๊ณผ ์กฐ์–ธ.

ํ™˜๊ฒฝ ์ •๋ณด

์šด์˜ ์ฒด์ œ: Windows์˜ Docker

์„ค์น˜๋œ CUDA ๋ฐ cuDNN ๋ฒ„์ „:
( ls -l /path/to/cuda/lib/libcud* ์˜ ์ถœ๋ ฅ์„ ์ฒจ๋ถ€ํ•˜์‹ญ์‹œ์˜ค):

๋ฐ”์ด๋„ˆ๋ฆฌ pip ํŒจํ‚ค์ง€์—์„œ ์„ค์น˜๋œ ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

  1. ์„ค์น˜ํ•œ pip ํŒจํ‚ค์ง€.
  2. python -c "import tensorflow; print(tensorflow.__version__)" ์˜ ์ถœ๋ ฅ.

์†Œ์Šค์—์„œ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

  1. ์ปค๋ฐ‹ ํ•ด์‹œ( git rev-parse HEAD )
  2. bazel version ์˜ ์ถœ๋ ฅ

์žฌํ˜„ ๋‹จ๊ณ„

  1. Docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์žฌํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์žฌํ•™์Šต๋œ ํŒŒ์ผ retrained_graph.pb ๋ฐ retrained_labels.txt ๊ฐ€์ ธ์˜ค๊ธฐ
    https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/index.html?index=..%2F..%2Findex#5
  2. Windows์— Bazel์„ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Bazel์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ Android ๋ฐ๋ชจ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Windows์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ์‹ค์‹œ๊ฐ„ ์นด๋ฉ”๋ผ์—์„œ ImageNet์—์„œ ์ œ๊ณตํ•˜๋Š” 1000๊ฐœ์˜ ํด๋ž˜์Šค๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    https://github.com/miyosuda/TensorFlowAndroidDemo

    ๋‹น์‹ ์€ ๋ฌด์—‡์„ ์‹œ๋„ ํ–ˆ์Šต๋‹ˆ๊นŒ?

์ฐธ์กฐ๏ผ› https://github.com/tensorflow/tensorflow/issues/1269
์ œ์•ˆ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ค์Œ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.
1. tensorflow ๋นŒ๋“œ์˜ google/protobuf ์„น์…˜์—์„œ coded_stream.h๋ฅผ ์ฐพ๊ณ  ๋‹ค์Œ ์ค„์—์„œ 64๋ฅผ 256์œผ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
์ •์  ์ƒ์ˆ˜ ์ •์ˆ˜ kDefaultTotalBytesLimit = 64 << 20; // 64๋ฅผ 256MB๋กœ ๋ณ€๊ฒฝ
2. TensorflowImageListener.java์—์„œ input_size๋งŒ 299๋กœ, image_mean์„ 128๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
3. android ๋ฐ๋ชจ์—์„œ 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(
{{"๋ฌผ", ์ž…๋ ฅ_ํ…์„œ}});

ํ‘œ์ค€::๋ฒกํ„ฐ ํ‘œ์ค€::๋ฌธ์ž์—ด ์ถœ๋ ฅ ์ด๋ฆ„({"์†Œํ”„ํŠธ๋งฅ์Šค"});
4. TensorflowImageListerner.java์—์„œ ๋‹ค์Œ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๊ฐœ์ธ ์ •์  ์ตœ์ข… ๋ฌธ์ž์—ด MODEL_FILE = "file:///android_asset/retrained_graph.pb";
๊ฐœ์ธ ์ •์  ์ตœ์ข… ๋ฌธ์ž์—ด LABEL_FILE =
"file:///android_asset/retrained_labels.txt";

  1. ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฐ๋ชจ ๋นŒ๋“œ

๋„์›€์ด ๋  ๋กœ๊ทธ ๋˜๋Š” ๊ธฐํƒ€ ์ถœ๋ ฅ

(๋กœ๊ทธ ์šฉ๋Ÿ‰์ด ํฐ ๊ฒฝ์šฐ ์ฒจ๋ถ€ํŒŒ์ผ๋กœ ์—…๋กœ๋“œ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.)
08-01 17:36:50.015 14978-15121/org.tensorflow.tensorflowdemo A/native: jni_utils.cc:107 ํ™•์ธ ์‹คํŒจ: message->ParseFromZeroCopyStream(&adaptor)
08-01 17:36:50.015 14978-15121/org.tensorflow.tensorflowdemo A/libc: ์น˜๋ช…์ ์ธ ์‹ ํ˜ธ 6(SIGABRT), ์ฝ”๋“œ -6 in tid 15121(ImageListener)

Inception v3์™€ Inception 5h์˜ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜๋กœ ์ธํ•ด ์ด๊ฒƒ์ด ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” Android ๋ฐ๋ชจ ๋ชจ๋ธ์€ Inception 5h์ด์ง€๋งŒ ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ํ›ˆ๋ จํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ ๋ชจ๋ธ์€ Inception 3v์ž…๋‹ˆ๋‹ค. https://github.com/tensorflow/tensorflow/issues/1269์— ์–ธ๊ธ‰๋œ ๋ณ€์ˆ˜๋ฅผ ํŽธ์ง‘ํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€ Android ๋ฐ๋ชจ์—์„œ ์‹คํ–‰๋˜๋Š” ์ƒˆ๋กœ์šด ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

>๋ชจ๋“  ๋Œ“๊ธ€

์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ์งˆ๋ฌธ์€ StackOverflow์—์„œ ๋” ์ž˜ ๋ฌป์Šต๋‹ˆ๋‹ค. ์ด ํฌ๋Ÿผ์€ ๋ฒ„๊ทธ ๋ณด๊ณ  ๋“ฑ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— 'tensorflow'๋ผ๋Š” ํƒœ๊ทธ๋ฅผ ๋ถ™์—ฌ์„œ ์งˆ๋ฌธํ•˜์„ธ์š”.

bazel์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ tensorflow makefile ์„ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰