質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • OpenCV

    1085questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

opencv_createsamplesとopencv_traincascadeについて

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,085

qwertyui

score 13

opencv_createsamples、opencv_traincascadeをコマンドプロンプトで実行する際に-w,-hを設定できますが、幅と高さの設定なのはわかりますが、どの幅、高さなのでしょうか。何も設定しないと初期値の24で実行されるようですがそれだと用意した正解画像、不正解画像のサイズではないと思います。
認識させたいモノの幅、高さなのかと思いましたが画像によって大きく写れば数値は大きくなりますし、小さければ小さくなりますので認識するモノの幅、高さでもない気がします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

うろ覚えですが、検出させたいターゲットの最小サイズと言い換えてよいと思います。24なら24px(以上)100なら100px(以上)とかそんな感じでしょうか。(「サイズではない!ベクトルだ!」のような細かい理解のズレはあるかもしれません)

検出したい生画像が200px四方で、そこにライオンが80px四方で写っているとした場合、24で仕込んだ場合は検出できても、100で仕込んだ場合には検出できない(ターゲットが80px四方では検出するには小さすぎる)とかそういうことが起きたはずです。あとは、数値を大きくすると仕込みにかかる時間がグーンと伸びた気がします。


Cascade Classifier Training(公式)
OpenCVで物体検出器を作成する
今回は画像解析とかそういうアレ
この辺が参考になると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/16 13:17

    回答ありがとうございます。検出させたいダーゲットが縦長ならその比率に合わせて-w,-hをそれぞれ異なる数値で設定した方が認識しやすくなりますか。

    現状ではopencv_createsamplesはうまくいって、.vecを生成し、opencv_traincascadeで実行するとエラー?メッセージが表示されることもあり、試行錯誤し、とりあえず制作したxmlファイルを試してみましたが、うまく認識していないようでした。ウェブサイトによって必要な正解画像、不正解の数が異なり、単純に枚数が少ないのかもしれません。

    またopencv_traincascadeでステージ数を自分で決めることができますが、多い方が精度が良くなるみたいなことでしょうか。

    キャンセル

  • 2017/09/16 17:39

    そのような理解でよいと思います。
    正解枚数、不正解枚数のうち、正解枚数が特にキモだったと思います。何ステージか回っていく中で、はじめは100の正解枚数だったものが、80になり60になり…となっていきます。この時に、はじめに指定した数より使うことのできる正解枚数が下回ると「データが足りなくて学習できないよ」という旨のエラーがでます。そのために、train時の注意書きに「実際の枚数より1割くらい少なめに指定してください」という旨がよく書かれています。

    キャンセル

  • 2017/09/16 17:56

    そうですね。正解数の指定を実際の0.8から0.9にした方が良いようです。
    あと正解画像、不正解画像について気になった点として、ネットで不正解画像のサンプルを集めると解像度が低い、小さい画像ばかりなのですが、オブジェクト認識ファイル(.xmlファイル)の制作において適切な解像度、縦横のピクセル数はあるのでしょうか。

    キャンセル

  • 2017/09/16 20:29 編集

    >正解数の指定を実際の0.8から0.9
    経験上、ステップ数が進むにつれシビアになっていくので、0.8か0.7くらいがよいと思います。
    >適切な解像度、縦横のピクセル数はあるのでしょうか。
    解像度が高いと正確になり処理が重くなります。低い場合は逆ですね。解像度の低い側から様子を見ながら、不具合があれば上げてはいかがでしょうか?
    アスペクト比はターゲット次第で、適当に合わせればよいと思います。

    キャンセル

  • 2017/09/29 14:54 編集

    新しい質問で回答依頼するつもりでしたが、この質問で回答依頼をクリックしてしまったようなのでここで聞きます。

    おかげさまで認識ファイルが作成でき、パソコンのカメラで確認したところ認識できていました。
    createsamplesで-imgで一枚の画像から7000枚の正解画像を制作し、不正解を3500枚にして制作したわけですが、もっと枚数を増やせば精度は上がりますか。それとも一定の枚数から精度は変わらないものですか。

    あとtraincascadeが16ステージで終わり、Required leaf false alarm rate achieved. Branch training terminated.というメッセージが表示されました。16ステージで終わってもxmlファイルは作成されうまく認識できていたのであまり気にしなくてもいいのでしょうか。

    キャンセル

  • 2017/09/29 21:08

    長くなるので回答欄に書きますね。

    キャンセル

+1

回答依頼の件(2017/09/29夜 追記)


Q.1

一枚の画像から7000枚の正解画像を制作し、不正解を3500枚にして制作したわけですが、もっと枚数を増やせば精度は上がりますか。

一般的な話として、枚数を上げればある程度は上がると思います。が、ここでそれよりも、もっと大事にしたいのは「データの質(規模・性質)」と「パラメータ(どう処理するか)」です。

*データの質の話
先日stackoverflow(リンクは忘れました…)を読んでいたところ「100枚のデータ増強写真よりも、本物の写真1枚の方がずっと価値が高い。しっかりした選別機を作りたいなら、(めんどくさいかもしれないけれども)ちゃんとデータをそろえるべきだ」というようなことが書いてありました。

増強データよりも本物のデータの方が、上手くばらついているとでも呼ぶのでしょうか。対象の背景が都度ばらついていることが物体検出では必要になってきますので、その辺が実際のデータの方がうまくいっているのかもしれませんね。

なので、データの質的な切り口では、

1.まずはデータ増強によって得られた検出器を使い、デジカメか何かで撮影した動画をしゃーっと流して処理

2.正解フレームや誤検出したフレームを保存(OpenCVの動画再生でqボタンで割り込む要領で、sで保存など適当にやればよいと思います)
※先の事例では、「動画を使えば写真を数千枚用意するくらいのことはたやすいけれども、動画を枚フレームや毎秒キャプチャしたところで、一般的にはそんなにバラついた写真は得られないよね。だから、適当に時間を置きながらデータを採るとよいよ」的なtipsが書かれていました。

3.新しく得られたデータを元にさらに改良されたカスケードファイルを生成
※誤検出画像を背景にしていしたり、対象物が含まれていない画像を適当なサイズに大小ばらつかせて背景に指定するのがよい、ということを割と見かけます、

が精度を上げるためのデータの準備になります。

*パラメータの話
上手く検出するためには、パラメータ(アルゴリズム側)の設定も重要になります。デフォルトではHaar-likeになっていると思いますが、LBPやHOGも試してはいかがでしょうか?それぞれの特徴量に特異不得意があるようで、詳しい方でも「モデル毎にやってみないと分からない」というような記事をよく見ます。
あたりをつけるために、まずは少ないステージ数で走らせて試すのがよいと思います。


Q.2

あとtraincascadeが16ステージで終わり、Required leaf false alarm rate achieved. Branch training terminated.というメッセージが表示されました。16ステージで終わってもxmlファイルは作成されうまく認識できていたのであまり気にしなくてもいいのでしょうか。

その通りだと思います。確かtraincascadeをする際に、目標値(この精度で誤検出しなくなるまでやる)を引数で設定するか、なければデフォルト値がロードされるようになっていたと思います。その値に達したのでもうこれ以上訓練する必要はないね、ということで打ち切られていますね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/29 23:39

    回答ありがとうございます。
    不正解画像に関しては似たようなものを多く集めても意味が無いと思い、できるだけ異なるものを集めました。パラメータの話は-featureTypeでLBPやHOGが選択できるようですね。特徴量以外にも自分で数値を設定できるのでそれらを自分で設定することも影響しそうです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    OpenCV

    以前OpneCVというAPIをAndroidStudioで使おうと思い 半月悩み出来なかったので仕事がお釈迦になってしまいました。 その後も諦めきれなくどうしてもいつか、使

  • 受付中

    Mat画像にcvFindcontourを使用したい

    Matに格納している画像にcvFindContourを適用したいです。 Mat img(SIZE(x,y), IPL_DEPTH_) Matで定義した画像をcvFindCo

  • 受付中

    IP webcamとopencvについて

    #include <opencv2\opencv.hpp> #include <iostream> #include <stdio.h> using namespace std;

  • 受付中

    画像処理 分割処理

    オセロを作りたいのですが、 OpenCVでカメラから画像を取得し、その画像を縦3,横3の9マスに分けて処理が行われるようにし、 1マスごとの平均画素値を分かるようにしたいです。

  • 受付中

    OpenCLの使用について

    前提・実現したいこと 画像処理ソフトの開発(Qt, C++環境)において、OpenCV3.2.0を使用しております。 また、OpenCV3.0以降では、OpenCL周りのインタ

  • 解決済

    cv_32fc1の画素値への代入

     前提・実現したいこと OpenCVでCV_32FC1の型への画素値の代入を行いたい  発生している問題・エラーメッセージ CV8UC1の型では下記のコードのようにdataを用

  • 受付中

    brew tap homebrew/science

     前提・実現したいこと macでopencvを使いたい https://qiita.com/daisukeokaoss/items/738566e9f24d114651ab このサ

  • 受付中

    opencvのサンプルコードの書き換え

     前提・実現したいこと opencvのサンプルコード「falsecolor.cpp」を画像フォルダで実行できるようにサンプルコードを書き換えたい。 (例)PHP(CakePHP)で

同じタグがついた質問を見る

  • OpenCV

    1085questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。