Upload Custom Model Weights
Roboflow offers the ability to upload model weights for your custom-trained models to your Roboflow projects for model deployment.
Once you've completed training your custom model, upload your model weights back to your Roboflow project to take advantage of Roboflow Inference.
Model Support
See the Supported Models table for training, weights upload, and weights download compatibility.
Model weights uploads are currently available for:
- YOLOv5 (n, s, m, l, x) Object Detection and Instance Segmentation 
- YOLOv7 Instance Segmentation (yolov7-seg) 
- YOLOv8 (n, s, m, l, x) Object Detection, Instance Segmentation, Classification, and Keypoint Detection 
- YOLOv9 (n, s, m, l, x) Object Detection 
- YOLOv10 (n, s, m, l, x) Object Detection 
- YOLOv11 (n, s, m, l, x) Object Detection, Instance Segmentation 
- YOLOv12 (n, s, m, l, x) Object Detection 
- YOLO-NAS (s, m, l) Object Detection 
- RF-DETR (rfdetr-base, rfdetr-large) Object Detection 
- Florence-2 (base, large) Multimodal 
- PaliGemma (3b-pt-224, 3b-pt-448, 3b-pt-896) Multimodal 
- PaliGemma 2 (3b-pt-224, 3b-pt-448, 3b-pt-896) Multimodal 
- YOLOv8 models must be trained on - ultralytics==8.0.196
- YOLOv9 models must be trained and uploaded using - ultralyticsfrom https://github.com/WongKinYiu/yolov9
- YOLOv10 models must be trained and uploaded using - ultralyticsfrom
- YOLOv11 models must be trained on - ultralytics<=8.3.40
- YOLOv12 models must be trained and uploaded using - ultralyticsfrom https://github.com/sunsmarterjie/yolov12
Versioned vs. Versionless Models Upload
Roboflow provides two distinct approaches for deploying models to your projects, each serving different use cases and organizational needs. The choice between versioned and versionless deployments depends on whether you need to track model evolution alongside dataset versions or want to share models across multiple projects in your workspace.
- Versionless Deployments - Tied to the workspace level 
- Can be deployed to multiple projects simultaneously 
- Ideal for sharing models across different projects within the same workspace 
 
- Versioned Deployments - Tied to specific project versions 
- One model per dataset version 
- Ideal for tracking model evolution alongside dataset versions 
- Ideal for using model on Label Assist 
- Ideal for using model as checkpoint for training other models 
 
Upload Custom Weights
Before starting, make sure you have roboflow>=1.1.53 to use the versionless deploy.
To upload versionless custom weights, use the workspace.deploy_model method in the Python SDK. 
Usage
workspace.deploy_model(
    model_type="yolov8",  # Type of the model
    model_path="path/to/model",  # Path to model directory
    project_ids=["project1", "project2"],  # List of project IDs
    model_name="my-model",  # Name for the model (must have at least 1 letter, and accept numbers and dashes)
    filename="weights/best.pt"  # Path to weights file (default)
)Parameters
- model_type (str): The type of model being deployed (e.g., "yolov8", "yolov11") 
- model_path (str): File path to the directory containing the model weights 
- project_ids (list[str]): List of project IDs to deploy the model to 
- model_name (str): Name to identify the model - (must have at least 1 letter, and accept numbers and dashes) 
- filename (str, optional): Name of the weights file (defaults to "weights/best.pt") 
Example
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"
)Before starting, make sure you have roboflow>=1.0.1 to use the.deploy() command.
To upload custom weights, use the version.deploy() method in the Python SDK. 
Usage
version.deploy(
    model_type="yolov8",  # Type of the model
    model_path="path/to/model",  # Path to model directory
    filename="weights/best.pt"  # Path to weights file (default)
)Parameters
- model_type (str): The type of model to be deployed (e.g., "yolov8", "yolov11") 
- model_path (str): File path to the directory containing the model weights 
- filename (str, optional): Name of the weights file (defaults to "weights/best.pt") 
Example
from roboflow import Roboflow
rf = Roboflow(api_key="YOUR_API_KEY")
project = rf.workspace().project("PROJECT_ID")
#can specify weights_filename, default is "weights/best.pt"
version = project.version(VERSION_ID)
#example1 - directory path is "training1/model1.pt" for yolov8 model
version.deploy("yolov8", "training1", "model1.pt")
#example2 - directory path is "training1/weights/best.pt" for yolov8 model
version.deploy("yolov8", "training1")Important Notes
- A version can only have one trained model at a time 
- Attempting to upload to a version that already has a model will result in a 429 error 
Installation
To install the Roboflow Python package, you can use pip:
pip install roboflow
Authentication
Before using any CLI commands, you need to authenticate with Roboflow:
- Run the authentication command: - roboflow login
- Visit the URL shown in the terminal: https://app.roboflow.com/auth-cli 
- Get your authentication token from the website 
- Paste the token in your terminal 
The credentials will be automatically saved to ~/.config/roboflow/config.json
Uploading Model Weights
The Roboflow CLI provides a command to upload trained model weights to your Roboflow projects. This is useful when you want to deploy custom-trained models to Roboflow.
Basic Usage
roboflow upload_model -w <workspace> -p <project> -t <model_type> -m <model_path> [-v <version>] [-f <filename>] [-n <model_name>]Parameters
- -w, --workspace: Your workspace ID or URL (optional - will use default workspace if not specified)
- -p, --project: Project ID to upload the model into (for versionless upload can be specified multiple times for multiple projects)
- -t, --model_type: Type of the model (e.g., yolov8, paligemma2)
- -m, --model_path: Path to the directory containing the trained model file
- -v, --version_number: Version number to upload the model to (optional)
- -f, --filename: Name of the model file (default: "weights/best.pt")
- -n, --model_name: Name of the model (required for versionless model deploy)
Examples
# 1. Upload a model to a specific version: 
roboflow upload_model -w my-workspace -p my-project -v 1 -t yolov8 -m ./weights
# 2. Upload a versionless model to multiple projects:
roboflow upload_model -w my-workspace -p project1 -p project2 -t yolov11 -n my-model-v1 -m ./weightsNext Steps
- Check out your model in the "Models" tab of Roboflow 
- Run your model locally with Roboflow Inference Server. 
Last updated
Was this helpful?
