转自 https://blog.csdn.net/u011961856/article/details/76582669
参考自github:https://github.com/thtrieu/darkflow

darkflow实现了将darknet翻译成tensorflow,可以用tensorflow加载darknet训练好的模型,并使用tensorflow重新训练,输出tensorflow graph模型,用于移动设备.

darkflow需要的依赖库:

Python3, tensorflow 1.0, numpy, opencv 3.

下载与安装darkfolw:
首先需要安转cython for python3,安装命令为:

sudo pip3 install Cython --install-option="--no-cython-compile"

下载darkflow:

git clone https://github.com/thtrieu/darkflow

进入darkflow目录,并安装:

cd darkflow

python3 setup.py build_ext --inplace

pip3 install .
安装成功:

训练与测试
labels.txt文件位于darkflow/目录下.文件中为需要分类的类别明,例如如果你只想要检测三类,分别为tvmonitor, person, pottedplant,那么编辑labels.txt为:

tvmonitor
person
pottedplant
也可以通过参数--labels例如--labels myOtherLabelsFile.txt加载其他类别文件.如果不设置,darkflow默认加载label.txt文件.需要注意的是,如果使用设计好的COCO,VOC数据集的模型配置文件.cfg,则也会忽略label.txt,而是去加载对应的COCO,VOC标记文件.

网络设计
与darknet相同,模型文件为.cfg文件,位于/home/qinghua/program/darkflow/cfg/下面,用户也可以设计网络结构,例如:

...

[convolutional]
batch_normalize = 1
size = 3
stride = 1
pad = 1
activation = leaky

[maxpool]

[connected]
output = 4096
activation = linear

...
可以通过参数选项--load,加载已经训练好的模型,用于模型初始化:

# 1. Load yolo-tiny.weights
python3 ./flow --model cfg/yolo-tiny.cfg --load bin/yolo-tiny.weights
模型下载链接:https://drive.google.com/drive/folders/0B1tW_VtY7onidEwyQ2FtQVplWEU

yolo-tiny.cfg为模型配置文件.

模型预测
如不需要用已有模型初始化,即随机初始化模型,则代码为:

# 2. To completely initialize a model, leave the --load option
python3 ./flow --model cfg/yolo-new.cfg
同时,darkflow还支持用训练好的模型,初始化另一个模型中的相同的网络层:

# 3. It is useful to reuse the first identical layers of tiny for `yolo-new`
python3 ./flow --model cfg/yolo-new.cfg --load bin/yolo-tiny.weights
# this will print out which layers are reused, which are initialized
输入图像位于目录/darkflow/sample_img/下,预测结构存入目录/darkflow/sample_img/out/下.

测试,如要将输出保存为json格式,则加上--json选项:

python3 ./flow --imgdir sample_img/ --model cfg/tiny-yolo-4c.cfg --load bin/tiny-yolo-4c.weights --gpu 0 --json
运行结果如下图:

模型训练:
模型训练参数选项为--train,训练代码为:

# Initialize yolo-new from yolo-tiny, then train the net on 100% GPU:
python3 ./flow --model cfg/yolo-new.cfg --load bin/yolo-tiny.weights --train --gpu 0
可以通过参数--trainer设置梯度更新函数:

# Completely initialize yolo-new and train it with ADAM optimizer
python3 ./flow --model cfg/yolo-new.cfg --train --trainer adam
训练的时候,会周期性地将模型保存到darkflow/ckpt/目录下,可以通过设置--load -1,加载最近的checkpoint,

# Resume the most recent checkpoint for training
python3 ./flow --train --model cfg/yolo-new.cfg --load -1
使用step=1500的checkpoint预测:

# Test with checkpoint at step 1500
python3 ./flow --model cfg/yolo-new.cfg --load 1500
使用已经训练的模型训练:

# Fine tuning yolo-tiny from the original one
python3 ./flow --train --model cfg/yolo-tiny.cfg --load bin/yolo-tiny.weights

保存graph
保存graph到protobuf文件(.pb文件):

## Saving the lastest checkpoint to protobuf file
python3 ./flow --model cfg/yolo-new.cfg --load -1 --savepb

## Saving graph and weights to protobuf file
python3 ./flow --model cfg/yolo.cfg --load bin/yolo.weights --savepb
android demo:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/android/src/org/tensorflow/demo/TensorFlowYoloDetector.java

darkflow也支持从.pb文件加载模型,

## Forward images in sample_img for predictions based on protobuf file
python3 ./flow --pbLoad built_graph/yolo.pb --metaLoad built_graph/yolo.meta --imgdir sample_img/
---------------------
作者:imperfect00
来源:CSDN
原文:https://blog.csdn.net/u011961856/article/details/76582669
版权声明:本文为博主原创文章,转载请附上博文链接!

darkflow测试和训练yolo的更多相关文章

  1. 训练yolo之前,anchor聚类问题

    前期做数据可视化,发现标签数据存在一些孤立点(噪声点),影响kmeans聚类. 处理方法如下: 使用kmeans迭代10次得到聚类中心 计算所有数据到其聚类中心的欧式距离均值和方差 通过拟合正态分布, ...

  2. LUA中将未分类数据分为测试集和训练集

    require 'torch' require 'image' local setting = {parent_root = '/home/pxu/image'} function list_chil ...

  3. Matlab划分测试集和训练集

    % x是原数据集,分出训练样本和测试样本 [ndata, D] = size(X); %ndata样本数,D维数 R = randperm(ndata); %1到n这些数随机打乱得到的一个随机数字序列 ...

  4. ubuntu tensorflow cpu faster-rcnn 测试自己训练的模型

    (flappbird) luo@luo-All-Series:~/MyFile/tf-faster-rcnn_box$ (flappbird) luo@luo-All-Series:~/MyFile/ ...

  5. 函数实现将 DataFrame 数据直接划分为测试集训练集

     虽然 Scikit-Learn 有可以划分数据集的函数 train_test_split ,但在有些特殊情况我们只希望它将 DataFrame 数据直接划分为 train, test 而不是像 tr ...

  6. 小白也能弄得懂的目标检测YOLO系列之YOLOv1网络训练

    上期给大家介绍了YOLO模型的检测系统和具体实现,YOLO是如何进行目标定位和目标分类的,这期主要给大家介绍YOLO是如何进行网络训练的,话不多说,马上开始! 前言: 输入图片首先被分成S*S个网格c ...

  7. Moses训练与测试

    参考:http://cache.baiducontent.com/c?m=9d78d513d9991cf00ffa940f47408f711925df252bd6a0502294ca5f92140d1 ...

  8. 训练集(train set) 验证集(validation set) 测试集(test set)

    转自:http://www.cnblogs.com/xfzhang/archive/2013/05/24/3096412.html 在有监督(supervise)的机器学习中,数据集常被分成2~3个, ...

  9. [DeeplearningAI笔记]ML strategy_2_2训练和开发/测试数据集不匹配问题

    机器学习策略-不匹配的训练和开发/测试数据 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.4在不同分布上训练和测试数据 在深度学习时代,越来越多的团队使用和开发集/测试集不同分布的数据来 ...

随机推荐

  1. RabbitMQ 的 docker 镜像使用

    RabbitMQ 的 docker 镜像使用 1.下载镜像(management版本的才带有web管理界面) docker pull rabbitmq:3.7.18-management 2.创建容器 ...

  2. Likelihood function

    似然函数 统计学中,似然函数是一种关于统计模型参数的函数,表示模型参数中的似然性. 给定输出x时,关于参数θ的似然函数L(θ|x)(在数值上)等于给定参数θ后变量X的概率:L(θ|x)=P(X=x|θ ...

  3. 用数据让我们的OKR变得“冷酷”却更有价值

    在外企工作过的朋友大多能感受到数据在工作中的重要性,你要设置一个目标要有明确的数据来衡量,你要汇报工作进展要有清楚的数据来显示进度,你要展示工作成果更是需要有代表性的数据来呈现结果,数据是真真实实的结 ...

  4. 鸿蒙OS还有机会吗?

    鸿蒙最初的定位是手机操作系统,那在市场已饱和.生态已成熟,Android地位已牢不可破的当下,能成功是小概率事件,就像PC时代无法撼动Windows地位一样. 好在鸿蒙调整定位定义为面向未来的IOT操 ...

  5. memset使用技巧

    memset可以对高位数组进行初始化,非常方便.需要注意的是memset的头文件是string.h和memory.h . 下面来谈memset的4个使用技巧: (注:一下dp高维数组都是全局变量,局部 ...

  6. JavaScript代码笔记重点:

    JavaScript的基本特点:JavaScript是基本对象和事件驱动,具有实时性,动态性,跨平台性和安全性等. JavaScript是对大小写敏感的. <!DOCTYPE html> ...

  7. oracle--CKPT

    一,CKPT功能 ) 调度数据写: ) 会将已经完成的检查点写到数据文件头: ) 把已经完成的检查点写到控制文件: . other:其他进程: . 注意:磁盘.内存支持并行I/O,磁带不支持: . 服 ...

  8. python 项目实战之装饰器

    import logging def use_logging(func): def writelog(*args, **kwargs): logging.warning("%s is run ...

  9. 记一次 HttpClient 死锁问题

    原文:http://blog.kail.xyz/post/2019-04-21/tools/httpclient-lock.html 最近遇到一个使用 Apache HttpClient 过程中的问题 ...

  10. Django实现自动发布(3发布-安装)

    相对于服务的升级.回退,新部署一个服务要复杂一些,要满足以下要求: 已经运行了服务实例的主机不能重复部署 进程启动需要的配置文件要先同步到主机上 之前的升级.回退都是指进程的操作,不涉及配置文件的变更 ...