1.代码参考
参考的baseline- yolov5修改版
相关训练调节笔记参见 链接
代码讲解视频参考 链接
2.环境安装
个人环境说明:
win10
12g内存, nvidia gtx 1060, cuda10.1
注意:
本地训练使用的是pytorch == 1.7环境,其他安装包参见require.txt
docker 中的 pytorch==1.4 (这个问题后续会说明)
因为官方的yolov5.pt权重是使用torch==1.7以上的,所以使用其他版本torch加载的时候会有问题,为了避免问题。建议使用这个1.7的版本。
安装分为3步:
step1: 我是使用的python3.7.4, cuda10.2, 添加清华源,快捷安装torch1.7.1如下所示:
(torch1.7) PS C:\Users\ztfma> conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
(torch1.7) PS C:\Users\ztfma> conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
(torch1.7) PS C:\Users\ztfma> conda config --set show_channel_urls yes
(torch1.7) PS C:\Users\ztfma> conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/win-64/
(torch1.7) PS C:\Users\ztfma> conda install pytorch torchvision torchaudio cudatoolkit=10.2
1
2
3
4
5
step2: 建议按照下面总结的内容安装一下吧:
require.txt中13行单独安装(原来的连接地址,因为墙的原因下载不了;下载gitee版本只是支持linux,安装的时候出现如下状况)
有效安装教程链接(推荐方法2)
下载链接(没有安装 vs c++2019的装一下,连接中内含 vs2015下载地址)
step3: 注释掉13行之后之后安装其他环境:
pip install -r requirements.txt
1
3.docker预备知识
参见博文
4.过程详述
4.1 数据下载和预处理
下载训练的数据,并且放置到文件夹 train_data
下载yolov5权重best.pt,放置到weights文件夹
4.2. 训练模型
总体训练过程
图片预处理过程:将图片变成yolo格式, 我处理成了640x640
train.sh文件中,第二步使用了process_data_yolo.py,源码中关于数据集存放位置存在问题,只写了val的处理,没写train的处理,所以生成的process_data文件夹中, 只有val而没有train,训练时会报错。
所以不能直接用train.sh脚本,要顺序运行里面的命令,到第二步的时候,先执行一遍,如下图做修改后再执行一遍,从而把训练集和验证集都准备好。
没有使用baseline,我的小破本跑yolov5x压力太大,换成官方的代码,自己稍微改动了一下。使用yolov5s.pt。
使用预训练权重去进行训练过程:
相关参数说明的内容,可以参见链接
(1)考虑到类间差距较大,数据分布不均衡,修改focal_loass_gamma=1.5
(2)根据自己的GPU现存大小调节batchsize大小,当然越大越好(gtx1060 赶脚真的有点弱鸡)
运行程序:
python train.py --cfg models/yolov5s.yaml --batch-size 2
1
batch-size不能太大,否则资源占用率还是非常高的
其他错误汇总
(1)Python Matplotlib: 解决 Tcl_AsyncDelete: async handler deleted by the wrong thread
修改 utils.py line13-14
将原本的import matplotlib.pyplot as plt修改成以下:
import matplotlib
matplotlib.use(‘Agg’)
from matplotlib import pyplot as plt
1
2
3
https://blog.csdn.net/qq_39560620/article/details/105734243
(2)总是提示读取tcdata路径有问题,打印出来的路径应该是末尾多了\r。这个是win系统带的,在vim里面一般不容易发现。删掉重写即可
4.3 docker上传到阿里docker仓
进入到自己要提交的文件夹里面:
(1) 修改run.sh
baseline的源码中,run.sh中为空,改为
python detect.py --source ./tcdata/guangdong1_round2_testB_20191024
1
(2)注册阿里的docek镜像服务,并且且拉取镜像
注意:因为win10都是存储在c盘,所以占用资源非常大,留足空间(>15g)
具体过程, 参见链接
- 命令总结:
(以下内容相关地址、名称为假,自行对应相应的、自己的变量)
#1. 登录阿里云Docker Registry
$ sudo docker login --username=小白前来报道(自己的账号名称) registry.cn-shenzhen.aliyuncs.com)(自己的阿里云公网地址)
#用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
#您可以在访问凭证页面修改凭证密码。
#2. 从Registry中拉取镜像
$ sudo docker pull registry.cn-shenzhen.aliyuncs.com/ztfmars_cv_detect/ztfmars_cv_detect:[镜像版本号](拉去的具体镜像内容,具体参见基础镜像说明:
https://tianchi.aliyun.com/forum/postDetail?spm=5176.12586973.0.0.176a22322ijx
xm&postId=67720)
1
2
3
4
5
6
7
8
9
10
- 实际过程:
PS C:\Users\ztfma> docker login --user=xxxx_name registry.cn-shenzhen.aliyuncs.com/ztfmars_cv_detect/ztfmars_cv_detect
unknown flag: --user
PS C:\Users\ztfma> docker login --username=xxxx_name registry.cn-shenzhen.aliyuncs.com/ztfmars_cv_detect/ztfmars_cv_detect
Password:
Login Succeeded
PS C:\Users\ztfma> docker pull registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:1.4-cuda10.1-py3
1.4-cuda10.1-py3: Pulling from tcc-public/pytorch
7ddbc47eeb70: Already exists
c1bbdc448b72: Already exists
8c3b70e39044: Already exists
45d437916d57: Already exists
d8f1569ddae6: Already exists
85386706b020: Already exists
ee9b457b77d0: Already exists
be4f3343ecd3: Pull complete
30b4effda4fd: Pull complete
b398e882f414: Pull complete
64e532b06236: Pull complete
31188d0173e6: Pull complete
4a1386f93f29: Pull complete
87d47d0287c7: Pull complete
7a932c9d3ad4: Pull complete
Digest: sha256:c612782acc39256aac0637d58d297644066c62f6f84f0b88cfdc335bb25d0d22
Status: Downloaded newer image for registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:1.4-cuda10.1-py3
registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:1.4-cuda10.1-py3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(3)进入自己要打包的文件夹中,构建新的镜像
Dockerfile
Dockerfile
Base Images
从天池基础镜像构建
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:1.4-cuda10.1-py3
把当前文件夹里的文件构建到镜像的根目录下
ADD . /
指定默认工作目录为根目录(需要把 run.sh 和生成的结果文件都放在该文件夹下,提交后才能运行)
WORKDIR /
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install opencv-python
RUN pip install matplotlib
RUN pip install scipy
RUN pip install tensorboard
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get clean && apt-get update
RUN apt update && apt install -y libgl1-mesa-glx && apt-get install -y libglib2.0-0
镜像启动后统一执行 sh run.sh
CMD [“sh”, “run.sh”]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
利用Dockerfile生成新的镜像
docker build -t registry.cn-shenzhen.aliyuncs.com/ztfmars_cv_detect/ztfmars_cv_detect(公网地址):1.0(tag号) .
1
注意:
-t表示利用本地Dockerfile构建镜像
最后的点. 表示本地文件夹,不能丢了哦
大概花了半小时,耐心等待
最终形成了新的镜像:
(4)将构建的镜像上传到阿里云上代码仓Registry
#3. 将镜像推送到Registry
$ sudo docker login --username=小白前来报道 registry.cn-shenzhen.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/ztfmars_cv_detect/ztfmars_cv_detect:[镜像版本号]
$ sudo docker push registry.cn-shenzhen.aliyuncs.com/ztfmars_cv_detect/ztfmars_cv_detect:[镜像版本号]
#请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
#4. 选择合适的镜像仓库地址
#从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
#如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-shenzhen.aliyuncs.com 作为Registry的域名登录。
#5. 示例
#使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB
$ sudo docker tag 37bb9c63c8b2 registry-vpc.cn-shenzhen.aliyuncs.com/acs/agent:0.7-dfb6816
#使用 “docker push” 命令将该镜像推送至远程。
$ sudo docker push registry-vpc.cn-shenzhen.aliyuncs.com/acs/agent:0.7-dfb6816
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(5)提交相关结果docker镜像地址和密码,到比赛链接
————————————————
版权声明:本文为CSDN博主「熊猫小妖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42237113/article/details/113879239