2017年10月30日月曜日

OpenCV 3.3.1で SSD を試してみた。 (I tried Single Shot MultiBox Detector sample with OpenCV 3.3.1.)

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 件のコメント:

コメントを投稿