记录深度学习AI过程中的一些问题。涉及到 tensorflow
、ncnn
、onnx
、keras
的训练以及转换模型
关于 tensorflow
目前 tensorflow
发展到了 2.9.+
的版本,大部分的功能都完善,且使用简单,同时教程文档也非常完善:https://www.tensorflow.org/tutorials?hl=zh-cn
例如进行分类训练:
1 | #! /usr/bin/env python |
该代码会自动找到 image/train 里面的文件夹,并将文件夹作为类别,加载各自类别(文件夹)里面的图像;然后对其进行训练。可以快速得到一个分类模型。
完整教程 : https://www.tensorflow.org/tutorials/images/classification
关于 keras 、 hdf5 模型
前面的分类训练保存的模型为 keras/hdf5
模型,好处是可以单文件存储,但是使用的时候需要依赖keras
/tensorflow
,同时目前 opencv dnn
模块还不支持加载keras/hdf5
模型,所以我们可以选择将其转换为其他格式的模型:
例如 tensorflow
的pb
模型:
https://stackoverflow.com/questions/69633595/load-onnx-model-in-opencv-dnn
1 | #! /usr/bin/env python |
此时我们能够得到tensorflow
的pb
以及pbtxt
模型。
关于opencv加载pb模型失败或分类错误问题
如果 opencv dnn 加载pb模型失败,或者与tensorflow的结果差距较大,可以试着不加载 pbtxt 配置。输入的Mat使用方式:
1 | cv::Mat blob = cv::dnn::blobFromImage(img, 1.0, Size(180, 180), Scalar(0,0,0),true); |
基本可以得到正确的结果。
关于 onnx
如果 opencv dnn
加载 pb
模型一直失败,或者得到错误的分类结果,则可以考虑使用 onnx
模型。
需要安装tf2onnx
1 | pip install -U tf2onnx |
macos 下如果无法安装 onnxruntime
,可以尝试使用测试仓库安装:
1 | pip3 install -i https://test.pypi.org/simple/ onnxruntime |
然后使用转换命令,进行转换:
1 | python -m tf2onnx.convert --input 模型地址.pb --inputs 模型输入 --outputs 模型输出 --output 输出模型名字.onnx |
将可以得到模型onnx
模型。
可以考虑简化一下onnx
:
1 | python3 -m onnxsim model.onnx model-sim.onnx |
关于 ncnn
如果不想使用opencv dnn 模块,或者opencv dnn 在arm下面速度比较慢,可以考虑使用ncnn 推导🐶:
由于ncnn还没有发布版本包,所以需要自行下载源码、编译。
ncnn 仓库地址:http://github.com/Tencent/ncnn
编译好之后在 tools 下面将有所需要的工具:
模型转换
使用以下命令,我们将得到 ncnn 的模型:
1 | ./onnx2ncnn onnx模型.onnx my_mobileface.param my_mobileface.bin |
然后就可以使用 ncnn 进行推导。
参考:https://blog.csdn.net/litt1e/article/details/116000118
opencv dnn c++ 测试 demo
1 | // |