The Second Article
前言
本文是续The First Article的第二篇文章,The First Article使用PyTorch实现YOLOv5,而本文The Second Article记录基于 Tensorflow实现Github作者zzh8829 的 yolov3-tf2 的迁移学习大致流程,使用自制数据集(100张图片)。希望能够对读者有所启发并提供帮助,如有不对之处请批评指正,欢迎提出宝贵意见和建议,若需源码或者有疑问请留言。
Email:[email protected]
实现环境
在主机上安装以下包和其他包参考requirements.txt
Python 3.7 +CUDA Toolkit 10.1+cuDNN v7.6.5+TensorFlow 2.1.0+opencv 4.2.0.32 +PyCharm 2021.3.2
GPU:NAVIDIA GeForce GTX 1050 Ti(4GB)
基本流程
一般分为以下四步:数据准备、建立模型、训练模型、模型评估。
数据准备
数据集包括实际场景的 100 幅图像(从百度图片下载相应图片)。使用labelImg图像标注工具,VOC格式标注图像生成标签label的xml文件,利用脚本将数据集划分为训练集、验证集(9:1)。标签有两类:danger(骑电动车未佩戴头盔), safe(骑电动车佩戴头盔、骑自行车)。自制数据集包括三部分:JPEGImages存放数据集全部无损图片(用改后缀名的方法修改图片格式很大可能报错)、Annotations存放每个图片的标注xml文件(边框坐标以及所属类别)、ImageSets存放训练集、验证集有哪些图片的图片名,一共两个txt文件。使用voc2012.py将这些文件转换成Tensorflow训练数据要求格式,生成训练集与验证集的两个tfrecord文件。
python tools/voc2012.py --data_dir ./data/voc2012_raw/VOCdevkit/VOC2012 --split train --output_file ./data/voc2012_train_hat.tfrecord --classes ./data/me.names
python tools/voc2012.py --data_dir ./data/voc2012_raw/VOCdevkit/VOC2012 --split val --output_file ./data/voc2012_val_hat.tfrecord --classes ./data/me.names
这里展示数据集全部共100张图片:
建立模型
从 Github上下载YOLOv3模型( yolov3-tf2传送门.)进行迁移学习,在model.py里修改’yolo_score_threshold’值为0.8以提高划分为正样本的阈值。训练100轮,每轮8批次。
训练模型
作者没有提供打印Map,由此观察损失值。开始训练时训练集的损失值6670.5197,验证集的损失值11106.4985。如下图所示。
结束训练时训练集的损失值13.3265,验证集的损失值25.7971。如下图所示。
模型评估(Tensorboard可视化)
cmd输入
tensorboard --logdir="F:\tensorflow_yolo\yolov3-tf2-master\logs
训练集、验证集的损失值曲线如下图所示。训练集、验证集的损失值曲线平稳地收敛。
图片预测
如下图所示。YOLOv3对小目标的检测不是很好,推断速度也不行。这里还是推荐YOLOv5。
python detect.py --classes ./data/me.names --num_classes 2 --weights ./checkpoints/yolov3_train_100.tf -
-image data/testimg.jpg --yolo_score_threshold 0.01
视频预测
output