模型训练用数据集准备以及YOLO模型训练

一、训练用数据准备

数据准备,就是整理并标注数据,构建数据集;本课程选取的项目为人脸识别,需要构

建出由人脸图片组成的数据集,数据集中一般包含训练集、验证集和测试集,其中:

训练集和验证集:用于训练网络模型,一般占到总数据量的 80%

测试集:用于测试网络模型的性能,一般占到总数据量的 20%

关于lableImg:是一个基于python的、开源的数据标注工具

Pip是一个安装指令,它会帮助你直接一次性下载完成labelImg以及它所有的依赖,pip无需在python中执行。

我们先启动先前安装好的python3.12.3,查看路径。

使用pip install pip -U检查pip工具的版本和下载地点

使用pip config set global.index-url <镜像源>设置下载路径,防止网络问题导致软件获取失败

输入pip install labelImg下载labelImg标注工具。

完成下载之后我们直接在命令行输入labelImg打开软件,发现如下报错,发现是缺少名为‘distutils’的模块。

经搜索问题解决方式得到结论,在高版本的python中distutils不能够作为一个单独的模块直接用pip获取,需要获取setuptools包来解决问题。

此时不再报错,我们可以正常启动labelImg,但是作为一个开源软件,软件中仍然存在很多bug,所幸python的报错可读性高且准确,我们根据最后一行的报错得到在canvas.py中的526行的输入值应该为整型但是收到了一个float。

用vscode打开canvas.py,强行将函数的接收值换算为整型,输入int()。

随后我们可以正常启动labelImg了,打开数据标注工具,opendir打开图片文件夹,随后使用create react box标注出对应部分,创建face分类,随后选择保存目录,即可得到标注文件.xml。

人脸数据收集:此处我使用的是

PubFig: Public Figures Face Database 哥伦比亚大学的公众人物脸部数据集,包含有 200 个人的 58797 张人脸图像,主要用 于非限制场景下的人脸识别。

官网下载链接:Pubfig: Public Figures Face Database

Labeled Faces in the Wild Home (LFW) 这个数据集包含超过 13,000 张人脸图像,均采集于 Internet。每个人脸均被标准了一个人名,其中大约 1680 个人包含两个以上的人脸。这个集合被广泛应用于评价 FaceVerification 算法的性能。

官方下载链接:http://vis-www.cs.umass.edu/lfw/

Large-scale CelebFaces Attributes (CelebA) Dataset由香港中文大学汤晓鸥教授实验室公布的大型人脸识别数据集。该数据集包含有 200K张人脸图片,人脸属性 40 多种,主要用于人脸属性的识别。

官方下载链接:http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html

二、YOLO模型训练

首先,我们先将标注好的模型放置对应的文件夹下,将标注文件.xml放入annotations文件夹而原图放入JPEGImages文件夹,作为小型数据集使用。

确认预训练模型:

预训练模型,即已经在较大公开数据集上训练好的模型,该模型已经具有较高的检测精度了;将该模型参数作为初始化参数,继续在真实项目的数据集上训练,可以有效提高模型收敛的速度,节约训练时间。

预训练模型可以从官方模型发布的网站中下载(yolov3.weights 文件的下载地址:https://pjreddie.com/media/files/yolov3.weights),也可以自己在公开数据集上训练。

资料库中给出了预训练模型,将该文件拷贝到指定文件夹 pre_model 中即可,如下图所示。

我们先使用docker container prune删除停止运行的docker容器。随后我们输入

docker run -it --name bash_aiot - v D:\NJU_AIOT\part4_model_preparation\program_aiot:/home/assignment/ demo_ai ot:210707 bash

新建一个容器并执行 bash 命令开启一个交互式终端

cd /home/assignment

进入容器目录下观察所有文件夹

打开127.0.0.1:8888

通过 voc 数据集生成 txt 格式数据,执行 python write_voc_to_txt.py,生成 txt 文件数据,存放为 program_aiot/data_process/data.txt(注意 write_voc_txt.py 是以追加的方式来生成 txt 文件的,所以你要么直接跳过这一步,要么就需要删掉原来的 data.txt 后再运行write_voc_to_txt.py,否则训练的数据会有大量重复)

在执行python时发现缺少tensorflow工具,通过pip工具进行软件极其依赖的下载。

执行python train_from_scratch.py

开始模型训练,此过程相当漫长。

在看训练过程时能够看到由于模型数据库有限,loss在后续几次训练中不容易下降。

训练完成之后打开saved_model文件夹得到如下训练结果。