# Custom Model Weight 업로드

관련 페이지:

* Roboflow에서 모델을 학습하는 방법은 다음을 참조하세요 [모델 학습](/roboflow/roboflow-ko/train/train.md)
* 모델 가중치를 다운로드하려면 다음을 참조하세요 [모델 가중치 다운로드](/roboflow/roboflow-ko/deploy/download-roboflow-model-weights.md)

## Roboflow 외부에서 학습한 가중치 업로드

커스텀 모델 학습을 완료한 후, 모델 가중치를 Roboflow 프로젝트에 다시 업로드하여 다음의 이점을 활용하세요 [Roboflow Inference](https://inference.roboflow.com/).

### Model Support

다음을 참조하세요 [Supported Models 표](/roboflow/roboflow-ko/deploy/supported-models.md) 가중치 업로드 호환성에 대한 자세한 내용은 다음을 참조하세요.

{% hint style="warning" %}

* YOLOv8 모델은 다음 버전에서 학습해야 합니다 `ultralytics==8.0.196`
* YOLOv9 모델은 다음을 사용하여 학습하고 업로드해야 합니다 `ultralytics` from <https://github.com/WongKinYiu/yolov9>
* YOLOv10 모델은 다음을 사용하여 학습하고 업로드해야 합니다 `ultralytics` from

  <https://github.com/THU-MIG/yolov10>
* YOLOv11 모델은 다음 버전에서 학습해야 합니다 `ultralytics<=8.3.40`
* YOLOv12 모델은 다음을 사용하여 학습하고 업로드해야 합니다 `ultralytics` from <https://github.com/sunsmarterjie/yolov12>
  {% endhint %}

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

### 버전이 있는 모델과 버전이 없는 모델 업로드

Roboflow는 프로젝트에 모델을 배포하는 두 가지 서로 다른 접근 방식을 제공합니다. 각각은 서로 다른 사용 사례와 조직적 요구를 충족합니다. 버전이 있는 배포와 버전이 없는 배포 중 어떤 것을 선택할지는 데이터셋 버전과 함께 모델의 변화를 추적해야 하는지, 아니면 workspace의 여러 프로젝트에서 모델을 공유하고 싶은지에 따라 달라집니다.

* **버전이 없는 배포**
  * workspace 수준에 연결됨
  * 여러 프로젝트에 동시에 배포 가능
  * 같은 workspace 내의 서로 다른 프로젝트에서 모델을 공유하는 데 이상적
* **버전이 있는 배포**
  * 특정 프로젝트 버전에 연결됨
  * 데이터셋 버전당 하나의 모델
  * 데이터셋 버전과 함께 모델의 변화를 추적하는 데 이상적
  * Label Assist에서 모델을 사용하는 데 이상적
  * 다른 모델을 학습하기 위한 checkpoint로 모델을 사용하는 데 이상적

### 커스텀 가중치 업로드

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

```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" %}
버전이 있는 모델은 정확히 하나의 대응하는 데이터셋 버전에만 연결되어야 합니다. 데이터셋에 생성된 버전이 없다면, 다음에서 생성할 수 있습니다 [앱 내](/roboflow/roboflow-ko/datasets/dataset-versions/create-a-dataset-version.md) 또는 다음을 통해 [API](/developer/python-sdk/create-a-dataset-version.md).

다음 문서를 참조하세요 [API를 통해 버전을 로드하는 방법](/developer/rest-api/versions/view-a-version.md) 또는 아래 예시를 참고하세요.
{% 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`: workspace ID 또는 URL입니다(선택 사항 - 지정하지 않으면 기본 workspace를 사용합니다)
* `-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. [모델을 배포하세요](/roboflow/roboflow-ko/deploy/deployment-overview.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.roboflow.com/roboflow/roboflow-ko/deploy/upload-custom-weights.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
