Как использовать NumPy для работы с тензорами в tenorflow lite - PullRequest
0 голосов
/ 02 июля 2018

У меня есть тензор потока, который пытается разделить изображение на три одноканальных изображения.

input_image = tf.placeholder(name="input_image", dtype=tf.float32, shape=[512 * 512 *3])
feed_dict ={input_image:resized_image_data}

channel_image = tf.reshape(input_image, (512, 512, 3))

Я нарезаю тензор, вычисляю размытие и затем использую dstack numpy на «оцененных» тензорах. Это работает в тензорном потоке, но тензор потока облегчается с ошибкой «Не удается выделить память».

r,g,b = channel_image[:,:,0],channel_image[:,:,1],channel_image[:,:,2]

rtensor = tf.convert_to_tensor(r)
gtensor = tf.convert_to_tensor(g)
btensor = tf.convert_to_tensor(b)

rbatch = tf.expand_dims(tf.expand_dims(rtensor, axis=2), axis=0)
gbatch = tf.expand_dims(tf.expand_dims(gtensor, axis=2), axis=0)
bbatch = tf.expand_dims(tf.expand_dims(btensor, axis=2), axis=0)

rblur = tf.squeeze(blur(one_chan_kernel, strides, rbatch, 2), name="rblur")
gblur = tf.squeeze(blur(one_chan_kernel, strides, gbatch, 2), name="gblur")
bblur = tf.squeeze(blur(one_chan_kernel, strides, bbatch, 2), name="bblur")

result_np = np.dstack((rblur.eval(feed_dict=feed_dict), gblur.eval(feed_dict=feed_dict), bblur.eval(feed_dict=feed_dict)))
result = tf.expand_dims(tf.convert_to_tensor(result_np, name="result_tensor"), axis=0)

Как я могу использовать numpy для работы с тензорными результатами? Я не могу использовать tf.unstack и tf.stack, поскольку они в настоящее время не реализованы в tenorflow. облегченный

logcat:

                                                                            --------- beginning of crash

07-02 11: 20: 36.486 6553-6553 / camerafragment E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное Процесс: CameraFragment, PID: 6553 java.lang.RuntimeException: Невозможно возобновить действие {camerafragment / camerafragment.MainActivity}: java.lang.NullPointerException: Невозможно выделить память для интерпретатора на android.app.ActivityThread.performResumeActivity (ActivityThread.java:3773) на android.app.ActivityThread.handleResumeActivity (ActivityThread.java:3805) на android.app.servertransaction.ResumeActivityItem.execute (ResumeActivityItem.java:51) на android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:145) на android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:70) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1797) на android.os.Handler.dispatchMessage (Handler.java:106) на android.os.Looper.loop (Looper.java:193) на android.app.ActivityThread.main (ActivityThread.java:6642) в java.lang.reflect.Method.invoke (родной метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:493) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858) Вызывается: java.lang.NullPointerException: не удается выделить память для интерпретатора в org.tensorflow.lite.NativeInterpreterWrapper.createInterpreter (собственный метод) в org.tensorflow.lite.NativeInterpreterWrapper. (NativeInterpreterWrapper.java:63) в org.tensorflow.lite.NativeInterpreterWrapper. (NativeInterpreterWrapper.java:51) на сайте org.tensorflow.lite.Inprepreter. (Interpreter.java:90) at camerafragment.MainActivity.initializeInference (MainActivity.java:230)at camerafragment.MainActivity.onResume (MainActivity.java:91) на android.app.Instrumentation.callActivityOnResume (Instrumentation.java:1412) на android.app.Activity.performResume (Activity.java:7287) на android.app.ActivityThread.performResumeActivity (ActivityThread.java:3765) на android.app.ActivityThread.handleResumeActivity (ActivityThread.java:3805) на android.app.servertransaction.ResumeActivityItem.execute (ResumeActivityItem.java:51) на android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:145) на android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:70) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1797) на android.os.Handler.dispatchMessage (Handler.java:106) на android.os.Looper.loop (Looper.java:193) на android.app.ActivityThread.main (ActivityThread.java:6642) в java.lang.reflect.Method.invoke (родной метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:493) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)

1 Ответ

0 голосов
/ 27 июля 2018

До недавнего времени TensorFlow Lite не поддерживал стек и unstack. Вероятно, ошибка «невозможно выделить память» связана с тем, что преобразование не выполнено. Если вы попытаетесь снова использовать ночной ресурс tenorflow, это может сработать.

...