1. 安装 Docker 和 Docker Compose
sudo apt-get update
sudo apt-get --no-install-recommends install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get --no-install-recommends install -y \
docker-ce docker-ce-cli containerd.io docker-compose-plugin
2. 安装 CVAT
2.1 从 Github clone CVAT 工程
git clone https://github.com/cvat-ai/cvat
cd cvat
2.2 局域网使用
要想在局域网内使用 CVAT,需 export CVAT_HOST 环境变量,
export CVAT_HOST=FQDN_or_YOUR-IP-ADDRESS
2.3 运行容器
需要一些时间下载最新的 CVAT 和其它镜像文件,
docker compose up -d
2.4 创建管理员
你可以使用默认方式注册用户,但无法查看任务列表。因此,你需要创建超级用户,超级用户能使用管理员面板来分配任务给不同的用户,创建命令如下:
docker exec -it cvat_server bash -ic 'python3 ~/manage.py createsuperuser'
然后根据提示,依次输入用户名、邮箱和密码即可。
2.5 浏览器
默认为 Google Chrome,访问地址是localhost:8080
。
输入登录用户名和密码进入页面,然后就可以创建新的标注任务。
使用说明可以参考:Manual | CVAT
3. 可能遇到的问题
由于我们在中国境内,可能遇到一些安装依赖的问题。
其它安装问题可以参考:Installation Guide | CVAT
3.1 apt update
可能需要修改源地址:
- pre-compiled packages
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
- source packages
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
3.2 Docker 镜像站
在 daemon.json 中添加注册镜像:
{
"registry-mirrors": [
"http://f1361db2.m.daocloud.io",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com"
]
}
3.3 pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
4. 安装 SAM 半自动标注工具
详细可以参考官网说明:Semi-automatic and Automatic Annotation | CVAT
4.1 运行 Docker 容器服务
为了创建带自动标注工具的 CVAT,在 CVAT 工程的根目录下,运行:
docker compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml up -d
备注:如果对 Docker Compose 文件做了修改,需要在上述命令后加上 --build。
CPU 版本
如果只配置 CPU 版本的 SAM 服务,在 serverless/pytorch/facebookresearch/sam/nuclio/function.yaml
中,需做如下修改,配置 port,该端口是 nuclio function 的端口,需要和 SAM 算法服务 docker 容器的端口一致,
...
triggers:
myHttpTrigger:
maxWorkers: 2
kind: 'http'
workerAvailabilityTimeoutMilliseconds: 10000
attributes:
maxRequestBodySize: 33554432 # 32MB
port: 32728 # 指定端口,与其它端口不冲突即可
GPU 版本
如果配置 GPU 版本的 SAM 服务,在 serverless/pytorch/facebookresearch/sam/nuclio/function-gpu.yaml 中,需做上述修改,配置 port,该端口是 nuclio function 的端口,需要和 SAM 算法服务 docker 容器的端口一致。
4.2 停止 Docker 容器服务
docker compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml down
4.3 安装 nuctl
你必须安装 nuctl 命令行工具来构建和部署 serverless functions。
下载
下载地址:Release 1.11.24 · nuclio/nuclio · GitHub
版本需要和 docker-compose.serverless.yaml 里的版本一致。
wget https://github.com/nuclio/nuclio/releases/download/<version>/nuctl-<version>-linux-amd64
安装
下载完成后,设置权限和软链接,
sudo chmod +x nuctl-<version>-linux-amd64
sudo ln -sf $(pwd)/nuctl-<version>-linux-amd64 /usr/local/bin/nuctl
4.4 部署 serverless functions
通过 nuctl 部署 serverless functions,它会自动创建一个包含这些 functions 的 cvat Nuclio 项目。在 CVAT 使用 docker compose 安装完成后运行下述命令,因为 nuclio dashboard 会管理所有的 serverless functions,
CPU 服务
./serverless/deploy_cpu.sh serverless/pytorch/facebookresearch/sam/nuclio
或 GPU 服务,maxWorkers 是 SAM 服务开启的进程数,应和 GPU 资源匹配
nuctl deploy --project-name cvat --path serverless/pytorch/facebookresearch/sam/nuclio --platform local --base-image ubuntu:22.04 --desc "gpu based implementation of sam on python3, pytorch" --image cvat.pth.facebookresearch.sam.vit_h:latest --triggers '{"myHttpTrigger": {"maxWorkers": 4}}' --resource-limit nvidia.com/gpu=1
4.5 拷贝 SAM 权重到容器内
离线下载 SAM 权重文件,然后注释掉 function.yaml 和 function-gpu.yaml 里下载权重的命令,
...
download sam weights
# - kind: RUN
# value: curl -O https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth
...
手动将提前下载好的 SAM 权重文件拷贝到容器内,
docker cp ./sam_vit_h_4b8939.pth 5b915cbc903e:/opt/nuclio/sam/
4.6 Troubleshooting
Docker 镜像下载及网络问题
Docker images
在服务器上,提前下载好部署本项目所需的全部镜像,无需再 docker pull。
其它网络问题
建议科学上网。
SAM 容器的其它问题
通过下述命令行发现问题,然后进入 docker 容器内修改,
docker logs nuclio-nuclio-pth-facebookresearch-sam-vit-h
进入容器
docker exec -it nuclio-nuclio-pth-facebookresearch-sam-vit-h /bin/bash
完成修改后,重启容器,注意查看端口是否和 nuctl function node 端口一致
docker restart nuclio-nuclio-pth-facebookresearch-sam-vit-h
端口问题
可以通过命令来查看 nuctl 服务节点的端口:
nuctl get function
打印信息如下,
NAMESPACE | NAME | PROJECT | STATE | REPLICAS | NODE PORT
nuclio | pth-facebookresearch-sam-vit-h | cvat | ready | 1/1 | 32728
这里的 32728
应和 docker 容器的端口一致,不然会报错。
删除 serverless functions
如果 nuctl 创建 function 时遇到任何问题,需要删除该 function,管理页面地址为:
http://$IP_ADDR:8070/projects/cvat/functions
IP_ADDR
是部署该服务的 IP 地址,如果部署在本地就是 localhost
。
删除后,就可以重新部署 serverless functions
。