Pratique de projet d'apprentissage automatique : le processus de construction d'un classificateur d'images

Auteur : Zen et l'art de la programmation informatique

1. Introduction

La classification des images est un problème très important et difficile dans le domaine de la vision par ordinateur. En raison de ses caractéristiques hautement non linéaires et diverses, une grande quantité de données d’entraînement et des algorithmes complexes sont généralement nécessaires pour effectuer une reconnaissance d’image précise. Cet article construira étape par étape un classificateur d'images simple et explorera progressivement les concepts de base, la terminologie, les algorithmes de base et les scénarios d'application dans ce domaine. J'espère qu'il sera utile aux lecteurs qui débutent dans le domaine de l'apprentissage automatique.

2.Concepts de base

2.1.Qu'est-ce que la classification des images ?

La classification d'images fait référence à la classification d'un ensemble d'images d'entrée et à la détermination de leur catégorie. La classification d'images est une tâche importante de la vision par ordinateur. Son objectif est d'identifier divers objets dans les images et leurs emplacements. La gamme d'applications s'étend du large et simple aux divers phénomènes de l'environnement naturel qui peuvent être classés en une ou plusieurs catégories. Par exemple, dans un système de voiture autonome, identifier s'il y a un obstacle devant le véhicule, identifier les panneaux routiers, identifier les panneaux d'arrêt, etc. sont toutes des tâches de classification d'images.

2.2. Caractéristiques des tâches de classification d'images

Les principales caractéristiques des tâches de classification d'images comprennent :

  • Diversité : Différents types d'objets et de scènes feront que les données d'image afficheront une variété de motifs.
  • Floue : les images peuvent paraître floues pour diverses raisons.
  • Petites cibles : Certaines petites cibles apparaîtront dans l'image.
  • Prise de vue panoramique : les changements de perspective peuvent rendre l'image très floue.
  • Formes irrégulières : les objets peuvent avoir des formes irrégulières, comme du texte dans une image ou une forme elliptique.
  • Changements environnementaux : les images peuvent avoir été prises dans des conditions d'éclairage différentes ou acquises dans des conditions météorologiques différentes.

    2.3. Algorithme de classification d'images

    Les algorithmes de classification d'images sont divisés en deux types : les algorithmes basés sur la structure et les algorithmes basés sur l'apprentissage.

    2.3.1. Algorithmes basés sur la structure

    L'algorithme basé sur la structure utilise des fonctionnalités existantes conçues à la main pour classer directement à partir des valeurs de pixels, de la distribution des couleurs, etc. de l'image. Cette méthode utilise généralement l'ingénierie des fonctionnalités pour extraire les fonctionnalités efficaces, puis utilise des modèles d'apprentissage automatique traditionnels tels que des arbres de décision, des machines vectorielles de support ou des forêts aléatoires pour la classification. Par exemple, l'algorithme Viola-Jones utilise les fonctionnalités de Haar comme fonctionnalités de base et peut effectuer la détection des visages en très peu de temps.

    2.3.2. Algorithmes basés sur l'apprentissage

    Les algorithmes basés sur l'apprentissage utilisent les données d'entraînement pour entraîner les paramètres du modèle, puis classer les nouvelles images d'entrée. Par rapport aux algorithmes basés sur la structure, les algorithmes basés sur l'apprentissage peuvent dans une certaine mesure surmonter des problèmes tels que le bruit, le manque d'échantillons et la rareté des données, et peuvent mieux s'adapter aux nouvelles données. Actuellement, les algorithmes de classification d'images basés sur l'apprentissage les plus populaires incluent le K-plus proche voisin (k-NN), la machine à vecteurs de support (SVM), le réseau neuronal (Neural Network), etc.

Dans cet article, nous allons construire un classificateur d’images simple basé sur la méthode des K voisins les plus proches. En raison des limitations d'espace, cet article ne discutera qu'une version d'implémentation simple de la méthode K plus proche voisin et n'impliquera pas de réseaux neuronaux complexes, de machines vectorielles de support et d'autres technologies.

3. Principes et processus de l'algorithme

3.1. Introduction à la méthode des K plus proches voisins

K Nearest Neighbours (KNN) est un algorithme de classification couramment utilisé. Il calcule la distance entre chaque échantillon de test et chaque échantillon de l'ensemble d'échantillons, trouve les K échantillons les plus proches et sélectionne la catégorie « majoritaire » parmi ces K échantillons comme catégorie prédite de l'échantillon de test. Par conséquent, l'algorithme KNN peut être considéré comme une méthode d'apprentissage paresseux, c'est-à-dire qu'il ne nécessite pas de formation et peut utiliser directement de nouvelles données pour la prédiction.

3.2.Processus de base de KNN

  1. Étape de préparation des données
    • Mettez en mémoire l’ensemble d’échantillons de formation d’origine et l’ensemble d’échantillons de test ;
    • Construire une structure de données pour l'ensemble d'échantillons de formation - KDTREE ;
  2. Étape de classement
    • Pour chaque échantillon de test de l'ensemble d'échantillons de test, calculez la distance entre celui-ci et tous les échantillons d'apprentissage ;
    • Triez en fonction de la distance et sélectionnez les K échantillons d'entraînement avec la plus petite distance ;
    • En votant, comptez les catégories de ces K échantillons d’entraînement ;
    • Renvoie la catégorie avec le plus d'occurrences parmi les K échantillons comme catégorie prédite de l'échantillon de test.

Parmi eux, la méthode de calcul de distance peut utiliser la distance L1, la distance L2 ou la distance euclidienne, etc. La valeur K est également appelée nombre de voisins, et les valeurs couramment utilisées sont 5, 7, 9, etc.

3.3. Avantages et inconvénients de KNN

3.3.1. Avantages de KNN

  • Simple et intuitif : l'algorithme KNN est facile à comprendre, rapide à utiliser et facile à mettre en œuvre.
  • Peut être utilisé pour de petits ensembles de données d'échantillons : lorsque l'ensemble d'échantillons d'entraînement est petit, l'algorithme KNN peut obtenir de meilleurs résultats.
  • Le modèle a une grande robustesse : lorsque l’espace des fonctionnalités a des dimensions inférieures, l’algorithme KNN est toujours efficace et n’est pas sensible aux valeurs aberrantes.

    3.3.2.Inconvénients du KNN

  • Sélection de la valeur K : une valeur K trop grande ou trop petite affectera l'effet du modèle.
  • Temps de formation long : lorsque l'ensemble d'échantillons de formation est volumineux, l'algorithme KNN prend beaucoup de temps.
  • Forte dépendance à l'échantillon : l'algorithme KNN dépend fortement de la distribution des échantillons et a des exigences strictes en matière de distribution des échantillons.

4.Exemple de code d'implémentation KNN

import numpy as np
from scipy.spatial import cKDTree

class knn_classifier():

    def __init__(self):
        pass

    def fit(self, X_train, y_train):
        self.tree = cKDTree(X_train) # build a KD tree from training data
        self.y_train = y_train

    def predict(self, X_test, k=5):
        dists, inds = self.tree.query(X_test, k=k) # calculate distances and indices of the nearest neighbors

        y_pred = []
        for i in range(len(X_test)):
            neighbor_labels = self.y_train[inds[i]]
            labels, counts = np.unique(neighbor_labels, return_counts=True)
            max_label = labels[np.argmax(counts)] # find the most frequent label among the k neighbors
            y_pred.append(max_label)

        return y_pred

if __name__ == '__main__':

    # load the dataset
    from sklearn.datasets import fetch_openml
    mnist = fetch_openml('mnist_784')
    X_train = mnist['data'][:5000] / 255.0 # normalize the input features to [0, 1]
    y_train = mnist['target'][:5000].astype(int)
    X_test = mnist['data'][5000:].reshape(-1, 28*28).astype(float) / 255.0
    y_test = mnist['target'][5000:]

    # train a knn classifier on MNIST dataset
    clf = knn_classifier()
    clf.fit(X_train, y_train)
    y_pred = clf.predict(X_test)

    accuracy = (sum([1 if pred==true else 0 for pred, true in zip(y_pred, y_test)])) / len(y_test)
    print("The test accuracy is:", accuracy)

5. Perspectives et défis futurs

5.1.Améliorations de KNN

L'algorithme KNN présente les problèmes suivants :

  • Vitesse lente : lorsque l'ensemble d'échantillons d'entraînement est volumineux, l'algorithme KNN s'exécute lentement, en particulier pour le traitement de données volumineuses.
  • Faible dépendance à l'échantillon : l'algorithme KNN dépend fortement des échantillons d'entraînement, c'est-à-dire que si la distribution des échantillons change, le modèle knn doit être recyclé.
  • Ne considérer que les valeurs des caractéristiques : l'algorithme KNN ne prend en compte que les valeurs des caractéristiques de l'échantillon et ignore les informations contextuelles de l'échantillon. Par conséquent, lors de la rencontre de nouvelles données, la précision de la classification est médiocre.

Afin de résoudre les trois problèmes ci-dessus, certains algorithmes KNN améliorés ont été proposés, tels que les K-means, le clustering hiérarchique, le hachage sensible local, etc. Le but de ces algorithmes est de réduire le temps de formation, d'améliorer la robustesse du modèle, d'augmenter les informations contextuelles des échantillons et d'améliorer les performances de classification.

5.2. Apprentissage profond et classification d'images

Avec le développement rapide des capteurs, des mémoires, des processeurs et d'autres technologies, de plus en plus de données d'images sont stockées dans des formats multimédias, ce qui entraîne une croissance explosive des données d'images massives. Cela nécessite des modèles de classification d’images de plus en plus sophistiqués pour traiter ces données. Actuellement, les technologies d’apprentissage profond et de réseaux de neurones convolutifs (CNN) deviennent des sujets brûlants dans le domaine de la classification d’images. Les CNN utilisent des opérations de convolution pour extraire des caractéristiques de zones locales, réaliser une cartographie de caractéristiques en connectant des neurones et réaliser un apprentissage de caractéristiques et une prédiction de classification de bout en bout. Bien que la précision et l’efficacité des CNN dépassent de loin les méthodes traditionnelles de classification d’images, ils sont également confrontés à de nombreux défis.

Tout d'abord, la manière d'utiliser une grande quantité de données de formation, des milliers d'échantillons de formation et un grand nombre de capacités d'extraction de fonctionnalités pour créer un modèle CNN suffisamment grand est au centre des recherches actuelles. Comment réduire la taille du modèle, réduire l’utilisation des ressources informatiques et améliorer l’efficacité tout en garantissant la précision du modèle est également l’un des sujets brûlants de la recherche actuelle. En outre, la manière d'effectuer l'élagage, le réglage fin, l'expansion des données et d'autres technologies sur les modèles CNN pour améliorer les performances de généralisation du modèle est également l'un des sujets de recherche d'actualité.

Je suppose que tu aimes

Origine blog.csdn.net/universsky2015/article/details/133504705
conseillé
Classement