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

darknet(yolov2) to onnx in barracuda #39

Open
yyyubn opened this issue Aug 25, 2022 · 0 comments
Open

darknet(yolov2) to onnx in barracuda #39

yyyubn opened this issue Aug 25, 2022 · 0 comments

Comments

@yyyubn
Copy link

yyyubn commented Aug 25, 2022

All of this was done by colab.

This is the file we used.
https://drive.google.com/drive/folders/1CyP5i498dxbd5XLoM5qNS6nRNd6eZWHc?usp=sharing

Our ultimate goal is to get onnx for use in Barracuda.

Our weights file and cfg file are these.

With this, we did a darknet to keras/keras to onnx

The version we used is as follows.

keras==2.4.3
tensorflow==2.3.0
To match the onnxopset version to 8,
onnx==1.3.0

When we convert darknet to keras,
!conda create -n yad2k python=3.6.0
!pip install protobuf==3.6.1

You set up your virtual environment using the code above, and made other efforts.

As a result of running darknet to keras,
I was able to get an h5 file like this.
!python yad2k.py off-yolov2-tiny.cfg off-yolov2-tiny.weights yolov2.h5


2022-08-25 15:05:29.819139: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
Loading weights.
Weights Header: [ 0 2 0 26316800]
Parsing Darknet config.
Creating Keras model.
Parsing section net_0
Parsing section convolutional_0
conv2d bn leaky (3, 3, 3, 16)
2022-08-25 15:05:31.036783: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcuda.so.1
2022-08-25 15:05:31.045699: E tensorflow/stream_executor/cuda/cuda_driver.cc:314] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
2022-08-25 15:05:31.045752: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (065e3bdef5e0): /proc/driver/nvidia/version does not exist
2022-08-25 15:05:31.046078: I tensorflow/core/platform/cpu_feature_guard.cc:142] 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-08-25 15:05:31.053293: I tensorflow/core/platform/profile_utils/cpu_utils.cc:104] CPU Frequency: 2199995000 Hz
2022-08-25 15:05:31.053580: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x564118db8840 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2022-08-25 15:05:31.053621: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): Host, Default Version
Parsing section maxpool_0
Parsing section convolutional_1
conv2d bn leaky (3, 3, 16, 32)
Parsing section maxpool_1
Parsing section convolutional_2
conv2d bn leaky (3, 3, 32, 64)
Parsing section maxpool_2
Parsing section convolutional_3
conv2d bn leaky (3, 3, 64, 128)
Parsing section maxpool_3
Parsing section convolutional_4
conv2d bn leaky (3, 3, 128, 256)
Parsing section maxpool_4
Parsing section convolutional_5
conv2d bn leaky (3, 3, 256, 512)
Parsing section maxpool_5
Parsing section convolutional_6
conv2d bn leaky (3, 3, 512, 1024)
Parsing section convolutional_7
conv2d bn leaky (3, 3, 1024, 512)
Parsing section convolutional_8
conv2d linear (1, 1, 512, 425)
Parsing section region_0
Model: "functional_1"

Layer (type) Output Shape Param #

input_1 (InputLayer) [(None, 416, 416, 3)] 0

conv2d (Conv2D) (None, 416, 416, 16) 432

batch_normalization (BatchNo (None, 416, 416, 16) 64

leaky_re_lu (LeakyReLU) (None, 416, 416, 16) 0

max_pooling2d (MaxPooling2D) (None, 208, 208, 16) 0

conv2d_1 (Conv2D) (None, 208, 208, 32) 4608

batch_normalization_1 (Batch (None, 208, 208, 32) 128

leaky_re_lu_1 (LeakyReLU) (None, 208, 208, 32) 0

max_pooling2d_1 (MaxPooling2 (None, 104, 104, 32) 0

conv2d_2 (Conv2D) (None, 104, 104, 64) 18432

batch_normalization_2 (Batch (None, 104, 104, 64) 256

leaky_re_lu_2 (LeakyReLU) (None, 104, 104, 64) 0

max_pooling2d_2 (MaxPooling2 (None, 52, 52, 64) 0

conv2d_3 (Conv2D) (None, 52, 52, 128) 73728

batch_normalization_3 (Batch (None, 52, 52, 128) 512

leaky_re_lu_3 (LeakyReLU) (None, 52, 52, 128) 0

max_pooling2d_3 (MaxPooling2 (None, 26, 26, 128) 0

conv2d_4 (Conv2D) (None, 26, 26, 256) 294912

batch_normalization_4 (Batch (None, 26, 26, 256) 1024

leaky_re_lu_4 (LeakyReLU) (None, 26, 26, 256) 0

max_pooling2d_4 (MaxPooling2 (None, 13, 13, 256) 0

conv2d_5 (Conv2D) (None, 13, 13, 512) 1179648

batch_normalization_5 (Batch (None, 13, 13, 512) 2048

leaky_re_lu_5 (LeakyReLU) (None, 13, 13, 512) 0

max_pooling2d_5 (MaxPooling2 (None, 13, 13, 512) 0

conv2d_6 (Conv2D) (None, 13, 13, 1024) 4718592

batch_normalization_6 (Batch (None, 13, 13, 1024) 4096

leaky_re_lu_6 (LeakyReLU) (None, 13, 13, 1024) 0

conv2d_7 (Conv2D) (None, 13, 13, 512) 4718592

batch_normalization_7 (Batch (None, 13, 13, 512) 2048

leaky_re_lu_7 (LeakyReLU) (None, 13, 13, 512) 0

conv2d_8 (Conv2D) (None, 13, 13, 425) 218025

Total params: 11,237,145
Trainable params: 11,232,057
Non-trainable params: 5,088

None
Saved Keras model to yolov2.h5
Read 11237145 of 11237146.0 from Darknet weights.
Warning: 1.0 unused weights


!pip install keras2onnx

As a result of the installation of this method and the execution of Keras to onnx,
I was able to get an onnx file like this.
from tensorflow.python.keras import backend as K
from tensorflow.python.keras.models import load_model
import onnx
import keras2onnx

onnx_model_name = 'yolov2-tiny_825.onnx'

model = load_model('yolov2-tiny_825.h5')
onnx_model = keras2onnx.convert_keras(model, model.name)
onnx.save_model(onnx_model, onnx_model_name)


WARNING:tensorflow:No training configuration found in the save file, so the model was not compiled. Compile it manually.
tf executing eager_mode: True
tf.keras model eager_mode: False
/usr/local/lib/python3.7/site-packages/keras2onnx/ke2onnx/batch_norm.py:45: RuntimeWarning: invalid value encountered in sqrt
gamma = params[0] / np.sqrt(params[3] + op.epsilon)
/usr/local/lib/python3.7/site-packages/keras2onnx/ke2onnx/batch_norm.py:46: RuntimeWarning: invalid value encountered in sqrt
beta = params[1] - params[0] * params[2] / np.sqrt(params[3] + op.epsilon)
The ONNX operator number change on the optimization: 96 -> 33


After inserting the onnx file into the barracuda in unity,
image
image
image

Put this txt file in
Conversion of the number of classes /
There is an error that is not recognized properly when setting yolov2-tiny in camera image.

I want to know why h5 and onnx files are not recognized when they are obtained normally.
also, Errors do not appear.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant