如何找到 onnx 模型的输入大小?我最终想从 python 编写脚本。
使用 tensorflow 我可以恢复图定义,从中找到输入候选节点,然后获取它们的大小。我可以用 ONNX(甚至更简单)做类似的事情吗?
谢谢
我正在尝试将 LSTM 异常检测 Pytorch 模型导出到 ONNX,但遇到错误。请看下面我的代码。
注意:我的数据形状为 [2685, 5, 6]。这是我定义模型的地方:
class Model(torch.nn.Module):
def __init__(self, input_dim, hidden_dim, layer_dim):
super(Model, self).__init__()
self.hidden_dim = hidden_dim
self.layer_dim = layer_dim
self.lstm = nn.LSTM(input_dim, hidden_dim, layer_dim, batch_first=True)
self.fc1 = torch.nn.Linear(hidden_dim, hidden_dim)
self.fc2 = torch.nn.Linear(hidden_dim, input_dim)
def forward(self, x):
h0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_()
c0 = torch.zeros(self.layer_dim, x.size(0), self.hidden_dim).requires_grad_()
out, (hn, cn) = self.lstm(x, (h0.detach(), c0.detach()))
out = self.fc1(out)
out = self.fc2(out)
return out
input_dim = 6
hidden_dim = 3
layer_dim = 2
model = Model(input_dim, hidden_dim, …
Run Code Online (Sandbox Code Playgroud) 似乎有几种方法可以在 iOS 上运行 Pytorch 模型。
上述方法有什么区别?为什么人们使用 caffe2 或需要模型格式转换的 Core-ml (.mlmodel),而不是 LibTorch?
我正在尝试从 onnx 模型中提取输入层、输出层及其形状等数据。我知道有 python 接口可以做到这一点。我想做一些与此代码类似的事情,但是用 C++ 编写。我还粘贴了链接中的代码。我已经在 python 中尝试过了,它对我有用。我想知道是否有 C++ API 可以做同样的事情。
import onnx
model = onnx.load(r"model.onnx")
# The model is represented as a protobuf structure and it can be accessed
# using the standard python-for-protobuf methods
# iterate through inputs of the graph
for input in model.graph.input:
print (input.name, end=": ")
# get type of input tensor
tensor_type = input.type.tensor_type
# check if it has a shape:
if (tensor_type.HasField("shape")):
# iterate through dimensions of the shape:
for …
Run Code Online (Sandbox Code Playgroud) 我刚刚创建了一个 yolov5 模型,并将其导出为 onnx 格式,因此它可以与 opencv 一起使用,但我不断收到错误:
[错误:0] 全局 D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\dnn.cpp (3554) cv::dnn::dnn4_v20211004::Net::Impl::getLayerShapesRecursively OPENCV /DNN: [Reshape]:(466): getMemoryShapes() 抛出异常。输入=1 输出=1/1 blob=0 [错误:0] 全局 D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\dnn.cpp (3557) cv::dnn:: dnn4_v20211004::Net::Impl::getLayerShapes递归输入[0] = [ 1 24 52 52 ] [ERROR:0] 全局 D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\dnn. cpp (3561) cv::dnn::dnn4_v20211004::Net::Impl::getLayerShapes递归输出[0] = [ ] [错误:0] 全局 D:\a\opencv-python\opencv-python\opencv\modules\ dnn\src\dnn.cpp (3567) cv::dnn::dnn4_v20211004::Net::Impl::getLayerShapesRecursively 异常消息:OpenCV(4.5.4) D:\a\opencv-python\opencv-python\opencv\模块\dnn\src\layers\reshape_layer.cpp:106:错误:(-215:断言失败)total(srcShape,srcRange.start,srcRange.end)== maskTotal在函数'cv::dnn::computeShapeByReshapeMask'中
这是代码:
onnx_model = onnx.load('best.onnx')
onnx.checker.check_model(onnx_model)
net = cv.dnn.readNetFromONNX('best.onnx')
classes = []
with open("coco-dataset.labels", "r") as f:
classes = [line.strip() for line in f.readlines()]
layerNames = net.getLayerNames()
outputLayers=[]
for i in …
Run Code Online (Sandbox Code Playgroud) 我一直在我的最终学位项目中使用 python 模块nudnet 。我正在使用 google colab 来运行它。
在过去的几个月里它工作正常,没有任何问题,直到昨天,当我尝试导入它时,发生了这个错误:
!pip install --upgrade nudenet
from nudenet import NudeClassifier
ImportError: cannot import name '_registerMatType' from 'cv2.cv2' (/usr/local/lib/python3.7/dist-packages/cv2/cv2.cpython-37m-x86_64-linux-gnu.so)
Run Code Online (Sandbox Code Playgroud)
我尝试通过将opencv-python-headless降级到以前的版本来解决此错误
!pip uninstall opencv-python-headless==4.5.5.62
!pip install opencv-python-headless==4.5.1.48
Run Code Online (Sandbox Code Playgroud)
但是,当我加载分类器时,会出现此错误:
classifier = NudeClassifier()
Downloading the checkpoint to /root/.NudeNet/classifier_model.onnx
MB| |# | 0 Elapsed Time: 0:00:00
Content-length not found, file size cannot be estimated.
Succefully Downloaded to: /root/.NudeNet/classifier_model.onnx
InvalidProtobuf: [ONNXRuntimeError] : 7 : INVALID_PROTOBUF : Load model from /root/.NudeNet/classifier_model.onnx failed:Protobuf parsing failed.
Run Code Online (Sandbox Code Playgroud)
我也尝试过降级nudenet模块的版本,但仍然不起作用。
先感谢您。
我正在尝试将onnx
模型转换为tflite
,我面临执行行错误tf_rep.export_graph(tf_model_path)
。这个问题之前在 SO 中被问过,但没有提供明确的解决方案。
安装要求:tensorflow: 2.12.0
, onnx 1.14.0
, onnx-tf 1.10.0
,Python 3.10.12
import torch
import onnx
import tensorflow as tf
import onnx_tf
from torchvision.models import resnet50
# Load the PyTorch ResNet50 model
pytorch_model = resnet50(pretrained=True)
pytorch_model.eval()
# Export the PyTorch model to ONNX format
input_shape = (1, 3, 224, 224)
dummy_input = torch.randn(input_shape)
onnx_model_path = 'resnet50.onnx'
torch.onnx.export(pytorch_model, dummy_input, onnx_model_path, opset_version=12, verbose=False)
# Load the ONNX model
onnx_model = onnx.load(onnx_model_path)
# Convert …
Run Code Online (Sandbox Code Playgroud) 我已经通过此 URL https://github.com/onnx/onnx安装了 ONNx ,现在尝试在此处运行一些模型https://github.com/onnx/models#face_detection,问题是导入时:
import numpy as np
import onnx
Run Code Online (Sandbox Code Playgroud)
它有效,但是当我尝试导入时
import onnx_backend as backend
Run Code Online (Sandbox Code Playgroud)
它给了我以下错误
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import onnx_backend as backend
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'onnx_backend'
Run Code Online (Sandbox Code Playgroud)
否则我可以加载模型而不会出现任何错误;如何纠正导入错误?
下面是源代码,我用它来加载.pth
文件并进行多类图像分类预测。
model = Classifier() # The Model Class.
model.load_state_dict(torch.load('<PTH-FILE-HERE>.pth'))
model = model.to(device)
model.eval()
Run Code Online (Sandbox Code Playgroud)
# prediction function to test images
def predict(img_path):
image = Image.open(img_path)
resize = transforms.Compose(
[ transforms.Resize((256,256)), transforms.ToTensor()])
image = resize(image)
image = image.to(device)
y_result = model(image.unsqueeze(0))
result_idx = y_result.argmax(dim=1)
print(result_idx)
Run Code Online (Sandbox Code Playgroud)
我.pth
使用 将该文件转换为 ONNX 文件torch.onnx.export
。
现在,如何单独使用 ONNX 文件而不使用该.pth
文件来编写与上述类似的预测脚本?可以这样做吗?
我无法生成背景被删除的图像
from rembg import remove
from PIL import Image
input_path = "crop.jpeg"
output_path = 'crop1.png'
input = Image.open(input_path)
output = remove(input)
output.save(output_path)
Run Code Online (Sandbox Code Playgroud)
我的错误为: RuntimeError: D:\a_work\1\s\onnxruntime\core\session\provider_bridge_ort.cc:1069 onnxruntime::ProviderLibrary::Get [ONNXRuntimeError] : 1 : FAIL : LoadLibrary 失败,错误 126 ""当尝试加载“C:\users\lib\site-packages\onnxruntime\capi\onnxruntime_providers_tensorrt.dll”时