OpenCV 3.3.1のSSD検出結果 |
はじめに
3.3.1でSSDを試したところ検出結果が3.3.0と異なるので調べてみた。3.3.0でのSSDのサンプルに関してはここ
準備
最初は、3.3.0で使用したサンプルのソースをそのまま使用したところ、警告が生じた。モデルのロードと初期化が変更されており、createCaffeImporterは廃止されるとのこと
OpenCV 3.3.0
Ptr<dnn::Importer> importer;
importer = dnn::createCaffeImporter(modelConfiguration, modelBinary);
dnn::Net net;
importer->populateNet(net);
OpenCv 3.3.1
dnn::Net net = readNetFromCaffe(modelConfiguration, modelBinary);
あと、blobFromImageを3.3.1で記載されているように変更した。
Mat inputBlob = blobFromImage(preprocessedFrame, 1.0f, Size(), Scalar(), false); (SWAP RGBのフラグをfalseにしている)
実行
./ssd_object_detection -proto=deploy.prototxt -model=VGG_VOC0712_SSD_300x300_iter_120000.caffemodel -image=IMG_20170528_101542774s.png結果
OpenCV 3.3.0 SSD検出結果
オブジェクトの検出結果が表題の画像の様に、3.3.0の時と異なる。
3.3.1のソースをよく見ると、
preprocess()内の35行のコメントに
//SSD accepts 300x300 RGB-images
とあり、SSDでは、画像のチャンネルの並びは、RGBの順番にしないといけない。
しかし、3.3.1のソースでは、SWAP RGBのフラグをfalseにしており、ここは、SWAPすべきなので、3.3.0のように
Mat inputBlob = blobFromImage(preprocessedFrame)
が正しいと思われる。
SAPWをtrueにしたところ、3.3.0と同じ結果となった。
以上
0 件のコメント:
コメントを投稿