Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

export to tensorflow fail #9375

Closed
1 of 2 tasks
mbenami opened this issue Sep 12, 2022 · 7 comments · Fixed by #9447
Closed
1 of 2 tasks

export to tensorflow fail #9375

mbenami opened this issue Sep 12, 2022 · 7 comments · Fixed by #9447
Labels
bug Something isn't working

Comments

@mbenami
Copy link
Contributor

mbenami commented Sep 12, 2022

Search before asking

  • I have searched the YOLOv5 issues and found no similar bug report.

YOLOv5 Component

Export

Bug

when I try to export my trained model to TensorFlow + tfjs using docker latest which doesn't have TensorFlow pre-installed
its downloads the latest TensorFlow which is 2.10.0 then the export fail
installing manually TensorFlow==2.9.0 solve that issue and the export is successful
I didn't go through why it failed on 2.10.0 ( think it's related to protobuf version )

Environment

ultralytics/yolov5:latest

Minimal Reproducible Example

No response

Additional

No response

Are you willing to submit a PR?

  • Yes I'd like to help by submitting a PR!
@mbenami mbenami added the bug Something isn't working label Sep 12, 2022
@github-actions
Copy link
Contributor

github-actions bot commented Sep 12, 2022

👋 Hello @mbenami, thank you for your interest in YOLOv5 🚀! Please visit our ⭐️ Tutorials to get started, where you can find quickstart guides for simple tasks like Custom Data Training all the way to advanced concepts like Hyperparameter Evolution.

If this is a 🐛 Bug Report, please provide screenshots and minimum viable code to reproduce your issue, otherwise we can not help you.

If this is a custom training ❓ Question, please provide as much information as possible, including dataset images, training logs, screenshots, and a public link to online W&B logging if available.

For business inquiries or professional support requests please visit https://ultralytics.com or email support@ultralytics.com.

Requirements

Python>=3.7.0 with all requirements.txt installed including PyTorch>=1.7. To get started:

git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5
pip install -r requirements.txt  # install

Environments

YOLOv5 may be run in any of the following up-to-date verified environments (with all dependencies including CUDA/CUDNN, Python and PyTorch preinstalled):

Status

CI CPU testing

If this badge is green, all YOLOv5 GitHub Actions Continuous Integration (CI) tests are currently passing. CI tests verify correct operation of YOLOv5 training (train.py), validation (val.py), inference (detect.py) and export (export.py) on macOS, Windows, and Ubuntu every 24 hours and on every commit.

@mbenami
Copy link
Contributor Author

mbenami commented Sep 12, 2022

Reproducible Example :

sudo docker run --ipc=host -it --gpus all -v "$(pwd)"/datasets:/usr/src/datasets ultralytics/yolov5:latest 
python export.py --weights yolov5s.pt --include onnx pb tfjs
root@c62ef4ac7eb7:/usr/src/app# python export.py --weights yolov5s.pt --include onnx pb tfjs
export: data=data/coco128.yaml, weights=['yolov5s.pt'], imgsz=[640, 640], batch_size=1, device=cpu, half=False, inplace=False, train=False, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=12, verbose=False, workspace=4, nms=False, agnostic_nms=False, topk_per_class=100, topk_all=100, iou_thres=0.45, conf_thres=0.25, include=['onnx', 'pb', 'tfjs']
YOLOv5 🚀 v6.2-109-g23701ea Python-3.8.13 torch-1.12.1+cu113 CPU

Downloading https://github.com/ultralytics/yolov5/releases/download/v6.2/yolov5s.pt to yolov5s.pt...
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14.1M/14.1M [00:00<00:00, 34.0MB/s]

Fusing layers... 
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients

PyTorch: starting from yolov5s.pt with output shape (1, 25200, 85) (14.1 MB)

ONNX: starting export with onnx 1.11.0...
ONNX: export success ✅ 3.1s, saved as yolov5s.onnx (28.0 MB)
TensorFlow SavedModel: export failure ❌ 0.0s: No module named 'tensorflow'
TensorFlow GraphDef: export failure ❌ 0.0s: No module named 'tensorflow'
requirements: YOLOv5 requirement "tensorflowjs" not found, attempting AutoUpdate...
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
cudf 22.6.0a0+319.g97422602b8 requires protobuf<3.21.0a0,>=3.20.1, but you have protobuf 3.19.4 which is incompatible.
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com
Collecting tensorflowjs
  Downloading tensorflowjs-3.20.0-py3-none-any.whl (81 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.1/81.1 kB 11.8 MB/s eta 0:00:00
Collecting importlib_resources>=5.9.0
  Downloading importlib_resources-5.9.0-py3-none-any.whl (33 kB)
Collecting tensorflow-hub<0.13,>=0.7.0
  Downloading tensorflow_hub-0.12.0-py2.py3-none-any.whl (108 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 108.8/108.8 kB 218.3 MB/s eta 0:00:00
Requirement already satisfied: six<2,>=1.12.0 in /opt/conda/lib/python3.8/site-packages (from tensorflowjs) (1.16.0)
Collecting tensorflow<3,>=2.1.0
  Downloading tensorflow-2.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (578.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 578.1/578.1 MB 227.6 MB/s eta 0:00:00
Collecting jax>=0.3.16
  Downloading jax-0.3.17.tar.gz (1.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 257.2 MB/s eta 0:00:00
  Preparing metadata (setup.py): started
  Preparing metadata (setup.py): finished with status 'done'
Collecting flax>=0.5.3
  Downloading flax-0.6.0-py3-none-any.whl (180 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 180.1/180.1 kB 227.9 MB/s eta 0:00:00
Requirement already satisfied: protobuf<3.20,>=3.9.2 in /opt/conda/lib/python3.8/site-packages (from tensorflowjs) (3.19.4)
Collecting packaging~=20.9
  Downloading packaging-20.9-py2.py3-none-any.whl (40 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.9/40.9 kB 196.6 MB/s eta 0:00:00
Requirement already satisfied: numpy>=1.12 in /opt/conda/lib/python3.8/site-packages (from flax>=0.5.3->tensorflowjs) (1.22.4)
Requirement already satisfied: matplotlib in /opt/conda/lib/python3.8/site-packages (from flax>=0.5.3->tensorflowjs) (3.5.2)
Requirement already satisfied: typing-extensions>=4.1.1 in /opt/conda/lib/python3.8/site-packages (from flax>=0.5.3->tensorflowjs) (4.3.0)
Requirement already satisfied: msgpack in /opt/conda/lib/python3.8/site-packages (from flax>=0.5.3->tensorflowjs) (1.0.4)
Requirement already satisfied: PyYAML>=5.4.1 in /opt/conda/lib/python3.8/site-packages (from flax>=0.5.3->tensorflowjs) (6.0)
Collecting rich~=11.1
  Downloading rich-11.2.0-py3-none-any.whl (217 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 217.3/217.3 kB 254.8 MB/s eta 0:00:00
Collecting optax
  Downloading optax-0.1.3-py3-none-any.whl (145 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 145.1/145.1 kB 236.5 MB/s eta 0:00:00
Requirement already satisfied: zipp>=3.1.0 in /opt/conda/lib/python3.8/site-packages (from importlib_resources>=5.9.0->tensorflowjs) (3.8.0)
Requirement already satisfied: absl-py in /opt/conda/lib/python3.8/site-packages (from jax>=0.3.16->tensorflowjs) (1.1.0)
Collecting opt_einsum
  Downloading opt_einsum-3.3.0-py3-none-any.whl (65 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 65.5/65.5 kB 221.4 MB/s eta 0:00:00
Requirement already satisfied: scipy>=1.5 in /opt/conda/lib/python3.8/site-packages (from jax>=0.3.16->tensorflowjs) (1.6.3)
Collecting etils[epath]
  Downloading etils-0.7.1-py3-none-any.whl (124 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 124.9/124.9 kB 243.6 MB/s eta 0:00:00
Requirement already satisfied: pyparsing>=2.0.2 in /opt/conda/lib/python3.8/site-packages (from packaging~=20.9->tensorflowjs) (3.0.9)
Collecting tensorflow-io-gcs-filesystem>=0.23.1
  Downloading tensorflow_io_gcs_filesystem-0.27.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 261.9 MB/s eta 0:00:00
Collecting libclang>=13.0.0
  Downloading libclang-14.0.6-py2.py3-none-manylinux2010_x86_64.whl (14.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.1/14.1 MB 256.9 MB/s eta 0:00:00
Collecting h5py>=2.9.0
  Downloading h5py-3.7.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (4.5 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 258.8 MB/s eta 0:00:00
Collecting gast<=0.4.0,>=0.2.1
  Downloading gast-0.4.0-py3-none-any.whl (9.8 kB)
Collecting wrapt>=1.11.0
  Downloading wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (81 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.0/81.0 kB 226.8 MB/s eta 0:00:00
Collecting flatbuffers>=2.0
  Downloading flatbuffers-2.0.7-py2.py3-none-any.whl (26 kB)
Collecting google-pasta>=0.1.1
  Downloading google_pasta-0.2.0-py3-none-any.whl (57 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.5/57.5 kB 200.2 MB/s eta 0:00:00
Collecting tensorboard<2.11,>=2.10
  Downloading tensorboard-2.10.0-py3-none-any.whl (5.9 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.9/5.9 MB 255.3 MB/s eta 0:00:00
Collecting tensorflow-estimator<2.11,>=2.10.0
  Downloading tensorflow_estimator-2.10.0-py2.py3-none-any.whl (438 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 438.7/438.7 kB 247.8 MB/s eta 0:00:00
Requirement already satisfied: setuptools in /opt/conda/lib/python3.8/site-packages (from tensorflow<3,>=2.1.0->tensorflowjs) (59.5.0)
Requirement already satisfied: grpcio<2.0,>=1.24.3 in /opt/conda/lib/python3.8/site-packages (from tensorflow<3,>=2.1.0->tensorflowjs) (1.47.0)
Collecting keras-preprocessing>=1.1.1
  Downloading Keras_Preprocessing-1.1.2-py2.py3-none-any.whl (42 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 42.6/42.6 kB 179.8 MB/s eta 0:00:00
Collecting astunparse>=1.6.0
  Downloading astunparse-1.6.3-py2.py3-none-any.whl (12 kB)
Collecting keras<2.11,>=2.10.0
  Downloading keras-2.10.0-py2.py3-none-any.whl (1.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 224.5 MB/s eta 0:00:00
Collecting termcolor>=1.1.0
  Downloading termcolor-2.0.1-py3-none-any.whl (5.4 kB)
Requirement already satisfied: wheel<1.0,>=0.23.0 in /opt/conda/lib/python3.8/site-packages (from astunparse>=1.6.0->tensorflow<3,>=2.1.0->tensorflowjs) (0.37.1)
Requirement already satisfied: colorama<0.5.0,>=0.4.0 in /opt/conda/lib/python3.8/site-packages (from rich~=11.1->flax>=0.5.3->tensorflowjs) (0.4.4)
Collecting commonmark<0.10.0,>=0.9.0
  Downloading commonmark-0.9.1-py2.py3-none-any.whl (51 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 51.1/51.1 kB 199.2 MB/s eta 0:00:00
Requirement already satisfied: pygments<3.0.0,>=2.6.0 in /opt/conda/lib/python3.8/site-packages (from rich~=11.1->flax>=0.5.3->tensorflowjs) (2.12.0)
Requirement already satisfied: google-auth<3,>=1.6.3 in /opt/conda/lib/python3.8/site-packages (from tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (2.9.0)
Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /opt/conda/lib/python3.8/site-packages (from tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (0.4.6)
Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /opt/conda/lib/python3.8/site-packages (from tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (1.8.1)
Requirement already satisfied: tensorboard-data-server<0.7.0,>=0.6.0 in /opt/conda/lib/python3.8/site-packages (from tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (0.6.1)
Requirement already satisfied: markdown>=2.6.8 in /opt/conda/lib/python3.8/site-packages (from tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (3.3.7)
Requirement already satisfied: requests<3,>=2.21.0 in /opt/conda/lib/python3.8/site-packages (from tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (2.27.1)
Requirement already satisfied: werkzeug>=1.0.1 in /opt/conda/lib/python3.8/site-packages (from tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (2.1.2)
Requirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.8/site-packages (from matplotlib->flax>=0.5.3->tensorflowjs) (0.11.0)
Requirement already satisfied: python-dateutil>=2.7 in /opt/conda/lib/python3.8/site-packages (from matplotlib->flax>=0.5.3->tensorflowjs) (2.8.2)
Requirement already satisfied: kiwisolver>=1.0.1 in /opt/conda/lib/python3.8/site-packages (from matplotlib->flax>=0.5.3->tensorflowjs) (1.4.3)
Requirement already satisfied: fonttools>=4.22.0 in /opt/conda/lib/python3.8/site-packages (from matplotlib->flax>=0.5.3->tensorflowjs) (4.33.3)
Requirement already satisfied: pillow>=6.2.0 in /opt/conda/lib/python3.8/site-packages (from matplotlib->flax>=0.5.3->tensorflowjs) (9.2.0)
Collecting chex>=0.0.4
  Downloading chex-0.1.4-py3-none-any.whl (76 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 76.7/76.7 kB 175.3 MB/s eta 0:00:00
Collecting jaxlib>=0.1.37
  Downloading jaxlib-0.3.15-cp38-none-manylinux2014_x86_64.whl (72.0 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 72.0/72.0 MB 252.7 MB/s eta 0:00:00
Collecting dm-tree>=0.1.5
  Downloading dm_tree-0.1.7-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (142 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 142.6/142.6 kB 230.4 MB/s eta 0:00:00
Requirement already satisfied: toolz>=0.9.0 in /opt/conda/lib/python3.8/site-packages (from chex>=0.0.4->optax->flax>=0.5.3->tensorflowjs) (0.11.2)
Requirement already satisfied: pyasn1-modules>=0.2.1 in /opt/conda/lib/python3.8/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (0.2.8)
Requirement already satisfied: rsa<5,>=3.1.4 in /opt/conda/lib/python3.8/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (4.7.2)
Requirement already satisfied: cachetools<6.0,>=2.0.0 in /opt/conda/lib/python3.8/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (5.2.0)
Requirement already satisfied: requests-oauthlib>=0.7.0 in /opt/conda/lib/python3.8/site-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (1.3.1)
Requirement already satisfied: importlib-metadata>=4.4 in /opt/conda/lib/python3.8/site-packages (from markdown>=2.6.8->tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (4.12.0)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/conda/lib/python3.8/site-packages (from requests<3,>=2.21.0->tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (1.26.12)
Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.8/site-packages (from requests<3,>=2.21.0->tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (3.3)
Requirement already satisfied: charset-normalizer~=2.0.0 in /opt/conda/lib/python3.8/site-packages (from requests<3,>=2.21.0->tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (2.0.12)
Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.8/site-packages (from requests<3,>=2.21.0->tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (2022.6.15)
Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /opt/conda/lib/python3.8/site-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (0.4.8)
Requirement already satisfied: oauthlib>=3.0.0 in /opt/conda/lib/python3.8/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.11,>=2.10->tensorflow<3,>=2.1.0->tensorflowjs) (3.2.0)
Building wheels for collected packages: jax
  Building wheel for jax (setup.py): started
  Building wheel for jax (setup.py): finished with status 'done'
  Created wheel for jax: filename=jax-0.3.17-py3-none-any.whl size=1217867 sha256=a67d732ea63c80f549a421b979a6bb49ece3669f5c21eb665d8fc45eb0451276
  Stored in directory: /tmp/pip-ephem-wheel-cache-sxtjln4_/wheels/25/1f/8b/583585fb2f37d212e9efa06d52288c58b3a59fb54653092913
Successfully built jax
Installing collected packages: libclang, keras, flatbuffers, dm-tree, commonmark, wrapt, termcolor, tensorflow-io-gcs-filesystem, tensorflow-hub, tensorflow-estimator, rich, packaging, opt_einsum, keras-preprocessing, importlib_resources, h5py, google-pasta, gast, etils, astunparse, jaxlib, tensorboard, jax, tensorflow, chex, optax, flax, tensorflowjs
  Attempting uninstall: packaging
    Found existing installation: packaging 21.3
    Uninstalling packaging-21.3:
      Successfully uninstalled packaging-21.3
  Attempting uninstall: importlib_resources
    Found existing installation: importlib-resources 5.8.0
    Uninstalling importlib-resources-5.8.0:
      Successfully uninstalled importlib-resources-5.8.0
  Attempting uninstall: tensorboard
    Found existing installation: tensorboard 2.9.1
    Uninstalling tensorboard-2.9.1:
      Successfully uninstalled tensorboard-2.9.1
Successfully installed astunparse-1.6.3 chex-0.1.4 commonmark-0.9.1 dm-tree-0.1.7 etils-0.7.1 flatbuffers-2.0.7 flax-0.6.0 gast-0.4.0 google-pasta-0.2.0 h5py-3.7.0 importlib_resources-5.9.0 jax-0.3.17 jaxlib-0.3.15 keras-2.10.0 keras-preprocessing-1.1.2 libclang-14.0.6 opt_einsum-3.3.0 optax-0.1.3 packaging-20.9 rich-11.2.0 tensorboard-2.10.0 tensorflow-2.10.0 tensorflow-estimator-2.10.0 tensorflow-hub-0.12.0 tensorflow-io-gcs-filesystem-0.27.0 tensorflowjs-3.20.0 termcolor-2.0.1 wrapt-1.14.1

requirements: 1 package updated per ['tensorflowjs']
requirements: ⚠️ Restart runtime or rerun command for updates to take effect

2022-09-12 10:46:46.552316: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2022-09-12 10:46:46.735346: E tensorflow/stream_executor/cuda/cuda_blas.cc:2981] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered
2022-09-12 10:46:47.574690: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /opt/conda/lib/python3.8/site-packages/cv2/../../lib64:/usr/local/cuda/compat/lib.real:/opt/conda/lib/python3.8/site-packages/torch/lib:/opt/conda/lib/python3.8/site-packages/torch_tensorrt/lib:/usr/local/cuda/compat/lib:/usr/local/nvidia/lib:/usr/local/nvidia/lib64
2022-09-12 10:46:47.574916: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /opt/conda/lib/python3.8/site-packages/cv2/../../lib64:/usr/local/cuda/compat/lib.real:/opt/conda/lib/python3.8/site-packages/torch/lib:/opt/conda/lib/python3.8/site-packages/torch_tensorrt/lib:/usr/local/cuda/compat/lib:/usr/local/nvidia/lib:/usr/local/nvidia/lib64
2022-09-12 10:46:47.574953: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.

TensorFlow.js: starting export with tensorflowjs 3.20.0...
2022-09-12 10:46:49.109497: E tensorflow/stream_executor/cuda/cuda_blas.cc:2981] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered
2022-09-12 10:46:49.854910: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /opt/conda/lib/python3.8/site-packages/cv2/../../lib64:/usr/local/cuda/compat/lib.real:/opt/conda/lib/python3.8/site-packages/torch/lib:/opt/conda/lib/python3.8/site-packages/torch_tensorrt/lib:/usr/local/cuda/compat/lib:/usr/local/nvidia/lib:/usr/local/nvidia/lib64
2022-09-12 10:46:49.855070: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /opt/conda/lib/python3.8/site-packages/cv2/../../lib64:/usr/local/cuda/compat/lib.real:/opt/conda/lib/python3.8/site-packages/torch/lib:/opt/conda/lib/python3.8/site-packages/torch_tensorrt/lib:/usr/local/cuda/compat/lib:/usr/local/nvidia/lib:/usr/local/nvidia/lib64
2022-09-12 10:46:49.855093: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.
Traceback (most recent call last):
  File "/opt/conda/bin/tensorflowjs_converter", line 8, in <module>
    sys.exit(pip_main())
  File "/opt/conda/lib/python3.8/site-packages/tensorflowjs/converters/converter.py", line 827, in pip_main
    main([' '.join(sys.argv[1:])])
  File "/opt/conda/lib/python3.8/site-packages/tensorflowjs/converters/converter.py", line 831, in main
    convert(argv[0].split(' '))
  File "/opt/conda/lib/python3.8/site-packages/tensorflowjs/converters/converter.py", line 817, in convert
    _dispatch_converter(input_format, output_format, args, quantization_dtype_map,
  File "/opt/conda/lib/python3.8/site-packages/tensorflowjs/converters/converter.py", line 581, in _dispatch_converter
    tf_saved_model_conversion_v2.convert_tf_frozen_model(
  File "/opt/conda/lib/python3.8/site-packages/tensorflowjs/converters/tf_saved_model_conversion_v2.py", line 522, in convert_tf_frozen_model
    graph = load_graph(frozen_model_path)
  File "/opt/conda/lib/python3.8/site-packages/tensorflowjs/converters/tf_saved_model_conversion_v2.py", line 68, in load_graph
    graph_def.ParseFromString(f.read())
  File "/opt/conda/lib/python3.8/site-packages/tensorflow/python/lib/io/file_io.py", line 114, in read
    self._preread_check()
  File "/opt/conda/lib/python3.8/site-packages/tensorflow/python/lib/io/file_io.py", line 76, in _preread_check
    self._read_buf = _pywrap_file_io.BufferedInputStream(
tensorflow.python.framework.errors_impl.NotFoundError: yolov5s.pb; No such file or directory
TensorFlow.js: export failure ❌ 61.5s: [Errno 2] No such file or directory: 'yolov5s_web_model/model.json'```

@glenn-jocher
Copy link
Member

@mbenami you can perform this export in ultralytics/yolov5:latest-cpu that comes with tensorflow-cpu 2.10 pre-installed. It works for me in my test just now.

t=ultralytics/yolov5:latest-cpu && sudo docker pull $t && sudo docker run -it --ipc=host -v "$(pwd)"/datasets:/usr/src/datasets $t

latest-cpu: Pulling from ultralytics/yolov5
675920708c8b: Pull complete 
3678349f9c95: Pull complete 
d6d60212ae4c: Pull complete 
1f4966e68b69: Pull complete 
475887459ef6: Pull complete 
9a6a5ff3133c: Pull complete 
fccf7a6323f3: Pull complete 
bff024d91f70: Pull complete 
d1ba21471d40: Pull complete 
4f4fb700ef54: Pull complete 
fa9675afb4d7: Pull complete 
Digest: sha256:f191ac951b84d0c962629cd221ab559c428f1e5d75a93fcc5ad124195766986f
Status: Downloaded newer image for ultralytics/yolov5:latest-cpu
docker.io/ultralytics/yolov5:latest-cpu
root@43e451500fc5:/usr/src/app# 
root@43e451500fc5:/usr/src/app# 
root@43e451500fc5:/usr/src/app# python export.py --weights yolov5s.pt --include onnx pb tfjs
bash: python: command not found
root@43e451500fc5:/usr/src/app# python3 export.py --weights yolov5s.pt --include onnx pb tfjs
export: data=data/coco128.yaml, weights=['yolov5s.pt'], imgsz=[640, 640], batch_size=1, device=cpu, half=False, inplace=False, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=12, verbose=False, workspace=4, nms=False, agnostic_nms=False, topk_per_class=100, topk_all=100, iou_thres=0.45, conf_thres=0.25, include=['onnx', 'pb', 'tfjs']
YOLOv5 🚀 v6.2-121-gfe10b4a Python-3.8.10 torch-1.12.1+cpu CPU

Downloading https://github.com/ultralytics/yolov5/releases/download/v6.2/yolov5s.pt to yolov5s.pt...
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14.1M/14.1M [00:01<00:00, 8.78MB/s]

Fusing layers... 
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients

PyTorch: starting from yolov5s.pt with output shape (1, 25200, 85) (14.1 MB)

ONNX: starting export with onnx 1.12.0...
ONNX: export success ✅ 2.1s, saved as yolov5s.onnx (28.0 MB)
2022-09-16 18:08:43.593188: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2022-09-16 18:08:43.691719: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/lib/python3.8/dist-packages/cv2/../../lib64:
2022-09-16 18:08:43.691779: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2022-09-16 18:08:43.707571: E tensorflow/stream_executor/cuda/cuda_blas.cc:2981] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered
2022-09-16 18:08:44.476831: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/lib/python3.8/dist-packages/cv2/../../lib64:
2022-09-16 18:08:44.476950: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/lib/python3.8/dist-packages/cv2/../../lib64:
2022-09-16 18:08:44.476965: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.

TensorFlow SavedModel: starting export with tensorflow 2.10.0...

                 from  n    params  module                                  arguments                     
2022-09-16 18:08:45.457228: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/lib/python3.8/dist-packages/cv2/../../lib64:
2022-09-16 18:08:45.457272: W tensorflow/stream_executor/cuda/cuda_driver.cc:263] failed call to cuInit: UNKNOWN ERROR (303)
2022-09-16 18:08:45.457310: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:163] no NVIDIA GPU device is present: /dev/nvidia0 does not exist
2022-09-16 18:08:45.457631: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
  0                -1  1      3520  models.common.Conv                      [3, 32, 6, 2, 2]              
  1                -1  1     18560  models.common.Conv                      [32, 64, 3, 2]                
  2                -1  1     18816  models.common.C3                        [64, 64, 1]                   
  3                -1  1     73984  models.common.Conv                      [64, 128, 3, 2]               
  4                -1  1    115712  models.common.C3                        [128, 128, 2]                 
  5                -1  1    295424  models.common.Conv                      [128, 256, 3, 2]              
  6                -1  1    625152  models.common.C3                        [256, 256, 3]                 
  7                -1  1   1180672  models.common.Conv                      [256, 512, 3, 2]              
  8                -1  1   1182720  models.common.C3                        [512, 512, 1]                 
  9                -1  1    656896  models.common.SPPF                      [512, 512, 5]                 
 10                -1  1    131584  models.common.Conv                      [512, 256, 1, 1]              
 11                -1  1         0  torch.nn.modules.upsampling.Upsample    [None, 2, 'nearest']          
 12           [-1, 6]  1         0  models.common.Concat                    [1]                           
 13                -1  1    361984  models.common.C3                        [512, 256, 1, False]          
 14                -1  1     33024  models.common.Conv                      [256, 128, 1, 1]              
 15                -1  1         0  torch.nn.modules.upsampling.Upsample    [None, 2, 'nearest']          
 16           [-1, 4]  1         0  models.common.Concat                    [1]                           
 17                -1  1     90880  models.common.C3                        [256, 128, 1, False]          
 18                -1  1    147712  models.common.Conv                      [128, 128, 3, 2]              
 19          [-1, 14]  1         0  models.common.Concat                    [1]                           
 20                -1  1    296448  models.common.C3                        [256, 256, 1, False]          
 21                -1  1    590336  models.common.Conv                      [256, 256, 3, 2]              
 22          [-1, 10]  1         0  models.common.Concat                    [1]                           
 23                -1  1   1182720  models.common.C3                        [512, 512, 1, False]          
 24      [17, 20, 23]  1    229245  models.yolo.Detect                      [80, [[10, 13, 16, 30, 33, 23], [30, 61, 62, 45, 59, 119], [116, 90, 156, 198, 373, 326]], [128, 256, 512], [640, 640]]
Model: "model"
__________________________________________________________________________________________________
 Layer (type)                   Output Shape         Param #     Connected to                     
==================================================================================================
 input_1 (InputLayer)           [(1, 640, 640, 3)]   0           []                               
                                                                                                  
 tf_conv (TFConv)               (1, 320, 320, 32)    3488        ['input_1[0][0]']                
                                                                                                  
 tf_conv_1 (TFConv)             (1, 160, 160, 64)    18496       ['tf_conv[0][0]']                
                                                                                                  
 tfc3 (TFC3)                    (1, 160, 160, 64)    18624       ['tf_conv_1[0][0]']              
                                                                                                  
 tf_conv_7 (TFConv)             (1, 80, 80, 128)     73856       ['tfc3[0][0]']                   
                                                                                                  
 tfc3_1 (TFC3)                  (1, 80, 80, 128)     115200      ['tf_conv_7[0][0]']              
                                                                                                  
 tf_conv_15 (TFConv)            (1, 40, 40, 256)     295168      ['tfc3_1[0][0]']                 
                                                                                                  
 tfc3_2 (TFC3)                  (1, 40, 40, 256)     623872      ['tf_conv_15[0][0]']             
                                                                                                  
 tf_conv_25 (TFConv)            (1, 20, 20, 512)     1180160     ['tfc3_2[0][0]']                 
                                                                                                  
 tfc3_3 (TFC3)                  (1, 20, 20, 512)     1181184     ['tf_conv_25[0][0]']             
                                                                                                  
 tfsppf (TFSPPF)                (1, 20, 20, 512)     656128      ['tfc3_3[0][0]']                 
                                                                                                  
 tf_conv_33 (TFConv)            (1, 20, 20, 256)     131328      ['tfsppf[0][0]']                 
                                                                                                  
 tf_upsample (TFUpsample)       (1, 40, 40, 256)     0           ['tf_conv_33[0][0]']             
                                                                                                  
 tf_concat (TFConcat)           (1, 40, 40, 512)     0           ['tf_upsample[0][0]',            
                                                                  'tfc3_2[0][0]']                 
                                                                                                  
 tfc3_4 (TFC3)                  (1, 40, 40, 256)     361216      ['tf_concat[0][0]']              
                                                                                                  
 tf_conv_39 (TFConv)            (1, 40, 40, 128)     32896       ['tfc3_4[0][0]']                 
                                                                                                  
 tf_upsample_1 (TFUpsample)     (1, 80, 80, 128)     0           ['tf_conv_39[0][0]']             
                                                                                                  
 tf_concat_1 (TFConcat)         (1, 80, 80, 256)     0           ['tf_upsample_1[0][0]',          
                                                                  'tfc3_1[0][0]']                 
                                                                                                  
 tfc3_5 (TFC3)                  (1, 80, 80, 128)     90496       ['tf_concat_1[0][0]']            
                                                                                                  
 tf_conv_45 (TFConv)            (1, 40, 40, 128)     147584      ['tfc3_5[0][0]']                 
                                                                                                  
 tf_concat_2 (TFConcat)         (1, 40, 40, 256)     0           ['tf_conv_45[0][0]',             
                                                                  'tf_conv_39[0][0]']             
                                                                                                  
 tfc3_6 (TFC3)                  (1, 40, 40, 256)     295680      ['tf_concat_2[0][0]']            
                                                                                                  
 tf_conv_51 (TFConv)            (1, 20, 20, 256)     590080      ['tfc3_6[0][0]']                 
                                                                                                  
 tf_concat_3 (TFConcat)         (1, 20, 20, 512)     0           ['tf_conv_51[0][0]',             
                                                                  'tf_conv_33[0][0]']             
                                                                                                  
 tfc3_7 (TFC3)                  (1, 20, 20, 512)     1181184     ['tf_concat_3[0][0]']            
                                                                                                  
 tf_detect (TFDetect)           ((1, 25200, 85),     229245      ['tfc3_5[0][0]',                 
                                 [(1, 6400, 3, 85),               'tfc3_6[0][0]',                 
                                 (1, 1600, 3, 85),                'tfc3_7[0][0]']                 
                                 (1, 400, 3, 85)])                                                
                                                                                                  
 tf.__operators__.getitem (Slic  (1, 25200, 4)       0           ['tf_detect[0][0]']              
 ingOpLambda)                                                                                     
                                                                                                  
 tf.split (TFOpLambda)          [(1, 25200, 1),      0           ['tf.__operators__.getitem[0][0]'
                                 (1, 25200, 1),                  ]                                
                                 (1, 25200, 1),                                                   
                                 (1, 25200, 1)]                                                   
                                                                                                  
 tf.math.truediv (TFOpLambda)   (1, 25200, 1)        0           ['tf.split[0][2]']               
                                                                                                  
 tf.math.truediv_1 (TFOpLambda)  (1, 25200, 1)       0           ['tf.split[0][3]']               
                                                                                                  
 tf.math.truediv_2 (TFOpLambda)  (1, 25200, 1)       0           ['tf.split[0][2]']               
                                                                                                  
 tf.math.truediv_3 (TFOpLambda)  (1, 25200, 1)       0           ['tf.split[0][3]']               
                                                                                                  
 tf.math.subtract (TFOpLambda)  (1, 25200, 1)        0           ['tf.split[0][0]',               
                                                                  'tf.math.truediv[0][0]']        
                                                                                                  
 tf.math.subtract_1 (TFOpLambda  (1, 25200, 1)       0           ['tf.split[0][1]',               
 )                                                                'tf.math.truediv_1[0][0]']      
                                                                                                  
 tf.__operators__.add (TFOpLamb  (1, 25200, 1)       0           ['tf.split[0][0]',               
 da)                                                              'tf.math.truediv_2[0][0]']      
                                                                                                  
 tf.__operators__.add_1 (TFOpLa  (1, 25200, 1)       0           ['tf.split[0][1]',               
 mbda)                                                            'tf.math.truediv_3[0][0]']      
                                                                                                  
 tf.__operators__.getitem_2 (Sl  (1, 25200, 80)      0           ['tf_detect[0][0]']              
 icingOpLambda)                                                                                   
                                                                                                  
 tf.__operators__.getitem_1 (Sl  (1, 25200, 1)       0           ['tf_detect[0][0]']              
 icingOpLambda)                                                                                   
                                                                                                  
 tf.concat (TFOpLambda)         (1, 25200, 4)        0           ['tf.math.subtract[0][0]',       
                                                                  'tf.math.subtract_1[0][0]',     
                                                                  'tf.__operators__.add[0][0]',   
                                                                  'tf.__operators__.add_1[0][0]'] 
                                                                                                  
 tf.math.multiply (TFOpLambda)  (1, 25200, 80)       0           ['tf.__operators__.getitem_1[0][0
                                                                 ]',                              
                                                                  'tf.__operators__.getitem_2[0][0
                                                                 ]']                              
                                                                                                  
 agnostic_nms_1 (AgnosticNMS)   ((1, None, 4),       0           ['tf.concat[0][0]',              
                                 (1, None),                       'tf.__operators__.getitem_2[0][0
                                 (1, None),                      ]',                              
                                 (1,))                            'tf.math.multiply[0][0]']       
                                                                                                  
==================================================================================================
Total params: 7,225,885
Trainable params: 0
Non-trainable params: 7,225,885
__________________________________________________________________________________________________
2022-09-16 18:08:48.440634: I tensorflow/core/grappler/devices.cc:66] Number of eligible GPUs (core count >= 8, compute capability >= 0.0): 0
2022-09-16 18:08:48.440991: I tensorflow/core/grappler/clusters/single_machine.cc:358] Starting new session
Assets written to: yolov5s_saved_model/assets
TensorFlow SavedModel: export success ✅ 7.0s, saved as yolov5s_saved_model (27.9 MB)

TensorFlow GraphDef: starting export with tensorflow 2.10.0...
2022-09-16 18:08:51.082029: I tensorflow/core/grappler/devices.cc:66] Number of eligible GPUs (core count >= 8, compute capability >= 0.0): 0
2022-09-16 18:08:51.082177: I tensorflow/core/grappler/clusters/single_machine.cc:358] Starting new session
TensorFlow GraphDef: export success ✅ 1.3s, saved as yolov5s.pb (27.8 MB)

TensorFlow.js: starting export with tensorflowjs 3.20.0...
2022-09-16 18:08:52.481563: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/lib/python3.8/dist-packages/cv2/../../lib64:
2022-09-16 18:08:52.500863: E tensorflow/stream_executor/cuda/cuda_blas.cc:2981] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered
2022-09-16 18:08:52.992355: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/lib/python3.8/dist-packages/cv2/../../lib64:
2022-09-16 18:08:52.992428: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/lib/python3.8/dist-packages/cv2/../../lib64:
2022-09-16 18:08:52.992439: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.
Writing weight file yolov5s_web_model/model.json...
TensorFlow.js: export success ✅ 3.7s, saved as yolov5s_web_model (27.8 MB)

Export complete (17.0s)
Results saved to /usr/src/app
Detect:          python detect.py --weights yolov5s_web_model 
Validate:        python val.py --weights yolov5s_web_model 
PyTorch Hub:     model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s_web_model')
Visualize:       https://netron.app

@glenn-jocher
Copy link
Member

glenn-jocher commented Sep 16, 2022

@mbenami TF.js export also works in GPU image. This was the code I used that works correctly:

t=ultralytics/yolov5:latest && sudo docker pull $t && sudo docker run -it --ipc=host --gpus all $t
pip install tensorflow
python export.py --weights yolov5s.pt --include onnx pb tfjs

@glenn-jocher
Copy link
Member

@mbenami good news 😃! Your original issue may now be fixed ✅ in PR #9447. To receive this update:

  • Gitgit pull from within your yolov5/ directory or git clone https://github.com/ultralytics/yolov5 again
  • PyTorch Hub – Force-reload model = torch.hub.load('ultralytics/yolov5', 'yolov5s', force_reload=True)
  • Notebooks – View updated notebooks Open In Colab Open In Kaggle
  • Dockersudo docker pull ultralytics/yolov5:latest to update your image Docker Pulls

Thank you for spotting this issue and informing us of the problem. Please let us know if this update resolves the issue for you, and feel free to inform us of any other issues you discover or feature requests that come to mind. Happy trainings with YOLOv5 🚀!

@mbenami
Copy link
Contributor Author

mbenami commented Sep 17, 2022

@glenn-jocher Thanks for the quick fix!

@glenn-jocher
Copy link
Member

@mbenami you're welcome! 😊 I'm glad to hear that the fix worked for you. If you have any more questions or encounter any further issues, feel free to ask. We're always here to help. Happy coding!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants