Archives dans 2022

Création de listes en Python

Contrairement à d’autres langages, Python propose des listes et non des tableaux. Cela a certains avantages :

– pas besoin de déclaration une taille de tableaux

– gestion dynamique de la liste

– des listes hétérogènes de différents types

– des opérations sur les listes (programmation objet).

Création de listes à une dimension

On peut tout d’abord créer une liste vide puis lui ajouter des éléments

[pastacode lang=”python” manual=”liste1%20%3D%20%5B%5D%0Aliste1.append(1)%0Aliste1.append(%E2%80%9Ca%E2%80%9D)%0Aprint(liste1)%0A” message=”” highlight=”” provider=”manual”/]

Pour créer des listes plus longues, on peut utiliser les compréhensions de listes

[pastacode lang=”python” manual=”liste%20%3D%20%5Bi%20for%20i%20in%20range(1%2C10)%5D%C2%A0″ message=”” highlight=”” provider=”manual”/]

Ensuite, on peut créer une liste par copie de liste

[pastacode lang=”python” manual=”liste%20%3D%20%5Bi%20for%20i%20in%20range(1%2C10)%5D%0Aco%3Dliste.copy()%20%23%20copie%20de%20la%20liste%0A%0A” message=”” highlight=”” provider=”manual”/]

On peut aussi utiliser la syntaxe liste[:] au lieu de liste.copy()

[pastacode lang=”python” manual=”liste%20%3D%20%5Bi%20for%20i%20in%20range(1%2C10)%5D%0Aco%3Dliste.copy()%0Aco1%20%3D%20liste%5B%3A%5D%0A” message=”” highlight=”” provider=”manual”/]

Avec les éléments vus plus haut, on peut maintenant facilement créer toutes sortes de listes . Voici quelques exemples

[pastacode lang=”python” manual=”liste1%3D%20%5Bi%20for%20i%20in%20range(10)%5D%20%23%20Liste%20des%20%C3%A9l%C3%A9ments%20allant%20de%200%20%C3%A0%209%0Aliste2%20%3D%20%5Bi**2%20for%20i%20in%20range(10)%5D%20%23%20Liste%20du%20carr%C3%A9%20des%20%C3%A9l%C3%A9ments%20de%200%20%C3%A0%209%0Aliste3%20%3D%20%5B2*x%2B3%20for%20x%20in%20range(10)%5D%20%23%20Liste%20des%20%C3%A9l%C3%A9ments%20prennant%20la%20valeur%20de%20la%20fonction%20affine%202x%20%2B3%20de%20chanque%20%C3%A9l%C3%A9m%C3%A9nt%20de%200%20%C3%A0%209%0A%0Aliste4%20%3D%20%5B%20i%20for%20i%20in%20range(10)%20if%20i%252%3D%3D0%5D%20%23%20Liste%20contenant%20les%20valeurs%20paires%20entre%200%20%C3%A0%209%0A%0Aliste5%20%3D%5B%20i%20for%20i%20in%20range(10)%20if%20i%252%3D%3D1%5D%20%23%20Liste%20contenant%20les%20valeurs%20impairs%20entre%200%20%C3%A0%209%0Aliste6%20%3D%5B%20i%20for%20i%20in%20range(20)%20if%20i%253%3D%3D0%5D%20%23%20Liste%20des%20multiples%20de%203%20entre%200%20et%2019%0A%0A%22%22%22%20%0AOn%20a%20en%20sortie%20sur%20l%E2%80%99%C3%A9cran%20les%20valeurs%20suivantes%3A%0Aliste1%20%3A%20%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%5D%0A—————————————%0Aliste2%20%3A%20%5B0%2C%201%2C%204%2C%209%2C%2016%2C%2025%2C%2036%2C%2049%2C%2064%2C%2081%5D%0A—————————————%0Aliste3%20%3A%20%5B3%2C%205%2C%207%2C%209%2C%2011%2C%2013%2C%2015%2C%2017%2C%2019%2C%2021%5D%0A—————————————%0Aliste4%20%3A%20%5B0%2C%202%2C%204%2C%206%2C%208%5D%0A—————————————%0Aliste5%20%3A%20%5B1%2C%203%2C%205%2C%207%2C%209%5D%0A—————————————%0Aliste6%20%3A%20%5B0%2C%203%2C%206%2C%209%2C%2012%2C%2015%2C%2018%5D%0A%0A%22%22%22″ message=”” highlight=”” provider=”manual”/]

Pour savoir comment calculer la somme des éléments dans une liste Somme des éléments d’une liste Python

Somme des éléments d’une liste Python

La liste est l’une des structures de données les plus couramment utilisées en Python, on peut donc se demander comment faire la somme des éléments d’une liste ?

Voici comment calculer la somme des éléments d’une liste en Python :

 

# déclarez une liste
liste = [1, 2, 3, 4, 5]

# utilisez la fonction sum() pour calculer la somme des éléments de la liste
somme = sum(liste)

# affichez la somme des éléments
print(somme)

 

Pour calculer la somme des éléments d’une liste,on peut utiliser la boucle  for pour faire l’addition entre tous les éléments en commençant par le début de la liste. Pour faciliter le calcul, on initialise la somme au début à O, comme Somme= 0. On peut également utiliser la fonction sum() qui est déjà présente en python.

 Toutefois il est important  de noter que, si une liste de tout autre chose que des valeurs numériques est directement fournie à la méthode sum(), elle lèvera un TypeError.

Dans de tels cas, il faut  filtrer les données avant de faire le calcul de la somme des valeurs numériques.  Pour savoir comment utiliser la boucle for pour afficher les éléments d’une liste,Allez ici 

Boucle for python

Une boucle for est utilisée pour itérer sur une séquence (c’est-à-dire une liste, un tuple, un dictionnaire, un ensemble ou une chaîne).

Avec la boucle  for , on peut exécuter un ensemble d’instructions, une fois pour chaque élément d’une liste, d’un tuple, d’un set, etc. 

Exemple de code:

[pastacode lang=”python” manual=”fruits%20%3D%20%5B%22pomme%22%2C%20%22banane%22%2C%20%22mange%22%5D%0Afor%20x%20in%20fruits%3A%0A%20print(x)” message=”Exemple code boucle for python” highlight=”” provider=”manual”/]

Par exemple, pour avoir tous les éléments de la liste sur une même ligne, on peut procéder de la manière suivante :

[pastacode lang=”python” manual=”a%20%3D%20%5B1%2C%202%2C%203%2C%204%5D%0Afor%20i%20in%20range(4)%3A%0A%20%20%20print(a%5Bi%5D%2C%20end%20%3D%22%20%22)%0A” message=”” highlight=”” provider=”manual”/]

On a la sortie : 1 2 3 4

Si on veut on peut itérer en utilisant range pour avoir une liste avec un type de données: Voici un exemple dans le code suivant:

[pastacode lang=”python” manual=”%0Aliste1%20%3D%20%5Bx%20for%20x%20in%20range(10)%5D%0Afor%20i%20in%20range(len((liste1)))%3A%0A%20%20%20print(liste1%5Bi%5D%2C%20end%3D%22%20%22)%0A” message=”” highlight=”” provider=”manual”/]

Le code liste1 = [x for x in range(10)], permet de créer une liste d’éléments allant de 0 à 9, en faisant print(liste1), on va afficher la liste créée avec ses éléments.

En sortie, on aura le résultat suivant  sur l’écran : Sortie : 0 1 2 3 4 5 6 7 8 9

Pour afficher tous les éléments de la liste créée, on peut également utiliser le symbole * qui va précéder le nom de la liste de la manière suivante:

[pastacode lang=”python” manual=”%0Aliste1%20%3D%20%5Bx%20for%20x%20in%20range(10)%5D%0Aprint(*liste1)%0A%0A%23%20Sortie%3A%200%201%202%203%204%205%206%207%208%209″ message=”” highlight=”” provider=”manual”/]

Les listes en python

Les listes sont utilisées pour stocker plusieurs éléments dans une seule variable.

Les listes (ou list array ) en python sont une variable dans laquelle on peut mettre plusieurs variables.

Les listes sont l’un des 4 types de données intégrés à Python utilisés pour stocker des collections de données, les 3 autres sont Tuple , Set et Dictionary , tous avec des qualités et une utilisation différentes.

Les listes sont créées à l’aide de crochets  :  

liste1= [1,2,3,4,5,6,7,8,9]

Éléments de la liste

Les éléments de liste sont ordonnés, modifiables et autorisent les valeurs en double.

Les éléments de la liste sont indexés, le premier élément a index [0], le deuxième élément a index [1] etc. 

Changeable

La liste est modifiable, ce qui signifie que nous pouvons modifier, ajouter et supprimer des éléments dans une liste après sa création.

Autoriser les doublons

Puisque les listes sont indexées, les listes peuvent avoir des éléments avec la même valeur

Longueur de la liste

Pour déterminer le nombre d’éléments d’une liste, utilisez la len() fonction

[pastacode lang=”python” manual=”liste1%3D%20%5B1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%5D%0Aprint(%22Longueur%20de%20la%20liste%22%2C%20len(liste1)%20)” message=”” highlight=”” provider=”manual”/]

Éléments de liste – Types de données

Les éléments de liste peuvent être de n’importe quel type de données :

[pastacode lang=”python” manual=”list1%20%3D%20%5B%22pomme%22%2C%20%22banane%22%2C%20%22orange%22%5D%0Alist2%20%3D%20%5B1%2C%202%2C%203%2C%204%2C%205%5D%0Alist3%20%3D%20%5BTrue%2C%20False%2C%20False%5D” message=”” highlight=”” provider=”manual”/]

Une liste peut contenir différents types de données : 

[pastacode lang=”python” manual=”list1%20%3D%20%5B%22abc%22%2C%2012%2C%20True%2C%2050%2C%20%22homme%22%5D” message=”” highlight=”” provider=”manual”/]

Une liste avec des chaînes, des entiers et des valeurs booléennes 

Le constructeur list()

Il est également possible d’utiliser le constructeur list() lors de la création d’une nouvelle liste.

Utilisation du list() constructeur pour créer une liste : 

[pastacode lang=”python” manual=”liste1%20%3D%20list((%22a%22%2C%20%22b%22%2C%20%22c%22))%20%0Aprint(liste1)” message=”” highlight=”” provider=”manual”/]

Collections Python (tableaux)

Il existe quatre types de données de collecte dans le langage de programmation Python :

  • List est une collection ordonnée et modifiable. Autorise les membres en double.
  • Tuple est une collection ordonnée et immuable. Autorise les membres en double.
  • Set est une collection non ordonnée, non modifiable* et non indexée. Aucun membre en double.
  • Dictionary est une collection ordonnée** et modifiable. Aucun membre en double.

Les éléments de la liste sont indexés et vous pouvez y accéder en vous référant au numéro d’index 

 

Remarque : Le premier élément a l’index 0.

Indexation négative

L’indexation négative signifie commencer par la fin

-1 fait référence au dernier élément, -2 fait référence à l’avant-dernier élément, etc.

Modifier la valeur

Pour modifier la valeur d’un élément spécifique, reportez-vous au numéro d’index :

[pastacode lang=”python” manual=”liste1%20%3D%20%5B%22a%22%2C%20%22b%22%2C%20%22c%22%5D%0Athislist%5B1%5D%20%3D%20%22d%22%0Aprint(liste1)” message=”” highlight=”” provider=”manual”/]

Remarque : La longueur de la liste change lorsque le nombre d’éléments insérés ne correspond pas au nombre d’éléments remplacés.

 

Outils d’annotation des images

Avant de procéder à l’entrainement d’un modèle basé sur les réseaux de neurones (cas de détection, classification et segmentation), il est important d’annoter les objets afin de permettre au modèle de reconnaître les objets plus tard et faire la prédiction. Pour faciliter le travail d’annotation, plusieurs outils existent déjà en version gratuite et payante. Je vous présente ici une liste non exhaustive dans le cas de l’annotation des images.

 

  • labelImg : LabelImg est un outil d’annotation d’image graphique et des boîtes de délimitation d’objets d’étiquette dans les images
  • Roboflow . En plus de l’annotation, la plate-forme facilite la conversion entre les formats d’annotation et la gestion des ensembles de données, ainsi que la formation et le déploiement de modèles personnalisés sur des points de terminaison d’API privés
  • CVAT – Outil d’annotation de vision par ordinateur puissant et efficace
  • labelme – Annotation polygonale d’image avec Python
  • VoTT – Un outil d’annotation et d’étiquetage open source pour les images et les vidéos
  • imglab – Un outil basé sur le Web pour étiqueter les images des objets qui peuvent être utilisés pour former dlib ou d’autres détecteurs d’objets
  • Yolo_mark – GUI pour marquer des boîtes délimitées d’objets dans des images pour former le réseau de neurones Yolo v3 et v2
  • PixelAnnotationTool – Logiciel qui vous permet d’annoter manuellement et rapidement des images dans des répertoires
  • OpenLabeling – Étiquetez des images et des vidéos pour les applications de vision par ordinateur
  • imagetagger – Une plateforme en ligne open source pour l’étiquetage collaboratif d’images
  • Alturos.ImageAnnotation – Un outil collaboratif pour étiqueter les données d’image
  • deeplabel – Un outil d’annotation d’images multiplateforme pour l’apprentissage automatique
  • MedTagger – Un cadre collaboratif pour annoter des ensembles de données médicales à l’aide du crowdsourcing.

Pour avoir plus de détails et d’autres outils d’annotation pour (les videos, le texte, l’audio et autres ..etc…) aller sur https://github.com/heartexlabs/awesome-data-labeling

Augmentation des données ou data augmentation

 

Qu’est-ce que l’augmentation d’image?

Afin d’augmenter la performance des algorithmes basés sur les réseaux de neurones, on applique souvent les méthodes d’augmentation des données. Selon Wikipédia (https://en.wikipedia.org/wiki/Data_augmentation), l’augmentation des données dans l’analyse des données sont des techniques utilisées pour augmenter la quantité de données en ajoutant des copies légèrement modifiées de données déjà existantes ou de données synthétiques nouvellement créées à partir de données existantes. Pour ce qui concerne la détection d’objets, l’augmentation de données permet d’optimiser la performance et la robustesse des détections.

Les algorithmes basés sur les réseaux de neurones profonds nécessitent beaucoup de données d’entraînement pour obtenir de bons résultats et éviter le surajustement. Cependant, il est souvent très difficile d’obtenir suffisamment d’échantillons d’apprentissage.

L’augmentation d’image  peut être défini comme un processus de création de nouveaux exemples de formation à partir d’exemples existants.

Parmi les méthodes d’augmentation de données pour la détection des objets, il y a deux types  de transformation (Transformations au niveau du pixel et Transformations au niveau spatial)

  1. Transformations au niveau du pixel

Les transformations au niveau du pixel ne changeront qu’une image d’entrée et laisseront inchangées toutes les cibles supplémentaires telles que les masques, les cadres de délimitation et les points clés. Voici quelques transformations au niveau du pixel :

Pour avoir plus de détail voir (https://github.com/albumentations-team/albumentations)

On peut également modifier la luminosité de l’image. L’augmentation de la luminosité de l’image implique l’augmentation ou la diminution aléatoire d’une image, comme l’application d’un changement de pourcentage +/- uniforme à tous les pixels d’une image. On peut appliquer le changement de teinte en changeant l’espace colorimétrique( la couleur de l’image). L’augmentation de la teinte de l’image modifie de manière aléatoire les couleurs d’une image, rendant ainsi un modèle plus résistant aux couleurs spécifiques des objets.

  2.Transformations au niveau spatial

Les transformations au niveau spatial modifieront simultanément une image d’entrée ainsi que des cibles supplémentaires telles que des masques, des cadres de délimitation et des points clés. Voici quelques transformations au niveau spatial

La liste complète des transformations à appliquer sur les images pour augmenter les données  est accessible via leur documentation en ligne via ()le lien suivant.

 

Algorithmes de détection d’objets

Quels sont les algorithmes de détection d’objets par les réseaux de neurones?

En général, les détecteurs d’objets basés sur l’apprentissage en profondeur extraient des caractéristiques de l’image ou de l’image vidéo d’entrée. Un détecteur d’objets résout deux tâches successives :

  • Tâche n° 1 : trouver un nombre arbitraire d’objets (peut-être même zéro), et
  • Tâche n° 2 : classer chaque objet et estimer sa taille à l’aide d’un cadre de sélection.

En fonction de l’étude menée ou du résultat attendu, on peut utiliser des algorithmes qui combinent les deux tâches ( algorithmes à une étage) ou utiliser des algorithmes qui font séparément les tâches ( algorithmes à deux étages). Voyons plus en détails les deux types d’algorithmes, leurs avantages et inconvénients.  

  1. Méthodes  ou algorithmes à une étage: les détecteurs à une étape prédisent simultanément la probabilité de la classe de sortie et la position exacte de l’objet à détecter. Ils combinent les deux tâches en une seule ce qui fait que le processus prend moins de temps  ce qui fait que ces algorithmes sont les plus utilisés dans la détection en temps réel. Ces  détecteurs d’objets à un étage donnent la priorité à la vitesse d’inférence et sont super rapides mais pas moins bons (moins précis) pour reconnaître des objets de forme irrégulière ou un groupe de petits objets. Parmi les détecteurs à un étage les plus populaires on a:  YOLO,  SSD ,  RetinaNet, HOG etc….
  2. Méthodes ou algorithmes à deux étages: les détecteurs d’objets à deux étages utilisent d’abord le réseau de suggestion régional ( RPN) pour générer des boîtes à suggestions régionales approximatives puis utilisent  une tête de détection dédiée pour classer les objets dans l’image. En d’autre terme,  une proposition de région d’objet avec des méthodes conventionnelles de vision par ordinateur ou des réseaux profonds, suivie d’ une classification d’objet basée sur des caractéristiques extraites de la région proposée avec une régression de boîte englobante. Les méthodes en deux étapes ou étages permettent d’obtenir la précision de détection la plus élevée, mais sont généralement plus lentes. Les détecteurs d’objets à deux étages trouvent d’abord une région d’intérêt et utilisent cette région recadrée pour la classification. Parmi les détecteurs à deux étages ou étapes les plus populaires on a: R-CNN, Fast R-CNN, Faster R-CNN, Mask R-CNN etc…

Détection des objets

Détection des objets

Qu’est-ce que la détection d’objets ?

En vision par ordinateur ou computer vision,  la détection d’objets  est désignée par une méthode permettant de détecter la présence d’une instance ou d’une classe d’objets dans une image numérique[1] https://fr.wikipedia.org/wiki/D%C3%A9tection_d’objet.

Selon la terminologie usuelle on peut distinguer la détection, de la localisation et de la reconnaissance d’objets :

  • détection (ou classification) : présence d’une instance de l’objet dans l’image
  • reconnaissance : identification d’une instance particulière (« déchets  », « le visage d’une personne »…)
  • localisation (ou parfois détection) : situation précise de l’instance (détectée ou reconnue) dans l’image (cadre englobant ou segmentation de la zone).

Il est important de noter que pour des entités visuelles localisées (objet, visage, personne…), la détection et la localisation se confondent souvent.

La détection d’une classe d’objets est généralement considérée comme un problème plus difficile que la reconnaissance d’une instance particulière, puisqu’il faut identifier les caractéristiques communes à la classe en faisant abstraction de la variété des différentes instances au sein de ladite classe.

Approche générale

La détection d’un objet dans une image se décompose souvent en trois étapes qui sont:

Les méthodes utilisées pour faire la détection d’objets sont subdivisées en deux grandes familles (les méthodes de seuillages d’images(1) ou les méthodes utilisant l’intelligence artificielle (2) le machine learning ou le deep learning), chacune a ses avantages et inconvénients que nous allons décrire plus bas. 

1- Technique ou méthode de seuillage d’images: ne nécessitent généralement pas de données historiques(données pour faire un entrainement) pour la formation et ne sont pas supervisées par nature. La méthode de seuillage choisie est appliquée directement sur l’image ce qui permet d’avoir une segmentation binaire( segmentation en deux classes) avec une des deux classes représentant l’objet à identifier ou à détecter.

  • Avantages: ces tâches ne nécessitent pas d’ images annotées , où les humains étiquettent les données manuellement (pour une formation supervisée).
  • Inconvénients : ces techniques sont limitées à plusieurs facteurs, tels que les scénarios complexes (sans arrière-plan unicolore), l’occlusion (objets partiellement masqués), l’éclairage et les ombres, et l’effet de fouillis. Ces techniques ne peuvent pas être appliquées sur des images avec plusieurs variations d’éclairage ou d’arrière-plan.

2-Les méthodes d’intelligence artificielle ( machine learning ou le deep learning): reposent généralement sur une formation supervisée . Les performances sont limitées par la puissance de calcul  des GPU en fonction de la machine utilisée et des données(images).

  • Avantages : La détection d’objets d’apprentissage en profondeur ou par les techniques de l’intelligence artificielle est beaucoup plus robuste à l’occlusion, aux scènes complexes et à l’éclairage difficile.
  • Inconvénients : une énorme quantité de données (dans notre  cas images) d’entraînement est nécessaire pour avoir une bonne performance. Pour ce qui de vitesse de du modèle entraîné, il faut une machine avec un bon processeur (GPU) et une mémoire Ram avec une capacité assez élevée et  le processus d’ annotation d’images est laborieux et coûteux. Toutefois, il faut noter qu’il existe déjà des ensemble de données( datasets existants) permettant de faciliter la tâche si l’objet ou les objets à détecter est déjà présent dans une des classes des datasets existants.

1 2 3 4