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);