1 搭建环境
1.1 YOLO实践应用之搭建开发环境 Anaconda3
Anaconda是一个开源的Python语言发行版及其包管理器,在数据科学、机器学习和科学计算领域广受欢迎。Anaconda使用Conda进行包管理。Conda可以创建虚拟环境来隔离不同项目所需的包和依赖,并可以方便地提交代码和环境设置,它包含了众多的Python常用库和工具,可以大大简化开发和管理环境中的Python库和依赖事务。Anaconda的下载:可以通过官网直接下载Anaconda3,运行安装程序,选择Installation Type为"Add Anaconda to my PATH environment variable",安装路径自定义。其次配置Anaconda镜像源,提升软件包下载安装速度并选择将Anaconda添加到系统环境变量中并选择将Anaconda作为默认Python环境,也可以在后续安装过程中选择创建多个环境。选择启动Anaconda3,看到Windows资源管理器的界面。从中可以方便地打开和管理Anaconda集成的各种工具。
1.2 YOLO实践应用之配置安装pycharm
PyCharm是一种非常流行的Python集成开发环境(IDE),具有代码自动完成、语法高亮显示、调试功能等
1.首先,下载PyCharm:从官网进行下载并选择适合你操作系统的版本。
2.安装PyCharm:运行下载的安装包,按照提示进行安装。安装完成后,打开PyCharm。
3.配置虚拟环境:虚拟环境是一种隔离Python环境的方式,可以为每个项目提供独立的Python环境。在PyCharm中,你可以创建虚拟环境来管理你的Python依赖项。
4.在PyCharm的主界面中,选择File -> New Project…。在左侧面板中选择“Project Interpreter”,然后点击右侧的下拉菜单,在弹出的菜单中选择“New Environment”。
5.在弹出的对话框中选择Python解释器的位置和版本。
6.配置项目:创建一个新项目或者导入一个已有的项目。在PyCharm中,可以使用“Project”菜单中的“New Project”或“Import Project”选项。
7.运行代码:在PyCharm中,可以使用“Run”菜单中的“Run”选项运行代码。如果需要调试代码,可以使用“Run”菜单中的“Debug”选项。
2数据集的准备
- 收集图像数据集:使用中国交通标志检测数据集(CCTSDB),把CCTSDB中需要的图像数据按照定义好的种类和标准进行收集,收集过程需要保证采集质量的可靠性和准确性。
2. 标注图像:对于每张图像,需要用框标注出感兴趣的对象的位置和大小。可以使用许多标注工具,例如LabelImg、RectLabel等。
3. 分割数据集:首先定义分割比例,通常将整个数据集分成两个部分,即训练集和测试集。确定每个部分所占的比例,根据具体的任务和算法进行选择。其次分层采样,根据数据集中类别或其他特征,分层采样来确保每个子集中的样本数量相当,并且样本代表性均匀分布在每个子集中。进一步提高算法的泛化能力和鲁棒性。
4. 生成YOLOv3所需的标签:对于每张标注好的图像,需要生成YOLOv3所需的标签文件。一个标签文件应该对应一个图像文件,标签文件中包含物体的类别、坐标和尺寸信息。
(1)生成
使用了一个现成的python脚本,用于生成txt文件,脚本自动会获取图片名称,按比例生成不同的集图片名,使用的时候注意修改路径。
生成完毕后,可以看到Main文件夹下会有四个txt文件,如果生成失败可以检查一下当前目录权限及脚本内的路径,注意图片命名不能有中文字符。
(2)voc标签文件.xml转yolo标签文件.txt
下载voc_label.py文件,将文件下载到VOCdevkit同级的路径下,生成训练和验证的文件列表。
这个文件在darknet-master里面也有可以拿过来用,需要改下样本集的名称,及类的标签。
(3)yolo的文件结构
yolov3 这处可自定义,backup存储训练好的模型,cfg用于存放配置文件.cfg和.data文件,data存放图片、标签文件、名字文件(.names),images存放图片和yolo的txt文本,图片名和txt文本名对应,labels存放用于opencv绘制图片框的图片文件。
5. 配置YOLOv3所需的训练参数:使用Anaconda框架来训练YOLOv3,并设置训练参数,例如批次大小、学习率、迭代次数等等。
.data文件的配置
cfg文件夹下新建:myv3_det.data文件
.data存放的各个文件的路径,修改成自己的路径
.names文件的配置
data文件夹下新建myv3.names文件
.name文件存放标签的名字,内部是通过ID转换的名字
3数据集处理
1. 读取图像及其对应的标签文件。
(1)首先,定义一个函数用于读取图像文件。在Python中,使用OpenCV、Pillow或者matplotlib等第三方库来实现图片读取。读取图像时需要指定图片的路径和格式,读取后的图像会被转换为一个numpy数组。
(2)接着,定义一个函数用于读取标签文件。标签文件是一个txt文件,用于存储每个图像对应的类别信息或者位置信息等。在读取标签文件时,可以使用Python内置的文件操作函数打开并读取文件内容。读取后的标签信息会被保存为一个字典或者列表等数据结构,方便后续使用。
(3)最后,可以将图像和标签信息整合到一个数据集中。
2. 进行数据增强操作,通过数据增强,可以扩展你的训练数据集,提高模型的泛化能力。常用的数据增强技术包括旋转、缩放、平移、翻转、裁剪、随机填充等等,可以使用如OpenCV这样的图像处理库实现数据增强。
3. 进行数据预处理, 读取原始图片,并将其转换为 RGB 模式;
将图片缩放到固定大小;对图片进行归一化,并去均值和方差。YOLOv3要求输入图像的尺寸必须为416x416,因此需要对输入图像进行预处理,使其满足模型的输入要求。预处理过程包括将图像进行缩放、裁剪或填充操作,再将其转换为模型所需的数据格式,例如Darknet支持的图像通道顺序为RGB、尺度为0~255等,图像缩放到416x416,转换颜色通道顺序等。
4. 对标签文件进行相应的坐标变换以适应图像增强。利用变换的公式,将原有的标签坐标转换成适用于增强后的图像的坐标。
5. 最后将图像和标签文件作为模型的输入进行训练。需要注意的是,数据预处理和数据增强需要同时应用于图像和标签文件,以确保图像和标签文件的一致性。
4 网络训练
打开安装好的pycharm环境,使用VOC格式进行训练,训练前在根目录打开VOC07+12的数据集,将标签文件放在VOCdevkit文件夹下的文件夹下的Annotation中,并将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的中。
修改voc_annotation.py里面的annotation_mode=2,运行voc_annotation.py生成根目录下的2007_train.txt和2007_val.txt。train.py的默认参数用于训练VOC数据集,载入yolo3的环境,classes_path用于指向检测类别所对应的txt,这个txt和voc_annotation.py里面的txt一样进入VOC2007,进入到子目录train模块右键启动程序,从JPEGImages训练数据集中提取图片路径加载到yolo3的VOC2007 predict模块中,开始训练,训练分为两个阶段,分别是冻结阶段和解冻阶段。显存不足与数据集大小无关,提示显存不足请调小batch_size。受到BatchNorm层影响,batch_size最小为1。运行train.py就可以开始训练了,在训练多个epoch后,权值会生成在logs文件夹中。图片训练完成。
3.5训练结果预测
训练结果预测需要用到两个文件,分别是yolo.py和predict.py。我们首先需要去yolo.py里面修改两个参数model_path以及classes_path,model_path指向训练好的权值文件,在logs文件夹里,classes_path指向检测类别所对应的txt。完成修改后就可以运行子模块predict.py进行检测了。运行后输入图片路径即可检测如果出现shape不匹配,同时要注意训练时的model_path和classes_path参数的修改。
修改voc_annotation.py中的classes_path,使其对应cls_classes.txt,并运行voc_annotation.py。使用预训练权重,下载完库后解压,在下载yolo_weights.pth,放入model_data,运行predict.py,输入 img/street.jpg,之后在predict.py里面进行设置可以进行fps测试和video检测。
在yolo.py文件里面,在如下部分修改model_path和classes_path使其对应训练好的文件;model_path对应logs文件夹下面的权值文件,classes_path是model_path对应分的类。