객체 추적용 동영상 학습 데이터 준비

이 페이지에서는 동영상 객체 추적 모델을 학습시키기 위해 Vertex AI 데이터 세트에서 사용할 동영상 학습 데이터를 준비하는 방법을 설명합니다.

다음 섹션에서는 데이터 요구사항, 스키마 파일, 스키마에서 정의된 데이터 가져오기 파일(JSONL 및 CSV)의 형식에 대한 정보를 제공합니다.

또는 주석 처리되지 않은 동영상을 가져와 나중에 Google Cloud 콘솔을 통해 주석 처리할 수도 있습니다(Google Cloud 콘솔을 사용하여 라벨 지정 참고).

데이터 요구사항

다음 요구사항은 AutoML 또는 커스텀 학습 모델을 학습시키는 데 사용되는 데이터 세트에 적용됩니다.

  • Vertex AI는 모델을 학습시키거나 예측을 요청할 때(동영상에 주석 달기) 다음과 같은 동영상 형식을 지원합니다.

    • .MOV
    • .MPEG4
    • .MP4
    • .AVI
  • 웹 콘솔에서 동영상 콘텐츠를 보거나 동영상에 주석을 추가하려면 동영상이 브라우저에서 기본적으로 지원하는 형식이어야 합니다. 모든 브라우저에서 기본적으로 .MOV 또는 .AVI 콘텐츠를 처리하지 않으므로 .MPEG4 또는 .MP4 동영상 형식을 사용하는 것이 좋습니다.

  • 최대 파일 크기는 50GB입니다(최대 재생 시간 3시간). 컨테이너에 잘못된 또는 비어 있는 타임스탬프가 포함된 개별 동영상 파일은 지원되지 않습니다.

  • 각 데이터 세트의 최대 라벨 수는 1,000개로 제한되어 있습니다.

  • 가져오기 파일의 동영상에 'ML_USE' 라벨을 할당할 수 있습니다. 학습 시에는 이러한 라벨을 사용하여 동영상과 해당 주석을 '학습' 또는 '테스트' 세트로 분할할 수 있습니다. 동영상 객체 추적의 경우 다음 사항에 유의하세요.

    • 각 데이터 세트에서 라벨이 지정된 최대 동영상 프레임 수는 150,000개로 제한되어 있습니다.
    • 각 데이터 세트에서 주석이 추가된 경계 상자의 최대 합계는 1,000,000개로 제한되어 있습니다.
    • 각 주석 세트의 최대 라벨 수는 1,000개로 제한되어 있습니다.

AutoML 모델 학습에 사용되는 동영상 데이터 권장사항

다음 모델은 AutoML 모델을 학습시키는 데 사용되는 데이터 세트에 적용됩니다.

  • 학습 데이터는 예측을 수행할 데이터와 최대한 유사해야 합니다. 예를 들어 사용 사례에 보안 카메라 영상처럼 흐릿한 저해상도 동영상이 포함된다면 학습 데이터도 흐릿한 저해상도 동영상으로 구성해야 합니다. 또한 일반적으로 다양한 각도, 해상도, 배경으로 촬영한 학습 동영상을 제공하는 것이 좋습니다.

  • 인간이 지정할 수 없는 라벨은 Vertex AI 모델도 일반적으로 예측할 수 없습니다. 만일 동영상을 1~2초 보고 라벨을 지정하도록 사람을 학습시킬 수 없다면 이 모델도 그렇게 하도록 학습시킬 수 없습니다.

  • 가장 흔한 라벨의 동영상이 가장 흔하지 않은 라벨의 동영상보다 최대 100배 많을 때 모델의 성능이 가장 좋습니다. 빈도가 낮은 라벨을 삭제하는 것이 좋습니다. 객체 추적의 경우

    • 최소 경계 상자 크기는 10x10픽셀입니다.
    • 동영상 프레임 해상도가 1024x1024 픽셀보다 훨씬 큰 경우 AutoML 객체 추적에서 사용하는 프레임 정규화 과정 중에 일부 이미지 품질이 손실될 수 있습니다.
    • 각 고유 라벨은 개별 동영상 프레임 최소 3개 이상에 있어야 합니다. 또한 각 라벨에는 주석이 최소 10개 이상 있어야 합니다.

스키마 파일

  • 주석을 가져오기 위한 JSONL 파일을 만들 때 공개적으로 액세스할 수 있는 다음 스키마 파일을 사용합니다. 이 스키마 파일은 데이터 입력 파일의 형식을 지정합니다. 파일 구조는 OpenAPI 스키마 테스트를 따릅니다.

    객체 추적 스키마 파일:

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

    전체 스키마 파일

    
    
    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

입력 파일

동영상 객체 추적 학습 데이터의 형식은 다음과 같습니다.

데이터를 가져오려면 JSONL 또는 CSV 파일을 만듭니다.

JSONL

각 줄의 JSON:
자세한 내용은 객체 추적 YAML 파일을 참조하세요.



{
	"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"
	}
}

JSONL 예시 - 동영상 객체 추적:



{'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

CSV 파일의 행 형식:

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

열 목록

  • ML_USE(선택 사항). 모델을 학습시킬 때 데이터를 분할하려는 경우입니다. 학습 또는 테스트 사용.
  • VIDEO_URI. 이 필드에는 동영상의 Cloud Storage URI가 포함됩니다. Cloud Storage URI는 대소문자를 구분합니다.
  • LABEL. 라벨은 문자로 시작해야 하며 문자, 숫자, 밑줄만 포함할 수 있습니다. CSV 파일에 각 행마다 다른 라벨을 사용하여 각각 동일한 동영상 세그먼트를 식별하는 여러 행을 추가하여 동영상에 여러 라벨을 지정할 수 있습니다.
  • INSTANCE_ID(선택 사항). 동영상의 동영상 프레임에서 객체 인스턴스를 식별하는 인스턴스 ID(선택사항). 이 항목이 제공되면 AutoML Object Tracking에서 객체 추적 미세 조정, 학습, 평가에 이를 사용합니다. 상이한 동영상 프레임에 존재하는 동일한 객체 인스턴스의 경계 상자에는 동일한 인스턴스 ID가 라벨로 지정됩니다. 인스턴스 ID는 각 동영상에서는 고유하지만 데이터 세트에서는 고유하지 않습니다. 예를 들어, 두 동영상의 두 객체가 동일한 인스턴스 ID를 갖고 있다고 해서 동일한 객체 인스턴스는 아닙니다.
  • TIME_OFFSET. 동영상 시작 부분부터 지속 시간 오프셋을 나타내는 동영상 프레임입니다. 타임스탬프는 부동소수점 수이며 단위는 초입니다.
  • BOUNDING_BOX 동영상 프레임의 객체에 대한 경계 상자입니다. 경계 상자 지정에는 2개 이상의 열이 사용됩니다.
    bounding_box
    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

    각 꼭짓점은 x, y 좌표 값으로 지정됩니다. 이러한 좌표 값은 0~1 범위의 실수이며, 0은 x 또는 y의 최솟값을 나타내고, 1은 x 또는 y의 최댓값을 나타냅니다.
    예를 들어 (0,0)은 왼쪽 상단 모서리를, (1,1)은 오른쪽 하단 모서리를 나타냅니다. 전체 이미지의 경계 상자는 (0,0,,,1,1,,) 또는 (0,0,1,0,1,1,0,1)로 표현됩니다.
    AutoML Object Tracking은 특정한 꼭짓점 순서를 요구하지 않습니다. 또한 지정 꼭짓점 4개가 이미지 변과 평행을 이루는 직사각형을 형성하지 않는 경우 Vertex AI는 이러한 직사각형을 형성하는 꼭짓점을 지정합니다.
    객체의 경계 상자는 두 가지 방법 중 하나로 지정될 수 있습니다.
    1. 직사각형의 대각선 반대 꼭짓점일 경우 x,y 좌표 집합으로 구성된 두 개의 꼭짓점:
      A. x_relative_min,y_relative_min
      C. x_relative_max,y_relative_max
      아래 예시와 같이 표시됩니다.
      x_relative_min, y_relative_min,,,x_relative_max,y_relative_max,,
    2. 다음과 같이 4개의 꼭짓점이 모두 지정됨:
      x_relative_min,y_relative_min, x_relative_max,y_relative_min, x_relative_max,y_relative_max, x_relative_min,y_relative_max,
      4개의 지정 꼭짓점이 이미지의 변과 평행을 이루는 직사각형을 형성하지 않는 경우 Vertex AI는 이러한 직사각형을 형성하는 꼭짓점을 지정합니다.

데이터 세트 파일의 행 예시

다음 행은 데이터 세트에서 데이터를 지정하는 방법을 보여줍니다. 이 예시에서는 Cloud Storage의 동영상 경로, 객체의 라벨, 추적을 시작할 타임오프셋, 두 개의 대각선 꼭짓점이 포함됩니다. 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,,
여기서 각 항목의 의미는 다음과 같습니다.

  • VIDEO_URIgs://folder/video1.avi입니다.
  • LABELcar입니다.
  • INSTANCE_ID , (지정되지 않음)
  • TIME_OFFSET12.90입니다.
  • x_relative_min,y_relative_min0.8,0.2입니다.
  • x_relative_max,y_relative_min은 지정되지 않습니다.
  • x_relative_max,y_relative_max0.9,0.3입니다.
  • x_relative_min,y_relative_max는 지정되지 않습니다.

앞에서 설명한 것처럼 다음 예시와 같이 4개의 꼭짓점을 모두 제공하여 경계 상자를 지정할 수도 있습니다.

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

CSV 예시 - 라벨 없음:

라벨을 지정하지 않고 데이터 파일에서 동영상을 제공할 수도 있습니다. 그런 다음 Google Cloud 콘솔을 사용하여 모델을 학습시키기 전에 데이터에 라벨을 적용해야 합니다. 이렇게 하려면 다음 예시와 같이 동영상의 Cloud Storage URI 다음에 쉼표 11개만 제공해야 합니다.

ml_use가 할당되지 않은 예시:

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

ml_use가 할당된 예시:

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