哈喽,大家好,今天我们用计算机视觉领域中最流行的深度学习目标检测框架神器:YOLO v5,进行海洋生物的检测与识别。小白同学也可以跟着我一步一步操作,具体操作流程如下:
----------------------------------------------------------
我的电脑配置环境如下:
系统:Ubuntu 20.04.2 LTS
GPU:RTX 3080, 10G
NVIDIA配置:
① NVIDIA-SMI 465.19.01
② Driver Version: 465.19.01
③ CUDA Version: 11.3
Python版本:Python 3.8.5
torch版本:1.8.1 cu111
torchvision 版本:0.9.1 cu111
opencv-python 版本:4.5.1.48
-----------------------------------------------------------
1. 打开电脑上的命令行窗口,命令如下:
2. 安装软件包:virtualenv ,用于创建虚拟环境。【我这里没有用集成开发工具软件Anaconda,因为,我更喜欢用virtualenv,哈哈~】
输入命令:
pip install virtualenv
【注意:你的输出信息会与我不一样,因为,我之前已经装过了virtualenv,所以显示:Requirement already satisfied。后续,会有很多软件包,我都已经安装过了,所以,显示信息会与你的不一样。不过,这没有任何影响。只要你的命令输入与我的一模一样,那就OK啦。】
3. 创建虚拟环境,解释一下:虚拟环境类似于“平行世界”,A虚拟环境中发生的事情与B虚拟环境中发生的事情不会有任何冲突,也可以理解成隔离区域。优点是:无论我在A虚拟环境中怎么瞎折腾,都不会影响到B虚拟环境。所以,我建议各位同学为了每一个项目创建自己的虚拟环境,这样大家都可以愉快地玩耍啦。
命令如下:
virtualenv YOLO_v5_env
4. 启动虚拟环境,并查看虚拟环境中默认已经安装的软件包,命令如下:
source YOLO_v5_env/bin/activate
pip list
【注意:(base)前面是不是多了一个(YOLO_v5_env),这说明我们已经进入到了虚拟环境下啦,恭喜你,老铁,安装成功了。默认安装的软件包只有3个。】
5. 接下来,我们从github下载YOLO v5工程项目,项目路径:https://github.com/ultralytics/yolov5.git ,我们从该路径拷贝项目到本地,命令如下:
git clone https://github.com/ultralytics/yolov5.git
6. 查看yolov5项目下的文件,命令如下:
cd yolov5
ls
7. 根据文件requirements.txt安装里面罗列的软件包,你可以自己打开该文件看看有哪些软件包。我们直接安装,命令如下:
pip install -r requirements.txt
【注意: 你的信息显示与我的不一样,因为,我已经装过了。反正,这里会输出一堆一堆的安装信息,等一会儿就可以啦。】
8. 下一步,下载本案例需要用到的数据集(海洋生物图片和标注数据),百度云盘下载链接:
链接: https://pan.baidu.com/s/1_NBMD5kaTazuemI8WAiuew 密码: qf0w
注意 :数据集下载下来后,一定要解压到yolov5项目文件夹下,如下图所示:
9. 查看Aquarium文件夹下有哪些文件,共有3个文件夹,test, train, valid,如下截图:
10. 创建网络模型配置文件: custom_yolov5s.yaml,你可以用系统自带的文本编辑软件或通过软件sublime来创建,文件的格式是.yaml , 创建完成后,如图所示: 【一定要注意文件存放的路径,不能放错。在项目yolov5 --> data文件夹下,存放了cutom——yolov5s.yaml】
11. 查看custom——yolov5s.yaml文件的配置内容,鼠标双击打开该文件。截图如下:
你可以直接复制下面这段配置内容:
# parameters
nc: 7 # number of classes # CHANGED HERE
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple
# anchors
anchors:
- [10,13, 16,30, 33,23] # P3/8
- [30,61, 62,45, 59,119] # P4/16
- [116,90, 156,198, 373,326] # P5/32
# YOLOv5 backbone
backbone:
# [from, number, module, args]
[[-1, 1, Focus, [64, 3]], # 0-P1/2
[-1, 1, Conv, [128, 3, 2]], # 1-P2/4
[-1, 3, BottleneckCSP, [128]],
[-1, 1, Conv, [256, 3, 2]], # 3-P3/8
[-1, 9, BottleneckCSP, [256]],
[-1, 1, Conv, [512, 3, 2]], # 5-P4/16
[-1, 9, BottleneckCSP, [512]],
[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
[-1, 1, SPP, [1024, [5, 9, 13]]],
[-1, 3, BottleneckCSP, [1024, False]], # 9
]
# YOLOv5 head
head:
[[-1, 1, Conv, [512, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 6], 1, Concat, [1]], # cat backbone P4
[-1, 3, BottleneckCSP, [512, False]], # 13
[-1, 1, Conv, [256, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 4], 1, Concat, [1]], # cat backbone P3
[-1, 3, BottleneckCSP, [256, False]], # 17 (P3/8-small)
[-1, 1, Conv, [256, 3, 2]],
[[-1, 14], 1, Concat, [1]], # cat head P4
[-1, 3, BottleneckCSP, [512, False]], # 20 (P4/16-medium)
[-1, 1, Conv, [512, 3, 2]],
[[-1, 10], 1, Concat, [1]], # cat head P5
[-1, 3, BottleneckCSP, [1024, False]], # 23 (P5/32-large)
[[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
]
12. 我们继续创建第二个数据配置文件data.yaml , 创建方式跟之前那个一模一样的操作,在此省略,以下是data.yaml所在路径截图,以及data.yaml配置内容。截图如下:
下图是data.yaml文件内的配置内容,截图如下:
你可以直接复制下面这段配置内容:【train和val的路径一定要准确,不然找不到你的训练和验证图片数据集。注意路径,注意路径,注意路径,重要的事情说三遍。nc:7,表示数据集有7个类别,names对应的就是海洋生物的名称,一堆海鱼的名字。】
train: ../yolov5/Aquarium/train/images
val: ../yolov5/Aquarium/valid/images
nc: 7
names: ['fish', 'jellyfish', 'penguin', 'puffin', 'shark', 'starfish', 'stingray']
13. 接下来,我们基于新的数据集,训练出新的模型。命令如下:
python train.py --img 416 --batch 80 --epochs 100 --data ./data/data.yaml --cfg ./data/custom_yolov5s.yaml
14. 运行报错啦,CUDA Error,这种报错一般是torch,cuda版本过高或过低引起的,也是比较头疼的问题,需要尝试很多版本后,才能找到一个不报错的版本。
15. 解决措施,直接到官网,重新下载torch和tochvision,注意,一定要先卸载之前安装的软件包。卸载如下图所示:
pip uninstall torch torchvision
16. 重新到官网去下载、安装,进入pytorch官网:https://pytorch.org/
根据自己的电脑系统和CUDA版本配置,选择对应的torch, torchvision, torchaudio
安装命令:
pip3 install torch==1.8.1 cu111 torchvision==0.9.1 cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
17. 接下来,我们重复第13步的操作。基于新的数据集,训练出新的模型。命令如下:
python train.py --img 416 --batch 80 --epochs 100 --data ./data/data.yaml --cfg ./data/custom_yolov5s.yaml
截图1:
截图2:
如果出现如上一轮一轮的训练输出信息时,恭喜你,奥利给 ^_^ 成功啦
【注意: 截图1提示你需要安装wandb ,即: pip install wandb ,可以在训练结束前先安装,我是训练结束后再安装的。不过,建议还是训练前就安装一下。】
截图3: 全部训练结束,输出2个模型,一个是最好的模型,一个是最后的模型。
18. 安装wandb (建议在第17步前安装)
19. 用tensorboard查看训练过程中的结果,命令如下:
tensorboard --logdir ./runs
20. 接下来,拷贝网址: http://localhost:6006/ , 在浏览器里粘贴后回车。
可以点击查看训练输出的各种评估指标值,例如: precision, recall, mAP
21. 查看训练数据检测和识别的标注图片,路径如下: yolov5 -- runs -- train -- exp ,请看截图:
查看图片 train_batch2.jpg
22. 我们刚才在训练集上训练好了模型,接下来,我们到测试集test上进行测试。命令如下:
python detect.py --weights ./runs/train/exp/weights/best.pt --img 416 --conf 0.4 --source ./Aquarium/test/images
【注意: 参数说明,img 416 : 输入图片尺寸是416 x 416,conf 0.4 :阈值是0.4,source 指定了测试集的图片路径】
如果输出这么一堆信息,说明模型正在test上进行检测、并输出检测结果。
23. test数据集的检测结果保存在路径: yolov5 -- runs -- detect -- exp ,如下截图:
24. 任意打开其中一个检测结果图片,查看检测结果。几个检测结果图如下:
好啦,本次案例实践圆满完成 :)如果你安装我的步骤,一步一步下来,应该不会有什么问题。如果遇到任何问题,请到B站,查看我的个人简介,添加"AI学习部落"QQ群一起讨论。目前,我们一共有10个QQ群,学员已经超过1800名。
更多AI相关课程,请在网易云课堂和B站关注账号:唐国梁Tommy
网易云课堂:
https://study.163.com/instructor/1028614893.htm?_trace_c_p_k2_=a8d2f7653bf94cd5a821036a432179e4
B站:
https://space.bilibili.com/474347248