来自华盛顿大学的 Joseph Redmon 和 Ali Farhadi 提出的YOLOv3 通过在 YOLO 中加入设计细节的变化,这个新模型在取得相当准确率的情况下实现了检测速度的很大提升,一般它比 R-CNN 快 1000 倍、比 Fast R-CNN 快 100 倍。

这里附上 YOLOv3 的论文地址:

本文的项目作者是 wizyoung,原 GitHub 项目地址为:

1. 介绍

本文将介绍 YOLO3 的完整 TensorFlow 实现。可在自己的数据集上进行完整的训练和验证操作,pipeline 完整。其特点包括:

高效的 tf.data 管道

权重转换

GPU 提速,无限制

完整的训练管道

使用 kMeans 算法来选择 anchor boxes

多 GPU 同步训练

2. 需求

tensorflow >= 1.8.0(不排除低版本也能工作)

opencv-python

3. 权重转换

预训练的 darknet 权重文件可从下方链接下载:

https://pjreddie.com/media/files/yolov3.weights

把下载好后的文件放在 ./data/darknet_weights/ 目录下,运行下面的命令:

然后,转换后的 TensorFlow checkpoint 文件将被保存在 ./data/darknet_weights/ 目录下。

4. 运行 demos

在 ./data/demo_data/ 目录里有一些图像和视频的 demos 可以运行。

单个图像测试 demo:

视频测试 demo:

结果展示:

5. 运行速度

图片尺寸为 416×416,论文实现与我的模型运行速度比较如下:

为什么会这么快呢?我们看一下论文中 ImageNet 分类情况:

6. 模型结构

为了更好地理解模型体系结构,可以参考下图:

7. 训练

首先是数据准备,分为三步。

1)annotation file

在 ./data/my_data/ 目录下生成 train.txt/val.txt/test.txt 文件。txt 文件中一行表示一张图片,形式为:图片绝对路径 + box_1 + box_2 + … + box_n。Box 的形式为:label_index + x_min + y_min + x_max + y_max,原始坐标为图片左上角。

例如:

xxx/xxx/1.jpg 0 453 369 473 391 1 588 245 608 268

xxx/xxx/2.jpg 1 466 403 485 422 2 793 300 809 320

注意:每个 txt 文件最后一行为空白行。

2)class_names file

在 ./data/my_data/ 目录下生成 data.names 文件,每一行代表一个类别名称。例如:

bird

person

bike

3)prior anchor file

使用 kMeans 算法来选择 anchor boxes:

然后,你将得到 9 个 anchors 和评价 IOU,把 anchors 保存在 txt 文件中。

准备完数据之后就可以开始训练了。

使用 train.py 文件,函数参数如下:

8. 评价

使用 eval.py 来评估验证集和测试集,函数参数如下:

函数返回 loss、召回率 recall、精准率 precision,如下所示:

recall: 0.927, precision: 0.945

total_loss: 0.210, loss_xy: 0.010, loss_wh: 0.025, loss_conf: 0.125, loss_class: 0.050

9. 其它技巧

训练的时候可以尝试使用下面这些技巧:

Data augmentation:使用 ./utils/data_utils.py 中的 data_augmentation 方法来增加数据。

像 Gluon CV 一样混合和 label 平滑。

正则化技巧,例如 L2 正则化。

多尺度训练:你可以像原稿中的作者那样定期改变输入图像的尺度(即不同的输入分辨率)。

完整代码请见 GitHub:

参考文献:

https://github.com/YunYang1994/tensorflow-yolov3

https://github.com/qqwweee/keras-yolo3

https://github.com/eriklindernoren/PyTorch-YOLOv3

https://github.com/pjreddie/darknet

yolov3安卓实现_YOLOv3 的 TensorFlow 实现,GitHub 完整源码解析相关推荐

  1. tensorflow 0.10 word2vec 源码解析

    关于word2vec 的解释见word2vec的数学原理. 本代码主要是实现了skip-gram模型,通过神经网络,对概率进行建模(概率模型中的最大似然,其实就是神经网络中的最小损失) # Copyr ...

  2. [源码解析] TensorFlow 分布式之 MirroredStrategy 分发计算

    [源码解析] TensorFlow 分布式之 MirroredStrategy 分发计算 文章目录 [源码解析] TensorFlow 分布式之 MirroredStrategy 分发计算 0x1. ...

  3. [源码解析] TensorFlow 分布式之 ClusterCoordinator

    [源码解析] TensorFlow 分布式之 ClusterCoordinator 文章目录 [源码解析] TensorFlow 分布式之 ClusterCoordinator 1. 思路 1.1 使 ...

  4. YOLOv3源码解析2-数据预处理Dataset()

    YOLOv3源码解析1-代码整体结构 YOLOv3源码解析2-数据预处理Dataset() YOLOv3源码解析3-网络结构YOLOV3() YOLOv3源码解析4-计算损失compute_loss( ...

  5. yolov3之pytorch源码解析_springmvc源码架构解析之view

    说在前面 前期回顾 sharding-jdbc源码解析 更新完毕 spring源码解析 更新完毕 spring-mvc源码解析 更新完毕 spring-tx源码解析 更新完毕 spring-boot源 ...

  6. tensorflow 启动多个session_Tensorflow源码解析7 -- TensorFlow分布式运行时

    1 概述 TensorFlow架构设计精巧,在后端运行时这一层,除了提供本地运行时外,还提供了分布式运行时.通过分布式训练,在多台机器上并行执行,大大提高了训练速度.前端用户通过session.run ...

  7. oracle job 每月前十天运行_Tensorflow源码解析7 -- TensorFlow分布式运行时

    1 概述 TensorFlow架构设计精巧,在后端运行时这一层,除了提供本地运行时外,还提供了分布式运行时.通过分布式训练,在多台机器上并行执行,大大提高了训练速度.前端用户通过session.run ...

  8. 上传本地代码到github从github下载源码

    最近在玩github,下面简单介绍下githup的使用 将本地代码同步到github. 使用Git GUI同步  1,先下载git,然后安装.右键如图所示. 2,在github里新建一个 reposi ...

  9. Tensorflow 2.x(keras)源码详解之第四章:DatasetTFRecord

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

最新文章

  1. LeetCode-双指针-88. 合并两个有序数组
  2. 克莱姆森大学计算机排名,克莱姆森大学计算机科学computer science专业排名第401~500名(2020THE泰晤士高等教育世界大学排名)...
  3. [转载]非常量引用的初始值必须为左值的问题
  4. winform分页案例简单实现方式~
  5. Android4开发入门经典 之 第七部分:数据存储
  6. 请给出一个时间为O(nlgk)、用来将k个已排序链表的算法。此处n为所有输入链表中元素的总数。...
  7. 【hortonworks/registries】SchemaVersionLifecycleManager.createSchemaVersion null
  8. 聊聊FPGA学习与开发板的那些事儿
  9. python通过两点之间的经纬度测算距离
  10. 两行数据进行对比-python
  11. CodeForces 1A Theatre Square(水题)
  12. avg制作工具 开源_23种开源视听制作工具
  13. 雨中竞速,本周F1DeltaTime大奖赛带你清凉一下
  14. 三星手机html默认,关于三星手机恢复出厂设置的方法
  15. 任务管理器Recent
  16. Windows优化大师7.96版下载
  17. error: (-2:Unspecified error) The function is not implemented.
  18. 金蝶服务器销售出库单无法审核,金蝶云IM-201805007-销售出库单审核失败
  19. ADS纯视觉感知产品设计的痛点观察
  20. 双目相机标定流程(使用opencv采集图像、使用matlab标定相机参数)

热门文章

  1. Neo4j:Cypher – Neo.ClientError.Statement.TypeError:不知道如何添加Double和String
  2. 是否可以在最终课程中使用抽象方法?
  3. 如何:使用Json插入数据库并从中读取
  4. 带有AWS Lambda和Java的无服务器FaaS
  5. eclipse 重构_Eclipse对类固醇的重构
  6. Java Mission Control 5.2终于来了! 欢迎7u40!
  7. JUnit的内置Hamcrest Core Matcher支持
  8. 动态ADF火车:以编程方式添加火车停靠站
  9. OSGi简介–模块化Java
  10. Google Appengine登台服务器操作方法