> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/roboflow/roboflow-ko/workflows/build-a-workflow.md).

# Workflow 만들기

workflow는 block들로 구성되며, 각 block은 모델 추론 실행, 로직 수행, 외부 서비스와의 연동 같은 특정 작업을 수행합니다.

사용 가능한 block 목록을 더 자세히 살펴보려면, 다음을 확인하세요: [block documentation](https://inference.roboflow.com/workflows/blocks/).

### 개요

이 가이드에서는 객체 감지 모델을 실행하고, 예측을 집계하며, 모델 결과를 시각화하는 4개 block workflow를 만드는 방법을 살펴봅니다. 다음은 [최종 workflow 템플릿](https://app.roboflow.com/workflows/embed/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3b3JrZmxvd0lkIjoiMmdqakJxMDV3Q01ac1hHM3hkeFAiLCJ3b3Jrc3BhY2VJZCI6ImtyT1RBYm5jRmhvUU1DZExPbGU0IiwidXNlcklkIjoiSW1GTElaU2tHYk55OXpiNFV1cWxNelBScHBRMiIsImlhdCI6MTczODE4ODk5MH0.f72WI5bdjtnwC8iqXF_XiUVarfOktIAH1egpsI0Oh4Q) 입니다. 함께 따라 해보세요.

{% embed url="<https://app.roboflow.com/workflows/embed/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3b3JrZmxvd0lkIjoiMmdqakJxMDV3Q01ac1hHM3hkeFAiLCJ3b3Jrc3BhY2VJZCI6ImtyT1RBYm5jRmhvUU1DZExPbGU0IiwidXNlcklkIjoiSW1GTElaU2tHYk55OXpiNFV1cWxNelBScHBRMiIsImlhdCI6MTczODE4ODk5MH0.f72WI5bdjtnwC8iqXF_XiUVarfOktIAH1egpsI0Oh4Q>" fullWidth="false" %}

<figure><img src="/files/6b3496c93fb1d0d890f588c6f9dc5994d63b1a8f" alt="" width="563"><figcaption><p>Detect, Count, and Visualize Workflow</p></figcaption></figure>

### Block 연결

구성을 시작하기 전에, block 연결이 어떻게 작동하는지 이해하는 것이 중요합니다.

특정 위치에 block을 추가하려면, 이전 block을 입력으로 사용해야 합니다. 예를 들어, 위에 표시된 workflow에서는 *Property Definition* block은 *Object Detection* block 다음에 오는데, 이는 model block을 입력으로 사용하기 때문입니다.  *Bounding Box Visualization* block은 오른쪽에 있는데, 이는 *Property Definition* block의 출력을 사용하지는 않지만 model 출력을 참조하기 때문입니다.

<figure><img src="/files/618a0107cc7cc3febb5dd791c9bf90bce51a6820" alt=""><figcaption><p>Model Comparison Workflow</p></figcaption></figure>

위의 예시 workflow에서는 각 branch가 실행 시 병렬로 동작하고, 다른 branch의 block들을 입력으로 사용하지 않기 때문에 서로 다른 4개의 경로가 있습니다.

### Builder Assist

Builder Assist는 workflow editor가 block을 연결하고 삽입할 때 얼마나 많은 도움을 줄지 제어합니다. 오른쪽 상단 navbar의 토글로 mode를 전환할 수 있습니다.

세 가지 mode가 있습니다:

* **Auto** (기본값): block이 연결되거나 삽입되면 호환되는 입력 및 출력 필드를 자동으로 연결합니다. 또한 block을 제거하거나 연결을 끊으면 builder가 하위 참조를 복구합니다.
* **Quick**: 연결 추천과 block 추천을 보여주지만, 명시적으로 수락할 때만 적용됩니다. builder가 대신 변경하는 것 없이 안내만 받고 싶을 때 유용합니다.
* **Manual**: 제안도 없고 자동 연결도 없습니다. 모든 연결을 직접 제어합니다.

선택한 mode는 로컬에 저장되어 세션 간에도 유지됩니다.

### Block 배치

workflow editor가 block을 자동으로 배치해 줄 수 있습니다. 자동 레이아웃 버튼(editor toolbar의 sitemap 아이콘)을 클릭하면 현재 block을 정렬하고 화면에 맞출 수 있습니다.

버튼 옆의 chevron을 누르면 두 가지 옵션이 있는 메뉴가 열립니다:

* "Arrange now": 버튼을 클릭하는 것과 동일하게 레이아웃을 한 번 실행합니다.
* "Arrange automatically": 켜면 block을 추가하거나 연결을 변경할 때마다 editor가 block을 다시 배치합니다. block을 드래그하면 이 mode가 일시 중지되어, 직접 배치한 레이아웃이 유지됩니다.

선택한 내용은 workflow별로 로컬에 저장됩니다.

### Workflow 만들기

#### 객체 감지 모델

먼저, 하나의 *객체 감지 모델* block을 추가하세요. YOLOv8n처럼 COCO로 학습된 공개 사전 학습 model을 선택하거나 [COCO](https://universe.roboflow.com/microsoft/coco), 또는 workspace의 fine-tuned model을 선택할 수 있습니다. 저는 사전 학습된 *yolov8n* model을 사용해 사람과 차량을 감지하겠습니다.

<figure><img src="/files/cfed15731e4108ea6a3fc3b7fa8e11c2a904bee9" alt="" width="344"><figcaption></figcaption></figure>

object detection block에는 model이 무엇을 추론할지 결정하는 필수 image parameter가 있습니다. 여러 개의 선택적 parameter가 있으며, 핵심 항목은 아래에서 자세히 설명합니다:

* Class Filter: model이 반환할 class 목록입니다. 참고: model은 항상 학습된 class만 반환하므로, 불필요한 class를 걸러낼 수 있습니다.
* Confidence: 해당 confidence보다 낮은 object는 반환되지 않습니다.
* IoU threshold: threshold가 높을수록 더 많이 겹치는 prediction이 반환됩니다. 0.9는 90% 이하로 겹치는 object가 반환된다는 뜻이며, 0.1은 10%보다 더 많이 겹치는 object가 포함되지 않는다는 뜻입니다.
* Max Detections: model이 반환할 수 있는 object의 최대 개수
* Class Agnostic NMS: overlap 필터링이 동일한 class끼리만 비교해 제외할지, 아니면 모든 class를 대상으로 할지 여부

#### Property Definition

Property Definition block을 사용하면 이미지 크기, 예측된 class, 감지된 object 수 등 데이터에서 관련 정보를 추출할 수 있습니다. 이 예시에서는 object detection model이 찾아낸 object 수를 세겠습니다.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXc507UbRnkEH6XMdrfmwVZbHcK6x6K5THwnt1RmEk8iXSojwvmiA_q6KwRXV9bJudYnW7NMTQKKb9GqGxm_P0VjbuOoGWcDsM5NoQckl9jV4YcjYQFIvYoCgvd_YnQTNJLlwdbZwA?key=yGJPQzp1abf4J7pT0mnBw8w4" alt="" width="375"><figcaption></figcaption></figure>

For the *Data* property에서는 model predictions를 참조하세요. For the *Operations*에서는 Count Items를 선택하세요. 이 설정은 object detection model이 만든 prediction 수를 반환합니다.

#### Bounding Box Visualization

모델 결과를 시각화하려면 bounding box visualization block을 추가하세요. For the *image* parameter에는 입력 이미지를 선택하세요. predictions에는 model 결과를 선택하세요. optional configuration properties를 사용해 bounding box의 색상과 크기를 변경할 수도 있습니다.

<figure><img src="/files/058027ee5493882179a7636b1d06c8302e187d4e" alt="" width="342"><figcaption></figcaption></figure>

#### 레이블 시각화

bounding box를 그리는 것 외에도, prediction의 class 이름도 표시하고 싶습니다. 이를 위해 *레이블 시각화* block을 bounding box visualization 뒤에 추가하세요. 같은 이미지에 bounding box와 label을 모두 그리려면, 참조 입력 이미지를 input image가 아니라 *bounding\_box\_visualization* image로 설정해야 합니다. 이렇게 하면 label이 bounding box 위에 그려집니다.

<figure><img src="/files/92eab617a18fb9fb4b7b55a34c66580c4333bba2" alt="" width="343"><figcaption></figcaption></figure>

선택적 *Text* parameter를 변경하면 표시 텍스트를 class 이름, confidence, 또는 class 이름과 confidence로 바꿀 수 있습니다.

### 변경 사항 저장

"Save"를 클릭하여 변경 사항을 draft로 저장하세요. Workflow editor는 편집 중에는 자동으로 저장하지 않습니다.

변경 사항을 실제로 반영하려면 Workflow를 publish하세요. Workflow를 배포한 상태라면, publish된 버전이 Workflow가 배포된 모든 device에서 실행되기 시작합니다.

이제 완료된 workflow가 준비되었으니, 테스트할 차례입니다.
