# SAM2

## 项目简介

Segment Anything Model 2 （SAM 2）是一个用于解决图像和视频中可提示视觉分割问题的基础模型。将 SAM 扩展到视频领域，将图像视为单帧视频。该模型采用简单的 Transformer 架构，并利用流式内存实现实时视频处理。

---

## 环境部署

### 1. 拉取镜像

```bash
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.5.1-ubuntu22.04-dtk25.04.2-py3.10
```

### 2. 创建容器

```bash
docker run -it \
--network=host \
--hostname=localhost \
--name=sam2 \
-v /opt/hyhal:/opt/hyhal:ro \
-v $PWD:/workspace \
--ipc=host \
--device=/dev/kfd \
--device=/dev/mkfd \
--device=/dev/dri \
--shm-size=512G \
--privileged \
--group-add video \
--cap-add=SYS_PTRACE \
-u root \
--security-opt seccomp=unconfined \
image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.5.1-ubuntu22.04-dtk25.04.2-py3.10 \
/bin/bash
```

---

## 测试步骤

### 1. 拉取代码

```bash
git clone http://developer.sourcefind.cn/codes/bw-bestperf/sam2.git
cd sam2
```

### 2. 安装依赖

```bash
python setup.py install
pip install hydra-core iopath -i https://pypi.tuna.tsinghua.edu.cn/simple
```

修改代码：

```bash
vim /usr/local/lib/python3.10/dist-packages/sam2/modeling/sam2_base.py

# 在第20行添加：
MaskDecoder = torch.compile(MaskDecoder, mode="max-autotune-no-cudagraphs")
PromptEncoder = torch.compile(PromptEncoder, mode="max-autotune-no-cudagraphs")
TwoWayTransformer = torch.compile(TwoWayTransformer, mode="max-autotune-no-cudagraphs")
```

### 3. 下载模型

```bash
cd checkpoints
bash download_ckpts.sh
cd ..
```

---

## 测试代码示例（单卡测试）

修改sam2/sam2/benchmark_image-warmup.py中的权重、yaml文件、数据集路径：

```bash
cd sam2
vim benchmark_image-warmup.py

# 将以下变量修改为本地路径
sam2_checkpoint = "/path/sam2/checkpoints/sam2.1_hiera_large.pt"
model_cfg = "configs/sam2.1/sam2.1_hiera_l.yaml"
images_dir = "/path/sam2/coco_mini/images/val2017"
```

运行单卡推理：

```bash
python benchmark_image-warmup.py
```

---

## 贡献指南

欢迎对 SAM2 项目进行贡献！请遵循以下步骤：

1. Fork 本仓库，并新建分支进行功能开发或问题修复。
2. 提交规范的 commit 信息，描述清晰。
3. 提交 Pull Request，简述修改内容及目的。
4. 遵守项目代码规范和测试标准。
5. 参与代码评审，积极沟通改进方案。

---

## 许可证

本项目遵循 MIT 许可证，详见 [LICENSE](./LICENSE) 文件。

---

感谢您的关注与支持！如有问题，欢迎提交 Issue 或联系维护团队。
