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"
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 Kfrom tensorflow.python.keras.models import load_modelimport onnximport 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,
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.
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,
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.