使用docker容器运行sparseinst项目

一、环境要求

  1. 首先确保宿主机上已经安装了nvidia,可以用nvidia-smi 查看,如果没有的话可以用下面的方法去安装(Ubuntu系统安装方法)
    安装nvidia
	# 检查适合系统的NAVIDIA版本
	nvidia-detector 
	# 安装nvidia的命令
	apt-get install nvidia-driver-440
	安装完成后需要重启启动系统才能生效
	卸载nvidia	
	sudo apt-get --purge remove nvidia*
	sudo apt-get --purge remove "*nvidia*"
	sudo apt-get --purge remove "*cublas*" "cuda*"
	sudo apt autoremove
  1. 请通过 docker -v 检查 Docker 版本。对于 19.03 之前的版本,需要使用 nvidia-docker2 和 --runtime=nvidia 标记;对于 19.03 及之后的版本,将需要使用 nvidia-container-toolkit 软件包和 --gpus all 标记。这两个选项都记录在上面链接的网页上。我这里是20.04版本的docker,所以使用第二种安装方式:
	sudo apt-get update
	sudo apt-get install -y nvidia-container-toolkit
	sudo systemctl restart docker

二、拉取镜像

这里拉取镜像需要注意对应的cuda版本已经torch版本

从这里选取要安装的pytorch镜像

找到了对应的版本,复制后面拉取docker镜像的命令即可

	docker pull pytorch/pytorch:1.10.0-cuda11.3-cudnn8-devel

三、创建容器安装detectron2

	docker run -itd --init --gpus all --ipc=host --name sparseinst -p 35:22 --privileged=true pytorch/pytorch:1.10.0-cuda11.3-cudnn8-devel
	
	# 进入容器
	docker exec [容器名] it bash
	apt-get update
	apt-get install vim
	apt-get install openssh-server
	# 修改ssh连接配置,把PermitRootLogin prohibit-passwd改为PermitRootLogin yes
	vim /etc/ssh/sshd_config 
	passwd root # 修改容器密码
	service ssh start # 开启ssh服务

注意:如果pycharm中ssh可以连接,但是sftp无法连接的话,尝试如下操作

	vim /etc/ssh/sshd_config
	找到如下语句注释掉,然后添加如下语句
	#Subsystem      sftp    /usr/libexec/openssh/sftp-server
	Subsystem       sftp    internal-sftp
	# 重启ssh 服务
	service ssh restart  

从上面pytorch的安装可以看出,我们选择的cuda版本是11.3的,torch版本是1.10的,那么我们接下来选择detectron2的时候也要选择对应的版本,由于SparseInst是基于detectron2的,所以需要安detectron2 detectron2安装地址 从里面选择要安装的版本,我选择了如下版本
在这里插入图片描述

	# 这个是在容器中拉取的命令,如果项目报某个模块找不到直接pip安装就好了
	python -m pip install detectron2 -f \
	  https://dl.fbaipublicfiles.com/detectron2/wheels/cu113/torch1.10/index.html

四、pycharm连接上传项目

pycharm连接docker容器之后,将项目上传到容器中,然后进入项目所在位置,想要将项目所给的实例运行起来需要再做一些准备,我们需要将训练好的权重模型下载下来,放到sparseinst项目中:

python train_net.py --config-file configs/sparse_inst_r50_giam.yaml --num-gpus 8 --eval MODEL.WEIGHTS sparse_inst_r50_giam_aug_2b7d68.pth

在这里插入图片描述
我们还需要coco数据集,这个可以从detectron2中下载,这个给出了每种数据集的获得方式,我们这里需要的是instances_{train,val}2017.json
将detectron2项目下载下来,然后在sparseinst项目中创建datasets文件夹,在detectron2的datasets中找到prepare_for_tests.sh,把它复制到sparseinst项目中的datasets中,然后赋予prepare_for_tests.sh权限chmod +x prepare_for_tests.sh,执行./prepare_for_tests.sh,执行完之后sparseinst中的datasets中就会显示coco/annotations/instances_{train,val}2017_100.jsonmv instances_{train,val}2017_100.json instances_{train,val}2017_100.json 然后运行

python train_net.py --config-file configs/sparse_inst_r50_giam.yaml --num-gpus 1 --eval MODEL.WEIGHTS sparse_inst_r50_giam_aug_2b7d68.pth

运行结果如下:
在这里插入图片描述
当然你也可以下载coco数据集去自己训练 coco数据集下载地址
需要将images和annotations全部下载下来,然后上传到sparseinst项目中的datasets中,进行解压,如果上面的下载地址不能下载可以从这里下载试试coco数据集下载地址,然后运行:

python train_net.py --config-file configs/sparse_inst_r50vd_dcn_giam_aug.yaml --num-gpus 1

放置数据集的结构如下
在这里插入图片描述
因为论文中用到的GPU数量是8,我们这里没有那么多GPU,所以需要修改batch-size的大小,不然会报错,修改IMS_PER_BATCH位置,我这里修改成8就可以运行了,当然如果你的GPU性能更高那么你也可以改的大一些,这样训练的时间也会缩短
在这里插入图片描述
训练结果如下,这是训练了两天的结果,训练了125000张图片
在这里插入图片描述
在这里插入图片描述
还在继续训练中。。。太慢了
在这里插入图片描述

五、如何使用自己的数据

1.修改train_net.py,注册自己的数据集
from detectron2.data.datasets import register_coco_instances
register_coco_instances("coco_my_train", {},
                        "datasets/crack/annotations/instances_train2017.json",
                        "datasets/crack/train2017/")
register_coco_instances("coco_my_val", {},
                        "datasets/crack/annotations/instances_val2017.json",
                        "datasets/crack/val2017/")
register_coco_instances("coco_my_test", {},
                        "datasets/crack/annotations/instances_test2017.json",
                        "datasets/crack/test2017/")
CLASS_NAMES = ["fissure", "water"]
2. 修改config.py

修改如下位置参数,你的数据集中的CLASS_NAMES 是多少这里就改成多少
在这里插入图片描述

3. 修改Base-SparseInst.yaml

把其中的DATASETS改成自己的数据集名称
在这里插入图片描述

这里有什么问题我们可以一起探讨,我也是有很多不懂的地方。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值