|
|
#!/bin/bash |
|
|
set -e |
|
|
|
|
|
echo "============================================================================" |
|
|
echo "VINE Model - Complete Setup Script" |
|
|
echo "This script sets up everything needed to use the VINE model from HuggingFace" |
|
|
echo "Model: https://huggingface.co/video-fm/vine" |
|
|
echo "============================================================================" |
|
|
|
|
|
|
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" |
|
|
cd "$SCRIPT_DIR" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "" |
|
|
echo "==========================================" |
|
|
echo "Step 1: Creating conda environment 'vine_demo' with Python 3.10..." |
|
|
echo "==========================================" |
|
|
conda create -n vine_demo python=3.10 -y |
|
|
|
|
|
|
|
|
echo "" |
|
|
echo "Activating environment..." |
|
|
source $(conda info --base)/etc/profile.d/conda.sh |
|
|
conda activate vine_demo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "" |
|
|
echo "==========================================" |
|
|
echo "Step 2: Installing PyTorch 2.7.1 with CUDA 12.6 support..." |
|
|
echo "==========================================" |
|
|
pip install torch==2.7.1 torchvision==0.22.1 --index-url https://download.pytorch.org/whl/cu126 |
|
|
|
|
|
|
|
|
pip install --upgrade pip |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "" |
|
|
echo "==========================================" |
|
|
echo "Step 3: Installing core dependencies..." |
|
|
echo "==========================================" |
|
|
|
|
|
|
|
|
pip install transformers>=4.40.0 |
|
|
pip install huggingface-hub |
|
|
pip install safetensors |
|
|
pip install accelerate |
|
|
|
|
|
|
|
|
pip install opencv-python |
|
|
pip install pillow |
|
|
pip install matplotlib |
|
|
pip install seaborn |
|
|
pip install pandas |
|
|
pip install numpy |
|
|
pip install tqdm |
|
|
pip install scikit-learn |
|
|
|
|
|
|
|
|
pip install gradio |
|
|
|
|
|
echo "β Core dependencies installed" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "" |
|
|
echo "==========================================" |
|
|
echo "Step 4: Cloning required repositories..." |
|
|
echo "==========================================" |
|
|
|
|
|
mkdir -p src |
|
|
cd src |
|
|
|
|
|
|
|
|
if [ ! -d "video-sam2" ]; then |
|
|
echo "Cloning video-sam2..." |
|
|
git clone https://github.com/video-fm/video-sam2.git |
|
|
else |
|
|
echo "video-sam2 already exists, skipping clone" |
|
|
fi |
|
|
|
|
|
|
|
|
if [ ! -d "GroundingDINO" ]; then |
|
|
echo "Cloning GroundingDINO..." |
|
|
git clone https://github.com/video-fm/GroundingDINO.git |
|
|
else |
|
|
echo "GroundingDINO already exists, skipping clone" |
|
|
fi |
|
|
|
|
|
|
|
|
if [ ! -d "LASER" ]; then |
|
|
echo "Cloning LASER..." |
|
|
git clone https://github.com/kevinxuez/LASER.git |
|
|
else |
|
|
echo "LASER already exists, skipping clone" |
|
|
fi |
|
|
|
|
|
|
|
|
if [ ! -d "vine_hf" ]; then |
|
|
echo "Cloning vine_hf..." |
|
|
git clone https://github.com/kevinxuez/vine_hf.git |
|
|
else |
|
|
echo "vine_hf already exists, skipping clone" |
|
|
fi |
|
|
|
|
|
echo "β Repositories cloned" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "" |
|
|
echo "==========================================" |
|
|
echo "Step 5: Installing packages in editable mode..." |
|
|
echo "==========================================" |
|
|
|
|
|
echo "Installing video-sam2..." |
|
|
pip install --no-cache-dir -e ./video-sam2 |
|
|
|
|
|
echo "Installing GroundingDINO..." |
|
|
pip install --no-cache-dir --use-pep517 -e ./GroundingDINO |
|
|
|
|
|
echo "Installing LASER..." |
|
|
pip install --no-cache-dir -e ./LASER |
|
|
|
|
|
echo "Installing vine_hf..." |
|
|
pip install --no-cache-dir -e ./vine_hf |
|
|
|
|
|
echo "β Packages installed" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "" |
|
|
echo "==========================================" |
|
|
echo "Step 6: Building GroundingDINO native extensions..." |
|
|
echo "==========================================" |
|
|
cd GroundingDINO |
|
|
python setup.py build_ext --force --inplace |
|
|
cd .. |
|
|
|
|
|
|
|
|
cd "$SCRIPT_DIR" |
|
|
|
|
|
echo "β Extensions built" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "" |
|
|
echo "==========================================" |
|
|
echo "Step 7: Downloading model checkpoints..." |
|
|
echo "==========================================" |
|
|
|
|
|
|
|
|
mkdir -p checkpoints |
|
|
cd checkpoints |
|
|
|
|
|
|
|
|
if [ ! -f "sam2_hiera_tiny.pt" ]; then |
|
|
echo "Downloading SAM2 checkpoint (sam2_hiera_tiny.pt ~149 MB)..." |
|
|
wget -q --show-progress https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_tiny.pt |
|
|
echo "β SAM2 checkpoint downloaded" |
|
|
else |
|
|
echo "β SAM2 checkpoint already exists" |
|
|
fi |
|
|
|
|
|
|
|
|
if [ ! -f "sam2_hiera_t.yaml" ]; then |
|
|
echo "Downloading SAM2 config (sam2_hiera_t.yaml)..." |
|
|
wget -q --show-progress https://raw.githubusercontent.com/facebookresearch/sam2/main/sam2/configs/sam2.1/sam2.1_hiera_t.yaml -O sam2_hiera_t.yaml |
|
|
echo "β SAM2 config downloaded" |
|
|
else |
|
|
echo "β SAM2 config already exists" |
|
|
fi |
|
|
|
|
|
|
|
|
if [ ! -f "groundingdino_swint_ogc.pth" ]; then |
|
|
echo "Downloading GroundingDINO checkpoint (groundingdino_swint_ogc.pth ~662 MB)..." |
|
|
wget -q --show-progress https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth |
|
|
echo "β GroundingDINO checkpoint downloaded" |
|
|
else |
|
|
echo "β GroundingDINO checkpoint already exists" |
|
|
fi |
|
|
|
|
|
|
|
|
if [ ! -f "GroundingDINO_SwinT_OGC.py" ]; then |
|
|
echo "Downloading GroundingDINO config (GroundingDINO_SwinT_OGC.py)..." |
|
|
wget -q --show-progress https://raw.githubusercontent.com/IDEA-Research/GroundingDINO/main/groundingdino/config/GroundingDINO_SwinT_OGC.py |
|
|
echo "β GroundingDINO config downloaded" |
|
|
else |
|
|
echo "β GroundingDINO config already exists" |
|
|
fi |
|
|
|
|
|
|
|
|
cd "$SCRIPT_DIR" |
|
|
|
|
|
echo "" |
|
|
echo "β All checkpoints downloaded to: $SCRIPT_DIR/checkpoints/" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "" |
|
|
echo "==========================================" |
|
|
echo "Step 8: Creating test script..." |
|
|
echo "==========================================" |
|
|
|
|
|
cat > test_vine.py << 'TESTEOF' |
|
|
""" |
|
|
Test script for VINE model loaded from HuggingFace Hub |
|
|
""" |
|
|
import os |
|
|
import sys |
|
|
from pathlib import Path |
|
|
|
|
|
os.environ['OPENAI_API_KEY'] = "dummy-key" |
|
|
|
|
|
|
|
|
sys.path.insert(0, str(Path(__file__).parent / "src")) |
|
|
|
|
|
print("=" * 80) |
|
|
print("Testing VINE Model from video-fm/vine") |
|
|
print("=" * 80) |
|
|
|
|
|
|
|
|
print("\n1. Loading VINE model from HuggingFace Hub...") |
|
|
from transformers import AutoModel |
|
|
model = AutoModel.from_pretrained('video-fm/vine', trust_remote_code=True) |
|
|
print("β Model loaded successfully") |
|
|
|
|
|
|
|
|
print("\n2. Verifying checkpoint files...") |
|
|
checkpoint_dir = Path(__file__).parent / "checkpoints" |
|
|
checkpoints = { |
|
|
"SAM2 config": checkpoint_dir / "sam2_hiera_t.yaml", |
|
|
"SAM2 checkpoint": checkpoint_dir / "sam2_hiera_tiny.pt", |
|
|
"GroundingDINO config": checkpoint_dir / "GroundingDINO_SwinT_OGC.py", |
|
|
"GroundingDINO checkpoint": checkpoint_dir / "groundingdino_swint_ogc.pth", |
|
|
} |
|
|
|
|
|
all_exist = True |
|
|
for name, path in checkpoints.items(): |
|
|
if path.exists(): |
|
|
size_mb = path.stat().st_size / (1024 * 1024) |
|
|
print(f"β {name}: {path.name} ({size_mb:.1f} MB)") |
|
|
else: |
|
|
print(f"β {name}: NOT FOUND at {path}") |
|
|
all_exist = False |
|
|
|
|
|
|
|
|
print("\n3. Creating VINE pipeline...") |
|
|
from vine_hf import VinePipeline |
|
|
|
|
|
pipeline = VinePipeline( |
|
|
model=model, |
|
|
tokenizer=None, |
|
|
sam_config_path=str(checkpoints["SAM2 config"]), |
|
|
sam_checkpoint_path=str(checkpoints["SAM2 checkpoint"]), |
|
|
gd_config_path=str(checkpoints["GroundingDINO config"]), |
|
|
gd_checkpoint_path=str(checkpoints["GroundingDINO checkpoint"]), |
|
|
device="cuda", |
|
|
trust_remote_code=True |
|
|
) |
|
|
print("β Pipeline created successfully") |
|
|
|
|
|
print("\n" + "=" * 80) |
|
|
print("β
VINE Setup Complete and Working!") |
|
|
print("=" * 80) |
|
|
print("\nYou can now use the model for video understanding:") |
|
|
print(""" |
|
|
from transformers import AutoModel |
|
|
from vine_hf import VinePipeline |
|
|
|
|
|
model = AutoModel.from_pretrained('video-fm/vine', trust_remote_code=True) |
|
|
pipeline = VinePipeline(model=model, ...) |
|
|
results = pipeline('video.mp4', categorical_keywords=['person', 'dog'], ...) |
|
|
""") |
|
|
TESTEOF |
|
|
|
|
|
echo "β Test script created: test_vine.py" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "" |
|
|
echo "==========================================" |
|
|
echo "Step 9: Testing installation..." |
|
|
echo "==========================================" |
|
|
|
|
|
echo "Checking PyTorch and CUDA..." |
|
|
python -c "import torch; print(f'PyTorch version: {torch.__version__}'); print(f'CUDA available: {torch.cuda.is_available()}'); print(f'CUDA version: {torch.version.cuda if torch.cuda.is_available() else \"N/A\"}')" |
|
|
|
|
|
echo "" |
|
|
echo "Running VINE model test..." |
|
|
python test_vine.py |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "" |
|
|
echo "============================================================================" |
|
|
echo "β
VINE Setup Complete!" |
|
|
echo "============================================================================" |
|
|
echo "" |
|
|
echo "What was installed:" |
|
|
echo " β Conda environment: vine_demo" |
|
|
echo " β PyTorch 2.7.1 with CUDA 12.6" |
|
|
echo " β Required packages: laser, sam2, groundingdino, vine_hf" |
|
|
echo " β Model checkpoints downloaded to: checkpoints/" |
|
|
echo "" |
|
|
echo "Checkpoint files:" |
|
|
echo " β checkpoints/sam2_hiera_tiny.pt (~149 MB)" |
|
|
echo " β checkpoints/sam2_hiera_t.yaml" |
|
|
echo " β checkpoints/groundingdino_swint_ogc.pth (~662 MB)" |
|
|
echo " β checkpoints/GroundingDINO_SwinT_OGC.py" |
|
|
echo "" |
|
|
echo "To use VINE:" |
|
|
echo " 1. Activate environment: conda activate vine_demo" |
|
|
echo " 2. Run your script or test_vine.py" |
|
|
echo "" |
|
|
echo "Example usage:" |
|
|
echo " python test_vine.py" |
|
|
echo "" |
|
|
echo "Model URL: https://huggingface.co/video-fm/vine" |
|
|
echo "Documentation: See README.md on HuggingFace Hub" |
|
|
echo "" |
|
|
echo "π Happy video understanding with VINE!" |
|
|
echo "============================================================================" |
|
|
|