YOLO v2の結果 特に意味はない |
はじめに
特定の引数を与えて、examples 内の darknet を起動させることで、YOLOを実行させることができる。説明では、./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg
を実行するよう記載されている。一方、中段では、detect の引数は、下記と同じ結果になると説明されている。
./darknet detector test cfg/coco.data cfg/yolo.cfg yolo.weights data/dog.jpg
そこでサンプルプログラム内でどのような処理が行われているか、簡単に追ってみた。
第1引数がdetectの場合
内部では、下記の用な処理により、引数を追加し、関数test_detectorを呼び出している。しきい値、結果の保存ファイル、フルスクリーンの指定がオプションである。
float thresh = find_float_arg(argc, argv, "-thresh", .24);
char *filename = (argc > 4) ? argv[4]: 0;
char *outfile = find_char_arg(argc, argv, "-out", 0);
int fullscreen = find_arg(argc, argv, "-fullscreen");
test_detector("cfg/coco.data", argv[2], argv[3], filename, thresh, .5, outfile, fullscreen);
cfg/coco.data は、固定の値
第1引数、第2引数がdetector testの場合
引数そのままで、関数run_detector(argc, argv);
を呼び出している
それぞれの関数の実態は、
darknet-master/examples/detector.c
に定義されている。
関数の実態
test_detector()
関数内で再度パラメータを準備、ネットワークや重みを読み込み、最後にnetwork_predict(net, X);
で検出を行っている。
run_detector()
与えられたパラメータを解析し、最後に第2引数を調べ、test_detectorを呼び出している。if(0==strcmp(argv[2], "test")) test_detector(datacfg, cfg, weights, filename, thresh, hier_thresh, outfile, fullscreen);
YOLOの検出と分類機能に特化すれば、これらのソースから不要なコードを削除でき、すっきりさせることができそうである。
以上
0 件のコメント:
コメントを投稿