搭建训练模型

Git下载

Git下载主页链接

yolov5源码下载

在安装好Git后,在要安装yolov5源码文件中右键打开**Git Bash**,输入命令回车下载:

1
git clone git@github.com:ultralytics/yolov5.git

安装Anaconda环境

在进行安装Anaconda环境前,首先准备好安装Anaconda,目的是为了方便管理不同Python项目的配置环境,在这里,安装Anaconda不再赘述,自行上网查找安装教程,本站长贴出安装步骤链接,Anaconda下载安装教程

配置conda环境,安装Labelimg

  1. 打开终端命令行,输入命令:
1
2
conda create -n 环境名 python=(python版本号)
conda create -n labelimg python=3.8


2. 输入命令激活环境:

1
conda activate labelimg

可以看到前面的括号里变成了环境名,说明已经成功激活虚拟环境了

  1. 在虚拟环境中,直接键入命令安装labelimg即可安装完成:
1
pip install labelimg
  1. 直接键入命令回车,打开标记软件:
1
labelimg

再进行数据标注的时候,点击键盘的**W**键,可以看见鼠标光标变成十字形,按住鼠标左键,将标记的目标框出来,,提示输入标签名,输入person(可标记多个目标或者标签名),标记好后保存(Save),数据集就会保存到所选存储位置

yolov5配置及修改

  1. 打开yolov5源码文件夹,进入data文件夹,新建两个文件夹,分别命名为labels(用来存储labelimg的标记结果)images(用来存储预训练的图片)
  2. 新建三个txt文件,分别命名为train test val,将训练的图片分为训练集和验证集,然后把图片的路径(根文件目录,即data/images/图片名+格式)分别写入这三个txt文件,trainval是可以不用区分的(可以相同),但是对应的txt文件必须存在。

对于要在txt文件里面要保存训练的图片名称,因为训练的图片数量应在1000张左右,这样训练的模型效果相对较好,因此一个一个去输入图片的名称有点不太现实,所以我们直接写个代码去获取当前文件夹的所有文件名称,并循环打印(记得加前缀data/images/),代码如下:

1
2
3
4
5
6
7
8
9
10
import os

# 获取当前文件夹中的所有文件名
file_names = os.listdir('.')
# 将每个文件名前加上"data/images/"并存储在新的列表中
formatted_file_names = [f"data/images/{file_name}" for file_name in file_names]

# 打印每个格式化后的文件名
for name in formatted_file_names:
print(name)
  1. 打开里面的coco128.yaml文件,在names这里,只保存之前labelimg里面的分类名称,其他类名均删除,将txt文件所在的文件夹路径填入path中,然后将三个txt文件名分别填入traintestval,然后将本文件另存为自己想要命名的文件名。
  2. 数据集准备好后,打开train.py文件,根据requirements.txt(根目录下即可找到)安装相关的包。
  3. 下载Pytorch(CUDA版本),进入Pytorch官网,选择stable版,Windows平台,选择Pip,编程语言选择python,之后选择CUDA版本。

查看安装CUDA版本:,打开命令终端,输入命令查看显卡版本,选择比本版本低的Pytorch下载即可:

1
nvidia-smi

  1. 复制下载命令进入pycharm,打开终端复制并回车。

  2. CUDA和CUDNN在NVIDIA官网下载即可,安装方法自行上网查找,由于站长太善良,直接贴出安装教程链接,CUDA与CUDNN安装教程,另外切记安装的版本必须要与Pytorch版本号相对应
  3. train.py文件中,找到parse_opt函数模块位置(在507行),开始配置训练参数。
  1. 第一行weights,把yolov5s.pt内容清空,续训练的时候,把上次的.pt权重文件根路径添加进去。
  2. 第二行cfg,进入model文件夹,将yolov5l.yaml文件的根路径添加进default中。
  3. 第三行data,在data文件夹中,将之前由coco128.yaml改写的自命名文件的根路径替换掉。
  4. 第五行epochs,即训练的轮数,自定义即可。
  5. 第六行batch-size,即每次进入神经网络的图片数(8-14左右)
  6. device那行中,选择CPU或者GPU进行训练(选CPU,就填CPU;选GPU,如果一块显卡,就填0,多块显卡的话,依次把想要用到的显卡序号写出来,大家应该都填0,因为我们都是苦逼的大学牲,没钱买多余的显卡)。
  1. 准备工作基本上结束了,然后运行该文件,进行训练,等待训练完成后,**.pt权重文件会出现在runs/train/exp/weights**下。

yolo框架的改写

打开yolov5源码根目录下的detect.py文件,找到parse_opt函数模块(在287行),配置参数。

  1. 第一行weights,把训练好的.pt权重文件根路径添加进去。
  2. 第二行source,单引号中为需要YOLO进行目标推理的图片名称,填入screenshot.jpg
  3. 第三行data,在data文件夹中,将之前由coco128.yaml改写的自命名文件的根路径替换掉。
  4. 第五行conf-thres,设置目标置信度,适中即可。
  5. 第八行device,同上。
  6. 第十行save-txt,在action前加一个default=‘True’(实现射击逻辑)。
  7. 在代码的最后面,if __name__ == "__main__":的上方,填写img = pyautogui.screenshot('screenshot.jpg')(调用pyautogui的截图功能,括号内为截图保存的文件名,与parse_opt中的source里填写的文件名一致)
  8. 终端中输入命令:
1
pip install pyautogui
  1. parse_opt上方if save_text:判断中添加射击逻辑,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if save_txt:  # Write to file
xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist() # normalized xywh
xywh[0] = xywh[0] * 1920
xywh[1] = xywh[1] * 1080
# 射击逻辑
if cls == 0:
pyautogui.moveTo(xywh[0],xywh[1])
(x, y) = pyautogui.position()
#print("x:" + str(x))
#print("y:" + str(y))
print("0:" + str(xywh[0]))
print("1:" + str(xywh[1]))
pyautogui.moveRel(0.33 * (xywh[0] - x), 0.33 * (xywh[1] - y))
pyautogui.click()

由于射击逻辑与自身鼠标DPI和游戏内灵敏度有关,需自己不断调试。

YOLO训练后完整代码下载

代码已全部打包,有意者自行下载,模型的话我只训练了300张,精度的话不是很理想,只需要安装所有的配置环境即可,解压后只需运行根目录下的detect.py文件。