CV实践-异常检测(DateWhale)Task1学习笔记
本文将记录我从第一次接触Docker到第一次成功在阿里云上提交自己的镜像的过程。
1.下载Docker Desktop
该软件是免费的,直接搜索就可以下载,我用的是windows系统。
https://hub.docker.com/editions/community/docker-ce-desktop-windows/.
下载安装后,启动Docker Desktop并申请自己的Docker id,这样就登录后就可以构建自己的本地镜像,然后用容器运行镜像了。
但是,在启动Docker Desktop时,我出现了以下的提醒。
只要按照图片上给的蓝色连接,一步步操作,下载wsl,然后更新到wsl2,并将其设置为默认就行了。
完成这一步,就可以正常启动Docker Desktop了。出现这样的小鲸鱼就运行成功啦。
2. 创建镜像仓库
去阿里云容器镜像服务的官网,先申请一个命名空间,再创建一个镜像仓库。
3.准备构建镜像的文件们
我们的目的是把本地已经跑通的项目文件打包成一个镜像。
DataWhale提供的baseline代码基于yolov5,在这个baseline代码的基础上,我们需要准备好训练数据(从比赛网站上下载),然后完成训练得到weights,最后测试预测代码。
下载数据装入train_data文件夹后,我就按照baseline代码的readme中指导的,先进行训练数据的标签转换,再对训练集合验证集中的数据进行预处理,即将其转换成yolov5能识别的格式,最后再训练。
下图是整个运行的流程。
在训练的过程中,我发现训练集里的图片比较大,所以必须要根据自己电脑GPU的显存情况调整训练的batchsize和输入图片的尺寸大小,不然分分钟爆显存。
这里为了能正常训练,我把batchsize调整为1,输入大小是64x64,这样肯定是会影响精度的,但是我希望先保证能训练,走完上传镜像的流程,所以这里就暂且不考虑精度了。(当然,很大原因也是因为我直接用了yolov5x的框架,网络很大,所以会爆显存,之后我会尝试用yolov5s的框架再试试)
训练完成后,按照赛题的要求,到时候用网络预测的图片会放在tcdata文件夹中,而这个文件夹在本机上是不存在的,等上传后,赛方运行镜像会自动生成。
为了模拟到时候的读取情况,我们可以用数据挂载,当然也可以用我的比较直接的方法,自己按照赛题中tcdata文件夹的格式放一点数据进去测试。
最后,得到的文件差不多是这些。
只要再添加Dockerfile,修改run.sh中的内容,我们就可以构建镜像了。
Dockerfile主要是在构建镜像时要运行的流程。里面的内容如下:
需要注意的一点是,我最开始在txt文件里写了这些,但那并不是真正的Dockerfile,构建镜像的时候是找不到Dockerfile文件的。
真正的Dockerfile文件没有后缀,我们需要在编辑器里创建,我用的是pycharm,所以就在pycharm里创建了,sh文件也是这样。
run.sh的内容如下:
其实就是告诉我们,当运行sh文件的时候,我们要运行那些py文件,这里只有一个detect.py。
完成准备工作后,我们就可以开始构建自己的镜像了。
4.构建自己的镜像
打开cmd,并cd到要构建镜像的文件夹中。
然后,登录阿里云Docker Registry。
docker login --username=xxxx registry.cn-shenzhen.aliyuncs.com
然后开始构建镜像。
最后的6.0是镜像的版本号,最后要加一个点,说明是将当前地址构建镜像,不加这个点会提示找不到Dockerfile。
镜像构建完成后,我们可以点开Docker Desktop查看本地的镜像,或者也可以输入docker images查看本地的镜像。
镜像构建完成后,我们需要进入镜像内部,安装我们运行程序需要的环境,因为我们是在pytorch镜像的基础上去构建镜像的,所以当前的镜像里已经安装好了python,pytorch,cuda10.1了。
先查看镜像的id,然后进入镜像。
进入之后,就可以安装例如matplotlib之类的包了。
安装完成后,按Ctrl+P+Q退出当前镜像但不停止镜像运行,然后保存我们安装各种包之后的镜像到原镜像。
这样基本上就完成了,为了确保镜像的准确运行,我们可以用以下命令测试一下run.sh文件是否可以准确执行。
docker run [image id] sh run.sh
如果本地跑通了,基本上是没问题的。
5. 上传镜像
用以下指令就可以将镜像上传。
docker push [公网地址][版本号]
上传后我们可以在自己阿里云的镜像仓库中的镜像版本中,看到上传的镜像。
这样,我们就可以把这个镜像提交给竞赛了。
6.第一次得到的成绩
成绩不算好,因为我训练的次数少,而且选择的网络大,后面会用服务器加大训练轮次,并学着用提高的idea来改进。
7.遇到的问题
- docker desktop不稳定
有的时候,我在构建镜像,或者在镜像里配置环境的时候就报错了,一直以为是自己操作的问题,但后来发现是docker desktop的问题,我restart并把它重置后就好了,可能是我没有换源的原因。 - detect.py中数据源source地址的设置不对
一开始我没有在文件里加tcdata测试,因为我以为既然到时候会自己生成tcdata文件夹,我本地就不需要创建了。后来失败了两次之后,重新读赛题才发现,tcdata文件内还有内容,我必须按照tcdata文件夹里的路径去设置source路径,为了确保成功,所以我还是按照题目中的tcdata格式创建了一个tcdata文件夹在本地来测试。测试后提交就没有问题了。