@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.jpgpython 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 globdef voc_to_yolo(input_path, output_path, output_filename, image_folder, classes):# save classesclasses_file = open(os.path.join(output_path, 'classes.txt'), 'w')for c in classes:classes_file.write(c + '\n')classes_file.close()   # create txt fileoutput_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 检测器相关推荐

  1. 深度学习和目标检测系列教程 1-300:什么是对象检测和常见的8 种基础目标检测算法

    @Author:Runsen 由于毕业入了CV的坑,在内卷的条件下,我只好把别人卷走. 对象检测 对象检测是一种计算机视觉技术,用于定位图像或视频中的对象实例.对象检测算法通常利用机器学习或深度学习来 ...

  2. 深度学习和目标检测系列教程 2-300:小试牛刀,使用 ImageAI 进行对象检测

    @Author:Runsen 对象检测是一种属于更广泛的计算机视觉领域的技术.它处理识别和跟踪图像和视频中存在的对象.目标检测有多种应用,如人脸检测.车辆检测.行人计数.自动驾驶汽车.安全系统等.Im ...

  3. 深度学习和目标检测系列教程 5-300:早期的目标检测RCNN架构

    @Author:Runsen 最早期的目标检测基于RCNN的算法,下面介绍RCNN的架构 RCNN架构 R-CNN 的目标是获取图像,并正确识别图片中的主要对象(通过边界框)的位置. 输入:图像: 输 ...

  4. 深度学习和目标检测系列教程 3-300:了解常见的目标检测的开源数据集

    @Author:Runsen 计算机视觉中具有挑战性的主题之一,对象检测,可帮助组织借助数字图片作为输入来理解和识别实时对象.大量的论文基于常见的目标检测的开源数据集而来,因此需要了解常见的目标检测的 ...

  5. 深度学习和目标检测系列教程 22-300:关于人体姿态常见的估计方法

    @Author:Runsen 姿态估计是计算机视觉中的一项流行任务,比如真实的场景如何进行人体跌倒检测,如何对手语进行交流. 作为人工智能(AI)的一个领域,计算机视觉使机器能够以模仿人类视觉为目的来 ...

  6. 深度学习和目标检测系列教程 10-300:通过torch训练第一个Faster-RCNN模型

    @Author:Runsen 上次介绍了Faster-RCNN模型,那么今天就开始训练第一个Faster-RCNN模型. 本文将展示如何在水果图像数据集上使用Faster-RCNN模型. 代码的灵感来 ...

  7. 深度学习和目标检测系列教程 7-300:先进的目标检测Faster R-CNN架构

    @Author:Runsen Faster R-CNN 由于Fast R-CNN 过程中仍然存在一个瓶颈,即ROI Projection.众所周知,检测对象的第一步是在对象周围生成一组潜在的边界框.在 ...

  8. 深度学习和目标检测系列教程 15-300:在 Python 中使用 OpenCV 执行 YOLOv3 对象检测

    @Author:Runsen 上次讲了yolov3,这是使用yolov3的模型通过opencv的摄像头来执行YOLOv3 对象检测. 导入所需模块: import cv2 import numpy a ...

  9. 深度学习和目标检测系列教程 12-300:常见的opencv的APi和用法总结

    @Author:Runsen 由于CV需要熟练使用opencv,因此总结了opencv常见的APi和用法. OpenCV(opensourcecomputervision)于1999年正式推出,它来自 ...

最新文章

  1. 一个button导致的慘案
  2. react native TypeError network request failed
  3. 虚拟机做linux服务器,用 VirtualBox 的 linux 虚拟机做服务器
  4. C#方法中的反射方式和委托方式(小实例)
  5. MySQL非空约束(NOT NULL)
  6. Oracle 字符串函数
  7. jQuery的DOM操作之取值/赋值(1)
  8. SAP Gateway OData服务的语言决定逻辑 - language determination
  9. 关于无人职守创建office文档的问题
  10. desc 枚举类型id_想让代码更优雅?Mybatis类型处理器了解一下!
  11. UIScroll和UIPickView
  12. c语言中编译链接机制
  13. Css布局:左边固定,右边自适应
  14. Quartus Prime 18.0与ModelSim的安装
  15. 逼疯UE设计师,不可不知的提升产品用户体验的10个测试方法
  16. 光纤传感器实验模块_光纤传感器位移特性实验
  17. 荣耀开发者平台全面升级,加强分发场景服务与能力开放
  18. 银联云计算平台 金融科技创新典范
  19. 使用Java分离音频左右声道
  20. 视频转文字怎么弄?建议收藏这些方法

热门文章

  1. 超详细的CMD文件讲解
  2. OS / 线程哪些内容是私有的和共享的?
  3. linux socket API / socket
  4. 图像的灰度级数越多越好_数字图像处理:Reducing Gray Levels, Zooming and Shrinking
  5. sgrdb mysql_GreatDB数据库在HA架构的单调度集群模式下如何手动后台启停?
  6. Android 6.0 7.0 8.0 一个简单的app内更新版本-okgo app版本更新
  7. BZOJ 2118: 墨墨的等式(最短路dijkstra+堆)
  8. PHP如何安装和配置Zend Studio
  9. Windows7 64位 plsql developer连接oracle最终解决方法
  10. PHP实现同服务器多个二级域名共享 SESSION