FT_DSP.gitlink.net/master/html/quickstart/hellodsp.html

402 lines
29 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>HelloDSP &mdash; MindSpore Signal+ 使用手册 alpha 文档</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=03e43079" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../_static/table.css?v=72b86d3e" />
<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=406e4f49"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../_static/translations.js?v=beaddf03"></script>
<script src="../_static/table.js?v=99ed15ba"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="整体概览" href="overview.html" />
<link rel="prev" title="环境安装" href="installation.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
MindSpore Signal+ 使用手册
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="index.html">快速入门</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="installation.html">环境安装</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">HelloDSP</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#mindspore-python">1.MindSpore Python端</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#id1">1.1 新建Python文件</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id2">1.2 编写Python代码</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id3">1.3 运行Python代码</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#mindspore-lite">MindSpore Lite端</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#id4">1. 新建工程</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id5">2. 工程目录结构</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id6">3. 更改输入数据</a></li>
<li class="toctree-l4"><a class="reference internal" href="#main-cc">4. main.cc 功能介绍</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id13">5. 编译工程</a></li>
<li class="toctree-l4"><a class="reference internal" href="#id14">6. 运行工程</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="overview.html">整体概览</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../appdevelop/index.html">应用开发示例</a></li>
<li class="toctree-l1"><a class="reference internal" href="../functionlib/index.html">算子库支持</a></li>
<li class="toctree-l1"><a class="reference internal" href="../refdoc/index.html">参考资料</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">MindSpore Signal+ 使用手册</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html">快速入门</a></li>
<li class="breadcrumb-item active">HelloDSP</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/quickstart/hellodsp.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="hellodsp">
<h1>HelloDSP<a class="headerlink" href="#hellodsp" title="Link to this heading"></a></h1>
<p>HelloDSP 是一个简单的MindSpore Signal+平台开发示例,展示如何开发一个矩阵乘程序。主要流程分为两部分操作,分别为<a class="reference internal" href="#python"><span class="std std-ref">MindSpore Python端</span></a><a class="reference internal" href="#c"><span class="std std-ref">MindSpore Lite端</span></a>。MindSpore Python端在本地运行用于生成模型MindSpore Lite端在本地交叉编译编译产物拷贝到MT7004板卡上运行。以下是HelloDSP矩阵乘例子介绍</p>
<section id="mindspore-python">
<span id="python"></span><h2>1.MindSpore Python端<a class="headerlink" href="#mindspore-python" title="Link to this heading"></a></h2>
<section id="id1">
<h3>1.1 新建Python文件<a class="headerlink" href="#id1" title="Link to this heading"></a></h3>
<p>打开<code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code>,新建<code class="docutils literal notranslate"><span class="pre">test_matmul.py</span></code>文件</p>
</section>
<section id="id2">
<h3>1.2 编写Python代码<a class="headerlink" href="#id2" title="Link to this heading"></a></h3>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">ms</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="kn">import</span> <span class="n">nn</span><span class="p">,</span> <span class="n">ops</span>
<span class="k">class</span><span class="w"> </span><span class="nc">Matmul</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Cell</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">(</span><span class="n">Matmul</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">matmul</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">MatMul</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">construct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x1</span><span class="p">,</span> <span class="n">x2</span><span class="p">):</span>
<span class="n">out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">matmul</span><span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">x2</span><span class="p">)</span>
<span class="k">return</span> <span class="n">out</span>
<span class="n">x1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">((</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float32</span><span class="p">)</span>
<span class="n">x2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">((</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float32</span><span class="p">)</span>
<span class="n">x1_tensor</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">Tensor</span><span class="p">(</span><span class="n">x1</span><span class="p">)</span>
<span class="n">x2_tensor</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">Tensor</span><span class="p">(</span><span class="n">x2</span><span class="p">)</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">Matmul</span><span class="p">()</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">model</span><span class="p">(</span><span class="n">x1_tensor</span><span class="p">,</span> <span class="n">x2_tensor</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
<span class="n">ms</span><span class="o">.</span><span class="n">export</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">x1_tensor</span><span class="p">,</span> <span class="n">x2_tensor</span><span class="p">,</span> <span class="n">file_name</span><span class="o">=</span><span class="s2">&quot;matmul&quot;</span><span class="p">,</span> <span class="n">file_format</span><span class="o">=</span><span class="s2">&quot;MINDIR&quot;</span><span class="p">)</span>
</pre></div>
</div>
<p>以上代码的作用说明如下:</p>
<ul class="simple">
<li><p><strong>导入库</strong><code class="docutils literal notranslate"><span class="pre">mindspore</span></code> 用于构建与导出模型;<code class="docutils literal notranslate"><span class="pre">numpy</span></code> 用于生成示例数据;从 <code class="docutils literal notranslate"><span class="pre">mindspore</span></code> 引入 <code class="docutils literal notranslate"><span class="pre">nn</span></code><code class="docutils literal notranslate"><span class="pre">ops</span></code> 以定义网络与调用算子。</p></li>
<li><p><strong>定义网络 <code class="docutils literal notranslate"><span class="pre">Matmul</span></code></strong>:继承 <code class="docutils literal notranslate"><span class="pre">nn.Cell</span></code>,在 <code class="docutils literal notranslate"><span class="pre">__init__</span></code> 中实例化矩阵乘算子 <code class="docutils literal notranslate"><span class="pre">ops.MatMul()</span></code>;在 <code class="docutils literal notranslate"><span class="pre">construct</span></code> 中实现前向计算,将输入 <code class="docutils literal notranslate"><span class="pre">x1</span></code><code class="docutils literal notranslate"><span class="pre">x2</span></code> 进行矩阵乘法并返回结果。</p></li>
<li><p><strong>准备数据</strong>:使用 <code class="docutils literal notranslate"><span class="pre">numpy.ones</span></code> 生成两个形状为 <code class="docutils literal notranslate"><span class="pre">(2,</span> <span class="pre">2)</span></code>、类型为 <code class="docutils literal notranslate"><span class="pre">float32</span></code> 的数组,全为 1。</p></li>
<li><p><strong>张量转换</strong>:用 <code class="docutils literal notranslate"><span class="pre">ms.Tensor</span></code><code class="docutils literal notranslate"><span class="pre">numpy</span></code> 数组转换为 MindSpore 张量,作为模型输入。</p></li>
<li><p><strong>构建与执行模型</strong>:实例化 <code class="docutils literal notranslate"><span class="pre">Matmul</span></code> 模型,传入张量执行前向推理,打印结果。对于两个全 1 的 <code class="docutils literal notranslate"><span class="pre">2x2</span></code> 矩阵,输出为一个元素均为 2 的 <code class="docutils literal notranslate"><span class="pre">2x2</span></code> 张量。</p></li>
<li><p><strong>导出模型</strong>:调用 <code class="docutils literal notranslate"><span class="pre">ms.export</span></code> 将模型导出为 <code class="docutils literal notranslate"><span class="pre">MINDIR</span></code> 格式:</p>
<ul>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">file_name</span></code></strong>: 保存的基础文件名为 <code class="docutils literal notranslate"><span class="pre">matmul</span></code></p></li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">file_format</span></code></strong>: 指定为 <code class="docutils literal notranslate"><span class="pre">MINDIR</span></code>MindSpore IR 格式),用于后续在 MindSpore Lite 端加载与推理;</p></li>
<li><p>传入的输入张量 <code class="docutils literal notranslate"><span class="pre">x1_tensor</span></code><code class="docutils literal notranslate"><span class="pre">x2_tensor</span></code> 用于固化输入<code class="docutils literal notranslate"><span class="pre">shape</span></code><code class="docutils literal notranslate"><span class="pre">dtype</span></code>,确保在部署端可正确构建模型输入。</p></li>
</ul>
</li>
</ul>
</section>
<section id="id3">
<h3>1.3 运行Python代码<a class="headerlink" href="#id3" title="Link to this heading"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code>中运行<code class="docutils literal notranslate"><span class="pre">test_matmul.py</span></code>文件,会生成一个<code class="docutils literal notranslate"><span class="pre">matmul.mindir</span></code>模型文件要在MindSpore Lite端运行则需要转成 <code class="docutils literal notranslate"><span class="pre">ms</span></code> 模型文件。mindir转ms的converter工具也已经集成到vscode使用converter工具方式</p>
<p>选择模型文件直接右键,找到模型转换选项,点击即可。
<img src="../_static/converter_lite.png" alt="create_project" width="auto"/></p>
</section>
</section>
<section id="mindspore-lite">
<span id="c"></span><h2>MindSpore Lite端<a class="headerlink" href="#mindspore-lite" title="Link to this heading"></a></h2>
<section id="id4">
<h3>1. 新建工程<a class="headerlink" href="#id4" title="Link to this heading"></a></h3>
<p>打开<code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code>,新建工程。输入工程名、路径,工程类型选择<code class="docutils literal notranslate"><span class="pre">Heterogeneous</span></code>,输入交叉编译工具路径,参照<a class="reference internal" href="installation.html#toolchain"><span class="std std-ref">配置交叉编译工具链</span></a>,然后点确定。会生成一个异构模板工程。</p>
<img src="../_static/create_project.png" alt="create_project" width="auto"/>
</section>
<section id="id5">
<h3>2. 工程目录结构<a class="headerlink" href="#id5" title="Link to this heading"></a></h3>
<p>生成的异构模板工程具有以下目录结构:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>test_matmul/
├──<span class="w"> </span>model/
<span class="w"> </span>└──<span class="w"> </span>matmul.ms
├──<span class="w"> </span>arm_toolchain.cmake
├──<span class="w"> </span>build.bat
├──<span class="w"> </span>CMakeLists.txt
├──<span class="w"> </span>data_handler.cc
├──<span class="w"> </span>data_handler.h
└──<span class="w"> </span>main.cc
</pre></div>
</div>
<p><strong>文件说明:</strong></p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>文件名</p></th>
<th class="head"><p>类型</p></th>
<th class="head"><p>作用</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">model/matmul.ms</span></code></p></td>
<td><p>模型文件</p></td>
<td><p>MindSpore 导出的模型权重和结构文件</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">arm_toolchain.cmake</span></code></p></td>
<td><p>配置文件</p></td>
<td><p>指定 ARM 交叉编译工具链路径和参数</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">build.bat</span></code></p></td>
<td><p>脚本文件</p></td>
<td><p>Windows 环境下的编译构建脚本</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">CMakeLists.txt</span></code></p></td>
<td><p>构建文件</p></td>
<td><p>CMake 构建系统的主配置文件</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">data_handler.h/.cc</span></code></p></td>
<td><p>源码文件</p></td>
<td><p>数据预处理和结果处理的实现</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">main.cc</span></code></p></td>
<td><p>源码文件</p></td>
<td><p>程序主入口,包含模型加载和推理逻辑</p></td>
</tr>
</tbody>
</table>
</section>
<section id="id6">
<h3>3. 更改输入数据<a class="headerlink" href="#id6" title="Link to this heading"></a></h3>
<p>通过修改 <code class="docutils literal notranslate"><span class="pre">data_handler.cc</span></code> 文件中的函数来调整输入输出数据:</p>
<ul class="simple">
<li><p><strong>修改输入数据</strong>:编辑 <code class="docutils literal notranslate"><span class="pre">GetInputData</span></code> 函数内容</p></li>
<li><p><strong>查看输出结果</strong>:编辑 <code class="docutils literal notranslate"><span class="pre">GetOutputData</span></code> 函数内容</p></li>
</ul>
<p><strong>默认配置:</strong></p>
<ul class="simple">
<li><p>输入数据填充为 1</p></li>
<li><p>输出结果打印输出地址</p></li>
</ul>
<img src="../_static/init_input_data.png" alt="init_input_data" width="auto"/>
</section>
<section id="main-cc">
<h3>4. main.cc 功能介绍<a class="headerlink" href="#main-cc" title="Link to this heading"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">main</span></code> 函数主要包含 6 个核心步骤,实现完整的模型推理流程:</p>
<section id="id7">
<h4>4.1 读取模型文件<a class="headerlink" href="#id7" title="Link to this heading"></a></h4>
<p>通过 <code class="docutils literal notranslate"><span class="pre">ReadFile</span></code> 接口读取 <code class="docutils literal notranslate"><span class="pre">.ms</span></code> 模型文件,将数据保存到 <code class="docutils literal notranslate"><span class="pre">model_buf</span></code> 中。</p>
<img src="../_static/read_model.png" alt="read_model" width="auto"/>
</section>
<section id="id8">
<h4>4.2 设置运行后端<a class="headerlink" href="#id8" title="Link to this heading"></a></h4>
<p>通过 <code class="docutils literal notranslate"><span class="pre">context</span></code><code class="docutils literal notranslate"><span class="pre">MutableDeviceInfo</span></code> 添加一个或多个后端:</p>
<ul class="simple">
<li><p><strong>默认后端</strong><code class="docutils literal notranslate"><span class="pre">MT7004</span></code></p></li>
<li><p><strong>可选后端</strong><code class="docutils literal notranslate"><span class="pre">CPU</span></code><code class="docutils literal notranslate"><span class="pre">FT78NE</span></code></p></li>
</ul>
<img src="../_static/set_device.png" alt="set_device" width="auto"/>
</section>
<section id="id9">
<h4>4.3 编译模型图<a class="headerlink" href="#id9" title="Link to this heading"></a></h4>
<p>通过 MindSpore 的 <code class="docutils literal notranslate"><span class="pre">Model</span></code> 类的 <code class="docutils literal notranslate"><span class="pre">Build</span></code> 方法编译模型图:</p>
<p><strong>编译规则</strong>:按设置顺序查找后端算子,都没找到则编译失败</p>
<p><strong>Build 方法参数:</strong></p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>参数</p></th>
<th class="head"><p>类型</p></th>
<th class="head"><p>说明</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">model_data</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">void</span> <span class="pre">*</span></code></p></td>
<td><p>模型数据</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">data_size</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">size_t</span></code></p></td>
<td><p>模型数据大小</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">model_type</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">ModeType</span></code></p></td>
<td><p>模型类型</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">model_context</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">std::shared_ptr&lt;Context&gt;</span> <span class="pre">&amp;</span></code></p></td>
<td><p>模型上下文(主要传递设备信息)</p></td>
</tr>
</tbody>
</table>
<img src="../_static/build_model.png" alt="build_model" width="auto"/>
</section>
<section id="id10">
<h4>4.4 获取模型输入<a class="headerlink" href="#id10" title="Link to this heading"></a></h4>
<p>通过 <code class="docutils literal notranslate"><span class="pre">Model</span></code> 类的 <code class="docutils literal notranslate"><span class="pre">GetInputs</span></code> 方法获取所有模型输入的 <code class="docutils literal notranslate"><span class="pre">Tensor</span></code> 地址,通过修改 <code class="docutils literal notranslate"><span class="pre">GetInputData</span></code> 函数传递输入值。</p>
<img src="../_static/get_input.png" alt="get_input" width="auto"/>
</section>
<section id="id11">
<h4>4.5 执行模型推理<a class="headerlink" href="#id11" title="Link to this heading"></a></h4>
<p>通过 <code class="docutils literal notranslate"><span class="pre">Model</span></code> 类的 <code class="docutils literal notranslate"><span class="pre">Predict</span></code> 方法进行模型推理:</p>
<p><strong>Predict 方法参数:</strong></p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>参数</p></th>
<th class="head"><p>类型</p></th>
<th class="head"><p>说明</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">inputs</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">std::vector&lt;MSTensor&gt;</span> <span class="pre">&amp;</span></code></p></td>
<td><p>模型的输入</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">output</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">const</span> <span class="pre">std::vector&lt;MSTensor&gt;</span> <span class="pre">*</span></code></p></td>
<td><p>模型的输出地址</p></td>
</tr>
</tbody>
</table>
<img src="../_static/model_predict.png" alt="model_predict" width="auto"/>
</section>
<section id="id12">
<h4>4.6 获取模型结果<a class="headerlink" href="#id12" title="Link to this heading"></a></h4>
<p>通过 <code class="docutils literal notranslate"><span class="pre">Model</span></code> 类的 <code class="docutils literal notranslate"><span class="pre">GetOutputs</span></code> 方法获取所有模型输出,通过修改 <code class="docutils literal notranslate"><span class="pre">GetOutputData</span></code> 函数查看输出值。</p>
<img src="../_static/get_output.png" alt="get_output" width="auto"/>
</section>
</section>
<section id="id13">
<h3>5. 编译工程<a class="headerlink" href="#id13" title="Link to this heading"></a></h3>
<p>提供多种编译方式,选择其中一种即可:</p>
<p><strong>编译方式:</strong></p>
<ul class="simple">
<li><p><strong>方式一</strong>:在 <code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code> 集成终端运行 <code class="docutils literal notranslate"><span class="pre">build.bat</span></code> 脚本</p></li>
<li><p><strong>方式二</strong>:点击调试按钮 → 编译</p></li>
<li><p><strong>方式三</strong>:直接点击编译图标</p></li>
</ul>
<img src="../_static/build_project.png" alt="build_project" width="auto"/>
</section>
<section id="id14">
<h3>6. 运行工程<a class="headerlink" href="#id14" title="Link to this heading"></a></h3>
<p>编译生成的可执行文件位于 <code class="docutils literal notranslate"><span class="pre">build</span></code> 目录下,默认文件名为 <code class="docutils literal notranslate"><span class="pre">main</span></code>。需要将可执行文件拷贝到 MT7004 板卡上运行。</p>
<section id="mt7004">
<h4>6.1 连接 MT7004 板卡<a class="headerlink" href="#mt7004" title="Link to this heading"></a></h4>
<p><strong>步骤 1</strong> 打开远程窗口</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code> 左下角找到远程窗口功能</p></li>
<li><p>点击打开远程窗口按钮</p></li>
</ul>
<img src="../_static/open_ssh.png" alt="open_ssh" width="auto"/>
<p><strong>步骤 2</strong> 选择连接方式</p>
<ul class="simple">
<li><p>在弹出的选项中选择第一个选项进行远程连接</p></li>
</ul>
<img src="../_static/connect_mt7004.png" alt="connect_mt7004" width="auto"/>
<p><strong>步骤 3</strong> 输入连接信息</p>
<ul class="simple">
<li><p>输入 MT7004 板卡的用户名和 IP 地址</p></li>
<li><p>按回车键后会弹出新的窗口界面</p></li>
</ul>
<blockquote>
<div><p><strong>注意</strong>:确保本机和 MT7004 板卡在同一网段,或使用网线直接连接并修改本机 IP 地址与板卡在同一网段</p>
</div></blockquote>
<img src="../_static/ssh.png" alt="ssh" width="auto"/>
<p><strong>连接成功标志:</strong> 新界面左下角出现 <code class="docutils literal notranslate"><span class="pre">SSH:xxx</span></code> 表示连接成功</p>
<img src="../_static/ssh_success.png" alt="ssh_success" width="auto"/>
</section>
<section id="id15">
<h4>6.2 部署和运行程序<a class="headerlink" href="#id15" title="Link to this heading"></a></h4>
<p><strong>步骤 4</strong> 部署程序文件</p>
<ul class="simple">
<li><p>在 MT7004 板卡上新建目录存放程序</p></li>
<li><p>通过拖拽方式将可执行文件和模型文件传输到板卡</p></li>
<li><p>使用 <code class="docutils literal notranslate"><span class="pre">chmod</span></code> 命令赋予可执行文件执行权限</p></li>
</ul>
<img src="../_static/model_run.png" alt="model_run" width="auto"/></section>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
<a href="installation.html" class="btn btn-neutral float-left" title="环境安装" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
<a href="overview.html" class="btn btn-neutral float-right" title="整体概览" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025 - 2026, NUDT-674。</p>
</div>
利用 <a href="https://www.sphinx-doc.org/">Sphinx</a> 构建,使用的
<a href="https://github.com/readthedocs/sphinx_rtd_theme">主题</a>
<a href="https://readthedocs.org">Read the Docs</a> 开发.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>