変換されたネットワークの利用方法 - DigitalMediaProfessionals/dv-sdk GitHub Wiki

この章では変換されたネットワークの利用方法を説明します。

アプリケーション内でのネットワークの利用方法

下記のコードはCaffeMobileNet の利用例です。 ネットワークを利用するためには、基本的にはこのような手順が必要です。

#include "CaffeMobileNet_gen.h"
// Define and initialize the network object
CCaffeMobileNet network;
if (!network.Initialize())
  return -1;
if (!network.LoadWeights(FILENAME_WEIGHTS))
  return -1;
if (!network.Commit())
  return -1;

// Get input buffer address
void* ddr_buf_a_cpu = network.get_network_input_addr_cpu();

// Copy image data to input buffer @1
memcpy(ddr_buf_a_cpu, imgProc, IMAGE_W * IMAGE_H * 3 * 2);

// Running the network
network.RunNetwork();

// Get the result
std::vector<float> networkOutput;
network.get_final_output(networkOutput);

注:network.RunNetwork() の後にネットワークの入力バッファの内容が変更されていることがあります。

注:あるネットワークは複数の出力バッファをもつことがあります。その場合次のように、そのバッファのインデックスをget_final_output() への第二引数に渡さなくてはなりません。 生成されたDoxygen ドキュメントにはこのインデックスや出力バッファのマッピングについても書かれています。

// Get number of network output layers
count = network.get_output_layer_count();
//...
network.get_final_output(networkOutput, index);

各関数の詳細についてはネットワークAPI をご覧ください。

アプリケーションのビルド

dv-sdk/application/CaffeMobileNet を例にして、アプリケーションをビルドする方法を説明します。

まず、CaffeMobileNet アプリケーションは主に、アプリケーション部であるmobileNet.cpp とネットワーク部であるCaffeMobileNet_gen.cpp で構成されます。またCaffeMobileNet_gen.cppdv-sdk/application/common/src/dmp_network.cpp に依存します。 そのため、これらのソースコードをコンパイルしてからリンクすることで、アプリケーションがビルドされます。当然、サンプルアプリケーションのように、各コードを動的共有ライブラリなどにビルドしてから使用することもできます。

各ソースコードのコンパイル時には -I../common/include などと指定して、SDK のユーザ空間ドライバのヘッダとdmp_network.h をインクルードできるようにしてください。 dmp_network.h にはCaffeMobileNet_gen.cpp が、ユーザ空間ドライバのヘッダにはdmp_network.cpp が依存しています。 各ソースコードをコンパイルした後には、-ldmpdv などとしてユーザ空間ドライバが動的リンクされるようにし、各オブジェクトファイルをリンクしてください。

⚠️ **GitHub.com Fallback** ⚠️