For the complete documentation index, see llms.txt. This page is also available as Markdown.

워크플로우 정의 구문

워크플로우 정의 JSON 구문: 버전 표시자, 입력, 단계, 선택기, 출력.

Roboflow Workflows에서 Workflow Definition은 내부적인 "프로그래밍 언어"입니다. 이는 서로 다른 블록이 어떻게 상호작용하는지 정의하는 구조화된 방법을 제공하며, 필요한 입력, 출력, 구성 요소를 지정합니다. 이 문법을 사용하면 사용자는 UI 없이 워크플로를 만들 수 있습니다.

이제 다음에서 생성된 Workflow Definition을 살펴보며 시작해 보겠습니다. 이 튜토리얼 을 살펴보고 단계별로 분석해 보겠습니다.

워크플로 정의
{
  "version": "1.0",
  "inputs": [
    {
      "type": "WorkflowImage",
      "name": "image"
    },
    {
      "type": "WorkflowParameter",
      "name": "model",
      "default_value": "rfdetr-small"
    }
  ],
  "steps": [
    {
      "type": "roboflow_core/roboflow_object_detection_model@v1",
      "name": "model",
      "images": "$inputs.image",
      "model_id": "$inputs.model"
    },
    {
      "type": "roboflow_core/dynamic_crop@v1",
      "name": "dynamic_crop",
      "images": "$inputs.image",
      "predictions": "$steps.model.predictions"
    },
    {
      "type": "roboflow_core/roboflow_classification_model@v1",
      "name": "model_1",
      "images": "$steps.dynamic_crop.crops",
      "model_id": "dog-breed-xpaq6/1"
    },
    {
      "type": "roboflow_core/detections_classes_replacement@v1",
      "name": "detections_classes_replacement",
      "object_detection_predictions": "$steps.model.predictions",
      "classification_predictions": "$steps.model_1.predictions"
    },
    {
      "type": "roboflow_core/bounding_box_visualization@v1",
      "name": "bounding_box_visualization",
      "predictions": "$steps.detections_classes_replacement.predictions",
      "image": "$inputs.image"
    },
    {
      "type": "roboflow_core/label_visualization@v1",
      "name": "label_visualization",
      "predictions": "$steps.detections_classes_replacement.predictions",
      "image": "$steps.bounding_box_visualization.image"
    }
  ],
  "outputs": [
    {
      "type": "JsonField",
      "name": "detections",
      "coordinates_system": "own",
      "selector": "$steps.detections_classes_replacement.predictions"
    },
    {
      "type": "JsonField",
      "name": "visualisation",
      "coordinates_system": "own",
      "selector": "$steps.label_visualization.image"
    }
  ]
}

버전 표시

모든 Workflow Definition은 버전 파라미터로 시작하며, 이는 Workflows Execution Engine의 호환 가능한 버전을 지정합니다. Roboflow는 시맨틱 버저닝 을 사용하여 이러한 버전을 관리하고, 하위 호환성을 보장하기 위해 각 주요 릴리스에서 하나의 버전을 유지합니다. 이는 Execution Engine 버전 1.0.0 에 대해 정의된 워크플로가 버전 1.3.4 및 기타 최신 버전과 호환되지만, 더 최신 버전에서 생성된 워크플로는 이전 버전과 호환되지 않을 수 있음을 의미합니다.

Roboflow Hosted 플랫폼에 로드된 Execution Engine 버전 목록은 다음에서 확인할 수 있습니다. GET /workflows/execution_engine/versions 모든 Inference 서버에서.

입력

우리의 예시 워크플로는 두 개의 입력을 지정합니다:

[
    {
      "type": "WorkflowImage", "name": "image"
    },
    {
      "type": "WorkflowParameter", "name": "model", "default_value": "rfdetr-small"
    }
]

정의의 이 항목은 워크플로 실행 중에 데이터로 채울 수 있는 두 개의 자리표시자를 만듭니다.

첫 번째 자리표시자의 이름은 이미지 이며 유형은 WorkflowImage입니다. 이 특수 입력 유형은 배치 지향적이며, 런타임에 하나 이상의 이미지를 받아 단일 배치로 처리할 수 있음을 의미합니다. 유형 WorkflowImage의 입력을 여러 개 추가할 수 있으며, 이러한 자리표시자에 제공되는 데이터는 동일한 수의 요소를 포함해야 합니다. 또는 크기가 N 과 1인 입력을 섞어 사용할 수 있으며, 여기서 N 는 배치의 요소 수를 나타냅니다.

두 번째 자리표시자는 간단한 WorkflowParameter 이며 model이라고 합니다. 이 입력 유형을 사용하면 사용자가 모델 변형, 신뢰도 임계값, 기준값과 같은 하이퍼파라미터를 런타임에 주입할 수 있습니다. 이 값은 요소들의 배치로 예상되지 않으므로, 리스트를 제공하면 각 요소가 개별적으로 처리되는 배치가 아니라 요소들의 리스트로 해석됩니다.

워크플로에서 배치 지향 데이터 처리의 성격에 대한 자세한 내용은 여기.

일반 배치 지향 입력

Execution Engine v1.3.0 부터는(추론 릴리스 v0.27.0), Workflows는 크기에 관계없이 모든 종류차원성의 배치 지향 입력을 지원합니다. 이 입력은 현재는 강제되지 않지만, 생태계가 성장함에 따라 점점 더 유용해질 것으로 예상합니다.

일반 배치 지향 입력 정의하기

만약 WorkflowImage 입력을 일반 배치 지향 입력으로 바꾸고 싶다면, 다음 구성을 사용하세요:

추가로, 이미지가 더 높은 차원 수준에 있어야 한다면, 다음 차원성 속성을 추가하세요:

이는 Workflow 실행에서 예상되는 이미지 데이터 형식을 변경합니다 - dimensionality=2 강제합니다 이미지 는 중첩된 이미지 배치, 즉 이미지의 리스트의 리스트가 됩니다.

단계

언급한 바와 같이 여기단계는 다른 단계의 입력과 출력에 연결된 Workflow 블록의 인스턴스로, 데이터가 워크플로를 통해 어떻게 흐를지 결정합니다. 예시 단계 정의를 보겠습니다:

각 단계에 공통적인 두 속성은 typename입니다. type은 어떤 블록을 불러올지 알려주고, name은 해당 단계의 고유 식별자를 제공하며, 이를 바탕으로 다른 단계가 주어진 단계의 출력을 참조할 수 있습니다.

나머지 두 속성은 셀렉터 (Workflows에서 참조를 이렇게 부릅니다)를 입력에 대해 선언합니다 - 이미지model. 워크플로 실행 중에 해당 자리표시자에 전달된 데이터가 블록이 처리할 수 있도록 제공됩니다.

우리 문서에서는 각 블록의 구조가 무엇인지 보여주고, 각 블록을 워크플로 단계로 어떻게 사용할 수 있는지 예시를 제공합니다. 블록 컬렉션을 살펴보세요 여기 여기에서 블록의 데이터 입력, 출력, 구성 속성을 확인할 수 있습니다.

블록의 입력 데이터 바인딩(예: 이미지 속성)은 배치 지향 입력과 단계 출력에 대한 셀렉터로 채울 수 있습니다. 블록의 구성 속성(예: model_id)은 일반적으로 워크플로 정의에 하드코딩된 값(런타임에 변경할 수 없음) 또는 유형 WorkflowParameter의 입력에 대한 셀렉터로 채울 수 있습니다. 예를 들어, 유효한 정의는 다음과 같을 때 얻을 수 있습니다. model_id 는 다음 중 하나일 때 "$inputs.image" 또는 rfdetr-small.

이제 단계 출력이 다른 단계의 입력으로 어떻게 참조되는지 보겠습니다:

이 특정 경우에서, predictions 속성은 이름이 model인 단계의 출력을 정의합니다. 셀렉터의 구성은 다음과 같습니다: $steps.{step_name}.{step_output_name}. 이 참조 덕분에, model 단계는 dynamic_crop 와 연결되며 런타임에 모델 예측이 동적 크롭으로 전달되어 이미지 크롭 절차의 참조가 됩니다.

출력

Workflow Definition의 이 섹션은 워크플로 실행의 응답이 어떻게 보이는지 지정합니다. 각 응답 필드의 정의는 다음과 같습니다:

선택자 는 입력 또는 단계 출력을 참조할 수 있습니다. 추가로, "coordinates_system" 속성을 지정할 수 있으며, 이는 두 값을 허용합니다: "own" 또는 "parent"입니다. 이 속성은 모델 검출을 제공하는 출력과 관련이 있으며, 검출에 사용되는 좌표계를 결정합니다. 이는 1차 모델의 예측에서 파생된 이미지 크롭에 2차 객체 탐지 모델을 적용할 때 매우 중요합니다. 이러한 경우 2차 모델의 예측은 원본 입력 이미지가 아니라 크롭의 좌표를 기반으로 합니다. 이 좌표가 부모 좌표계로 다시 변환되지 않도록 하려면 "coordinates_system": "own" ( 부모 을 설정하세요(기본 옵션은

또한 출력 셀렉터는 와일드카드($steps.step_nane.*")를 지원하여 특정 단계의 모든 출력을 가져올 수 있습니다.

출력 구조가 어떻게 만들어지는지 완전히 이해하려면 다음에 대해 읽어보세요. Workflows에서의 데이터 처리.

마지막 업데이트

도움이 되었나요?