Skip to content

Commit b466180

Browse files
committed
Cleanup MR so its a little more professional
1 parent 4041949 commit b466180

11 files changed

+116
-57
lines changed

Dockerfile

Lines changed: 43 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,63 @@
1-
FROM nvidia/cuda:12.1.0-devel-ubuntu22.04 AS DEPENDENCIES
1+
# Base image with CUDA support
2+
FROM nvidia/cuda:12.1.0-devel-ubuntu22.04 AS base
23

3-
ARG MODEL="yolo_world_l_dual_vlpan_l2norm_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py"
4-
ARG WEIGHT="yolo_world_l_clip_base_dual_vlpan_2e-3adamw_32xb16_100e_o365_goldg_train_pretrained-0e566235.pth"
5-
6-
ENV FORCE_CUDA="1"
7-
ENV MMCV_WITH_OPS=1
4+
# Set environment variables
5+
ENV FORCE_CUDA="1" \
6+
MMCV_WITH_OPS=1 \
7+
DEBIAN_FRONTEND=noninteractive
88

9+
# Install system dependencies
910
RUN apt-get update && apt-get install -y --no-install-recommends \
10-
python3-pip \
11+
python3-pip \
1112
libgl1-mesa-glx \
12-
libsm6 \
13-
libxext6 \
14-
libxrender-dev \
15-
libglib2.0-0 \
16-
git \
17-
python3-dev \
18-
python3-wheel \
19-
curl
20-
21-
# Uncomment the following if you want to download a specific set of weights
22-
# RUN mkdir weights
23-
# RUN curl -o weights/$WEIGHT -L https://huggingface.co/wondervictor/YOLO-World/resolve/main/$WEIGHT
24-
25-
RUN pip3 install --upgrade pip \
26-
&& pip3 install wheel \
27-
&& pip3 install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu121 \
28-
&& pip3 install \
13+
libsm6 \
14+
libxext6 \
15+
libxrender-dev \
16+
libglib2.0-0 \
17+
git \
18+
python3-dev \
19+
python3-wheel \
20+
curl \
21+
&& rm -rf /var/lib/apt/lists/*
22+
23+
# Install Python dependencies
24+
FROM base AS python_deps
25+
26+
RUN pip3 install --upgrade pip wheel \
27+
&& pip3 install --no-cache-dir torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu121 \
28+
&& pip3 install --no-cache-dir \
2929
gradio==4.16.0 \
3030
opencv-python==4.9.0.80 \
3131
supervision \
3232
mmengine==0.10.4 \
3333
setuptools \
3434
openmim \
35+
onnx \
36+
onnxsim \
3537
&& mim install mmcv==2.1.0 \
3638
&& mim install mmdet==3.3.0 \
37-
&& pip install git+https://github.com/onuralpszr/mmyolo.git
39+
&& pip3 install --no-cache-dir git+https://github.com/onuralpszr/mmyolo.git
40+
41+
# Clone and install YOLO-World
42+
FROM python_deps AS yolo_world
3843

39-
FROM DEPENDENCIES as INSTALLING_YOLO
40-
RUN git clone --recursive https://github.com/tim-win/YOLO-World /yolo/
41-
#COPY . /yolo
44+
RUN git clone --recursive https://github.com/wondervictor/YOLO-World /yolo/
4245
WORKDIR /yolo
4346

4447
RUN pip3 install -e .[demo]
4548

46-
RUN pip3 install onnx onnxsim
49+
# Final stage
50+
FROM yolo_world AS final
51+
52+
ARG MODEL="yolo_world_l_dual_vlpan_l2norm_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py"
53+
ARG WEIGHT="yolo_world_l_clip_base_dual_vlpan_2e-3adamw_32xb16_100e_o365_goldg_train_pretrained-0e566235.pth"
4754

48-
FROM INSTALLING_YOLO as OK_THIS_PART_IS_TRICKY_DONT_HATE
55+
# Create weights directory and set permissions
56+
RUN mkdir /weights/ \
57+
&& chmod a+rwx /yolo/configs/*/*
4958

50-
RUN mkdir /weights/
51-
RUN chmod a+rwx /yolo/configs/*/*
59+
# Optionally download weights (commented out by default)
60+
# RUN curl -o /weights/$WEIGHT -L https://huggingface.co/wondervictor/YOLO-World/resolve/main/$WEIGHT
5261

53-
CMD [ "bash" ]
62+
# Set the default command
63+
CMD ["bash"]

build_and_run.sh

Lines changed: 57 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,33 @@
11
#!/usr/bin/env bash
2+
3+
# Exit immediately if a command exits with a non-zero status.
24
set -e
35

4-
MODEL_DIR="../models/models-yoloworld"
6+
# Set MODEL_DIR if not already set in the environment
7+
: "${MODEL_DIR:="../models/models-yoloworld"}"
8+
9+
# DocString for the script
10+
: '
11+
This script builds and runs a Docker container for YOLO-World demos.
12+
It supports various pre-trained models and configurations for object detection and segmentation.
13+
14+
Usage:
15+
./build_and_run.sh <model-key>
16+
17+
Environment Variables:
18+
MODEL_DIR: Path to the directory containing model weights (default: "../models/models-yoloworld")
519
20+
Arguments:
21+
<model-key>: Key for the desired model configuration (see available keys below)
22+
23+
Available model keys:
24+
seg-l, seg-l-seghead, seg-m, seg-m-seghead,
25+
pretrain-l-clip-800ft, pretrain-l-clip, pretrain-l-1280ft, pretrain-l,
26+
pretrain-m-1280ft, pretrain-m, pretrain-s-1280ft, pretrain-s,
27+
pretrain-x-cc3mlite, pretrain-x-1280ft
28+
'
29+
30+
# Define associative array for model configurations
631
declare -A models
732
models["seg-l"]="yolo_world_v2_seg_l_vlpan_bn_2e-4_80e_8gpus_seghead_finetune_lvis.py yolo_world_seg_l_dual_vlpan_2e-4_80e_8gpus_allmodules_finetune_lvis-8c58c916.pth"
833
models["seg-l-seghead"]="yolo_world_v2_seg_l_vlpan_bn_2e-4_80e_8gpus_seghead_finetune_lvis.py yolo_world_seg_l_dual_vlpan_2e-4_80e_8gpus_seghead_finetune_lvis-5a642d30.pth"
@@ -19,33 +44,52 @@ models["pretrain-s"]="yolo_world_v2_s_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_
1944
models["pretrain-x-cc3mlite"]="yolo_world_v2_x_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_cc3mlite_train_lvis_minival.py yolo_world_v2_x_obj365v1_goldg_cc3mlite_pretrain-8698fbfa.pth"
2045
models["pretrain-x-1280ft"]="yolo_world_v2_x_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_1280ft_lvis_minival.py yolo_world_v2_x_obj365v1_goldg_cc3mlite_pretrain_1280ft-14996a36.pth"
2146

22-
if [ $# -eq 0 ]; then
47+
# Function to display usage information
48+
show_usage() {
49+
echo "Usage: $0 <model-key>"
2350
echo "Available model keys:"
2451
for key in "${!models[@]}"; do
2552
echo " $key"
2653
done
27-
echo "Usage: $0 <model-key>"
54+
}
55+
56+
# Check if a model key is provided
57+
if [ $# -eq 0 ]; then
58+
show_usage
2859
exit 1
2960
fi
3061

3162
model_key=$1
3263

64+
# Validate the model key
3365
if [ -z "${models[$model_key]}" ]; then
34-
echo "Invalid model key. Available keys are:"
35-
for key in "${!models[@]}"; do
36-
echo " $key"
37-
done
66+
echo "Invalid model key."
67+
show_usage
3868
exit 1
3969
fi
4070

41-
read MODEL WEIGHT <<< "${models[$model_key]}"
71+
# Extract model and weight information
72+
read -r MODEL WEIGHT <<< "${models[$model_key]}"
4273

74+
# Set configuration directory and demo file based on model type
4375
config_dir="configs/pretrain"
44-
demo_file=demo/gradio_demo.py
76+
demo_file="demo/gradio_demo.py"
4577
if [[ $model_key == seg-* ]]; then
46-
export config_dir="configs/segmentation"
47-
export demo_file="demo/segmentation_demo.py"
78+
config_dir="configs/segmentation"
79+
demo_file="demo/segmentation_demo.py"
4880
fi
4981

50-
# docker build -f ./Dockerfile --build-arg="MODEL=$MODEL" --build-arg="WEIGHT=$WEIGHT" -t "yolo-demo:latest" . && \
51-
docker run -it -v "$(readlink -f $MODEL_DIR):/weights/" --runtime nvidia -p 8080:8080 "yolo-demo:latest" python3 $demo_file "$config_dir/$MODEL" "/weights/$WEIGHT"
82+
# Build Docker image and run container
83+
echo "Building Docker image..."
84+
docker build -f ./Dockerfile --no-cache \
85+
--build-arg="MODEL=$MODEL" \
86+
--build-arg="WEIGHT=$WEIGHT" \
87+
-t "yolo-demo:latest" .
88+
89+
echo "Running Docker container..."
90+
docker run -it \
91+
-v "$(readlink -f "$MODEL_DIR"):/weights/" \
92+
--runtime nvidia \
93+
-p 8080:8080 \
94+
"yolo-demo:latest" \
95+
python3 "$demo_file" "$config_dir/$MODEL" "/weights/$WEIGHT"

configs/finetune_coco/yolo_world_v2_m_vlpan_bn_2e-4_80e_8gpus_mask-refine_finetune_coco.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
weight_decay = 0.05
1919
train_batch_size_per_gpu = 16
2020
load_from = 'pretrained_models/yolo_world_m_clip_t2i_bn_2e-3adamw_32xb16-100e_obj365v1_goldg_train-c6237d5b.pth'
21-
# text_model_name = '../pretrained_models/clip-vit-base-patch32-projection'
2221
text_model_name = 'openai/clip-vit-base-patch32'
2322
persistent_workers = False
2423

configs/pretrain/yolo_world_v2_l_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_1280ft_lvis_minival.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
weight_decay = 0.025
1717
train_batch_size_per_gpu = 4
1818
load_from = "pretrained_models/yolo_world_v2_l_obj365v1_goldg_pretrain-a82b1fe3.pth"
19-
# text_model_name = '../pretrained_models/clip-vit-base-patch32-projection'
2019
text_model_name = 'openai/clip-vit-base-patch32'
2120
img_scale = (1280, 1280)
2221

configs/pretrain/yolo_world_v2_l_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
base_lr = 2e-3
1616
weight_decay = 0.05 / 2
1717
train_batch_size_per_gpu = 16
18-
# text_model_name = '../pretrained_models/clip-vit-base-patch32-projection'
1918
text_model_name = 'openai/clip-vit-base-patch32'
2019
# model settings
2120
model = dict(

configs/pretrain/yolo_world_v2_l_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_val.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
base_lr = 2e-3
1616
weight_decay = 0.05 / 2
1717
train_batch_size_per_gpu = 16
18-
# text_model_name = '../pretrained_models/clip-vit-base-patch32-projection'
1918
text_model_name = 'openai/clip-vit-base-patch32'
2019
# model settings
2120
model = dict(

configs/pretrain/yolo_world_v2_x_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_cc3mlite_train_lvis_minival.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
base_lr = 2e-3
1616
weight_decay = 0.05 / 2
1717
train_batch_size_per_gpu = 16
18-
# text_model_name = '../pretrained_models/clip-vit-base-patch32-projection'
1918
text_model_name = 'openai/clip-vit-base-patch32'
2019
# model settings
2120
model = dict(

configs/pretrain/yolo_world_v2_x_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_1280ft_lvis_minival.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
base_lr = 2e-3
1616
weight_decay = 0.05 / 2
1717
train_batch_size_per_gpu = 16
18-
# text_model_name = '../pretrained_models/clip-vit-base-patch32-projection'
1918
text_model_name = 'openai/clip-vit-base-patch32'
2019
img_scale = (1280, 1280)
2120

configs/pretrain/yolo_world_v2_x_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_lvis_minival.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
base_lr = 2e-3
1616
weight_decay = 0.05 / 2
1717
train_batch_size_per_gpu = 16
18-
# text_model_name = '../pretrained_models/clip-vit-base-patch32-projection'
1918
text_model_name = 'openai/clip-vit-base-patch32'
2019
# model settings
2120
model = dict(

configs/segmentation/yolo_world_v2_seg_l_vlpan_bn_2e-4_80e_8gpus_seghead_finetune_lvis.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
weight_decay = 0.05
1717
train_batch_size_per_gpu = 8
1818
load_from = 'pretrained_models/yolo_world_l_clip_t2i_bn_2e-3adamw_32xb16-100e_obj365v1_goldg_cc3mlite_train-ca93cd1f.pth'
19-
# text_model_name = '../pretrained_models/clip-vit-base-patch32-projection'
2019
text_model_name = 'openai/clip-vit-base-patch32'
2120
persistent_workers = False
2221

0 commit comments

Comments
 (0)