最近学的智能信息有学到 YOLO 训练模型,那么如何训练一个自己的模型呢,其实并不复杂。
下面我将基于助教学长的文档,加上我实际使用时的问题补充教程。
首先我们需要一些准备工作
项目文件:
https://wwte.lanzouy.com/iQK9a0we1p0d
https://wwte.lanzouy.com/iOZBk0we1oqd
https://wwte.lanzouy.com/iZWL00we260f 密码:aqzy
pycharm:
Download PyCharm: Python IDE for Professional Developers by JetBrains
训练图片:
准备一些训练图片,进行标注,作为我们的数据模型,我选择了两百张图片
可以使用 potplayer 连续截图功能将视频分割为图片,再从图片中剪切出不相似的人物,如图
这是一件很麻烦的事情,所以我将我的图片以及标签集上传提供使用
https://wwte.lanzouy.com/i30U20we6kmf
2. 所有安装过程中提示是否安装,有 y/n 选择的,我们都要输入 y 并且回车。
例如:Proceed ([y]/n)? y
软件对硬盘无要求,机械硬盘或者固态硬盘均可。
使用 pip 安装软件时,后面 - i 地址使用国内镜像,加上可以节省时间。
Pip install 安装包 -i https://pypi.tuna.tsinghua.edu.cn/simple
anaconda 安装
我们需要安装 anaconda,双击打开安装程序,下一步直到选择路径
这里不要在其他盘符新建文件夹,请务必使用默认的路径直接安装,否则可能会出现奇怪的 bug
我们勾选如图选项,然后点击 install 安装。后续完成安装即可。
如果安装程序有提示失败,那么可以尝试完全卸载后再勾选最后一个选项安装
Yolov8 解压
需要准备两个文件,分别为人工标注图片的程序和 yolov8 的源代码
我们将 ultralytics-main.zip(这个文件夹就是 yolov8 的源代码)解压到容易找到的地方,稍后我们需要通过 pycharm 打开这个文件夹,解压完后,我们继续解压 labelimg 压缩包,可以解压到 ultralytics-main 文件夹里面。即,将 labelimg 项目放在 ultralytics-main 项目文件夹目录下,方便 pycharm 使用。
类似下面图片展示这样。
Pycharm 中的 yolov8 项目配置环境
我们打开 pycharm,打开文件夹
接下来我们设置编译器环境。按照下面图片的方向,我们设置使用 anaconda,python 版本我们统一选择 3.8,然后点击确定。
然后重新启动 pycharm 进行镜像源设置
下面是一些镜像源,需要一条一条的添加进去。名称随意,授权默认无。
http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/ http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
全部添加进去后点击应用,确定。
我们接下来打开 pytorch.org 这个网站,按图所示,根据自身电脑情况选择对应的命令
例如我的电脑为 windows 系统,nVidia 显卡,那么我就选择如下配置。
同级别显卡的训练速度约为 CPU 的 40 到 60 倍不等,如果支持请尽量选择显卡训练
复制这一条命令,然后进入 pycharm 的命令行,输入刚才的命令,我已经安装过了,就不在这演示了
这个时候会出现几种失败的情况,但多半提示 http error,最好科学上网下载
我们再次回到 pycharm 主界面,会提示安装依赖包(其实一直都会提示,只不过这个时候我们才理会这个)。点击安装即可。
这里需要多等一会儿,如果安装卡主,可以退出 pycharm 重新打开会提示安装依赖包。重新点击即可。不过可能无法全部完成安装,会有一些包最终还是安装失败。我们使用下面的命令来安装。
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
我们继续在终端里输入命令,来运行下 yolo 的图像检测,看看是否真的成功了。命令如下。
yolo task=detect mode=predict model=yolov8n.pt conf=0.25 source='你想要检测的文件路径' 文件路径格式如下:E:/yolo/pic/3.mp4_20230507_204218.226.jpg
执行后,我们看到会自动下载 github 上 pt 这个文件,并且开始进行图像检测。
运行结束后在 ultralytics-main\runs\detect 文件夹中会生成检测完成后的图片打开图片。
训练自己的数据集
下面我们来介绍安装 labelimg,刚才我们已经把这个文件夹放在了 ultralytics-main 文件夹。
我们在 pycharm 中的终端,能看到当前输入命令的路径,这个路径我们需要修改到 labelimg 文件夹下的路径,需要一点 windows 命令。
cd 输入下一个文件夹的名字(中间有一个英文符号的空格)即可进入到下一个文件夹下面,cd.. 代表回到上一层目录。 C:代表进入 c 盘根目录
我们定位到 labelimg 文件夹中,使用命令 dir,来查看所有文件,一定要确认有 resources.qrc 这个文件。然后执行下面的命令
Pyrcc5 -o resources.py resources.qrc
执行完后会生成 resources.py,我们将这个文件复制一份到 lib 文件夹里面。
然后终端里继续执行下面三条命令
pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install PyQt5_tools -i https://pypi.tuna.tsinghua.edu.cn/simple
全部安装后,我们找到 labelimg.py 双击,然后鼠标右键对着代码点击运行。能出现下面的界面代表成功安装。
然后选择打开目录,选择我们存放图片的位置,注意不要有中文
接下来开始标注图片
如图,按 w 快捷键开始标记,选择合适的范围,然后输入自己想要标注的类型名称,例如我的 human 和 e-bike。
点击保存,这样我们就标注好了一张图片,生成对应的 xml 文件
然后在图片文件夹创建一个 annos 的文件夹,将刚才生成的所有 xml 文件全部放入
面我们还差一个标签转换 python 程序,将这个 convert_voc_to_yolo.py 代码复制到我们的项目文件夹下
并且将如下位置的数据修改为自己标注的类型
我的类型分别为
e-bike bike human 3bike casque bike-card
这里有需要提示的地方代码中修改为自己的路径
在 pycharm 中,鼠标右键运行即可。
这样会生成一个新的文件夹 labels_all,里面存放了 txt 形式的标注数据
接下来如图所示创建 dataset 文件夹,然后在 dataset 目录下再创建三个文件夹以及 data.yaml,三个文件夹下再分别创建 images 与 labels 文件夹
yaml 的内容如下
分别为三个文件夹的地址
标注的类型个数 nc
标注的类型的名称
根据自身需求修改,如果是我的数据集就不用修改
# 用来分多少类,指定各个文件夹的位置 train: E:\yolo\ultralytics-main\dataset\train\images val: E:\yolo\ultralytics-main\dataset\valid\images test: E:\yolo\ultralytics-main\dataset\test\images nc: 6 names: 0: e-bike 1: bike 2: human 3: 3bike 4: casque 5: bike-card
然后将刚才生成的 labels_all 文件夹内的 txt 文件放入 labels,图片放入 images 内,并且要一一对应
例如我的 train 里放入 1-100,test 放入 101-180,valid 放入 181-200
然后输入以下命令,记得修改为自己的路径
yolo task=detect mode=train model=E:\yolo\ultralytics-main\ultralytics\models\v8\yolov8n.yaml data=E:\yolo\ultralytics-main\dataset\data.yaml epochs=30 imgsz=640 resume=True workers=4 #进入训练
其中 epochs 为训练次数,如果是 10 代的中端 cpu 大概是四十秒一轮,3060ti 则为 2 秒一轮根据自身情况选择训练次数,建议不低于三十次
最后结果集会保存至 ultralytics-main\runs\detect 内,效果图为 val_batch0_pred.jpg
如图