Command: "exportONNXNetwork" doesn't seem to work properly.

5 ビュー (過去 30 日間)
Christian Reeves
Christian Reeves 2022 年 11 月 22 日
回答済み: Sivylla Paraskevopoulou 2022 年 12 月 2 日
I am working on a machine learning project using a Faster RCNN network (specifically ResNet-50). I used the image annotation tool to annotate the photos to be used with the model, and the training of the model seems to have gone rather well. I need to export the trained model to a format compatiable with TensorFlow, but the two commands I have been using: "exportNetworkToTensorFlow" and "exportONNXNetwork" do not seem to be working propely. Any help would be appreciated!
The "exportNetworkToTensorFlow" command yields this (the app is installed):
>> net = BridRCNN.Network;
>> exportNetworkToTensorFlow(net, "myModel")
Unrecognized function or variable 'exportNetworkToTensorFlow'.
The "exportONNXNetwork" command yields this:
>> net = BridRCNN.Network;
>> exportONNXNetwork(net,"testModel.onnx")
Warning: ONNX does not support layer 'nnet.cnn.layer.RegionProposalLayer'. Exporting to ONNX operator 'com.MathWorks.Placeholder'.
> In nnet.internal.cnn.onnx/NNTLayerConverter/makeLayerConverter (line 276)
In nnet.internal.cnn.onnx/ConverterForNetwork/networkToGraphProto (line 112)
In nnet.internal.cnn.onnx/ConverterForNetwork/toOnnx (line 45)
In nnet.internal.cnn.onnx.exportONNXNetwork (line 17)
In exportONNXNetwork (line 38)
Error using warning
Error filling holes for nnet_cnn_onnx:onnx:ROIMaxPooling2DLayerScalesUnequal. Floating point numbers are not allowed as holes. They should be converted to character vectors.
Error in nnet.internal.cnn.onnx.ConverterForROIMaxPooling2DLayer/toOnnx (line 23)
warning(message('nnet_cnn_onnx:onnx:ROIMaxPooling2DLayerScalesUnequal', ...
Error in nnet.internal.cnn.onnx.ConverterForNetwork/networkToGraphProto (line 115)
= toOnnx(layerConverter, nodeProtos, TensorNameMap, TensorLayoutMap);
Error in nnet.internal.cnn.onnx.ConverterForNetwork/toOnnx (line 45)
modelProto.graph = networkToGraphProto(this);
Error in nnet.internal.cnn.onnx.exportONNXNetwork (line 17)
modelProto = toOnnx(converter);
Error in exportONNXNetwork (line 38)
nnet.internal.cnn.onnx.exportONNXNetwork(Network, filename, varargin{:});
It seems to me like there is a value that is stored as a floating point number instead of a character. I am not sure how to fix it, however.
This is the code I used to train the model:
%% Gather Relavent Image Labeller Data
data = load('MRO135Labels.mat');
%% Transform Truth Table into Usable Table
[imds,blds] = objectDetectorTrainingData(data.gTruth);
%% Combine Datastores
ds = combine(imds,blds);
%% Set up the Network Layers
inputImageSize = [400 600 3];
numClasses = 11;
network = 'resnet50';
featureLayer = 'activation_40_relu';
%% Anchor Boxes
numAnchors = 5;
anchorBoxes = estimateAnchorBoxes(blds,numAnchors);
%% Finally Constructing the Model
%lgraph = layerGraph(inputImageSize, numClasses, anchorBoxes, network, featureLayer);
lgraph = fasterRCNNLayers(inputImageSize, numClasses, anchorBoxes, network, featureLayer);
%% Configure Traininig Options
options = trainingOptions('sgdm', ...
'MiniBatchSize', 1, ...
'InitialLearnRate', 1e-3, ...
'MaxEpochs', 7, ...
'VerboseFrequency', 15, ...
'CheckpointPath', tempdir);
%% Train Detector
detector = trainFasterRCNNObjectDetector(ds, lgraph, options, ...
'NegativeOverlapRange',[0 0.3], ...
'PositiveOverlapRange',[0.6 1]);
%% Test Detector
img = imread('MRO135.jpg');
[bbox, score, label] = detect(detector, img);
%% Display Detection Results
detectedImg = insertShape(img,'Rectangle',bbox);
figure
imshow(detectedImg)
%% Save Model
BridRCNN = detector;
save BridRCNN

回答 (1 件)

Sivylla Paraskevopoulou
Sivylla Paraskevopoulou 2022 年 12 月 2 日
Which MATLAB version are you using? The exportNetworkToTensorFlow function was introduced in R2022b.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by