首页
社区
课程
招聘
yolov5环境搭建和训练自己的模型
2023-3-31 00:13 14712

yolov5环境搭建和训练自己的模型

2023-3-31 00:13
14712

一、环境安装

1.1.安装Anaconda

下载地址

1
https://repo.anaconda.com/archive/

1.2.安装cuda

先在cmd执行nvidia-smi,查看驱动版本,下载对应的cuda版本

 

下载地址

1
https://developer.nvidia.com/cuda-toolkit-archive

安装的时候选择默认路劲,安装完成在cmd执行nvcc -V,能查到cuda版本证明安装成功

1.3.下载cdDNN

下载跟cuda版本对应的cdDNN版本

1
https://developer.nvidia.com/rdp/cudnn-download

解压后,把三个文件夹直接复制到cuda的安装目录

1.4.创建虚拟环境

创建python虚拟环境

1
2
conda activate
conda create -n yolov5_test python=3.8

激活虚拟环境

1
activate yolov5_test

1.5.配置conda源

生成.condarc文件

1
2
#会在当前目录生产.condarc文件
conda config --set show_channel_urls yes

配置源,把下面内容复制进去,保存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

1.6.安装PyTorch

下载地址

1
https://pytorch.org/get-started/previous-versions/

选择对应cuda版本的PyTorch安装命令
图片描述

1
2
3
4
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.6 -c pytorch -c conda-forge
 
#如果上面安装报错提示:“ An error occurred while installing package 'conda-forge.....' ”
#执行`conda update -n base -c defaults conda`进行更新源,再重新安装PyTorch

测试是否安装成功
图片描述

1.7.安装yolov5依赖包

下载yolov5

1
https://github.com/ultralytics/yolov5

安装依赖包,先删掉这两行,因为PyTorch我们已经安装过了

1
2
torch>=1.7.0  # see https://pytorch.org/get-started/locally (recommended)
torchvision>=0.8.1

然后安装

1
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

1.8.测试自带权重文件

下载yolov5s.pt,放到根目录
图片描述

 

运行命令

1
2
3
4
5
python detect.py --source data\images --weights yolov5s.pt --device 0
 
#--source    表示图片的路径
#--weights   表示权重文件的路径
#--device 0  表示用gpu,默认是用cpu

测试结果会保存在run目录下面
图片描述

二、实战--训练自己的模型

2.1.labelimg数据标注

安装lableImg

1
pip install labelimg

labelImg常用快捷键

  • a:上一张图片
  • d:下一章图片
  • del:删除选定的矩形框
  • Ctrl + d:复制当前标签的矩形框
  • w:创建一个矩形框
  • space:标记当前图片已标记
  • delete:删除框
  • ctrl+e:编辑标签

新建images和labels文件夹,把准备好的游戏截图放到images目录下,然后用labelimg开始标注(怎么标注,自己百度),总共标注5个类(hero,door,moster,money,boss)。

2.2.data目录下面创建xxx_data.yaml

主要修改train的图片位置、类的个数和类的名字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
path: ../datasets/coco128
train: 路径改自己的
val:  路径改自己的
test: # test images (optional)
 
nc: 5
# Classes
 
names:
  0: hero
  1: door
  2: moster
  3: money
  4: boss

2.3.model目录下面创建xxx_model.yaml

只要修改nc的数量就可以

1
nc: 5

2.4.修改train.py的参数

cache用disk或者ram都可以
如果内存不够,把work数再改小点

1
2
3
parser.add_argument('--cache', type=str, nargs='?', const='disk', help='image --cache ram/disk')
 
parser.add_argument('--workers', type=int, default=2, help='max dataloader workers (per RANK in DDP mode)')

2.5.开始train

1
python train.py --data xxx_data.yaml --cfg xxx_model.yaml --weights yolov5s.pt -epoch 300 --batch-size 1 --device 0

2.6.开始detect

train完成后会在run/exp1/weights目录下会生产一个best.pt文件,用它来detect

1
python detect.py --weights runs/train/exp1/weights/best.pt --source xxx/images/

2.7.最终效果演示

经过yolov5训练后,最终识别准备率能达到0.9以上。

 

图片描述
图片描述
图片描述


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2023-3-31 00:23 被zhang_derek编辑 ,原因:
收藏
点赞19
打赏
分享
最新回复 (17)
雪    币: 229
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
heye123 2023-3-31 11:26
2
0
收藏
雪    币: 739
活跃值: (935)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
spman 2023-3-31 11:39
3
0
非常有意思啊。
雪    币: 229
活跃值: (213252)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
shinratensei 1 2023-3-31 13:03
4
0
数据标的人麻了
雪    币: 12040
活跃值: (15364)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2023-3-31 15:23
5
0
感谢分享,接下来的内容就交给DQN了 
雪    币: 576
活跃值: (2035)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kakasasa 2023-3-31 16:22
6
0
感谢分享,mark
雪    币: 315
活跃值: (1677)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
执念成狂 2023-4-3 13:36
7
0
想试但不想标注
雪    币: 1243
活跃值: (1815)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
库尔 2023-4-4 09:13
8
0
pureGavin 感谢分享,接下来的内容就交给DQN了 [em_86]
dqn貌似训练时间长,ppo,td3这类比较好点。
雪    币: 12040
活跃值: (15364)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2023-4-4 09:33
9
0
库尔 dqn貌似训练时间长,ppo,td3这类比较好点。
关键看训练效果,不过我也没试过
雪    币: 1243
活跃值: (1815)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
库尔 2023-4-4 09:45
10
0
shinratensei 数据标的人麻了
https://github.com/AlvaroCavalcante/auto_annotate 可以用这个看看能不能减少标注,不过我觉得勤奋点能展现人的价值。
雪    币: 1243
活跃值: (1815)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
库尔 2023-4-4 09:49
11
0
pureGavin 关键看训练效果,不过我也没试过

改天我试试,不过强化学习这种估计要自定义GYM吧。Reward设计估计是精髓

最后于 2023-4-4 10:16 被库尔编辑 ,原因:
雪    币: 12040
活跃值: (15364)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2023-4-4 11:19
12
0
库尔 pureGavin 关键看训练效果,不过我也没试过 改天我试试,不过强化学习这种估计要自定义GYM吧。Reward设计估计是精髓
有这方面的教程或者样例代码吗?我也想自己亲手训练一下试试效果
雪    币: 1243
活跃值: (1815)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
库尔 2023-4-4 13:20
13
0

游戏教程网上有,水深得很,不过基本上只能在特定的gym支持的游戏运行,要想特定的还得要改改。
1.  https://github.com/yannbouteiller/rtgym 这个是我已知能在现实环境中比较好改装得gym。
2. 会构造状态空间,根据不同游戏提取关键的变量和设计reward。其背后得原理还能追溯到物理学控制工程中得状态空间法。
3.我没搞这个,我上个礼拜做了一个Ai自动化fuzzing 挖掘二进制漏洞,用的也是强化学习,但是我会自己构造状态空间,试验项目在https://github.com/wrenchonline/AI_Fuzzing,漏洞代码超过12字节就会缓冲区溢出,11个字节基本上没事。训练十分钟这个ai就能够基本上12字节,但是模拟器是多线程,堆栈空间贝设定死了每次训练python堆栈限制都会卡住,后面改成多进程模拟。还有这个项目离实战距离可能还有一点距离,没有具体详细的数学算法了,所以fuzzing只能当个玩具看了。我只是试验而已。但当作自定义构造gym是可以参考下的。

最后于 2023-4-4 13:25 被库尔编辑 ,原因:
雪    币: 1243
活跃值: (1815)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
库尔 2023-4-4 13:28
14
0
pureGavin 有这方面的教程或者样例代码吗?我也想自己亲手训练一下试试效果

教程网上有,水深得很,不过基本上只能在特定的gym支持的游戏运行,要想特定的还得要改改。
1.  https://github.com/yannbouteiller/rtgym 这个是我已知能在现实环境中比较好改装得gym。
2. 会构造状态空间,根据不同游戏提取关键的变量和设计reward。其背后得原理还能追溯到物理学控制工程中得状态空间法。
3.我没搞这个,我上个礼拜做了一个Ai自动化fuzzing 挖掘二进制漏洞,用的也是强化学习,但是我会自己构造状态空间,试验项目在https://github.com/wrenchonline/AI_Fuzzing,漏洞代码输入内容payload超过12字节就会缓冲区溢出,11个字节以下基本上没事。训练十分钟这个ai就能够基本上12字节,但是模拟器是多线程,堆栈空间贝设定死了每次训练python堆栈限制都会卡住,后面改成多进程模拟。还有这个项目离实战距离可能还有一点距离,没有具体详细的数学算法了,所以fuzzing只能当个玩具看了。我只是试验而已。但当作自定义构造gym是可以参考下的

最后于 2023-4-4 16:10 被库尔编辑 ,原因:
雪    币: 1243
活跃值: (1815)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
库尔 2023-4-4 13:32
15
0
总结你只需要能够清楚自定义gym和reward就行了。剩下算法,可以先套皮。
雪    币: 1412
活跃值: (4133)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
IamHuskar 4 2023-4-4 14:24
16
0
库尔 总结你只需要能够清楚自定义gym和reward就行了。剩下算法,可以先套皮。
大佬啊。
雪    币: 41
活跃值: (219)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
呆萌熊 2024-1-13 18:27
17
0
能来个视频更好了!!!
雪    币: 1638
活跃值: (2758)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qj111111 2024-3-26 01:14
18
0
库尔 总结你只需要能够清楚自定义gym和reward就行了。剩下算法,可以先套皮。
大佬你好,最近我也在思考能不能使用强化学习来优化脚本的打怪策略.我是专门写rpg游戏的.
可以收集到所有信息,比如怪物状态信息怪物技能轨迹,个人玩家人物信息,周围地形玩家信息.
一开始想用DQN,但是DQN局限性在于训练样本太多了通常要收集几千场对局数据.不太理想.
这样还不如自己手写的脚本策略.
不知道ppo,td3 这两种算法有哪些改进?
游客
登录 | 注册 方可回帖
返回