在 Ubuntu 22.04/20.04 安装 CVAT 和 SAM 指南

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: 2kind: 'http'workerAvailabilityTimeoutMilliseconds: 10000attributes:maxRequestBodySize: 33554432 # 32MBport: 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨平台游戏引擎 Axmol-2.1.4 发布

2.1.4 版本是用于错误修复和改进的次要 LTS 版本&#xff0c;感谢 axmol 的所有贡献者 相对于 2.1.3 的重大变化&#xff1a; 添加 JobSystem 支持添加 cmake 选项 AX_WASM_INITIAL_MEMORY添加 Linux WebView 实现改进 curl 下载实现 使用curl_multi_poll代替select使用curl_…

java-如何打破双亲委派机制

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;双亲委派模型是一种类加载器之间的层次模型&#xff0c;它定义了类加载的规则&#xff0c;即当一个类需要被加载时&#xff0c;JVM默认的行为是首先请求父类加载器加载该类&#xff0c;只有当父类加载器无法加载该类时&a…

【BUG】已解决:error: legacy - install - failure

error: legacy - install - failure 目录 error: legacy - install - failure 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&…

51单片机14(独立按键实验)

一、按键介绍 1、按键是一种电子开关&#xff0c;使用的时候&#xff0c;只要轻轻的按下我们的这个按钮&#xff0c;按钮就可以使这个开关导通。 2、当松开这个手的时候&#xff0c;我们的这个开关&#xff0c;就断开开发板上使用的这个按键&#xff0c;它的内部结构&#xff…

免费分享:2021年度全国城乡划分代码(附下载方法)

《关于统计上划分城乡的规定》指出&#xff1a;“本规定作为统计上划分城乡的依据&#xff0c;不改变现有的行政区划、隶属关系、管理权限和机构编制&#xff0c;以及土地规划、城乡规划等有关规定”。统计用区划代码和城乡划分代码用于统计工作&#xff0c;需要在其他工作中使…

Transforms

深度学习中的Transforms 概述 Transforms在深度学习中起到了关键的作用&#xff0c;主要用于数据预处理、特征提取和数据增强&#xff08;Data Augmentation&#xff09;。通过对数据进行各种变换&#xff0c;能够提升模型的训练效果和泛化能力。 数据增强&#xff08;Data …

回溯题目的套路总结

前言 昨天写完了LeeCode的7&#xff0c;8道回溯算法的题目&#xff0c;写一下总结&#xff0c;这类题目的共同特点就是暴力搜索问题&#xff0c;排列组合或者递归&#xff0c;枚举出所有可能的答案&#xff0c;思路很简单&#xff0c;实现起来的套路也很通用&#xff0c;一…

java题目之抽奖以及优化方式

public class Main9 {public static void main(String[] args) {int[]arr{ 2,588,888,1000,10000};int [] newArrnew int[arr.length];//3.抽奖Random rnew Random();//因为有5个奖项,所以这里循环五次for (int i 0; i <5 ; ) {//获取随机索引int randomIndexr.nextInt(arr…

前端-模拟请求数据mook第三方插件 json-server的使用

大纲 第一步下载第二配置mook的数据源第三配置启动命令第四运行模拟服务第五测试接口如果要进行更复杂的操作 第一步下载 npm install json-server -D"devDependencies": {"json-server": "^1.0.0-beta.1"}第二配置mook的数据源 在项目的根目录…

图纸为什么需要加密?2024超好用的图纸加密软件推荐

图纸通常包含产品的设计细节、规格和技术信息&#xff0c;这些都是公司的核心知识产权。加密可以防止未经授权的访问和复制&#xff0c;避免知识产权被盗用或侵权。 图纸加密软件对于保护企业的知识产权和商业秘密至关重要&#xff0c;特别是在CAD&#xff08;计算机辅助设计&…

内网安全:各类密码的抓取

Mimikatz在线读取SAM文件 离线读取SAM文件 在线读取lsass进程 离线读取lsass进程 BrowserGhost浏览器密码抓取 Sharp-HackBrowserData浏览器密码抓取 SharpDecryptPwd数据库密码抓取 LaZagne各类密码的抓取 Windows其他类型抓NTLM Hash工具 sam文件和lsass进程就是Wind…

员工的成长=公司潜力的发展,最大的误区99.99%机器视觉公司不培训员工

员工成才最好的方式&#xff0c;绝对是培训。 机器视觉公司培训99.99%从来不培训员工的&#xff0c;不训练员工。 员工不变得优秀&#xff0c;如何更好的服务客户&#xff0c;无法搞定客户。 去和客户商务谈判&#xff0c;让自己员工去送死&#xff0c; 不去学习如何搞定客户&a…

谷粒商城-商品上架

1.sku在es中的存储模型分析(spring整和es) es中所有数据存在内存中,内存产品贵,能节省就节省,只保存有用的信息 两种保存方法:(空间换时间,时间换空间): 我们选空间换时间 ES中放这些东西: "mappings": { "properties": { "skuId"…

【C++】deque以及优先级队列

容器适配器 deque的介绍deque的原理介绍 priority_queue的介绍与使用priority_queue的介绍priority_queue的使用constructor&#xff08;构造函数&#xff09;emptypushpoptopsize priority_queue的模拟实现 仿函数何为适配器容器适配器deque的缺陷选择deque作为适配器的理由ST…

使用element UI Cascader 级联选择器实现省/市/区选择

<template><div><label>位置</label><el-cascader:options"pcaTextArr"v-model"selectedOptions"change"handleChangeAddress":props"{expandTrigger: hover,multiple: true,checkStrictly: true,emitPath: fal…

mailcow搭建安装教程:如何搭建专属邮箱!

mailcow搭建安装教程怎么用&#xff1f;怎么有效搭建邮箱服务器&#xff1f; 随着电子邮件在工作和生活中的重要性日益增加&#xff0c;拥有一个专属的电子邮件服务器变得越来越有吸引力。AokSend将详细介绍如何通过mailcow搭建一个专属邮箱&#xff0c;为你提供全方位的邮件管…

看起来很炫酷的科技感登录页面模板HTML

代码下载地址&#xff1a; 炫酷科技感登录页面模板带动画 (bootstrapmb.com)https://www.bootstrapmb.com/item/11891

Mailspring搭建安装教程:打造个性邮件体验

Mailspring搭建安装教程步骤&#xff01;如何选择电子邮件服务商&#xff1f; Mailspring作为一款功能强大、界面友好的邮件客户端&#xff0c;成为了许多用户的首选。AokSend将为大家提供详细的Mailspring搭建安装教程&#xff0c;帮助您打造个性化的邮件体验。 Mailspring搭…

Mybatis<collection>实现一对多

时隔多年又用到这样的查询方式了,提前声明一下分页最后返回的数据会小于每页条数&#xff0c;废话不多说直接上代码&#xff01; Data public class PbcUserTargetTaskPageVO {ApiModelProperty("个人绩效指标id")private Long id;ApiModelProperty("月份"…

vue2与vue3使用emit传值,v-model和.sync的区别

一、v-model和.sync的区别 我们下面的例子只有一个双向绑定值其实是可以使用input的 .sync与v-model区别是 相同点&#xff1a;都是语法糖&#xff0c;都可以实现父子组件中的数据的双向通信。 区别点&#xff1a;格式不同。 v-model"num" v-model&#xff1a; …