Commit 2cd37fd4 authored by bailuo's avatar bailuo
Browse files

fix bug

parent bea94578
...@@ -13,24 +13,23 @@ Matte-Anything 一种交互式自然图像抠图模型。 ...@@ -13,24 +13,23 @@ Matte-Anything 一种交互式自然图像抠图模型。
<img src="./doc/architecture.png"/> <img src="./doc/architecture.png"/>
<div >Matte-Anything</div> <div >Matte-Anything</div>
</div> </div>
Matte-Anything 利用视觉基础模型,如 Segment Anything Models、Open Vocabulary Detection Models 实现交互简单且高质量的自然图像抠图
## 算法原理 ## 算法原理
Matte-Anything 利用视觉基础模型,如 Segment Anything Models、Open Vocabulary Detection Models 实现交互简单且高质量的自然图像抠图。\ Matte-Anything 关键思想是使用视觉基础模型生成的分割和透明度信息来生成伪三元图。因此,我们将图像抠图作为图像分割和透明对象检测的下游任务。Matte-Anything 利用特定于任务的视觉模型来增强自然图像抠图的性能。首先,我们采用分段任意模型 SAM 为目标实例生成高质量的掩模。随后,我们利用开放词汇对象检测模型,即 GroudingDINO 来检测常见的透明对象。然后根据分割和透明对象检测结果生成伪三元图,随后将其输入到自然图像抠图模型中 —— ViTMatte 。 ViTMatte模型是最先进的与类别无关的抠图方法,通过有效地适应预训练的ViT来实现,并且具有很强的泛化能力。 SAM、GroundingDINO 和 ViTMatte 这三个部分是解耦的,不需要额外的培训。
关键思想是使用视觉基础模型生成的分割和透明度信息来生成伪三元图。因此,我们将图像抠图作为图像分割和透明对象检测的下游任务。Matte-Anything 利用特定于任务的视觉模型来增强自然图像抠图的性能。首先,我们采用分段任意模型 SAM 为目标实例生成高质量的掩模。随后,我们利用开放词汇对象检测模型,即 GroudingDINO 来检测常见的透明对象。然后根据分割和透明对象检测结果生成伪三元图,随后将其输入到自然图像抠图模型中—— ViTMatte 。 ViTMatte模型是最先进的与类别无关的抠图方法,通过有效地适应预训练的ViT来实现,并且具有很强的泛化能力。 SAM、GroundingDINO 和 ViTMatte 这三个部分是解耦的,不需要额外的培训。
## 环境配置 ## 环境配置
``` ```
mv matte-anything_pytoch matte-anything # 去框架名后缀 mv matte-anything_pytorch matte-anything # 去框架名后缀
# docker的-v 路径、docker_name和imageID根据实际情况修改 # docker的-v 路径、docker_name和imageID根据实际情况修改
# pip安装时如果出现下载慢可以尝试别的镜像源 # pip安装时如果出现下载慢可以尝试别的镜像源
``` ```
### Docker(方法一) ### Docker(方法一)
<!-- 此处提供[光源](https://www.sourcefind.cn/#/service-details)拉取docker镜像的地址与使用步骤 --> <!-- 此处提供[光源](https://www.sourcefind.cn/#/service-details)拉取docker镜像的地址与使用步骤 -->
``` ```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.2-py3.10 # 本镜像imageID为:2f1f619d0182 docker pull image.sourcefind.cn:5000/dcu/admin/base/jupyterlab-pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10-scnet # 本镜像imageID为:38b7960be788
docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=16G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --network=host --name docker_name imageID bash docker run -it -v /path/your_code_data/:/path/your_code_data/ -v /opt/hyhal/:/opt/hyhal/:ro --shm-size=16G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --network=host --name docker_name imageID bash
cd /your_code_path/matte-anything cd /your_code_path/matte-anything
# Install segment-anything # Install segment-anything
...@@ -73,6 +72,7 @@ pytorch: 2.1.0 ...@@ -73,6 +72,7 @@ pytorch: 2.1.0
其它非深度学习库参照requirements.txt安装: 其它非深度学习库参照requirements.txt安装:
``` ```
cd /your_code_path/matte-anything
# Install segment-anything # Install segment-anything
pip install git+https://github.com/facebookresearch/segment-anything.git pip install git+https://github.com/facebookresearch/segment-anything.git
# Install ViTMatte # Install ViTMatte
...@@ -80,6 +80,8 @@ python -m pip install 'git+https://github.com/facebookresearch/detectron2.git' ...@@ -80,6 +80,8 @@ python -m pip install 'git+https://github.com/facebookresearch/detectron2.git'
pip install -r requirements.txt pip install -r requirements.txt
# Install GroundingDINO # Install GroundingDINO
git clone https://github.com/IDEA-Research/GroundingDINO.git git clone https://github.com/IDEA-Research/GroundingDINO.git
# 修改GroundingDINO/setup.py中CUDA_HOME->ROCM_HOME; 以及from fastpt import CUDAExtension
# 或者直接用setup.py替换掉GroundingDINO/setup.py
cd GroundingDINO cd GroundingDINO
pip install -e . pip install -e .
``` ```
...@@ -93,15 +95,16 @@ pip install -e . ...@@ -93,15 +95,16 @@ pip install -e .
下载 [sam_vit_h_4b8939.pth](https://github.com/facebookresearch/segment-anything?tab=readme-ov-file#model-checkpoints) 下载 [sam_vit_h_4b8939.pth](https://github.com/facebookresearch/segment-anything?tab=readme-ov-file#model-checkpoints)
或者从 [SCNet](http://113.200.138.88:18080/aimodels/findsource-dependency/sam_vit_h_4b8939) 上快速下载; 或者从 [SCNet](http://113.200.138.88:18080/aimodels/findsource-dependency/sam_vit_h_4b8939) 上快速下载;
下载 [GroundingDINO-T](https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth) 或者从 [SCNet]() 上快速下载; 下载 [GroundingDINO-T](https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth) 或者从 [SCNet](http://113.200.138.88:18080/aimodels/idea-research/GroundingDINO) 上快速下载;
下载 [ViTMatte_vit_b](https://drive.google.com/file/d/1d97oKuITCeWgai2Tf3iNilt6rMSSYzkW/view?usp=sharing) 或者从 [SCNet]() 上快速下载。 下载 [ViTMatte_vit_b](https://drive.google.com/file/d/1d97oKuITCeWgai2Tf3iNilt6rMSSYzkW/view?usp=sharing) 或者从 [SCNet](http://113.200.138.88:18080/aimodels/findsource-dependency/vitmatte_vit_b) 上快速下载。
并放在 ./pretrained 下。 并放在 ./pretrained 下。
可视化webui推理: 可视化webui推理:
``` ```
export HF_ENDPOINT=https://hf-mirror.com
python matte_anything.py --listen python matte_anything.py --listen
``` ```
<div align=center> <div align=center>
......
FROM image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.2-py3.10 FROM image.sourcefind.cn:5000/dcu/admin/base/jupyterlab-pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10-scnet
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
# COPY requirements.txt requirements.txt # COPY requirements.txt requirements.txt
# RUN pip3 install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com # RUN pip3 install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
\ No newline at end of file
...@@ -2,10 +2,12 @@ ...@@ -2,10 +2,12 @@
#torchvision #torchvision
#tensorboard #tensorboard
timm==0.5.4 timm==0.5.4
opencv-python==4.5.3.56 #opencv-python==4.5.3.56
setuptools==58.2.0 setuptools==58.2.0
easydict easydict
wget wget
scikit-image scikit-image
gradio==3.34.0 gradio==3.34.0
fairscale fairscale
wheel
\ No newline at end of file
# coding=utf-8
# Copyright 2022 The IDEA Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ------------------------------------------------------------------------------------------------
# Modified from
# https://github.com/fundamentalvision/Deformable-DETR/blob/main/models/ops/setup.py
# https://github.com/facebookresearch/detectron2/blob/main/setup.py
# https://github.com/open-mmlab/mmdetection/blob/master/setup.py
# https://github.com/Oneflow-Inc/libai/blob/main/setup.py
# ------------------------------------------------------------------------------------------------
import glob
import os
import subprocess
import subprocess
import sys
def install_torch():
try:
import torch
except ImportError:
subprocess.check_call([sys.executable, "-m", "pip", "install", "torch"])
# Call the function to ensure torch is installed
install_torch()
import torch
from setuptools import find_packages, setup
# from torch.utils.cpp_extension import CUDA_HOME, CppExtension, CUDAExtension
from torch.utils.cpp_extension import ROCM_HOME, CppExtension
# 用fastpt中的CUDAExtension
from fastpt import CUDAExtension
# groundingdino version info
version = "0.1.0"
package_name = "groundingdino"
cwd = os.path.dirname(os.path.abspath(__file__))
sha = "Unknown"
try:
sha = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=cwd).decode("ascii").strip()
except Exception:
pass
def write_version_file():
version_path = os.path.join(cwd, "groundingdino", "version.py")
with open(version_path, "w") as f:
f.write(f"__version__ = '{version}'\n")
# f.write(f"git_version = {repr(sha)}\n")
requirements = ["torch", "torchvision"]
torch_ver = [int(x) for x in torch.__version__.split(".")[:2]]
def get_extensions():
this_dir = os.path.dirname(os.path.abspath(__file__))
extensions_dir = os.path.join(this_dir, "groundingdino", "models", "GroundingDINO", "csrc")
main_source = os.path.join(extensions_dir, "vision.cpp")
sources = glob.glob(os.path.join(extensions_dir, "**", "*.cpp"))
source_cuda = glob.glob(os.path.join(extensions_dir, "**", "*.cu")) + glob.glob(
os.path.join(extensions_dir, "*.cu")
)
sources = [main_source] + sources
extension = CppExtension
extra_compile_args = {"cxx": []}
define_macros = []
# CUDA_HOME -> ROCM_HOME
if ROCM_HOME is not None and (torch.cuda.is_available() or "TORCH_CUDA_ARCH_LIST" in os.environ):
print("Compiling with CUDA")
extension = CUDAExtension
sources += source_cuda
define_macros += [("WITH_CUDA", None)]
extra_compile_args["nvcc"] = [
"-DCUDA_HAS_FP16=1",
"-D__CUDA_NO_HALF_OPERATORS__",
"-D__CUDA_NO_HALF_CONVERSIONS__",
"-D__CUDA_NO_HALF2_OPERATORS__",
]
else:
print("Compiling without CUDA")
define_macros += [("WITH_HIP", None)]
extra_compile_args["nvcc"] = []
return None
sources = [os.path.join(extensions_dir, s) for s in sources]
include_dirs = [extensions_dir]
ext_modules = [
extension(
"groundingdino._C",
sources,
include_dirs=include_dirs,
define_macros=define_macros,
extra_compile_args=extra_compile_args,
)
]
return ext_modules
def parse_requirements(fname="requirements.txt", with_version=True):
"""Parse the package dependencies listed in a requirements file but strips
specific versioning information.
Args:
fname (str): path to requirements file
with_version (bool, default=False): if True include version specs
Returns:
List[str]: list of requirements items
CommandLine:
python -c "import setup; print(setup.parse_requirements())"
"""
import re
import sys
from os.path import exists
require_fpath = fname
def parse_line(line):
"""Parse information from a line in a requirements text file."""
if line.startswith("-r "):
# Allow specifying requirements in other files
target = line.split(" ")[1]
for info in parse_require_file(target):
yield info
else:
info = {"line": line}
if line.startswith("-e "):
info["package"] = line.split("#egg=")[1]
elif "@git+" in line:
info["package"] = line
else:
# Remove versioning from the package
pat = "(" + "|".join([">=", "==", ">"]) + ")"
parts = re.split(pat, line, maxsplit=1)
parts = [p.strip() for p in parts]
info["package"] = parts[0]
if len(parts) > 1:
op, rest = parts[1:]
if ";" in rest:
# Handle platform specific dependencies
# http://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-platform-specific-dependencies
version, platform_deps = map(str.strip, rest.split(";"))
info["platform_deps"] = platform_deps
else:
version = rest # NOQA
info["version"] = (op, version)
yield info
def parse_require_file(fpath):
with open(fpath, "r") as f:
for line in f.readlines():
line = line.strip()
if line and not line.startswith("#"):
for info in parse_line(line):
yield info
def gen_packages_items():
if exists(require_fpath):
for info in parse_require_file(require_fpath):
parts = [info["package"]]
if with_version and "version" in info:
parts.extend(info["version"])
if not sys.version.startswith("3.4"):
# apparently package_deps are broken in 3.4
platform_deps = info.get("platform_deps")
if platform_deps is not None:
parts.append(";" + platform_deps)
item = "".join(parts)
yield item
packages = list(gen_packages_items())
return packages
if __name__ == "__main__":
print(f"Building wheel {package_name}-{version}")
with open("LICENSE", "r", encoding="utf-8") as f:
license = f.read()
write_version_file()
setup(
name="groundingdino",
version="0.1.0",
author="International Digital Economy Academy, Shilong Liu",
url="https://github.com/IDEA-Research/GroundingDINO",
description="open-set object detector",
license=license,
install_requires=parse_requirements("requirements.txt"),
packages=find_packages(
exclude=(
"configs",
"tests",
)
),
ext_modules=get_extensions(),
cmdclass={"build_ext": torch.utils.cpp_extension.BuildExtension},
)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment