深度学习和目标检测系列教程 14-300:训练第一个 YOLOv3 检测器
Posted 刘润森!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习和目标检测系列教程 14-300:训练第一个 YOLOv3 检测器相关的知识,希望对你有一定的参考价值。
@Author:Runsen
本次博客参考GIthub项目:
- https://github.com/qqwweee/keras-yolo3.git
在开始之前,请在以下位置克隆!git clone https://github.com/qqwweee/keras-yolo3.git
到您的本地机器。确保设置虚拟环境并安装要求
- Keras 2.1.5
- Tensorflow 1.6.0
本次教程分为以下步骤:
- 从 YOLO 网站下载 YOLOv3 权重。
- 将 Darknet YOLO 模型转换为 Keras 模型。
- 运行YOLO检测。
代码环境:colab
在https://pjreddie.com/darknet/yolo//
下载YOLO 模型的权重。通过运行以下命令下载 yolo3 模型的权重:
%tensorflow_version 1.x
!pip3 uninstall keras
!pip3 install keras==2.1.5
cd keras-yolo3
!wget https://pjreddie.com/media/files/yolov3.weights
使用convert.py脚本将模型转换为 Keras 兼容文件。
!python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5
在 model_data 目录中有一个名为 yolo.h5 的文件。该模型现在可用于通过 yolo_video.py 文件进行测试。
wget https://raw.githubusercontent.com/tensorflow/models/master/research/object_detection/test_images/image1.jpg
python yolo_video.py --model model_data/yolo.h5 --classes model_data/coco_classes.txt --image
如果未指定 --image 标志,则需要指定视频的路径以及将输出保存到的路径。
keras-yolo3 训练自己的自定义 YOLO 模型。需要按照以下步骤操作(来源官方 README):
下面尝试使用一个数据集进行训练;
- https://www.kaggle.com/tannergi/microcontroller-detection
我们需要将csv 变成 yolo的txt
可以通过执行voc_annotation.py脚本将 csv 文件转换为 txt 。
文件 model_data/yolo_weights.h5 用于加载预训练权重。
对于微控制器数据集,训练命令如下所示:
import xml.etree.ElementTree as ET
import argparse
import os
import glob
def voc_to_yolo(input_path, output_path, output_filename, image_folder, classes):
# save classes
classes_file = open(os.path.join(output_path, 'classes.txt'), 'w')
for c in classes:
classes_file.write(c + '\\n')
classes_file.close()
# create txt file
output_file = open(os.path.join(output_path, output_filename), 'w')
for xml_file in glob.glob(input_path + '/*.xml'):
tree = ET.parse(xml_file)
root = tree.getroot()
image_path = os.path.join(image_folder,root.find("filename").text).replace("\\\\", "/")
output_file.write(f'{image_path} ')
for member in root.findall('object'):
output_file.write(f'{int(member[4][0].text)},{int(member[4][1].text)},{int(member[4][2].text)},{int(member[4][3].text)},{classes.index(member[0].text)} ')
output_file.write('\\n')
output_file.close()
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='VOC to YOLO')
parser.add_argument('-i', '--input', type=str, required=True, help='Path to input folder')
parser.add_argument('-f', '--folder', type=str, default='', help='Image folder (if filenames are relativ)')
parser.add_argument('-c', '--classes', nargs='+', required=True, help='Classes')
parser.add_argument('-o', '--output', type=str, default='./', help='Output path')
parser.add_argument('-of', '--output_filename', type=str, default='train.txt', help='Output Filename')
args = parser.parse_args()
voc_to_yolo(args.input, args.output, args.output_filename, args.folder, args.classes)
python voc_annotation.py -i train/ -f train/ -c Arduino_Nano Heltec_ESP32_Lora ESP8266 Raspberry_Pi_3 -o ./
修改train.py,开始训练。
在该train.py文件中,必须更改annotation_path和classes_path以匹配步骤 1 中创建的文件的路径。可能还需要更改第 57 行和第 76 行中的 batch_size,具体取决于显卡具有多少VRAM。
更改 train.py 文件后,您可以通过调用开始训练:python train.py
train.py一共训练50个epoch
将开始训练过程并将所有文件保存在指定的日志目录中。
测试
python yolo_video.py --model logs/000/trained_weights_final.h5 --classes classes.txt --image
使用yolo_video.py记得修改类路径或锚路径。
以上是关于深度学习和目标检测系列教程 14-300:训练第一个 YOLOv3 检测器的主要内容,如果未能解决你的问题,请参考以下文章
深度学习和目标检测系列教程 10-300:通过torch训练第一个Faster-RCNN模型
深度学习和目标检测系列教程 11-300:小麦数据集训练Faster-RCNN模型
深度学习和目标检测系列教程 17-300: 3 个类别面罩检测类别数据集训练yolov5s模型
深度学习和目标检测系列教程 17-300: 3 个类别面罩检测类别数据集训练yolov5s模型