Préparer des données d'entraînement vidéo pour le suivi des objets

Cette page explique comment préparer des données d'entraînement vidéo à utiliser dans un ensemble de données Vertex AI pour entraîner un modèle de suivi des objets vidéo.

Les sections suivantes fournissent des informations sur les exigences de données, les fichiers de schéma et le format des fichiers d'importation de données (JSONL et CSV) définis par le schéma.

Vous pouvez également importer des vidéos non annotées et les annoter ultérieurement à l'aide de la console Google Cloud (consultez la section Ajouter des étiquettes à l'aide de la console Google Cloud).

Exigences en matière de données

Les exigences suivantes s'appliquent aux ensembles de données utilisés pour entraîner des modèles AutoML ou des modèles personnalisés.

  • L'IA Vertex accepte les formats vidéo suivants pour entraîner votre modèle ou demander une prédiction (annotation d'une vidéo).

    • .MOV
    • .MPEG4
    • .MP4
    • .AVI
  • Pour afficher le contenu vidéo dans la console Web ou annoter une vidéo, vous devez utiliser un format compatible avec le navigateur. Étant donné que tous les navigateurs ne gèrent pas le contenu .MOV ou .AVI en mode natif, nous vous recommandons d'utiliser le format vidéo .MPEG4 ou .MP4.

  • La taille maximale du fichier est de 50 Go (durée maximale de 3 heures). Tous les fichiers vidéo dont les horodatages sont incorrects ou vides dans le conteneur ne sont pas acceptés.

  • Le nombre maximal d'étiquettes dans chaque ensemble de données est limité à 1 000.

  • Vous pouvez attribuer des étiquettes "ML_USE" aux vidéos des fichiers d'importation. Au moment de l'entraînement, vous pouvez choisir d'utiliser ces étiquettes pour scinder les vidéos et leurs annotations correspondantes en ensembles d'entraînement ou de test. Pour le suivi des objets vidéo, tenez compte des points suivants :

    • Le nombre maximal d'images vidéo étiquetées dans chaque ensemble de données est limité à 150 000.
    • Le total maximal de cadres de délimitation annotés dans chaque ensemble de données est limité à 1 000 000.
    • Le nombre maximal d'étiquettes dans chaque ensemble d'annotations est limité à 1 000.

Bonnes pratiques en termes de données vidéo utilisées afin d'entraîner des modèles AutoML

Les pratiques suivantes s'appliquent aux ensembles de données utilisés pour entraîner les modèles AutoML.

  • Les données d'entraînement doivent être aussi proches que possible des données sur lesquelles les prédictions sont fondées. Par exemple, si votre cas pratique implique des vidéos floues en basse résolution (comme celles d'une caméra de sécurité), vos données d'entraînement doivent être composées de vidéos floues à basse résolution. En général, il est également recommandé de fournir différents types d'angles, de résolutions et d'arrière-plans pour les vidéos d'entraînement.

  • Les modèles d'IA Vertex ne sont généralement pas capables de prédire les étiquettes qu'un humain ne serait pas en mesure d'attribuer. Ainsi, si un humain ne peut pas apprendre à attribuer des étiquettes en regardant la vidéo pendant 1 à 2 secondes, le modèle ne pourra probablement pas être entraîné à le faire non plus.

  • Le modèle fonctionne mieux lorsqu'il existe au maximum 100 fois plus de vidéos pour l'étiquette la plus courante que pour la plus rare. Nous vous recommandons de supprimer les libellés les moins fréquents. Pour le suivi des objets :

    • La taille minimale d'un cadre de délimitation est de 10 pixels par 10 pixels.
    • Les images vidéo dont la résolution est supérieure à 1 024 pixels par 1 024 pixels peuvent perdre en qualité lors du processus de normalisation des images utilisé par la fonctionnalité AutoML de suivi des objets.
    • Chaque étiquette doit être présente dans au moins trois images vidéo distinctes. En outre, chacune doit également comporter au moins 10 annotations.

Fichiers de schéma

  • Lors de la création du fichier jsonl pour l'importation d'annotations, utilisez le fichier de schéma accessible au public suivant. Ce fichier de schéma détermine le format des fichiers de données d'entrée. La structure du fichier suit le test du schéma OpenAPI.

    Fichier de schéma de suivi d'objet :

    gs://google-cloud-aiplatform/schema/dataset/ioformat/object_tracking_io_format_1.0.0.yaml

    Fichier de schéma complet

    
    title: VideoObjectTracking
    version: 1.0.0
    description: >
      Import and export format for importing/exporting videos together with
      temporal bounding box annotations.
    type: object
    required:
    - videoGcsUri
    properties:
      videoGcsUri:
        type: string
        description: >
          A Cloud Storage URI pointing to a video. Up to 50 GB in size and
          up to 3 hours in duration. Supported file mime types: `video/mp4`,
          `video/avi`, `video/quicktime`.
      TemporalBoundingBoxAnnotations:
        type: array
        description: Multiple temporal bounding box annotations. Each on a frame of the video.
        items:
          type: object
          description: >
            Temporal bounding box anntoation on video. `xMin`, `xMax`, `yMin`, and
            `yMax` are relative to the video frame size, and the point 0,0 is in the
            top left of the frame.
          properties:
            displayName:
              type: string
              description: >
                It will be imported as/exported from AnnotationSpec's display name,
                i.e., the name of the label/class.
            xMin:
              description: The leftmost coordinate of the bounding box.
              type: number
              format: double
            xMax:
              description: The rightmost coordinate of the bounding box.
              type: number
              format: double
            yMin:
              description: The topmost coordinate of the bounding box.
              type: number
              format: double
            yMax:
              description: The bottommost coordinate of the bounding box.
              type: number
              format: double
            timeOffset:
              type: string
              description: >
                A time offset of a video in which the object has been detected.
                Expressed as a number of seconds as measured from the
                start of the video, with fractions up to a microsecond precision, and
                with "s" appended at the end.
            instanceId:
              type: number
              format: integer
              description: >
                The instance of the object, expressed as a positive integer. Used to
                tell apart objects of the same type when multiple are present on a
                single video.
            annotationResourceLabels:
              description: Resource labels on the Annotation.
              type: object
              additionalProperties:
                type: string
      dataItemResourceLabels:
        description: Resource labels on the DataItem.
        type: object
        additionalProperties:
          type: string

Fichiers d'entrée

Vos données d'entraînement pour le suivi des objets vidéo doivent respecter les formats ci-après.

Pour importer vos données, créez un fichier JSONL ou CSV.

JSONL

JSON sur chaque ligne :
Pour en savoir plus, consultez le fichier yaml de suivi des objets.


{
	"videoGcsUri": "gs://bucket/filename.ext",
	"TemporalBoundingBoxAnnotations": [{
		"displayName": "LABEL",
		"xMin": "leftmost_coordinate_of_the_bounding box",
		"xMax": "rightmost_coordinate_of_the_bounding box",
		"yMin": "topmost_coordinate_of_the_bounding box",
		"yMax": "bottommost_coordinate_of_the_bounding box",
		"timeOffset": "timeframe_object-detected"
                "instanceId": "instance_of_object
                "annotationResourceLabels": "resource_labels"
	}],
	"dataItemResourceLabels": {
		"aiplatform.googleapis.com/ml_use": "train|test"
	}
}

Exemple JSONL : suivi d'objet vidéo :


{'videoGcsUri': 'gs://demo-data/video1.mp4', 'temporal_bounding_box_annotations': [{'displayName': 'horse', 'instance_id': '-1', 'time_offset': '4.000000s', 'xMin': '0.668912', 'yMin': '0.560642', 'xMax': '1.000000', 'yMax': '1.000000'}], "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "training"}}
{'videoGcsUri': 'gs://demo-data/video2.mp4', 'temporal_bounding_box_annotations': [{'displayName': 'horse', 'instance_id': '-1', 'time_offset': '71.000000s', 'xMin': '0.679056', 'yMin': '0.070957', 'xMax': '0.801716', 'yMax': '0.290358'}], "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "test"}}
...

CSV

Format d'une ligne dans le fichier CSV :

[ML_USE,]VIDEO_URI,LABEL,[INSTANCE_ID],TIME_OFFSET,BOUNDING_BOX

Liste des colonnes

  • ML_USE (Facultatif). Pour la répartition des données lors de l'entraînement d'un modèle. Utilisez TRAINING ou TEST.
  • VIDEO_URI. Ce champ contient l'URI Cloud Storage de la vidéo. Les URI Cloud Storage sont sensibles à la casse.
  • LABEL. Les étiquettes doivent commencer par une lettre et ne contenir que des lettres, des chiffres et des traits de soulignement. Vous pouvez spécifier plusieurs étiquettes pour une vidéo en ajoutant plusieurs lignes dans le fichier CSV, chacune identifiant la même séquence vidéo, avec une étiquette différente pour chaque ligne.
  • INSTANCE_ID (Facultatif). Un ID d'instance qui identifie l'instance d'objet sur toutes les images vidéo. Si cet ID est fourni, le suivi d'objet AutoML l'utilise pour le réglage, l'entraînement et l'évaluation du suivi des objets. Les cadres de sélection d'une même instance d'objet présente dans différentes images vidéo sont étiquetés avec le même identifiant d'instance. L'ID d'instance est unique dans chaque vidéo, mais pas dans l'ensemble de données. Par exemple, si deux objets de deux vidéos différentes ont le même identifiant d'instance, cela ne signifie pas qu'ils possèdent la même instance d'objet.
  • TIME_OFFSET. Image indiquant le décalage temporel par rapport au début de la vidéo. Le décalage horaire est un nombre flottant et les unités sont exprimées en secondes.
  • BOUNDING_BOX Cadre de délimitation pour un objet dans l'image vidéo. Plusieurs colonnes sont nécessaires pour spécifier un cadre de délimitation.
    Cadre de délimitation
    A. x_relative_min,y_relative_min
    B. x_relative_max,y_relative_min
    C. x_relative_max,y_relative_max
    D. x_relative_min, y_relative_max

    Chaque sommet est spécifié par les valeurs de coordonnées x et y. Ces coordonnées doivent être des valeurs flottantes comprises entre 0 et 1, où 0 représente la valeur minimale de x ou de y et où 1 représente leur valeur maximale.
    Par exemple, si (0,0) correspond à l'angle supérieur gauche et (1,1) à l'angle inférieur droit, les coordonnées du cadre de sélection englobant l'image entière peuvent être les suivantes : (0,0,,,1,1,,) ou (0,0,1,0,1,1,0,1).
    Le suivi des objets AutoML ne nécessite pas de classement spécifique des sommets. De plus, si quatre sommets spécifiés ne forment pas un rectangle parallèle aux bords de l'image, Vertex AI spécifie des sommets qui forment un tel rectangle.
    Le cadre de délimitation d'un objet peut être spécifié de deux manières :
    1. Deux sommets spécifiés, constitués d'un ensemble de coordonnées x,y, s'ils correspondent à des points diagonalement opposés du rectangle :
      A. x_relative_min,y_relative_min
      C. x_relative_max,y_relative_max
      comme indiqué dans cet exemple :
      x_relative_min, y_relative_min,,,x_relative_max,y_relative_max,,
    2. Les quatre sommets spécifiés comme illustré dans :
      x_relative_min,y_relative_min, x_relative_max,y_relative_min, x_relative_max,y_relative_max, x_relative_min,y_relative_max,
      Si les quatre sommets spécifiés ne forment pas un rectangle parallèle aux bords de l'image, Vertex AI spécifie des sommets qui forment un tel rectangle.

Exemples de lignes dans les fichiers d'ensembles de données

Les lignes suivantes montrent comment spécifier des données dans un ensemble de données. L'exemple inclut un chemin d'accès à une vidéo sur Cloud Storage, une étiquette pour l'objet, un décalage horaire de début du suivi et deux sommets diagonalement opposés. VIDEO_URI.,LABEL,INSTANCE_ID,TIME_OFFSET,x_relative_min,y_relative_min,x_relative_max,y_relative_min,x_relative_max,y_relative_max,x_relative_min,y_relative_max

gs://folder/video1.avi,car,,12.90,0.8,0.2,,,0.9,0.3,,
gs://folder/video1.avi,bike,,12.50,0.45,0.45,,,0.55,0.55,,
où,

  • VIDEO_URI est gs://folder/video1.avi ;
  • LABEL est car ;
  • INSTANCE_ID , (non spécifié)
  • TIME_OFFSET est 12.90 ;
  • x_relative_min,y_relative_min correspondent à 0.8,0.2 ;
  • x_relative_max,y_relative_min n'est pas spécifié ;
  • x_relative_max,y_relative_max correspondent à 0.9,0.3 ;
  • x_relative_min,y_relative_max ne sont pas spécifiés.

Comme indiqué précédemment, vous pouvez également spécifier vos cadres de délimitation en fournissant les quatre sommets, comme illustré dans les exemples suivants.

gs://folder/video1.avi,car,,12.10,0.8,0.8,0.9,0.8,0.9,0.9,0.8,0.9 gs://folder/video1.avi,car,,12.90,0.4,0.8,0.5,0.8,0.5,0.9,0.4,0.9 gs://folder/video1.avi,car,,12.10,0.4,0.2,0.5,0.2,0.5,0.3,0.4,0.3

Exemple CSV : aucune étiquette :

Vous pouvez également fournir des vidéos dans le fichier de données sans spécifier d'étiquette. Vous devez ensuite utiliser Google Cloud Console pour appliquer des étiquettes à vos données avant d'entraîner le modèle. Pour ce faire, vous devez uniquement fournir l'URI Cloud Storage de la vidéo, suivi de 11 virgules, comme indiqué dans l'exemple suivant.

Exemple sans ml_use attribué :

  gs://folder/video1.avi
  ...
  

Exemple avec ml_use attribué :

  TRAINING,gs://folder/video1.avi
  TEST,gs://folder/video2.avi
  ...