Darknetフレームワークの概要
DarknetはC言語とCUDAで実装されたオープンソースの深層学習フレームワークです。その主な特徴は、依存関係がほとんどなく(OpenCVすら不要)、インストールが容易で、CPUとGPUの両方をサポートしている点です。また、高い移植性を持ちます。
Darknetを選ぶ理由
- TensorFlowほど高機能ではありませんが、このシンプルさがDarknetの利点となっています。
- 完全にC言語で実装されており、依存関係がありません。OpenCVを使用することも可能ですが、これは画像表示や可視化の向上のためだけです。
- CPUとGPU(CUDA/cuDNN)の両方をサポートしているため、GPU環境がなくても利用できます。
- 軽量な設計により、TensorFlowのような強力なAPIはありませんが、独自の柔軟性があり、低レベルでの改良や拡張が容易です。
- Darknetの実装はCaffeと類似点があるため、Darknetに慣れることでCaffeの学習にも役立ちます。
Linux環境でのセットアップ
公式のDarknetソースコードは以下からダウンロードできます:
学習済みモデルの重みファイルは以下から入手可能です:
ダウンロード後、まずMakefileを確認します。自分の環境に合わせて設定を変更し、以下のコマンドでコンパイルを実行します。
make clean; make all
コンパイルが完了すると、darknet実行ファイルと動的ライブラリが生成されます。
ディレクトリ構成
- cfgフォルダ:モデルのアーキテクチャ定義ファイルが含まれています。各cfgファイルはCaffeのprototxtファイルに似ており、モデル全体の構造を定義します。
- dataフォルダ:COCOデータセットのカテゴリ名などのラベルファイルとサンプル画像が含まれています。このフォルダは主にデモ用で、独自のデータセットで学習する場合は必須ではありません。
- srcフォルダ:フレームワークの最も低レベルな定義ファイルが含まれています。すべての層の定義や基本関数がこのフォルダにあり、フレームワークのソースコード本体と言えます。
- examplesフォルダ:検出関数や認識関数など、より高レベルな関数が含まれています。これらの関数は低レベルの関数を直接呼び出し、日常的に使用するのは主にこのフォルダ内の関数です。
- includeフォルダ:ヘッダファイルが格納されています。
- pythonフォルダ:Pythonからモデルを呼び出す方法が含まれており、主にdarknet.pyに実装されています。Pythonでの呼び出しには、後述するdarknetの動的ライブラリlibdarknet.soも必要です。
- scriptsフォルダ:COCOデータセットのダウンロードや、VOC形式のデータセットを学習用形式に変換するスクリプトなどが含まれています。
- Makefile:ファイルの先頭に設定オプションがあり、使用する機能に対応するオプションを1に設定します。
動作テスト
以下のコマンドを実行してDarknetが正しく動作するかテストします:
./darknet detector test cfg/coco.data cfg/yolov3-tiny.cfg weights/yolov3-tiny.weights data/dog.jpg
上記のような結果が表示されれば、正常に動作しています。