根据 i.MX_Machine_Learning_User\'s_Guide.pdf 中的指南,我能够使用 USB 摄像头和 HDMI 显示器在 i.MX8MP 评估板上运行带有 NNStreamer 演示的视觉管道。
我可以看到人员检测演示工作正常。
现在我想使用我自己使用 YOLOV3 创建的模型运行人员检测
我使用 Python 脚本将 my_model.h5 文件转换为 tflight。
但是 nnstreamer 似乎不接受我的模型。
我的问题是:
1. NNStreamer 是否只适用于 YOLO5 模型?
2、有没有可以跑YOLO3模型的NNStreamer?
我复制了下面的对话脚本。
以下是我的董事会的错误:
导出模型=$(pwd)/my_model.tflite
导出标签=$(pwd)/labels.txt
gst-launch-1.0 --no-posi
tion v4l2src device=/dev/video3 ! 视频/x-raw,宽度=416,高度=416,帧率=10/1!球座名称=t t。!队列最大大小缓冲区=2 泄漏=2 !imxvideoconvert_g2d !视频/x-raw,宽度=416,高度=416,格式=RGBA!视频转换!视频/x-raw,格式=RGB!张量转换器!tensor_filter framework=tensorflow-lite model=${MODEL} custom=Delegate:External,ExtDelegateLib:libvx_delegate.so ! tensor_decoder mode=bounding_boxes option1=tf-ssd option2=${LABELS} option3=0:1:2:3,50 option4=640:480 option5=300:300 ! 混合。吨。!队列最大大小缓冲区=2!imxcompositor_g2d 名称=混合 sink_0::zorder=2 sink_1::zorder=1 !waylandsink
** 消息:13:41:07.732: accl = cpu
Caught SIGSEGV
#0 0x0000ffffa6d08f58 in __GI___wait4 (pid=,
#1 0x0000ffffa6ea4588 in g_on_error_stack_trace ()
#2 0x0000aaaab04e6380 在 ?? ()
#3
#4 0x0000ffff8d4ec1c0 in tflite::FlatBufferModel::ReadAllMetadata[abi:cxx11]() const () from /usr/lib/libtensorflow-lite.so.2.8.0
#5 0x0000ffff8d4e689c in tflite ::InterpreterBuilder::InterpreterBuilder(tflite::FlatBufferModel const&, tflite::OpResolver const&) ()
#6 0x0000ffff8d634338 in TFLiteInterpreter::loadModel(int, tflite_delegate_e)
#7 0x0000ffff8d634f2c in TFLiteCore::loadModel() ()
#8 0x0000ffff8d635b8c 在TFLiteCore::init(tflite_option_s*) ()
#9 0x0000ffff8d635dfc 在 ?? ()
#10 0x0000ffff8e7ad7c0 在 gst_tensor_filter_common_open_fw ()
#11 0x0000ffff8e7adc5c 在 gst_tensor_filter_load_tensor_info ()
#12 0x0000ffff8e80bd54 在 ?? () 来自 /usr/lib/gstreamer-1.0/libnnstreamer.so
#13 0x0000ffffa6a3864c 在 ?? () 来自 /usr/lib/libgstbase-1.0.so.0
#14 0x0000ffffa6a3c208 在 ?? () 来自 /usr/lib/libgstbase-1.0.so.0
#15 0x0000ffffa707837c in gst_pad_query () 来自 /usr/lib/libgstreamer-1.0.so.0
#16 0x0000ffffa70bc894 in gst_pad_query_caps ()
#17 0x0000ffffa70bd56 0 in gst_element_get_compatible_pad ()
# 18 0x0000ffffa70be49c 在 gst_element_link_
pads_full ()
#19 0x0000ffffa70beaf4 在 gst_element_link_pads_filtered ()
#20 0x0000ffffa701a14c 在 ?? () 来自 /usr/lib/libgstreamer-1.0.so.0
#21 0x0000ffffa70d2a84 in gst_parse_launch_full ()
#22 0x0000ffffa70d2d24 in gst_parse_launchv_full ()
#23 0x0000aaaab04e3d7c in ?? ()
#24 0x0000ffffa6c7b230 in __libc_start_call_main (
#25 0x0000ffffa6c7b30c in __libc_start_main_impl (main=0xaaaab04e3a80,
#26 0x0000aaaab04e4370 in _start ()
Spinning. Please run \'gdb gst-launch- 1.0 1620\' 继续调试,Ctrl-C退出,或者Ctrl-\\转储核心。
以下是我将 my_model.h5 转换为 tflight 的方法:
从 keras.models导入 tensorflow 作为 tf导入 load_model
导入 os
# 将 keras 模型转换为 tflite
def get_file_size(file_path):
size = os.path.getsize(file_path)
return size
def convert_bytes(size, unit=None):
if unit == \"KB\":
return print(\'文件大小:\' + str(round(size / 1024, 3)) + \'千字节\')
elif unit == \"MB\" :
return print(\'文件大小:\' + str(round(size / (1024 * 1024), 3)) + \'兆字节\') else:
return
print(\'文件大小:\' + str(size) + \'字节\')
model = load_model(\"Yolo_v3_Tf.h5\")
TF_LITE_MODEL_FILE_NAME = \"my_model.tflite\"
tf_lite_converter = tf.lite.TFLiteConverter.from_keras_model(模型)
tflite_model = tf_lite_converter.convert()
tflite_model_name = TF_LITE_MODEL_FILE_NAME
open(tflite_model_name, \"wb\").write(tflite_model)
convert_bytes(get_file_size(TF_LITE_MODEL_FILE_NAME), \" KB\")
# 转换模型。
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
# 或者使用其他方法
# 保存模型。
用 open(\'my_model.tflite\', \'wb\') 作为 f:
f.write(tflite_model)