0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在TensorFlow2里使用Keras API創(chuàng)建一個(gè)自定義CNN網(wǎng)絡(luò)?

電子工程師 ? 來源:XILINX技術(shù)社區(qū) ? 作者:張超 ? 2021-04-15 11:36 ? 次閱讀

概述

本示例工程中我們會(huì)在 TensorFlow2 下使用 Keras API 創(chuàng)建一個(gè)自定義 CNN 網(wǎng)絡(luò),在 Vitis-AI 1.3 環(huán)境下編譯成 Xilinx DPU 上運(yùn)行的模型文件,并在 Xilinx zynqMP 上部署運(yùn)行。

該示例工程應(yīng)在 Vitis-AI1.3 Docker,vitis-ai-tensorflow2conda 環(huán)境中運(yùn)行。

有關(guān)Mnist手寫數(shù)字?jǐn)?shù)據(jù)集,請(qǐng)參見http://yann.lecun.com/exdb/mnist/。

在該例程中我們會(huì)演示以下的步驟:

使用 TensorFlow2 訓(xùn)練和評(píng)估小型自定義卷積神經(jīng)網(wǎng)絡(luò)

對(duì)浮點(diǎn)模型進(jìn)行量化 (quantization)

對(duì)量化模型進(jìn)行評(píng)估

使用校準(zhǔn)數(shù)據(jù)集對(duì)訓(xùn)練后的模型進(jìn)行微調(diào) (finetuning)

編譯量化和微調(diào)的模型,以創(chuàng)建 .xmodel 文件,準(zhǔn)備在 DPU 加速器 IP 上執(zhí)行在 zynqMP 評(píng)估板上下載并運(yùn)行該模型

代碼說明

可從下面的 github 頁面獲得源碼。

https://github.com/lobster1989/Mnist-classification-Vitis-AI-1.3-TensorFlow2

Python 及 Shell 腳本源碼說明如下:

load_data.py:下載 Mnist 數(shù)據(jù)集;

generate_images.py:從 Keras 在線數(shù)據(jù)集生成本地圖像文件;

train.py:創(chuàng)建和訓(xùn)練用于 Mnist 分類的簡(jiǎn)單 CNN 模型, 經(jīng)過訓(xùn)練的浮點(diǎn)模型將被保存到本地;

quantize.py:使用 VitisQuantizer 量化前一個(gè)步驟保存的浮點(diǎn)模型,量化后的模型將被保存到本地;

eval_quantized.py:評(píng)估量化模型的 accuracy;

finetune.py:利用 Vitis-AI 進(jìn)行模型微調(diào)(僅作演示,后續(xù)編譯部署的為 quantize 步驟保存的模型);

compile_zcu102.sh/compile_zcu104.sh:?jiǎn)?dòng) vai_c_tensorflow2 命令以將量化或微調(diào)的模型編譯為供 DPU 運(yùn)行的 .xmodel 文件。兩個(gè)文件分別對(duì)應(yīng)目標(biāo)為 zcu102 和 zcu104 開發(fā)板;

make_target_zcu102.sh/make_target_zcu104.sh:將.xmodel和圖像復(fù)制到 。/target_zcu10x 文件夾中,準(zhǔn)備好將其復(fù)制到 zcu102/zcu104 評(píng)估板的 SD 卡中。

模型創(chuàng)建/量化/編譯

在運(yùn)行此部分之前,我們應(yīng)在 Vitis-AI docker 環(huán)境下激活 vitis-ai-tensorflow2anaconda 環(huán)境。有關(guān)更多詳細(xì)信息,請(qǐng)參閱最新版本的 UG1414。

(vitis-ai-tensorflow2) Vitis-AI /workspace/myproj/tf2-mnist-end-to-end 》 python train.py

Load Mnist dataset.。

Create custom cnn.。

Model: “mnist_customcnn_model”

_________________________________________________________________

Layer (type) Output Shape Param #

=================================================================

input_1 (InputLayer) [(None, 28, 28, 1)] 0

_________________________________________________________________

conv2d (Conv2D) (None, 26, 26, 32) 320

_________________________________________________________________

max_pooling2d (MaxPooling2D) (None, 13, 13, 32) 0

_________________________________________________________________

conv2d_1 (Conv2D) (None, 11, 11, 64) 18496

_________________________________________________________________

max_pooling2d_1 (MaxPooling2 (None, 5, 5, 64) 0

_________________________________________________________________

conv2d_2 (Conv2D) (None, 3, 3, 64) 36928

_________________________________________________________________

flatten (Flatten) (None, 576) 0

_________________________________________________________________

dense (Dense) (None, 64) 36928

_________________________________________________________________

dense_1 (Dense) (None, 10) 650

=================================================================

Total params: 93,322

Trainable params: 93,322

Non-trainable params: 0

_________________________________________________________________

Fit on dataset.。

Epoch 1/10

782/782 [==============================] - 13s 16ms/step - loss: 0.1843 - accuracy: 0.9427 - val_loss: 0.0701 - val_accuracy: 0.9813

Epoch 2/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0529 - accuracy: 0.9835 - val_loss: 0.0543 - val_accuracy: 0.9855

Epoch 3/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0346 - accuracy: 0.9894 - val_loss: 0.0472 - val_accuracy: 0.9877

Epoch 4/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0252 - accuracy: 0.9929 - val_loss: 0.0463 - val_accuracy: 0.9878

Epoch 5/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0188 - accuracy: 0.9945 - val_loss: 0.0494 - val_accuracy: 0.9896

Epoch 6/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0147 - accuracy: 0.9956 - val_loss: 0.0513 - val_accuracy: 0.9901

Epoch 7/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0121 - accuracy: 0.9966 - val_loss: 0.0452 - val_accuracy: 0.9920

Epoch 8/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0096 - accuracy: 0.9973 - val_loss: 0.0542 - val_accuracy: 0.9906

Epoch 9/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0088 - accuracy: 0.9976 - val_loss: 0.0640 - val_accuracy: 0.9893

Epoch 10/10

782/782 [==============================] - 5s 7ms/step - loss: 0.0073 - accuracy: 0.9978 - val_loss: 0.0709 - val_accuracy: 0.9893

Save trained model to./models/float_model.h5.

Evaluate model on test dataset.。

157/157 [==============================] - 1s 3ms/step - loss: 0.0426 - accuracy: 0.9911

loss: 0.043

acc: 0.991

(vitis-ai-tensorflow2) Vitis-AI /workspace/myproj/tf2-mnist-end-to-end 》 python quantize.py

Load float model.。

Load Mnist dataset.。

Run quantization.。

[INFO] Start CrossLayerEqualization.。.

10/10 [==============================] - 0s 32ms/step

[INFO] CrossLayerEqualization Done.

[INFO] Start Quantize Calibration.。.

157/157 [==============================] - 12s 77ms/step

[INFO] Quantize Calibration Done.

[INFO] Start Generating Quantized Model.。.

[Warning] Skip quantize pos adjustment for layer quant_dense, its quantize pos is [i=None, w=8.0, b=9.0, o=3.0]

[INFO] Generating Quantized Model Done.

Saved quantized model as 。/models/quantized_model.h5

(vitis-ai-tensorflow2) Vitis-AI /workspace/myproj/tf2-mnist-end-to-end 》 python eval_quantized.py

Load quantized model.。

WARNINGNo training configuration found in the save file, so the model was *not* compiled. Compile it manually.

Load Mnist dataset.。

Compile model.。

Evaluate model on test Dataset

157/157 [==============================] - 4s 22ms/step - loss: 0.0417 - accuracy: 0.9913

loss: 0.042

acc: 0.991

(vitis-ai-tensorflow2) Vitis-AI /workspace/myproj/tf2-mnist-end-to-end 》 python finetune.py

Load float model.。

Load Mnist dataset.。

Create quantize training model.。

[INFO] Start CrossLayerEqualization.。.

10/10 [==============================] - 0s 33ms/step

[INFO] CrossLayerEqualization Done.

Compiling model.。

Fit on Dataset.。

Epoch 1/10

782/782 [==============================] - 48s 61ms/step - loss: 0.0077 - accuracy: 0.9978 - val_loss: 0.0738 - val_accuracy: 0.9882

Epoch 2/10

782/782 [==============================] - 39s 50ms/step - loss: 0.0062 - accuracy: 0.9980 - val_loss: 0.0845 - val_accuracy: 0.9888

Epoch 3/10

782/782 [==============================] - 40s 51ms/step - loss: 0.0058 - accuracy: 0.9983 - val_loss: 0.0810 - val_accuracy: 0.9885

Epoch 4/10

782/782 [==============================] - 40s 51ms/step - loss: 0.0061 - accuracy: 0.9982 - val_loss: 0.0744 - val_accuracy: 0.9902

Epoch 5/10

782/782 [==============================] - 40s 51ms/step - loss: 0.0048 - accuracy: 0.9984 - val_loss: 0.0834 - val_accuracy: 0.9911

Epoch 6/10

782/782 [==============================] - 39s 50ms/step - loss: 0.0047 - accuracy: 0.9986 - val_loss: 0.0807 - val_accuracy: 0.9893

Epoch 7/10

782/782 [==============================] - 39s 50ms/step - loss: 0.0039 - accuracy: 0.9987 - val_loss: 0.0894 - val_accuracy: 0.9903

Epoch 8/10

782/782 [==============================] - 39s 50ms/step - loss: 0.0034 - accuracy: 0.9989 - val_loss: 0.0863 - val_accuracy: 0.9904

Epoch 9/10

782/782 [==============================] - 39s 49ms/step - loss: 0.0042 - accuracy: 0.9989 - val_loss: 0.1043 - val_accuracy: 0.9893

Epoch 10/10

782/782 [==============================] - 39s 50ms/step - loss: 0.0044 - accuracy: 0.9986 - val_loss: 0.0994 - val_accuracy: 0.9908

Saved finetuned model as 。/models/finetuned_model.h5

Evaluate model on test Dataset.。

157/157 [==============================] - 1s 7ms/step - loss: 0.0675 - accuracy: 0.9920

loss: 0.068

acc: 0.992

(vitis-ai-tensorflow2) Vitis-AI /workspace/myproj/tf2-mnist-end-to-end 》 bash -x compile_zcu102.sh

+ ARCH=/opt/vitis_ai/compiler/arch/DPUCZDX8G/ZCU102/arch.json

+ OUTDIR=。/compiled_model

+ NET_NAME=customcnn

+ MODEL=。/models/finetuned_model.h5

+ echo -----------------------------------------

-----------------------------------------

+ echo ‘COMPILING MODEL FOR ZCU102.?!?/p>

COMPILING MODEL FOR ZCU102.。

+ echo -----------------------------------------

-----------------------------------------

+ compile

+ tee compile.log

+ vai_c_tensorflow2 --model 。/models/finetuned_model.h5 --arch /opt/vitis_ai/compiler/arch/DPUCZDX8G/ZCU102/arch.json --output_dir 。/compiled_model --net_name customcnn

/opt/vitis_ai/conda/envs/vitis-ai-tensorflow2/lib/python3.7/site-packages/xnnc/translator/tensorflow_translator.py H5pyDeprecationWarning: dataset.value has been deprecated. Use dataset[()] instead.

value = param.get(group).get(ds).value

[INFO] parse raw model :100%|██████████| 10/10 [00:00《00:00, 16871.70it/s]

[INFO] infer shape (NHWC) :100%|██████████| 26/26 [00:00《00:00, 2956.30it/s]

[INFO] generate xmodel :100%|██████████| 26/26 [00:00《00:00, 5561.60it/s]

[INFO] Namespace(inputs_shape=None, layout=‘NHWC’, model_files=[‘。/models/finetuned_model.h5’], model_type=‘tensorflow2’, out_filename=‘。/compiled_model/customcnn_org.xmodel’, proto=None)

[INFO] tensorflow2 model: models/finetuned_model.h5

[OPT] No optimization method available for xir-level optimization.

[INFO] generate xmodel: /workspace/myproj/tf2-mnist-end-to-end/compiled_model/customcnn_org.xmodel

[UNILOG][INFO] The compiler log will be dumped at “/tmp/vitis-ai-user/log/xcompiler-20210325-093926-3120”

[UNILOG][INFO] Target architecture: DPUCZDX8G_ISA0_B4096_MAX_BG2

[UNILOG][INFO] Compile mode: dpu

[UNILOG][INFO] Debug mode: function

[UNILOG][INFO] Target architecture: DPUCZDX8G_ISA0_B4096_MAX_BG2

[UNILOG][INFO] Graph name: mnist_customcnn_model, with op num: 42

[UNILOG][INFO] Begin to compile.。.

[UNILOG][INFO] Total device subgraph number 3, DPU subgraph number 1

[UNILOG][INFO] Compile done.

[UNILOG][INFO] The meta json is saved to “/workspace/myproj/tf2-mnist-end-to-end/。/compiled_model/meta.json”

[UNILOG][INFO] The compiled xmodel is saved to “/workspace/myproj/tf2-mnist-end-to-end/。/compiled_model/customcnn.xmodel”

[UNILOG][INFO] The compiled xmodel‘s md5sum is 764142e83d074ea9470b9eb9d0757f68, and been saved to “/workspace/myproj/tf2-mnist-end-to-end/。/compiled_model/md5sum.txt”

**************************************************

* VITIS_AI Compilation - Xilinx Inc.

**************************************************

+ echo -----------------------------------------

-----------------------------------------

+ echo ’MODEL COMPILED‘

MODEL COMPILED

+ echo -----------------------------------------

-----------------------------------------

(vitis-ai-tensorflow2) Vitis-AI /workspace/myproj/tf2-mnist-end-to-end 》 bash -x make_target_zcu102.sh

+ echo -----------------------------------------

-----------------------------------------

+ echo ’MAKE TARGET ZCU102 STARTED.?!?/p>

MAKE TARGET ZCU102 STARTED.。

+ echo -----------------------------------------

-----------------------------------------

+ TARGET_ZCU102=。/target_zcu102

+ COMPILE_ZCU102=。/compiled_model

+ APP=。/application

+ NET_NAME=customcnn

+ rm -rf 。/target_zcu102

+ mkdir -p 。/target_zcu102/model_dir

+ cp 。/application/app_mt.py 。/target_zcu102

+ echo ’ Copied application to TARGET_ZCU102 folder‘

Copied application to TARGET_ZCU102 folder

+ cp 。/compiled_model/customcnn.xmodel 。/target_zcu102/model_dir/。

+ echo ’ Copied xmodel file(s) to TARGET_ZCU102 folder‘

Copied xmodel file(s) to TARGET_ZCU102 folder

+ mkdir -p 。/target_zcu102/images

+ python generate_images.py --dataset=mnist --image_dir=。/target_zcu102/images --image_format=jpg --max_images=10000

2021-03-25 0934.445257: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1

Command line options:

--dataset : mnist

--subset : test

--image_dir : 。/target_zcu102/images

--image_list :

--label_list :

--image_format : jpg

--max_images : 10000

+ echo ’ Copied images to TARGET_ZCU102 folder‘

Copied images to TARGET_ZCU102 folder

+ echo -----------------------------------------

-----------------------------------------

+ echo ’MAKE TARGET ZCU102 COMPLETED‘

MAKE TARGET ZCU102 COMPLETED

+ echo -----------------------------------------

-----------------------------------------

在 ZynqMP 評(píng)估板上運(yùn)行

進(jìn)行電路板設(shè)置。

之后,將 target_zcu10x 目錄中的所有文件復(fù)制到 SD 卡。從 SD 卡啟動(dòng) ZCU10x(下面實(shí)例運(yùn)行的是 zcu104),運(yùn)行 app_mt.py。結(jié)果顯示,實(shí)際運(yùn)行模型的精度為 99.13%.

root@xilinx-zcu104-2020_2:~/target_zcu104# python3 app_mt.py --threads 4

Command line options:

--image_dir : images

--threads : 4

--model : model_dir/customcnn.xmodel

Pre-processing 10000 images.。.

Starting 4 threads.。.

Throughput=5622.61 fps, total frames = 10000, time=1.7785 seconds

Correct:9913, Wrong:87, Accuracy:0.9913

原文標(biāo)題:開發(fā)者分享 | Vitis-AI 1.3/TensorFlow2 環(huán)境下使用自定義 CNN 模型進(jìn)行 Mnist 分類

文章出處:【微信公眾號(hào):XILINX技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1469

    瀏覽量

    61704
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3084

    瀏覽量

    48600

原文標(biāo)題:開發(fā)者分享 | Vitis-AI 1.3/TensorFlow2 環(huán)境下使用自定義 CNN 模型進(jìn)行 Mnist 分類

文章出處:【微信號(hào):gh_2d1c7e2d540e,微信公眾號(hào):XILINX開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    創(chuàng)建自定義的基于閃存的引導(dǎo)加載程序(BSL)

    電子發(fā)燒友網(wǎng)站提供《創(chuàng)建自定義的基于閃存的引導(dǎo)加載程序(BSL).pdf》資料免費(fèi)下載
    發(fā)表于 09-19 10:50 ?0次下載
    <b class='flag-5'>創(chuàng)建</b><b class='flag-5'>自定義</b>的基于閃存的引導(dǎo)加載程序(BSL)

    如何創(chuàng)建TestStand自定義步驟

    在之前的課程中簡(jiǎn)單地介紹過TestStand自帶的些步驟類型,如測(cè)試、消息彈窗、賦值、標(biāo)簽等等,這些簡(jiǎn)單的步驟從TestStand的插入選版中就可以添加到序列中。那么在使用中如果碰到需要實(shí)現(xiàn)更加靈活、復(fù)雜的功能,使用自帶的些步驟類型可能難以滿足,這時(shí)就需要使用到
    的頭像 發(fā)表于 09-11 14:46 ?767次閱讀
    如何<b class='flag-5'>創(chuàng)建</b>TestStand<b class='flag-5'>自定義</b>步驟

    keras模型轉(zhuǎn)tensorflow session

    在這篇文章中,我們將討論如何將Keras模型轉(zhuǎn)換為TensorFlow session。 KerasTensorFlow簡(jiǎn)介 Keras
    的頭像 發(fā)表于 07-05 09:36 ?401次閱讀

    keras的模塊結(jié)構(gòu)介紹

    Keras個(gè)高級(jí)深度學(xué)習(xí)庫,它提供了個(gè)易于使用的接口來構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型。Keras
    的頭像 發(fā)表于 07-05 09:35 ?271次閱讀

    何在IDF框架中使用自定義的靜態(tài)庫和動(dòng)態(tài)庫?

    基于商業(yè)需要,我們需要在 ESP-IDF v4.0-rc 這個(gè)版本的IDF中開發(fā)與使用自定義庫,有如下問題請(qǐng)協(xié)助: 1如何利用IDF框架編寫自定義靜態(tài)庫和動(dòng)態(tài)庫? 2何在IDF框架中
    發(fā)表于 06-25 07:57

    e203自定義指令硬件模塊設(shè)計(jì),在vivado硬件自定義指令識(shí)別為非法指令怎么解決?

    e203自定義指令硬件模塊設(shè)計(jì),修改內(nèi)核,綜合沒錯(cuò)誤,軟件也修改工具鏈通過并產(chǎn)生verilog文件,但在vivado硬件自定義指令識(shí)別為非法指令怎么解決
    發(fā)表于 05-28 06:40

    TSMaster 自定義 LIN 調(diào)度表編程指導(dǎo)

    TSMaster(v2023.10.7.990)之后的版本中新增了實(shí)現(xiàn)自定義LIN調(diào)度表相關(guān)API。今天重點(diǎn)和大家分享下關(guān)于編程實(shí)現(xiàn)TSMaster自定義LIN調(diào)度表
    的頭像 發(fā)表于 05-11 08:21 ?528次閱讀
    TSMaster <b class='flag-5'>自定義</b> LIN 調(diào)度表編程指導(dǎo)

    LabVIEWRing自定義控件,其常量無法保持同步修改,如何解決

    時(shí),其常量無法跟隨變換。 如圖所示,自定義常量可以修改成不同的映射關(guān)系,同樣都是“CSP”這個(gè)名稱,可以對(duì)應(yīng)2或者8。 如果通過創(chuàng)建輸入控件的方式,則“CSP”這個(gè)名稱定對(duì)應(yīng)的是
    發(fā)表于 04-24 11:20

    HarmonyOS開發(fā)實(shí)例:【自定義Emitter】

    使用[Emitter]實(shí)現(xiàn)事件的訂閱和發(fā)布,使用[自定義彈窗]設(shè)置廣告信息。
    的頭像 發(fā)表于 04-14 11:37 ?932次閱讀
    HarmonyOS開發(fā)實(shí)例:【<b class='flag-5'>自定義</b>Emitter】

    鴻蒙ArkUI實(shí)例:【自定義組件】

    組件是 OpenHarmony 頁面最小顯示單元,個(gè)頁面可由多個(gè)組件組合而成,也可只由個(gè)組件組合而成,這些組件可以是ArkUI開發(fā)框架自帶系統(tǒng)組件,比如?`Text`?、?`But
    的頭像 發(fā)表于 04-08 10:17 ?558次閱讀

    使用BGM210L創(chuàng)建個(gè)自定義PCB,是否可以與GPIO引腳共享調(diào)試引腳?

    你好 我想使用 BGM210L 創(chuàng)建個(gè)自定義 PCB,并在此自定義 PCB 上實(shí)現(xiàn)調(diào)試接口(SWCLK、SWDIO 等)。 由于只有幾個(gè)引
    發(fā)表于 01-16 08:12

    基于TensorFlowKeras的圖像識(shí)別

    TensorFlowKeras最常見的用途之是圖像識(shí)別/分類。通過本文,您將了解如何使用Keras達(dá)到這目的。
    的頭像 發(fā)表于 01-13 08:27 ?735次閱讀
    基于<b class='flag-5'>TensorFlow</b>和<b class='flag-5'>Keras</b>的圖像識(shí)別

    博途用戶自定義庫的使用

    博途官方提供了很多庫,比如:基本函數(shù)庫、通信庫、安全庫、驅(qū)動(dòng)庫等等,用戶可以使用庫中的函數(shù)/函數(shù)塊來完成具體的控制任務(wù)。除了官方的庫,我們也可以創(chuàng)建自己的庫(用戶自定義庫)。比如,把項(xiàng)目
    的頭像 發(fā)表于 12-25 10:08 ?813次閱讀
    博途用戶<b class='flag-5'>自定義</b>庫的使用

    Maxwell中兩種用戶自定義材料庫的實(shí)現(xiàn)方法

    Maxwell支持兩種用戶自定義材料庫。種是User Library(UserLib),另種是Personal Library(PersonalLib)。UserLib通常是
    的頭像 發(fā)表于 12-14 17:33 ?4789次閱讀
    Maxwell中兩種用戶<b class='flag-5'>自定義</b>材料庫的實(shí)現(xiàn)方法

    何在Matlab中自定義Message

    自定義Message 當(dāng)我們的 message 消息比較復(fù)雜時(shí),通常要用到自定義的 message 消息,MATLAB 2020b以上的版本自帶了ROS Toolbox Interface
    的頭像 發(fā)表于 11-15 18:12 ?1146次閱讀
    如<b class='flag-5'>何在</b>Matlab中<b class='flag-5'>自定義</b>Message