変換されたネットワークの利用方法 - 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.cpp
はdv-sdk/application/common/src/dmp_network.cpp
に依存します。
そのため、これらのソースコードをコンパイルしてからリンクすることで、アプリケーションがビルドされます。当然、サンプルアプリケーションのように、各コードを動的共有ライブラリなどにビルドしてから使用することもできます。
各ソースコードのコンパイル時には -I../common/include
などと指定して、SDK のユーザ空間ドライバのヘッダとdmp_network.h
をインクルードできるようにしてください。
dmp_network.h
にはCaffeMobileNet_gen.cpp
が、ユーザ空間ドライバのヘッダにはdmp_network.cpp
が依存しています。
各ソースコードをコンパイルした後には、-ldmpdv
などとしてユーザ空間ドライバが動的リンクされるようにし、各オブジェクトファイルをリンクしてください。