【第一部分:环境搭建;第二部分:测试代码;第三部分:训练自己的数据集】
第一部分:环境搭建
首先确保您的电脑上面有Anaconda和PyCharm。
去一个您喜欢的地方创建一个文件夹【不创建也ok,直接打开cmd】:(注意最好不要有中文路径!)
输入:
activate
激活环境,出现以下界面说明你的conda是没有问题的,处于base环境下:
然后后续需要安装各种包嘛,所以我们可以切换一下源,让下载速度更快(之前试过清华的源,这次试一下中科大的源):
conda config --remove-key channels
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes
pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple
ok,切换完了。
去白嫖一个项目下来修改,综合网络上的百花齐放的资料,我觉得这个是个不错的项目:(没有gitee账号的先去注册登录一下)
YOLOV5-mask-42: 基于YOLOV5的口罩检测系统-提供教学视频 (gitee.com)
(记得给人家点赞收藏转发,哈哈)
ok,下载下来并解压到刚刚创建的那个文件里边,如下:
首先先用cmd打开根目录(就是yolov5-mask-42-master),然后创建虚拟环境:
conda create -n py811 python==3.8.5
(py811指的是虚拟环境的名字,python版本指定3.8.5)
出现以下界面说明创建成功:
然后需要激活这个环境:
conda activate py811
(出现左边这个小括号说明你正处于这个环境下面,是ok的)
该项目是基于pytorch框架的,所以需要去安装pytorch。
so,去pytoch官网找命令:
(另外,复制命令的时候后面的"-c pytorch"可以不选中,“-c pytorch”表示首选从国外的源进行加载,速度会灰常灰常慢。)
ok,选第一条命令复制到cmd:
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=10.2
安装到这里的时候好像卡住了?等一会试试?
ok的,没有问题,要有耐心哈哈哈:(怎么和别的博主不一样,他们的飞快?哈哈)
安装完了之后就是安装项目的第三方依赖包,安装第三方包的时候注意你所处的环境一定是py811就行,也可以用"dir"看一下,目录下一定要有这个requirements.txt文件:
然后就放心安装:
pip install -r requirements.txt
等待几分钟......
ok,第三方依赖也安装好了:
(呜呜我看了一下我的盘儿,挺占内存的啊)
再额外安装几个库,第一个是用来计算目标检测精度和map值的:(windows下,如果你是Linux,去掉"-windows")
pip install pycocotools-windows
第二个是用来展示图形化界面的:
pip install pyqt5
ok,目前代码所需要的依赖包就安装好了,也就是环境都搭建好了。
第二部分:测试代码
试一下看代码能不能跑通:
先简单看两个文件夹的东西,有助于跑代码:
第一个是:
项目中的pretrained文件夹里面存放的是三个预训练模型的权重文件,代表含义如下:
预训练模型是具有检测物体的能力的,它是已经在coco数据集上做过训练的。
"yolov5s.pt"比较小,咱直接采用它去做训练。
第二个是data下面的images文件夹(这是项目本身自带的图片哈):
看到bus.jpg木有,我们就检测一下这一张图片:
python detect.py --source data/images/bus.jpg --weights pretrained/yolov5s.pt
出现这些信息就说明是能跑通的,至于输出来的是什么东西,感兴趣可以去看看之前的几篇文章,有细讲,包括命令行输入的又是什么东西。(文末可以跳转到相应的文章)
看一下他执行完输出的测试结果吧:
ok,这也说明代码是可以跑通的。
在pycharm里面打开项目吧,好看一点,初次打开需要配置环境(保证右下角处于py811环境,也就是刚刚搭建的环境里):
番外:也不知道你们会不会调环境出来,不会的简单参考一下这张图:
同理,打开之后也可以先执行一下:(这张图片不是原有的,是临时随便截图的放进来的)
python detect.py --source data/images/dogs.png --weights pretrained/yolov5s.pt
在红框的路径看预测结果:
打开路径下的图片会发现图上什么显示都没有【因为这个项目是下载的别人的口罩检测的项目(而且你会发现他其实也检测不出来口罩,因为这个下载下来的项目没有提供口罩数据集,如果不做任何更改,其实他就是一个yolov5的原项目。我之所以会下载这一个是因为里面有我想要的东西哈哈),我想做的是检测狗狗和狗狗的舌头的任务,这也就是如标题所说的训练自己的数据,我的数据集不是口罩哦,因此我们接下来要做的就是如何训练自己的数据集】
第三部分:训练自己的数据集
对数据进行标注(借助labelimg工具):
pip install labelimg
进入labelimg:
labelimg
这时候他就会弹出labelimg,这就是用来进行数据标注的工具:
各个图标的含义:
一般,第一次打开这个软件先需要进行几个修改:
由于前面介绍了我的数据集是狗狗,所以我去搞了1200张狗狗的图片作为需要标注的图片:(哈哈这个数据集有没有很眼熟,没错,就是猫狗大战的那个,不喜欢的话可以去爬其他的),并把这6张图片放在images目录下:(这一个路径就需要加载到labelimg的Open Dir)【如需要该标注后的数据集,文末有放!不过需要一点点💴💴哈哈】
并在images的同级目录下创建一个labels文件夹,如图(这个路径需要加载到labelimg的Change Save Dir)
把这几个调整过来之后,labelimg的界面如下:(如果在点击过程中遇到闪退情况,在cmd再运行一下labelimg即可)
然后进行标注任务:(点击下一张图片的时候ctrl+s保存一下或者左边的save键)
yolov5狗狗标注视频
标完了之后可以打开labels看一下:
0.543003 0.465962 0.712828 0.913146:前面两个代表中心点坐标,后面表示w和h,这里这个数据都是做了归一化处理的,这样的话模型算得会更快
(注意,图片名称和标签名称应该是一一对应的哦)
标注完了之后:
将数据集按照8:2划分为训练集和测试集。(直接手动拖就行)
so,我的训练集有960张,测试集有240张,存放的位置和内容如下:
(训练集路径)
(测试集路径)
接下来就是改代码部分的东西了:
第一个要改的就是yolov5s.yaml配置文件(模型的配置文件):(可以直接在yolov5s.yaml文件中把类别改为2,也可以如图所示复制到一个新文件再改)
第二个就是data.yaml(数据集的配置文件):【建议新建一个更改如下的内容即可】
ok,可以开始训练模型了。
可以去改train代码的内容进行模型训练,但是我一般不去更改,直接命令行输入参数也可以:
python train.py --data DogTongue_data.yaml --cfg dogtongue_yolov5s.yaml --weights pretrained/yolov5s.pt --epoch 100 --batch-size 2
运行这一句话的时候可能会遇到一个报错:
解决办法为:
完了之后立即重启电脑,再去pycharm运行那行命令,然后等待100轮训练完成:
训练完了之后:
新训练的结果会保存在runs下的train目录下:
(后续会更新训练完后的)
在训练完之后对生成权重文件进行验证(val.py进行):
python val.py --data data/DogTongue_data.yaml --weights runs/train/exp4/weights/best.pt --img 640
然后去到这个项目的windows.py文件中第的60行:
最后运行这个windows.py:
得到它的可视化界面,然后上传自己的图片预测即可:
(看过前面的文章就会知道在之前没有自己的数据集的时候预测这张狗狗的图片是不成功的,这里就能正确预测出来!)
over!