Docker训练mmdetection过程记录

下面是我本人的训练记录,过程中会出现错误,错误在后面会解决,因此一定要看到底再参照。

首先服务器上已经装好了Docker,下面开始自己总docker hub上下载一个mmdetection镜像,在容器里训练自己的数据。

step1:

我选择的镜像为:

https://hub.docker.com/r/pengzili/mmdetection

然后pull镜像,等待下载...

docker pull pengzili/mmdetection

下载完毕后启动一个该镜像的容器

sudo nvidia-docker run -it -v /home/csswork/zzh/:/mnt/  a841d5c9a7e7 /bin/bash

然后准备VOC数据集,我的做法是在主机目录上做好,然后拷贝到容器的对应目录里。

先在主机目录中创建,目录格式如下。Annotation里放xml文件,JPEGImages放jpeg图片文件,注意这里一定要一张图对应以一个xml。xml使用labelImage标注生成的。然后拷贝到mmdetection目录下。

|-- data
|   `-- VOCdevkit
|       `-- VOC2007
|           |-- Annotations
|           |-- ImagesSets
|           |   `-- Main
|           `-- JEPGImages

下面就是修改各种参数了,这里网上教程都有,参考:https://zhuanlan.zhihu.com/p/101263456

配置好后开始训练:

python tools/train.py  configs/faster_rcnn_r50_fpn_1x.py --gpus 2

下面开始报错: 

root@137fe107a909:/mmdetection# python tools/train.py  configs/faster_rcnn_r50_fpn_1x.py --gpus 2
2020-03-30 05:16:06,524 - INFO - Distributed training: False
2020-03-30 05:16:06,944 - INFO - load model from: torchvision://resnet50
2020-03-30 05:16:07,152 - WARNING - The model and loaded state dict do not match exactly

unexpected key in source state_dict: fc.weight, fc.bias

2020-03-30 05:16:10,334 - INFO - Start running, host: root@137fe107a909, work_dir: /mmdetection/work_dirs/faster_rcnn_r50_fpn_1x
2020-03-30 05:16:10,335 - INFO - workflow: [('train', 1)], max: 12 epochs
ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm).
ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm).
ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm).
Traceback (most recent call last):
  File "/opt/conda/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 511, in _try_get_batch
    data = self.data_queue.get(timeout=timeout)
  File "/opt/conda/lib/python3.6/multiprocessing/queues.py", line 104, in get
    if not self._poll(timeout):
  File "/opt/conda/lib/python3.6/multiprocessing/connection.py", line 257, in poll
    return self._poll(timeout)
  File "/opt/conda/lib/python3.6/multiprocessing/connection.py", line 414, in _poll
    r = wait([self], timeout)
  File "/opt/conda/lib/python3.6/multiprocessing/connection.py", line 911, in wait
    ready = selector.select(timeout)
  File "/opt/conda/lib/python3.6/selectors.py", line 376, in select
    fd_event_list = self._poll.poll(timeout)
  File "/opt/conda/lib/python3.6/site-packages/torch/utils/data/_utils/signal_handling.py", line 63, in handler
    _error_if_any_worker_fails()
RuntimeError: DataLoader worker (pid 31) is killed by signal: Bus error.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "tools/train.py", line 108, in <module>
    main()
  File "tools/train.py", line 104, in main
    logger=logger)
  File "/mmdetection/mmdet/apis/train.py", line 60, in train_detector
    _non_dist_train(model, dataset, cfg, validate=validate)
  File "/mmdetection/mmdet/apis/train.py", line 221, in _non_dist_train
    runner.run(data_loaders, cfg.workflow, cfg.total_epochs)
  File "/opt/conda/lib/python3.6/site-packages/mmcv/runner/runner.py", line 358, in run
    epoch_runner(data_loaders[i], **kwargs)
  File "/opt/conda/lib/python3.6/site-packages/mmcv/runner/runner.py", line 260, in train
    for i, data_batch in enumerate(data_loader):
  File "/opt/conda/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 576, in __next__
    idx, batch = self._get_batch()
  File "/opt/conda/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 553, in _get_batch
    success, data = self._try_get_batch()
  File "/opt/conda/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 519, in _try_get_batch
    raise RuntimeError('DataLoader worker (pid(s) {}) exited unexpectedly'.format(pids_str))
RuntimeError: DataLoader worker (pid(s) 31) exited unexpectedly

这里的问题参考:https://blog.csdn.net/zcgyq/article/details/83085266 即需要修改一下/dev/shm大小,于是我exit容器。

重启启动docker,这里加了一个参数  --shm-size 8G

sudo nvidia-docker run -it -v /home/csswork/zzh/:/mnt/ --shm-size 8G a841d5c9a7e7 /bin/bash

进去后又出现了问题,之前docker里做的修改都不见了。后来发现容器id不一样,于是用

sudo docker ps -a

查找刚刚退出的容器,然后先启动容器,再进入容器:

sudo docker start 137fe107a909
sudo docker attach 137fe107a909

 这时候我想到还是把容器的修改提交一下吧,不然以后操作很麻烦

先退出容器。再:

sudo docker commit 137fe107a909 zhang:v1.0

此时查看一下镜像:sudo docker images

REPOSITORY               TAG                 IMAGE ID            CREATED              SIZE
zhang                    v1.0                a841d5c9a7e7        About a minute ago   8.01GB

紧接着启动这个容器:

sudo nvidia-docker run -it -v /home/csswork/zzh/:/mnt/ --shm-size 8G a841d5c9a7e7 /bin/bash

然后继续训练:

python tools/train.py  configs/faster_rcnn_r50_fpn_1x.py --gpus 2

后面的过程可以参考链接:https://zhuanlan.zhihu.com/p/101263456

包括模型测试,计算map等过程。

### 回答1: docker mmdetection是基于Docker容器技术搭建的mmdetection深度学习框架环境。通过使用docker,可以轻松地部署和管理mmdetection的配置文件、代码和数据集,同时提高了系统的可移植性、灵活性和可扩展性。 ### 回答2: Docker是一个开源平台,可以让开发者和系统管理员轻松地打包、部署和运行应用程序,而不用担心程序之间相互干扰或者受到底层系统的限制。MMDetection是一个基于深度学习实现的目标检测框架,它支持多种模型,包括 Faster R-CNN、Mask R-CNN、SSD、RetinaNet等。使用Docker来部署MMDetection,可以让用户更加方便、快捷地使用MMDetection进行目标检测模型的建立和训练。 首先,使用Docker可以减轻开发者的负担,使得安装和配置环境变得更加简单和易于维护。开发者只需要通过Docker镜像构建并启动容器,就可以得到预建的MMDetection软件环境,而不需要费心地安装和配置这些依赖项。这也意味着开发者可以在不同的计算平台上部署相同的环境,避免繁琐的环境搭建步骤。 其次,使用Docker运行MMDetection还可以利用其灵活的快照和镜像管理功能,方便开发者和团队共享和追溯开发和测试过程中的环境状态。这样,团队成员之间可以更灵活地交流和协作,达成更高效的开发合作。 需要注意的是,使用Docker部署MMDetection时需要考虑系统资源的分配。在就算硬件环境相同的情况下,不同的Docker容器实例可能需要分配不同的系统资源来满足不同的需求,比如CPU、内存等。因此,开发者需要谨慎地评估和分配资源,确保系统不会因为资源不足而受到严重影响。 综上所述,使用Docker部署MMDetection是一种比较便利和灵活的方法,它可以提高开发效率和协作管理的能力,并保证了环境的一致性和稳定性。随着Docker技术的进一步发展和完善,更多的应用场景将会在未来被探索和实现。 ### 回答3: Docker是一个虚拟化平台,它利用Linux容器(LXC)技术,在一个Linux系统中运行多个独立的容器,每个容器拥有独立的文件系统、网络和进程空间。通过Docker,可以快速创建、部署和运行应用程序,从而帮助开发人员简化开发流程,提高应用程序的可靠性和可维护性。 Mmdetection是一款基于深度学习的目标检测框架,它支持主流的目标检测算法,如Faster R-CNN,Mask R-CNN等。由于其具有良好的性能和良好的可维护性,它已被广泛应用于各种场景中,如智能安防、自动驾驶等。 将Dockermmdetection结合起来,可以更便捷地使用mmdetectionDocker可以帮助用户快速构建mmdetection的环境,并通过容器的形式进行部署和管理。这样做的好处在于,用户不需要关心环境配置和版本问题,只需要下载相应的Docker镜像,即可使用mmdetection。 在使用Docker+mmdetection时,用户可以按照以下步骤进行操作: 1.下载Docker镜像:用户可以从Docker Hub上下载包含mmdetection的镜像,例如,可以使用以下命令进行下载:docker pull open-mmlab/mmdetection:v2.12.0 2.启动Docker容器:用户可以使用以下命令启动容器:docker run -it –gpus all-open-mmlab/mmdetection:v2.12.0 /bin/bash 3.在容器中使用mmdetection:一旦启动了容器,用户就可以在其中使用mmdetection了。例如,可以使用以下命令来训练mmdetection模型:python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py;或者使用以下命令测试已经训练好的模型:python tools/test.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py work_dirs/faster_rcnn_r50_fpn_1x_coco/latest.pth –eval bbox。 4.保存容器状态:如果用户需要保存容器状态,可以使用以下命令将容器状态保存到镜像中:docker commit CONTAINER_ID open-mmlab/mmdetection:v2.12.0 使用Docker+mmdetection可以极大地简化mmdetection的部署和管理。因为Docker的容器可以在不同的机器上运行,所以用户可以将mmdetection的环境打包成容器,只需下载相应的镜像并启动容器即可快速部署mmdetection。另外,因为Docker的容器是独立的,所以用户可以避免环境配置和版本问题,增加了应用程序的可靠性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值