私は OpenCV KNN 分類器を使用しました。トレーニング後、テスト段階で使用できるように分類器を保存する必要があります。knn.save()
OpenCVに実装されていないことがわかりました。どうすればいいですか?
3 に答える
k-NN では、トレーニングがないため、保存と書き込みは実装されていません。train メソッドは、すべてのサンプルを保存するだけです。したがって、「モデル」は推測されず、すべてのサンプル以外は保存する必要がありません。
opencv 3.0 では knn->save("train.yml") が実装されています、、、
ロード機能を動作させることはできませんでしたが、FIleStorage を使用してファイルからモデルを簡単に読み取ることができます。上記のように、knn ではモデルは基本的に機能であるため、常に Mat 機能をファイルに保存し、後でロードします。
コメントするには長すぎるので、ここに投稿します。これは完全な解決策ではないため、その方法を正確に知っている人は誰でも: より良い回答を共有してください
私は見ましたが、直接的な実装は見つかりませんでした。しかし、私は、K Nearest Neighbor を含む訓練された分類器の巨大なセットを読み取る方法を見つけたこの男(彼のブログにたくさんの良いものがあります)を見つけました。
彼の方法を使用して、CvKNearest の書き込みと読み取りを実装できる場合があります。
ちなみに、私の弱い C++ の理解が正しく、save
既にread
実装されていて、write
実際read
に実装する必要がある場合。
たとえば、次のようにしCvBoost::save
ます。
(ブースト.cpp)CvBoost::save
--> (inner_functions.cpp)CvStatModel::save
--> (boost.cpp)CvBoost::write
同様に、次の関数を追加する必要があります。
(knearest.cpp)CvBoost::write
申し訳ありませんが、より具体的なものを見つけることができませんでした。これが役立つことを願っています。