Перенос модели теневого потока Darkflow в демонстрационную версию Android Tensorflow Camera Detection - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть изготовленная на заказ модель YOLO в форме cfg и весов. Я преобразовал эту модель в файлы .pb и .meta, используя darkflow (https://github.com/thtrieu/darkflow) как

sudo ./flow --model cfg/license.cfg --load bin/yololp1_420000.weights --savepb --verbalise

Анализ результирующего .pb (/ license.pb) равен

>>> import tensorflow as tf
>>> gf = tf.GraphDef()
>>> gf.ParseFromString(open('/darkflow/built_graph/license.pb','rb').read())
202339124
>>> [n.name + '=>' +  n.op for n in gf.node if n.op in ( 'Softmax','Placeholder')]
[u'input=>Placeholder']
>>> [n.name + '=>' +  n.op for n in gf.node if n.op in ( 'Softmax','Mul')]
[u'mul=>Mul', u'mul_1=>Mul', u'mul_2=>Mul', u'mul_3=>Mul', u'mul_4=>Mul', u'mul_5=>Mul', u'mul_6=>Mul', ...]

у него есть слой 'input', но нет слоя 'output'. Я попытался перенести модель на демонстрацию тензорной камеры (https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android). Предварительный просмотр камеры останавливается через секунду. Исключение для Android ниже:

04-27 15:06:32.727 21721 21737 D gralloc : gralloc_lock_ycbcr success. format : 11, usage: 3, ycbcr.y: 0xc07cf000, .cb: 0xc081a001, .cr: 0xc081a000, .ystride: 640 , .cstride: 640, .chroma_step: 2
04-27 15:06:32.735 21721 21736 E TensorFlowInferenceInterface: Failed to run TensorFlow inference with inputs:[input], outputs:[output]
04-27 15:06:32.736 21721 21736 E AndroidRuntime: FATAL EXCEPTION: inference
04-27 15:06:32.736 21721 21736 E AndroidRuntime: Process: org.tensorflow.demo, PID: 21721
04-27 15:06:32.736 21721 21736 E AndroidRuntime: java.lang.IllegalArgumentException: No OpKernel was registered to support Op 'ExtractImagePatches' with these attrs.  Registered devices: [CPU], Registered kernels:
04-27 15:06:32.736 21721 21736 E AndroidRuntime:   <no registered kernels>
04-27 15:06:32.736 21721 21736 E AndroidRuntime:     [[Node: ExtractImagePatches = ExtractImagePatches[T=DT_FLOAT, ksizes=[1, 2, 2, 1], padding="VALID", rates=[1, 1, 1, 1], strides=[1, 2, 2, 1]](47-leaky)]]

Как это исправить? Я попытался с "optimize_for_inference.py" преобразовать .pb в оптимизированный для мобильных устройств .pb тоже, но безрезультатно. Учитывая это, как правильно определить входные и выходные тензоры / слои в преобразованном файле .pb? или как правильно портировать результирующий файл .pb на демонстрацию обнаружения камеры TF?

1 Ответ

0 голосов
/ 05 мая 2018

Нет Opkernel означает, что нет никакой реализации для оборудования, работающего с этим .pb. Чтобы решить эту проблему, посмотрите на reorg класса ./net/ops/convolution.py. У него есть два метода: вперед и вперед. Текущий вариант по умолчанию использует forward, который имеет extract_image_patches - встроенный метод tenorflow.

Поменяйте местами имена двух методов, и вы будете использовать мою ручную реализацию, которая не должна иметь проблем с реализацией Opkernel.

Ссылка: https://github.com/thtrieu/darkflow/issues/56

...