2017-07-09 13 views
0

私はSVM(opencvのtrain_auto)を2回トレーニングしています。SVMトレーニングの時間は入力データの内容に依存しますか?

私は同じパラメータ: C = 0.01,100000反復、32個のフィーチャ、および24550個のサンプルを使用します。 しかし、異なる入力サンプル。初めてトレーニングデータと2回目のトレーニングデータを使用するのは初めてですが、最初の手順と同じ量のトレーニングデータが含まれています。

最初のトレーニングは約2時間後に終了します。 2番目は無限に(10時間以上)実行されます。これはどのように可能で、どのように問題を解決することができますか?

挨拶、 シュテフィ

編集いくつかのコード:

void SVMtrain(bool retraining) { 

    int factor_pos = 5; 
    int factor_neg = 10; 

    std::string line; 
    int N_pos = 2474; 
    N_pos *= factor_pos; 

    int N_neg = 0; 
    std::ifstream myfile2(LIST_NEG); 
    while (std::getline(myfile2, line)) 
     ++N_neg; 
    N_neg *= factor_neg; 

    Mat points = createFirstSet(N_pos, N_neg, factor_pos, factor_neg); 
    Mat labels = createFirstLabels(N_pos, N_neg); 

    Mat all_neg; 
    if (retraining) { 
     Mat hardNegatives = find_hardNegatives(); 
     hardNegatives.copyTo(points(Rect(0, points.rows - (MAX_HARD_NEG+1), hardNegatives.cols, hardNegatives.rows))); 
    } 

    // Train with SVM 
    CvSVMParams params; 
    params.svm_type = CvSVM::C_SVC; 
    params.kernel_type = CvSVM::LINEAR; 
    params.C = 0.01; //best option according to Dalal and Triggs 
    params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, iterations, 1e-6); 


    CvSVM SVM; 
    if (retraining) { 
     cout << "Training SVM with " << points.rows << " Datapoints... (" << N_pos << ", " << points.rows - N_pos << ") since: " << getTimeFormatted()<< endl; 
     SVM.train_auto(points, labels, Mat(), Mat(), params); 
     SVM.save(SVM_2_LOCATION); 
    } 
    else { 
     cout << "Training SVM with " << points.rows << " Datapoints... (" << N_pos << ", " << N_neg << ") since: " << getTimeFormatted() << endl; 
     SVM.train_auto(points, labels, Mat(), Mat(), params); 
     SVM.save(SVM_LOCATION); 
    } 
    cout << "finished training at " << getTimeFormatted() << endl << endl; 
} 
+0

データが線形に分離できないと思うなら、** RBF **カーネルを試してみることをお勧めします。また、フラグの組み合わせを試すこともできます(例:iterations + EPS)。 –

+0

しかしRBFは通常線形より時間がかかりますね。しかし、私は試してみる。あなたのおかげでありがとう。あなたの答えは – Steffi

答えて

3

これが可能にすべきではありません。

しかし、2番目のトレーニングでは、いくつかの偽陰性が追加されたことにご説明しました。私はあなたのデータがどのように見えるかは正確にはわかりませんが、データを線形に分離できないと仮定しています。これにより、SVMの実装が中断される可能性があります。そうでなければ私はあなたをさらに助けることができません

+0

ありがとう。私は、64x128 HoG細胞での歩行者検出にSVMを使用しています。ですから、最初のトレーニングは線形ではありません。 – Steffi

関連する問題