How would you approach the following problem: I have 5 classes of images (in total 500 images): car, house, trees, chair and face. Then I have a folder with 20 disordered images, which means I know they belong to one of the 5 classes but do not know yet to which one and I want my system to classify them according to the 5 controlled classes. I am using several extractors (hue,edge) to accomplish this task, but I am struggling to get a suitable classification approach. In particular some python libraries require to name the uncontrolled image folder in the same way as the class folder (e.g. /dir/controlled/car and /dir/uncontrolled/car) this simply is not feasible for my analysis. As far as I am looking for alternative approaches can you give some methodological advice/workaround within sklearn?
1 に答える
おそらく、 ImageNetなどのラベル付きデータセットを使用して、これらの 5 つのクラスで分類器を最初にトレーニングする方が簡単でしょう(+1 追加の「その他」クラスで、これらの 5 つのクラスからではないランダムな画像で埋めます)。
クラスをほぼバランスよく保ちながら、画像ネットからできるだけ多くの例を取り、トレーニング セットを構築します。たとえば、imagenet にはほぼ 8000 の車の写真があります: http://www.image-net.org/synset?wnid=n02958343ですが、約 1500 の顔しかありません: http://www.image-net.org/synset?wnid=n02958343。その場合、一部の分類器は適切に機能しない可能性があり、車のクラスをサブサンプリングすると、f1 スコアに関してより良い結果が得られる可能性があります。顔の写真の別のソースを見つけない限り。
ImageNet サブセットで優れた相互検証スコアを生成する特徴抽出 + 分類子チェーンの一連のパラメーターを見つけたら、その完全なサブセットでモデルを再トレーニングし、それを適用して独自のデータセットのラベルを予測します。
信頼スコアを与える分類子を選択し (たとえば、predict_proba
またはなどの方法decision_function
で)、最高および最低の信頼スコアで分類の品質を調べます。
- すべての最高の分類が正しい場合は、安全なしきい値を超えるすべての画像を、元の imagenet サブセットとそれらの新しい画像で構成される「ステージ 2」トレーニング セットに追加します。
- 信頼度が最も低い予測で最も問題のある間違いに手動で再注釈を付け、それらを「段階 2」のトレーニング セットに追加します。
分類アルゴリズムがほとんどの写真に正しく注釈を付けることができるようになるまで、この強化されたデータセットで新しいモデルを再トレーニングすることを繰り返します。
ところで、オーバーフィットを避けるために、データに注釈を付けて分類子を繰り返し使用し始めたら、パラメーターをあまり変更しないでください。パラメータの選択をやり直したい場合は、クロス検証を再度実行する必要があります。