“从 object_detection 导入 model_lib_v2”时出现分段错误

问题描述

models/research/object_detection/model_main_tf2.py(或仅 tensorflow/models)运行 python -c "from object_detection import model_lib_v2" 时,我得到:

2021-05-24 11:09:02.622828: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0
Segmentation fault (core dumped)

我使用 this 指南来设置对象检测 API,没有任何问题,python object_detection/builders/model_builder_tf2_test.py 也能正常工作。

nvidia-smi 输出

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.73.01    Driver Version: 460.73.01    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce GTX 1050    Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   55C    P0    N/A /  N/A |    248MiB /  4042MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

Python 版本:3.8.5

TensorFlow 版本:2.5.0

操作系统:Ubuntu 20.04.2 LTS (Focal Fossa)

编辑:使用 python3 的故障处理程序添加调试:

2021-05-28 12:48:41.761418: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0
Fatal Python error: Segmentation fault

Current thread 0x00007fd3e6de8740 (most recent call first):
  File "<frozen importlib._bootstrap>",line 219 in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>",line 1101 in create_module
  File "<frozen importlib._bootstrap>",line 556 in module_from_spec
  File "<frozen importlib._bootstrap>",line 657 in _load_unlocked
  File "<frozen importlib._bootstrap>",line 975 in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>",line 991 in _find_and_load
  File "<frozen importlib._bootstrap>",line 219 in _call_with_frames_removed
  File "<frozen importlib._bootstrap>",line 1042 in _handle_fromlist
  File "/home/alessandro/.local/lib/python3.8/site-packages/PIL/ImageFont.py",line 48 in <module>
  File "<frozen importlib._bootstrap>",line 783 in exec_module
  File "<frozen importlib._bootstrap>",line 671 in _load_unlocked
  File "<frozen importlib._bootstrap>",line 991 in _find_and_load
  File "/usr/local/lib/python3.8/dist-packages/object_detection/utils/visualization_utils.py",line 35 in <module>
  File "<frozen importlib._bootstrap>",line 1042 in _handle_fromlist
  File "/usr/local/lib/python3.8/dist-packages/object_detection/eval_util.py",line 42 in <module>
  File "<frozen importlib._bootstrap>",line 1042 in _handle_fromlist
  File "/usr/local/lib/python3.8/dist-packages/object_detection/model_lib_v2.py",line 29 in <module>
  File "<frozen importlib._bootstrap>",line 1042 in _handle_fromlist
  File "<stdin>",line 1 in <module>
Segmentation fault (core dumped)

解决方法

我设法通过将 Pillow 降级到 7.0.0、将 numpy 降级到 1.19.5(这是目前仍与 tensorflow 2.5.0 兼容的最新版本)并将 pycocotools 降级到 2.0.0 来解决。