How to Run Samurai on Google Colab

my original post
https://baxin.netlify.app/how-to-run-samurai-on-google-colab/

What is Samurai?

SAMURAI: Adapting Segment Anything Model for Zero-Shot Visual Tracking with Motion-Aware Memory

Requirements

  • Google account for Google Colab
  • Hugging Face account to download data

How to Run Samurai on Google Colab

Step 0. Get Hugging Face token and add it to your environment variable

We will need to access to Hugging Face to download data.

If you don’t know how to get Hugging Face token, please refer to this page.
Also, if you don’t know how to add Hugging Face token to your environment variable, please check this post.

Step 1. Change the default runtime

To run Samurai on Google Colab, we need to change the default runtime to GPU.
We need to use T4 (free-tier GPU).

Step 2. Install packages

!pip install matplotlib==3.7 tikzplotlib jpeg4py opencv-python lmdb pandas scipy loguru

Enter fullscreen mode Exit fullscreen mode

Step 3. Clone the Samurai repository

!git clone https://github.com/yangchris11/samurai.git

Enter fullscreen mode Exit fullscreen mode

Step 4. Install Sam2

%cd samurai/sam2
!pip install -e .
!pip install -e ".[notebooks]"

Enter fullscreen mode Exit fullscreen mode

Step 5. Download checkpoints

%cd /content/samurai/sam2/checkpoints
!./download_ckpts.sh && \
%cd ..

Enter fullscreen mode Exit fullscreen mode

Step 6. Download data from Hugging Face

In this part we will use python script to set up the data that samurai repo mentioned in data preparation section.
https://github.com/yangchris11/samurai?tab=readme-ov-file#data-preparation

The data we will use is l-lt/LaSOT

In this case, we will download cat dataset, so if you want to try other datasets, you can change the code accordingly.

import os

# Define the data directory data_directory = '/content/samurai/data/LaSOT'

# Create the data directory if it does not exist try:
    os.makedirs(data_directory, exist_ok=True)
    print(f"Directory '{data_directory}' created successfully or already exists.")
except OSError as error:
    print(f"Error creating directory '{data_directory}': {error}")

# Define the content to be written to the file content = '''cat-1 cat-20'''

# Define the file path file_path = os.path.join(data_directory, 'testing_set.txt')

# Write the content to the file try:
    with open(file_path, 'w') as f:
        f.write(content)
    print(f"Content written to file '{file_path}' successfully.")
except IOError as error:
    print(f"Error writing to file '{file_path}': {error}")

# Print the file path print(f'File path: {file_path}')

Enter fullscreen mode Exit fullscreen mode

import os
from huggingface_hub import hf_hub_download
import zipfile
import shutil

def download_and_extract(base_dir="/content/samurai/data"):
    try:
        # Create LaSOT and cat directories         lasot_dir = os.path.join(base_dir, "LaSOT")
        cat_dir = os.path.join(lasot_dir, "cat")
        os.makedirs(cat_dir, exist_ok=True)

        # Create directory to save the ZIP file         zip_dir = os.path.join(base_dir, "zips")
        os.makedirs(zip_dir, exist_ok=True)

        print("Downloading dataset...")
        zip_path = hf_hub_download(
            repo_id="l-lt/LaSOT",
            filename="cat.zip",
            repo_type="dataset",
            local_dir=zip_dir
        )
        print(f"Downloaded to: {zip_path}")

        # Extract ZIP file to cat directory         print("Extracting ZIP file to cat directory...")
        with zipfile.ZipFile(zip_path, 'r') as zip_ref:
            zip_ref.extractall(cat_dir)

        print("\nCreated directory structure:")
        print("LaSOT/")
        print("└── cat/")
        # Display the first few cat folders         for item in sorted(os.listdir(cat_dir))[:6]:
            print(f" ├── {item}/")
        print(" └── ...")

        return lasot_dir

    except Exception as e:
        print(f"An error occurred: {str(e)}")
        return None

if __name__ == "__main__":
    extract_path = download_and_extract()
    if extract_path:
        print("\nDownload and extraction completed successfully!")
    else:
        print("\nDownload and extraction failed.")

Enter fullscreen mode Exit fullscreen mode

Step 7. Inference

The last step is to run Samurai inference.
Inference will take a while.

%cd /content/samurai
!python scripts/main_inference.py

Enter fullscreen mode Exit fullscreen mode

If everything goes well, you should see the following output:

All the code is available on this GitHub repository.

If you like this post, please give it a star on GitHub.

原文链接:How to Run Samurai on Google Colab

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容