yolo5自定义训练过程记录(Windows10环境)
前一阵有领导提出是否可以监控货物存量的问题,经分析,货位上增加传感器的模式精度高则高矣,实施和成本都太高,故考虑可以通过监控进出量,来统计总体存量概况。这个方案是否可行?于是经过一番搜索,可能通过yolo + 目标跟踪的方案可行,这个需求很类似智能交通管理监控,不过目前还未搞定跟踪,只做到了通过yolo识别,从可行性验证方向来说是可以的,因此记录一下。
首先在Github上找到yolo5,下载zip或者克隆到本地,环境安装一下,运行一下可以跑起来了。具体环境安装过程不再赘述,网上很多大佬文章,那是图文并茂,吾不如也…
但是有个问题:默认的训练集(yolov5s.pt)只能对标准物体识别,例如人,车辆等,我使用了叉车(当然是玩具小叉车,下现场采集那是不可能滴…),标准模型对叉车识别率不高。经常识别为飞机(汗)。
我的玩具小叉车:
标准模型识别效果截图(你是飞机):
那只能自己训练啦。于是打开摄像头,随意截取了一些帧截图,还是根据面向度娘的编程原则,了解到使用labelimg即可进行标注,这里有个问题,我python环境是3.10的,但是labelimg是基于3.9的,我的解决方案是再在mini conda环境下安装一个python39的,简单粗暴但是好用,于是labelimg跑起来了。
在OpenDir打开截图目录后,即可进行标注,过程比较简单,唯一需要注意的是下面那个地方要选一下,选成yolo。
标注完成后,需要将标注图片和数据分为训练集和测试集,分别放在不同的文件夹下。例如我把训练数据放在“cust_datasets \forklift”文件夹下,然后再建“train”和“valid”文件夹,在“train”和“valid”再有images和labels文件夹存放图片和标注信息。
文件夹结构如下:
在forklift文件夹下,建一个data.yaml文件,我需要区分有货或者无货叉车,于是增加了2个分类:'forklift_empty','forklift_full'。具体yaml文件内容如下:
names: ['forklift_empty','forklift_full']
nc: 2
train: cust_datasets/forklift/train/images
val: cust_datasets/forklift/valid/images
文件内容比较简单,截图如下:
数据准备好之后,就可以执行命令进行训练了。命令如下:
python train.py --batch-size 2 --epochs 200 --data cust_datasets/forklift/data.yaml --weights yolov5s.pt
epochs和batch-size参数根据具体硬件配置可以调整,这方面我也不懂,反正就是一个抄…
注意,训练之前可能会有2个坑,一个是需要一个Arial.ttf文件,是个字体,训练时下载,需要会上网,否则会卡死在这个下载过程,这个字体文件下载后,拷贝到字体里就可以了(应该是“C:\Users\你的windows用户账户\AppData\Roaming\Ultralytics”)。另外,由于我的python环境是3.10,所以训练和执行的时候有个int不兼容的问题,度娘了一番哪里报错改哪里,int64改为int改完就好了。
训练完成之后,模型文件一般就在 “runs/train/exp11/weights/best.pt” 这里。
最后,终于可以检测了!命令(读文件)
Python detect.py --source c:\xxxxxx\xx.mp4 --weight runs/train/exp11/weights/best.pt
或从摄像头0读取视频
python detect.py --source 0 --weight runs/train/exp11/weights/best.pt
效果截图: