CV入门系列笔记——全球人工智能技术创新大赛【热身赛】CV异常检测赛道
作者:互联网
本系列是针对于DataWhale学习小组的笔记,从一个对统计学和机器学习理论基础薄弱的初学者角度出发,在小组学习资料和其他网络资源的基础上,对知识进行总结和整理,今后有了新的理解可能还会不断完善。由于水平实在有限,不免产生谬误,欢迎读者多多批评指正。如需要转载请与博主联系,谢谢
比赛核心思路
题目要求与理解
比赛内容:本赛场聚焦布匹疵点智能检测,要求选手研究开发高效可靠的计算机视觉算法,提升布匹疵点检验的准确度,降低对大量人工的依赖,提升布样疵点质检的效果和效率。要求算法既要检测布匹是否包含疵点,又要给出疵点具体的位置和类别,既考察疵点检出能力、也考察疵点定位和分类能力。
模型选择与优化
模型训练与提交流程
docker环境配置
根据此次比赛要求,我们需要将代码打包成docker镜像后提交,然后在云端拉取镜像进行模型测试。由于之前没有接触过,所以也等于借这次机会学习一下。
Docker作为一种开源的应用容器引擎,其功能可以理解为将程序运行所需的环境打包为一个镜像,以便使用者在开发、测试、生产等不同场合中方便地运行程序而无需单独再对环境进行配置。另一方面,docker利用容器的方式将运行资源隔离,从而避免了不同程序间的相互干扰。相比于传统的虚拟机技术,docker中多个容器可以共享当前机器的操作系统内核,而无需消耗更多资源来为每个程序提供一套操作系统。凭借着其自身的优势,以docker为代表的容器技术目前已称为云计算领域的主流应用技术之一。
关于docker的配置流程,比赛官网已经给出了比较详尽的介绍(可见参考资料2)。因此在这里仅简单总结下操作的步骤以及配置过程中遇到的问题。
- 首先在本地或云服务器中安装docker。ubuntu系统可直接执行sudo apt install docker.io命令,安装完成后sudo docker info进行检查。
- 下一步需要在云端申请一个容器镜像仓库,以便可以从比赛提交入口处拉取镜像来运行。这里我们选择阿里云提供的免费容器镜像服务。此处可按照参考资料3中的步骤进行,首先开通镜像托管,此次比赛仓库地域优先选择深圳(参考资料中为上海),然后牢记密码。之后创建命名空间,并选择本地仓库。在仓库管理页面可以看到右侧有对应的公网地址,可以复制下来,以便后续使用。
- 在构建镜像之前,可以先在本地完成数据格式转换和模型预训练。根据Datawhale学习小组提供的baseline,我们首先尝试用yolov5模型进行训练,在此之前需要将比赛数据格式转换为yolo要求的数据格式。转换完成后可以利用官方预训练权重进行预训练,训练前要下载权重文件,根据所使用的版本在命令中指定权重和模型文件,比如希望训练速度较快可以用yolov5s.pt/yolov5s.yaml,希望精度高则用yolov5x。这里baseline中存在一些问题,可以结合大佬的笔记进行调整(参考资料5)。训练完成后在weights文件夹中可以获得一个best.pt的权重文件,一会需要一同上传到docker中。在此处我的训练中报了两次错误,第一次如下图所示,显示'C3'模块无法加载。解决方法是从官网下载yolov5的包,然后将其中common.py文件中关于'C3'模块的定义部分拷贝过来即可。
第二次错误是'yaml'模块中找不到属性'FullLoader',可通过执行下述命令来解决。
- 接下来就需要构建docker镜像了,首先从本地登录容器仓库。这里有两点需要注意,第一输入的用户名是阿里云账户的全名,有汉字也要输入;其次这里可能需要输入两次密码,第一次是获取sudo权限,第二次才是仓库的访问凭证密码(大意了~竟然试了半天才想起来)。
- 登录后首先要建立一个文件夹(我的是tianchi_submit_dic)将模型训练和执行所需的模块及权重等文件放进去,这里可以直接将DataWhale提供的文件放入(注意训练数据就不用放了,云端会提供单独的数据)。然后在此文件夹中新建一个Dockerfile作为配置文件,写入以下内容。
# Base Images
## 从天池基础镜像构建
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
## 把当前文件夹里的文件构建到镜像的根目录下
ADD . /
## 指定默认工作目录为根目录(需要把run.sh和生成的结果文件都放在该文件夹下,提交后才能运行)
WORKDIR /
## 镜像启动后统一执行 sh run.sh
CMD ["sh", "run.sh"]
- 接下来要构建镜像并配置容器环境。构建可用 sudo docker build -t 公网地址:版本号 命令来完成。然后用sudo docker images查看容器id。之后执行 sudo docker run -it 容器id前四位 /bin/bash 进入容器。进入后执行 pip install -r requirement.txt,将所需模块一次性装入容器中。此处为避免版本冲突,我也重新安装了1.7.0版pytorch: pip install --user torch==1.7.0。
- 保持并退出镜像。使用ctrl+P+Q退出但不关闭容器。然后执行 sudo docker commit 容器id 仓库公网地址:版本号 以将容器保存为镜像。
- 推送镜像。执行 sudo docker push 公网地址:版本号。
- 推送之后,登录阿里天池比赛网页,在提交结果一栏中按要求填写好镜像路径、用户名和密码,即可上传模型进行评分,如下图所示。
比赛结果分析
当前仅为了尝试docker的使用方法而上传了一个只训练了3个epoch的模型,成绩较差,最近有时间希望能予以改进和提升。
参考资料:
- http://datawhale.club/t/topic/1418 Datawhale小组学习资料
- https://tianchi.aliyun.com/competition/entrance/531864/information 阿里云-全球人工智能技术创新大赛【热身赛】布匹疵点智能识别
- https://tianchi.aliyun.com/competition/entrance/231759/tab/174 阿里天池Docker环境配置操作说明
- https://zhuanlan.zhihu.com/p/54512286 为什么需要Docker
- https://blog.csdn.net/qq_26751117/article/details/113853150 布匹疵点智能识别 笔记
标签:赛道,容器,疵点,训练,sudo,镜像,docker,热身赛,CV 来源: https://www.cnblogs.com/liugd-2020/p/14418868.html