# Upload Custom Model Weights

맞춤형 모델 훈련을 완료하면 Roboflow 프로젝트에 모델 가중치를 업로드하여 [Roboflow Inference](https://inference.roboflow.com/).

### 모델 지원

자세한 내용은 [지원되는 모델 표](https://docs.roboflow.com/roboflow/roboflow-ko/deploy/supported-models) 에서 가중치 업로드 호환성에 대한 세부 정보를 확인하세요.

{% hint style="warning" %}

* YOLOv8 모델은 다음에서 훈련되어야 합니다 `ultralytics==8.0.196`
* YOLOv9 모델은 다음을 사용하여 훈련 및 업로드해야 합니다 `ultralytics` 출처: <https://github.com/WongKinYiu/yolov9>
* YOLOv10 모델은 다음을 사용하여 훈련 및 업로드해야 합니다 `ultralytics` 출처:

  <https://github.com/THU-MIG/yolov10>
* YOLOv11 모델은 다음에서 훈련되어야 합니다 `ultralytics<=8.3.40`
* YOLOv12 모델은 다음을 사용하여 훈련 및 업로드해야 합니다 `ultralytics` 출처: <https://github.com/sunsmarterjie/yolov12>
  {% endhint %}

{% hint style="info" %}
더 큰 모델 크기는 더 나은 훈련 결과를 제공합니다. 그러나 모델 크기가 클수록 훈련 시간과 추론(모델 예측) 속도가 느려집니다. 빠르게 움직이는 객체나 비디오 피드에 대해 실시간 추론이 필요한지(작은 모델 사용 권장), 또는 데이터 수집 후 처리하며 더 높은 예측 정확도가 중요한지(큰 모델 선택)를 고려하세요.
{% endhint %}

### 버전형 vs 버전 없음 모델 업로드

Roboflow는 프로젝트에 모델을 배포하는 데 서로 다른 사용 사례와 조직적 요구에 맞는 두 가지 접근 방식을 제공합니다. 버전형 배포와 버전 없음 배포 중 선택은 데이터셋 버전과 함께 모델의 진화를 추적해야 하는지 또는 워크스페이스 내 여러 프로젝트에 모델을 공유하려는지에 따라 다릅니다.

* **버전 없음 배포**
  * 워크스페이스 수준에 연결됨
  * 여러 프로젝트에 동시에 배포할 수 있음
  * 같은 워크스페이스 내 다양한 프로젝트 간 모델을 공유할 때 이상적임
* **버전형 배포**
  * 특정 프로젝트 버전과 연동됨
  * 데이터셋 버전당 하나의 모델
  * 데이터셋 버전과 함께 모델의 진화를 추적하는 데 이상적임
  * Label Assist에서 모델을 사용할 때 이상적임
  * 다른 모델을 훈련하기 위한 체크포인트로 모델을 사용할 때 이상적임

### 맞춤 가중치 업로드

먼저 최신 `roboflow` Python 패키지가 설치되어 있는지 확인하세요:&#x20;

```bash
pip install --update roboflow
```

{% tabs %}
{% tab title="Python SDK (버전 없음)" %}
버전 없음 맞춤 가중치를 업로드하려면 `workspace.deploy_model()` 메서드를 사용하세요:

```python
workspace.deploy_model(
    model_type="yolov8",  # 모델 유형
    model_path="path/to/model",  # 모델 디렉터리 경로
    project_ids=["project1", "project2"],  # 프로젝트 ID 목록
    model_name="my-model",  # 모델 이름(최소 1개의 문자 필요, 숫자와 대시 허용)
    filename="weights/best.pt"  # 가중치 파일 경로(기본값)
)
```

**매개변수**

* model\_type (str): 배포하려는 모델 유형(예: "yolov8", "yolov11")
* model\_path (str): 모델 가중치가 포함된 디렉터리의 파일 경로
* project\_ids (list\[str]): 모델을 배포할 프로젝트 ID 목록
* model\_name (str): 모델을 식별하는 이름 - (최소 1개의 문자 필요하며 숫자와 대시 허용)
* filename (str, optional): 가중치 파일 이름(기본값: "weights/best.pt")

**예제**

```python
from roboflow import Roboflow

rf = Roboflow(api_key="YOUR_API_KEY")
workspace = rf.workspace("YOUR_WORKSPACE")

workspace.deploy_model(
  model_type="yolov8",
  model_path="./runs/train/weights",
  project_ids=["project-1", "project-2", "project-3"],
  model_name="my-custom-model"
)
```

{% endtab %}

{% tab title="Python SDK (버전형)" %}
{% hint style="info" %}
하나의 버전형 모델은 하나의 해당 데이터셋 버전에만 연결될 수 있습니다. 데이터셋에 생성된 버전이 없다면 [앱 내에서](https://docs.roboflow.com/roboflow/roboflow-ko/datasets/dataset-versions/create-a-dataset-version) 또는 [API](https://app.gitbook.com/s/e5GEiPeDoFksvZv1vH3A/python-sdk/create-a-dataset-version).

에 의해 생성할 수 있습니다. [버전을 API를 통해 로드하는 방법에 대한 문서를 참조하세요](https://app.gitbook.com/s/e5GEiPeDoFksvZv1vH3A/rest-api/versions/view-a-version) 또는 아래 예제를 참고하세요.
{% endhint %}

맞춤 가중치를 업로드하려면 `version.deploy()` 메서드를 Python SDK에서 사용하세요.

**사용법**

```python
version.deploy(
    model_type="yolov8",  # 모델 유형
    model_path="path/to/model",  # 모델 디렉터리 경로
    filename="weights/best.pt"  # 가중치 파일 경로(기본값)
)
```

**매개변수**

* model\_type (str): 배포할 모델의 유형(예: "yolov8", "yolov11")
* model\_path (str): 모델 가중치가 포함된 디렉터리의 파일 경로
* filename (str, optional): 가중치 파일 이름(기본값: "weights/best.pt")

**예제**

```python
from roboflow import Roboflow

rf = Roboflow(api_key="YOUR_API_KEY")
project = rf.workspace().project("PROJECT_ID")

# weights_filename을 지정할 수 있으며 기본값은 "weights/best.pt"입니다
version = project.version(VERSION_ID)

#예제1 - yolov8 모델의 디렉터리 경로가 "training1/model1.pt"인 경우
version.deploy("yolov8", "training1", "model1.pt")

#예제2 - yolov8 모델의 디렉터리 경로가 "training1/weights/best.pt"인 경우
version.deploy("yolov8", "training1")
```

**중요 참고사항**

1. 하나의 버전에는 동시에 하나의 훈련된 모델만 가질 수 있습니다
2. 이미 모델이 있는 버전에 업로드를 시도하면 429 오류가 발생합니다
   {% endtab %}

{% tab title="CLI (버전 없음 및 버전형 모두)" %}
**인증**

CLI 명령을 사용하기 전에 Roboflow에 인증해야 합니다:

1. 인증 명령을 실행하세요: `roboflow login`
2. 터미널에 표시된 URL을 방문하세요: <https://app.roboflow.com/auth-cli>
3. 웹사이트에서 인증 토큰을 가져오세요
4. 터미널에 토큰을 붙여넣기하세요

자격 증명은 자동으로 다음에 저장됩니다 `~/.config/roboflow/config.json`

**모델 가중치 업로드**

Roboflow CLI는 학습된 모델 가중치를 Roboflow 프로젝트에 업로드하는 명령을 제공합니다. 이는 맞춤 학습된 모델을 Roboflow에 배포하려는 경우 유용합니다.

**기본 사용법**

{% code overflow="wrap" %}

```bash
roboflow upload_model -w <workspace> -p <project> -t <model_type> -m <model_path> [-v <version>] [-f <filename>] [-n <model_name>]
```

{% endcode %}

**매개변수**

* `-w, --workspace`: 워크스페이스 ID 또는 URL(선택 사항 - 지정하지 않으면 기본 워크스페이스 사용)
* `-p, --project`: 모델을 업로드할 프로젝트 ID(버전 없음 업로드의 경우 여러 번 지정하여 여러 프로젝트에 업로드 가능)
* `-t, --model_type`: 모델 유형(예: yolov8, paligemma2)
* `-m, --model_path`: 학습된 모델 파일이 포함된 디렉터리 경로
* `-v, --version_number`: 모델을 업로드할 버전 번호(선택 사항)
* `-f, --filename`: 모델 파일 이름(기본값: "weights/best.pt")
* `-n, --model_name`: 모델 이름(버전 없음 모델 배포 시 필요)

**예시**

<pre class="language-bash" data-overflow="wrap"><code class="lang-bash"># 1. 특정 버전에 모델 업로드: 
<strong>roboflow upload_model -w my-workspace -p my-project -v 1 -t yolov8 -m ./weights
</strong>
# 2. 여러 프로젝트에 버전 없음 모델 업로드:
roboflow upload_model -w my-workspace -p project1 -p project2 -t yolov11 -n my-model-v1 -m ./weights
# 3. 단일 프로젝트에 버전 없음 RF-DETR medium 모델 업로드: 
roboflow upload_model -w my-workspace -p my-project -t rfdetr-medium -n my-model-name -m ./ -f weights.pt
</code></pre>

{% endtab %}
{% endtabs %}

## 다음 단계

1. Roboflow의 "Models" 탭에서 모델을 확인하세요
2. 로컬에서 모델을 실행하려면 [Roboflow Inference Server](https://inference.roboflow.com/).
3. [모델 배포](https://docs.roboflow.com/roboflow/roboflow-ko/deploy/deployment-overview)
