一、环境搭建
二、问题
1、PP-yolo进行视频检测问题
(1)使用下面命令生成(导出)检测模型:
python tools/export_model.py -c configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml -o weights=weights/ppyolo/ppyolov2_r50vd_dcn_365e_coco.pdparams
出现以下问题:
usage: infer.py [-h] [-c CONFIG] [-o [OPT [OPT ...]]] [--infer_dir INFER_DIR]
[--infer_img INFER_IMG] [--output_dir OUTPUT_DIR]
[--draw_threshold DRAW_THRESHOLD] [--slim_config SLIM_CONFIG]
[--use_vdl USE_VDL] [--vdl_log_dir VDL_LOG_DIR]
[--save_txt SAVE_TXT]
infer.py: error: unrecognized arguments: --camera=demo/20201019130222_Channel4.avi
root@d87b6a408088:/data/my_docker/lyy/object-detection/PaddleDetection-release-2.1# python tools/export_model.py -c configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml -o weights=weights/ppyolo/ppyolov2_r50vd_dcn_365e_coco.pdparams
[07/13 09:46:14] ppdet.utils.checkpoint INFO: Finish loading model weights: weights/ppyolo/ppyolov2_r50vd_dcn_365e_coco.pdparams
[07/13 09:46:14] ppdet.engine INFO: Export inference config file to output_inference/ppyolov2_r50vd_dcn_365e_coco/infer_cfg.yml
Traceback (most recent call last):
File "tools/export_model.py", line 108, in <module>
main()
File "tools/export_model.py", line 104, in main
run(FLAGS, cfg)
File "tools/export_model.py", line 72, in run
trainer.export(FLAGS.output_dir)
File "/usr/local/lib/python3.6/dist-packages/paddledet-2.1.0-py3.6.egg/ppdet/engine/trainer.py", line 505, in export
input_spec, static_model.forward.main_program,
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 534, in main_program
concrete_program = self.concrete_program
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 454, in concrete_program
return self.concrete_program_specify_input_spec(input_spec=None)
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 488, in concrete_program_specify_input_spec
*desired_input_spec)
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 402, in get_concrete_program
concrete_program, partial_program_layer = self._program_cache[cache_key]
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 711, in __getitem__
self._caches[item] = self._build_once(item)
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 702, in _build_once
class_instance=cache_key.class_instance)
File "<decorator-gen-65>", line 2, in from_func_spec
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/wrapped_decorator.py", line 25, in __impl__
return wrapped_func(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/base.py", line 40, in __impl__
return func(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 620, in from_func_spec
static_func = convert_to_static(dygraph_function)
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 141, in convert_to_static
static_func = _FUNCTION_CACHE.convert_with_cache(function)
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 78, in convert_with_cache
static_func = self._convert(func)
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 116, in _convert
root_wrapper = self._dygraph_to_static.get_static_ast(root)
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/ast_transformer.py", line 61, in get_static_ast
self.transfer_from_node_type(self.static_analysis_root)
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/ast_transformer.py", line 92, in transfer_from_node_type
self._apply(transformer, node_wrapper, log_level=index + 1)
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/ast_transformer.py", line 65, in _apply
transformer(node_wrapper).transform()
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/ifelse_transformer.py", line 55, in transform
self.visit(self.root)
File "/usr/lib/python3.6/ast.py", line 253, in visit
return visitor(node)
File "/usr/lib/python3.6/ast.py", line 308, in generic_visit
value = self.visit(value)
File "/usr/lib/python3.6/ast.py", line 253, in visit
return visitor(node)
File "/usr/lib/python3.6/ast.py", line 308, in generic_visit
value = self.visit(value)
File "/usr/lib/python3.6/ast.py", line 253, in visit
return visitor(node)
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/ifelse_transformer.py", line 63, in visit_If
true_func_node, false_func_node)
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/ifelse_transformer.py", line 548, in create_convert_ifelse_node
_, cond_node = create_assign_node(return_name_ids, convert_ifelse_layer)
File "/usr/local/lib/python3.6/dist-packages/paddle/fluid/dygraph/dygraph_to_static/utils.py", line 446, in create_assign_node
assign_node = gast.Assign(targets=[targets], value=node)
File "/usr/local/lib/python3.6/dist-packages/gast/gast.py", line 19, in create_node
format(Name, nbparam, len(Fields))
AssertionError: Bad argument number for Assign: 2, expecting 3
解决方式:
查看gast版本,降低为pip install gast==0.3.3
出现以下语句则成功导出模型,
[07/13 09:56:09] ppdet.utils.checkpoint INFO: Finish loading model weights: weights/ppyolo/ppyolov2_r50vd_dcn_365e_coco.pdparams
[07/13 09:56:09] ppdet.engine INFO: Export inference config file to output_inference/ppyolov2_r50vd_dcn_365e_coco/infer_cfg.yml
W0713 09:56:12.549374 2440 device_context.cc:404] Please NOTE: device: 0, GPU Compute Capability: 7.5, Driver API Version: 11.0, Runtime API Version: 10.2
W0713 09:56:12.549412 2440 device_context.cc:422] device: 0, cuDNN Version: 8.0.
[07/13 09:56:38] ppdet.engine INFO: Export model and saved in output_inference/ppyolov2_r50vd_dcn_365e_coco
对应文件夹下生成如下文件:
(2)使用下面命令执行视频检测:
python deploy/python/infer.py --model_dir=output_inference/ppyolov2_r50vd_dcn_365e_coco --video_file=demo/test.avi --use_gpu=False
不使用GPU 可以成功检测,并输出检测结果,若--use_gpu=True 则报以下错:
--------------------------------------
C++ Traceback (most recent call last):
--------------------------------------
0 paddle::framework::SignalHandle(char const*, int)
1 paddle::platform::GetCurrentTraceBackString[abi:cxx11]()----------------------
Error Message Summary:
----------------------
FatalError: `Segmentation fault` is detected by the operating system.
[TimeInfo: *** Aborted at 1626153133 (unix time) try "date -d @1626153133" if you are using GNU date ***]
[SignalInfo: *** SIGSEGV (@0x0) received by PID 2860 (TID 0x7fd191de9740) from PID 0 ***]Segmentation fault (core dumped)
解决方式:
(1)查看cuda与cudnn版本:与官方提供版本一致,注意cudnn版本。
(2)确认paddlepaddle下载版本是cpu还是gpu版本。注意' 2.1.1.post110'