DVC保姆级教程

DVC通过生成.dvc文件来追踪数据集,可以把这个.dvc文件理解成“钥匙”,找到了“钥匙”也就可以打开“宝藏”(目标数据集),而过多的.dvc文件又容易造成混乱,因此引入git来管理.dvc文件,也就是说git并不是在管理“宝藏”,而是在管理“钥匙”,真正的“宝藏”放在了“remote”所指向的位置,也就是我们的“宝藏”仓库,这个仓库就是DVC所支持的各种存储方式,如本地存储、s3存储、ssh存储等。DVC工作逻辑图如下

DVC数据存储

DVC数据拉取

Dvc安装及项目初始化

实验环境:

Ubuntu 22.04.1

anaconda虚拟环境

建议安装前创建一个新的虚拟环境,在python 3.7+上创建环境:

conda install git

pip install dvc(建议使用 pip --default-timeout=600 install dvc600为超时时间,单位是秒,如果还是不成功建议加大时间)

使用ssh远程仓库存储需要再执行一步:pip install dvc[ssh],用以补充安装ssh所需要的工具包。

文件跟踪

准备工作:

git初始化:

git init

也可直接git clone一个自己的远程版本库,如:

git clone http://***.***.***.***/*********/test.git  (-b 指定分支,不添加默认是main分支)

使用conda activate your_env_name激活环境

第一步:数据集准备,以检测数据集为例,初版数据集为纯图像

第二步,将数据放入git clone出的文件夹中

数据追踪

第一步,执行命令cd test切换至git目录下

这里我们可以执行ls -al命令查看当前目录下的所有内容

第二步,执行命令dvc init进行dvc初始化

这里我们可以执行ls -al命令查看当前目录下的所有内容

此时我们可以看到当前文件夹下生成了一些新的内容

第三步,执行dvc remote add --default myssh ssh://root@***.***.***.***:22/home/ssh-test命令设置远程仓库的位置(ssh远程仓库,类似于服务器)

此命令格式如下

dvc remote add --default your_storage_name ssh://your_user_name@your_ip:your_port/your_storage_location_in_ssh_server

第四步,执行dvc remote modify myssh user root命令设置用户名

此命令格式如下

dvc remote modify your_storage_name user your_user_name

第五步,执行dvc remote modify myssh port 22命令设置端口号(ssh使用22号端口)

此命令格式如下

dvc remote modify your_storage_name port your_port

第六步,执行dvc remote modify --local myssh password adminadmin命令设置用户密码

此命令格式如下

dvc remote modify --local your_storage_name password your_password

第七步,执行dvc add data命令对数据集进行跟踪

此命令格式如下

dvc add your_dataset

这里我们可以执行ls -al命令查看当前目录下的所有内容

第八步,执行git add .dvc .dvcignore data.dvc .gitignore命令将这些文件添加入git缓存

此命令格式如下

git add your_file1 your_file2等

第九步,执行git commit -m “初版数据集,有2张图像,且未标注”命令添加签名

此命令格式如下

git commit -m “your_message”

第十步,执行git push命令,将文件提交入git仓库

这里我们可以打开gitlab仓库,查看是否更新成功

第十一步,执行dvc push命令,将数据文件提交至ssh远程仓库

此时ssh远程仓库中便被传入了数据

到了这里便完成了数据追踪

数据拉取

这里我们使用另一台电脑,称之为电脑2,进行测试

第一步,执行conda activate your_env_name命令激活环境

第二步,执行git clone http://***.***.***.***/*******/test.git命令克隆一个远程仓库到本地

第三步,执行cd test命令切换到克隆下来的本地仓库

此时我们可以执行ls -al命令查看当前目录下的文件

第四步,执行dvc remote modify --local myssh password adminadmin命令配置本地密码

第五步,执行dvc pull命令下拉数据

此时我们可以使用ls -al命令查看当前目录下的文件

到这里便完成了数据下拉

数据迭代

我们还是在电脑2上继续操作这里我们往data数据集中加入xml标签

加入前:

加入后:

完成数据迭代后执行以下步骤完成数据迭代

第一步,执行dvc add data命令重新生成data.dvc文件

第二步,执行git add data.dvc命令,将新生成的data.dvc文件添加入git缓存中

第三步,执行git commit -m “增加了图像标注命令,提交签名

第四步,执行git push将缓存内容提交至git远程仓库

此时我们可以查看git仓库,检查是否完成更新

第五步,执行dvc push命令将数据文件推送至ssh远程仓库

到了这一步便完成了数据迭代,接下来我们切换回本机,下载由电脑2工控机更新的数据集

数据迭代后拉取:

拉取之前我们先查看一下本地文件,使用ls -al命令查看文件目录,再cd data进入data目录执行ls命令查看当前数据集内容

第一步,使用git pull命令下拉git仓库更新后的文件(只要在test目录之中即可,不用非得切换入data目录)

我们可以执行cd ..命令后执行ls -al命令查看data.dvc文件是否更新

第二步,执行dvc pull下拉数据

此时可以打开data目录查看是否完成更新

后续我们可以调整标注,继续迭代数据集

第一步,打开labelimg调整标注,这里我们新增”ceshi”标注类别

第二步,执行dvc add data

第三步,执行git add data.dvc

第四步,执行git commit -m “调整了标注,增加了ceshi标注类别

第五步,执行git push

第六步,执行dvc push

切换至电脑2工控机,下拉数据

第一步,执行git pull下来更新的dvc文件

第二步,执行dvc pull下拉数据

这里可以直接打开xml文件查看是否更新完成

到了这里就完成了git+dvc的基础操作,接下来是进阶操作

版本回退

应用场景:不使用最新版本数据,想要使用前面版本的数据进行训练

这里以本机电脑为例,当前本机数据集为修改完标注的数据集

第一步,执行git log查询git提交日志(按q退出)

这里红色框内的字符串类似于每个版本的”身份证号”,我们可以选择想要回退的版本的身份证号,这里以回退到”增加了图像标注”版本为例,复制其”身份证号”

第二步,执行git reset --hard <上图红框内的ID>命令,进行版本回退

此命令格式如下

git reset --hard your_wanna_version_ID

第三步,执行dvc pull下拉数据

此时我们可以打开xml文件查看是否为对应的标签,通过对比发现,当前的xml文件中新增的ceshi标注类别已经消失

这里我们就完成了版本回退,需要注意的是,在这个节点中执行git log是无法查看到最新版本的ID的,因此尽量不要关闭窗口,如果关闭了窗口可以执行git reflog查看历史记录

红框内就是最后一个版本的ID,执行git reset --hard 288fccd即可回到最后一个版本

到了这里我们就完成了版本回退操作

版本回退后新建分支

应用场景:同一版本数据集发展出两个版本的新数据集,如一个版本需要调整标注,另一个版本需要添加neg数据,这里我们还是以倒数第二个数据集为例,我们已经有一版修改过标注的数据集,这里我们再创建一版增加了neg数据的数据集

第一步,执行git branch add_neg命令在倒数第二个节点创建新的分支

此命令格式如下

git branch your_new_branch_name

第二步,执行git checkout add_neg切换至新增加的分支

此命令格式如下

git checkout your_new_branch_name

第三步,新增neg数据

第四步,执行dvc add data命令,追踪新的数据集

第五步,执行git add data.dvc命令添加至git缓存中

第六步,执行git commit -m “在倒数第二个数据集上增加了neg数据命令增加签名

第七步,执行git push origin add_neg命令提交新分支

这里我们可以查看git远程仓库是否更新完成

第八步,执行dvc push命令,上传数据

这里我们完成了多分支数据集管理,下面我们切换到电脑2,尝试分别拉取这些版本的数据集

多分支数据集拉取

首先我们在电脑2上拉取add_neg分支的数据

第一步,执行git pull命令,更新本地仓库

第二步,执行git checkout add_neg命令,切换分支

第三步,执行dvc pull命令下拉增加了neg数据的数据集

此时我们查看data中的文件发现多了两张图象

然后我们再拉取main分支上最后一个,即两张图像两张标签且增加ceshi标注的版本:

第一步,执行git checkout main命令,切换到main分支

第二步,执行dvc pull命令,下拉数据集

此时我们查看一下当前的数据集

最后,我们再拉取main分支上倒数第二个数据集,即未增加ceshi标注的版本:

第一步,执行git log命令查看更新日志

第二步,执行git reset --hard <ID>命令切换到main分支的倒数第二个节点

第三步,执行dvc pull命令,下拉数据

此时我们查看data文件夹的内容,可以看到ceshi标注已经消失

执行到此,我们已经完成了所有dvc涉及到我们业务逻辑的操作,另外结束操作后,记得返回到main分支最后一个节点,如果忘记了,且使用git reflog命令也无法查询到最后一个节点的ID也不要惊慌,只需要把本地的test文件夹删了,重新git clone一份下来即可。 ​​​​​​

常用命令汇总

git:

git clone:下载git地址文件,可以使用-b指定分支

git add:添加缓存

git commit:提交

git push:上传至仓库

git log:查看git日志

git reset:返回某一个版本

git reflog:显示可引用的版本记录

git pull:下拉git仓库

git branch:分支管理

git checkout:分支切换

dvc:

dvc init:dvc初始化

dvc add:对文件添加跟踪

dvc remote:配置原始数据存放位置

dvc push:推送数据

dvc pull:下拉数据

注意事项

  1. 切记下拉数据前使用dvc remote default查看是否存在数据源,如果不存在记得执行dvc remote add -d local_remote /home/data/
  2. 如果出现误操作不要着急,只要不执行git push操作,就不会影响版本管理,哪怕是对数据集进行了误删操作,并且执行了dvc push也不要紧,此时在data文件夹中并不会删除对应的图像文件,只要没有git push该版本的dvcimg.dvc文件,就不会产生该废数据集的版本记录,可以直接把当前git文件夹删掉,重新git clone一份新的即可。
  3. git commit时尽量描述清楚每个数据集的作用
  4. 安装dvc时即使设置了超时时间,依然可能安装失败,此时如果还是报httpconnect的错误可以再将安装命令执行一次,如此反复就能安装成功
  • 34
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值