0

OpenCV のドキュメントには、インフルエンス トリミングを使用して、「ブーストされたモデルの計算時間を短縮し、精度を大幅に低下させる」ことができると記載されています。デフォルトでは、weight_trim_rate パラメーターは 0.95 です。そのパラメータを 0 に変更してインフルエンス トレーニングを無効にした後、実際に大幅なスピードアップを達成しました。262144 サンプルのデータセットを使用すると、5 倍のスピードアップを達成できます。10 倍のデータセットを使用すると、3 倍の高速化を達成できます。これは、予想される動作とは逆のようです。なぜこれが起こっているのか、誰か説明できますか?ありがとう!

いくつかのサンプル データを以下に追加します。ここでの基本的なケースは、インフルエンス トリミングが無効になっている場合です。これにより、95.03 の精度と 10.607 のトレーニング時間が得られます。インフルエンス トリミングをオンにすると (デフォルトは 0.95)、精度は予想どおり 94.94 に低下しますが、トレーニング時間は 5 倍かかります。

100 weak classifiers with a max depth of 1               
Trim    Accuracy    MSE     Training Time   Percent Speedup 
0       95.03        3.989   10.607 
0.6      7.88       86.77     1.252          8.472044728
0.7     15.76       78.21     2.319          4.573954291
0.8     33.35       57.73    52.972          0.200237862
0.9     94.68        4.89    52.484          0.202099688
0.95    94.94        4.189   52.31           0.202771937
0.99    95.03        3.99    47.026          0.225556075
0.999   95.02        3.985   44.432          0.238724343

コード例:

CvBoost boost;
CvBoostParams boostingParameters;

boostingParameters.boost_type       = CvBoost::REAL;
boostingParameters.weak_count       = 100;
boostingParameters.weight_trim_rate = 0.95;
boostingParameters.max_depth        = 1;
boostingParameters.use_surrogates   = false;
boostingParameters.max_categories   = 2;
boostingParameters.min_sample_count = 100;

boost.train(features, CV_ROW_SAMPLE, responses,
            cv::Mat(),
            cv::Mat(),
            cv::Mat(),
            cv::Mat(),
            boostingParameters,
            false);
4

0 に答える 0