# Build a Workflow

워크플로는 모델 추론 실행, 로직 수행 또는 외부 서비스와의 인터페이스와 같은 특정 작업을 수행하는 블록들로 구성됩니다.

사용 가능한 블록 목록에 대해 더 자세히 알아보려면 [블록 문서](https://inference.roboflow.com/workflows/blocks/).

### 개요

이 가이드는 객체 감지 모델을 실행하고 예측을 집계하며 모델 결과를 시각화하는 네 개의 블록 워크플로를 만드는 방법을 설명합니다. 다음은 [최종 워크플로 템플릿](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="https://3958014485-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-3320b2627ac743a17afb97f63c70993b4cbe3b51%2FCleanShot%202025-01-29%20at%2015.25.03%402x.png?alt=media" alt="" width="563"><figcaption><p>감지, 집계 및 시각화 워크플로</p></figcaption></figure>

### 블록 연결

빌드를 시작하기 전에 블록 연결 방식이 어떻게 되는지 이해하는 것이 중요합니다.

어떤 위치에 블록을 추가하려면 이전 블록을 입력으로 사용해야 합니다. 예를 들어 위에 표시된 워크플로에서 *속성 정의* 블록은 *Object Detection* 블록 다음에 옵니다. 왜냐하면 속성 정의 블록이 모델 블록을 입력으로 사용하기 때문입니다. *경계 상자 시각화* 블록은 오른쪽에 있습니다. 이는 해당 블록의 출력을 사용하지 않지만 모델 출력을 참조하기 때문입니다. *속성 정의* 블록이지만 모델 출력을 참조합니다.

<figure><img src="https://3958014485-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-79fa8c10219b4a7e8e0696acceae5e297f05f70f%2FCleanShot%202025-01-29%20at%2016.31.28%402x.png?alt=media" alt=""><figcaption><p>모델 비교 워크플로</p></figcaption></figure>

위 예제 워크플로에서는 각 분기가 런타임에 병렬로 실행되고 다른 분기 블록들을 입력으로 의존하지 않기 때문에 네 개의 개별 경로가 있습니다.

### 워크플로 구성

#### 객체 감지 모델

먼저 *객체 감지 모델* 블록을 추가하세요. COCO에서 학습된 YOLOv8n과 같은 공개 사전 학습 모델이나 워크스페이스의 파인튜닝된 모델 중에서 선택할 수 있습니다. [COCO](https://universe.roboflow.com/microsoft/coco)또는 워크스페이스의 파인튜닝된 모델을 선택할 수 있습니다. 여기서는 사전 학습된 *yolov8n* 모델을 사용해 사람과 차량을 감지하겠습니다.

<figure><img src="https://3958014485-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-bc18512f57a057976473b7d03cc7ee3a884e67e3%2FCleanShot%202025-01-29%20at%2015.30.31%402x.png?alt=media" alt="" width="344"><figcaption></figcaption></figure>

객체 감지 블록에는 모델이 추론할 대상을 결정하는 필수 이미지 매개변수가 있습니다. 여러 선택적 매개변수가 있으며 핵심 항목은 아래에 자세히 설명되어 있습니다:

* 클래스 필터: 모델이 반환할 클래스 목록입니다. 참고: 모델은 항상 학습된 클래스만 반환하므로 불필요한 클래스를 필터링할 수 있습니다.
* 신뢰도(Confidence): 해당 신뢰도 이하의 객체는 반환되지 않습니다.
* IoU 임계값: 더 높은 임계값은 더 많은 중복 예측을 반환합니다. 0.9는 90% 이하의 중첩을 가진 객체를 반환하며, 0.1은 10% 이상 중첩되는 객체는 포함하지 않는다는 의미입니다.
* 최대 검출 수(Max Detections): 모델이 반환할 수 있는 객체의 최대 수
* 클래스 무관 NMS(Class Agnostic NMS): 중복 필터링이 동일 클래스끼리만 비교해서 제외할지, 모든 클래스를 비교해서 제외할지 여부

#### 속성 정의

속성 정의 블록을 사용하면 이미지 크기, 예측된 클래스 또는 감지된 객체 수와 같은 데이터에서 관련 정보를 추출할 수 있습니다. 이 예제에서는 객체 감지 모델이 찾은 객체 수를 집계할 것입니다.

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

속성 *데이터* 속성에 대해 모델 예측을 참조하세요. 그리고 *작업*에서 항목 수 세기(Count Items)를 선택하세요. 이 구성은 객체 감지 모델이 만든 예측 수를 반환합니다.

#### 경계 상자 시각화

모델 결과를 시각화하려면 경계 상자 시각화 블록을 추가하세요. 이미지 *매개변수에 대해 입력 이미지를 선택하세요. 예측에는 모델 결과를 선택하세요. 선택적 구성 속성을 사용하여 경계 상자의 색상과 크기를 변경할 수 있습니다.* 이미지

<figure><img src="https://3958014485-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-c02309fdf720d80b86c1de59ed126c7b7d9a2f9d%2FCleanShot%202025-01-29%20at%2015.31.50%402x.png?alt=media" alt="" width="342"><figcaption></figcaption></figure>

#### 레이벨 시각화

경계 상자를 그리는 것 외에도 예측의 클래스 이름을 표시하고자 합니다. 이를 위해 경계 상자 시각화 다음에 *레이벨 시각화* 블록을 추가하세요. 동일한 이미지에 경계 상자와 레이블을 모두 그리려면 참조 입력 이미지를 *bounding\_box\_visualization* 이미지로 설정해야 하며, 입력 이미지를 참조하지 마세요. 이렇게 하면 레이블이 경계 상자 위에 그려집니다.

<figure><img src="https://3958014485-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-cdcb7551292e790e706a1451b75bd3dcca6b28eb%2FCleanShot%202025-01-29%20at%2016.17.06%402x.png?alt=media" alt="" width="343"><figcaption></figcaption></figure>

선택적 *텍스트* 매개변수를 변경하여 표시 텍스트를 클래스 이름, 신뢰도, 또는 클래스 이름 및 신뢰도로 변경할 수 있습니다.

### 변경 사항 저장

워크플로 구성이 완료되면 "Save Workflow"를 클릭하세요. 워크플로를 배포한 경우 저장된 워크플로는 워크플로가 배포된 모든 디바이스에서 실행되기 시작합니다.

이제 워크플로 구성이 완료되었으니 테스트할 시간입니다.
