TVM上部署YOLO-DarkNet及单图性能对比

本文根据TVM官方文档Compile YOLO-V2 and YOLO-V3 in DarkNet Models提供的例程实现了在TVM上部署YOLO-DarkNet,并对使用TVM进行优化的效果进行了性能测试及对比。本文以YOLO-V3为例。

操作系统:Ubuntu 18.04

Backend:虚拟机 CPU

第一部分 不使用TVM运行YOLO-DarkNet

YOLO-DarkNet安装

从GitHub上将DarkNet clone下来

git clone https://github.com/pjreddie/darknet.git
cd darknet
make

make完毕后,运行

./darknet

如出现以下提示,则安装成功:
TIM截图20190706162940
为了测试YOLO,我们需要下载官方训练好的权重文件yolov3.weights,下载地址为https://pjreddie.com/media/files/yolov3.weights
官网的下载速度较慢,可以提前至可信的国内平台下载。weights文件放在darknet目录下。

运行YOLO进行图像检测

运行以下命令:

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

可看到以下效果:
TIM截图20190706163835
检测结果保存在predictions.jpg中:
predictions
由于我们是在CPU上运行YOLO,且虚拟机CPU性能并不是很强,本次检测耗时32.126040s。
接下来我们在TVM上实现相同的效果并测试时间。

第二部分 在TVM上部署YOLO-DarkNet

这一部分的示例代码来自官方文档Compile YOLO-V2 and YOLO-V3 in DarkNet Models,为了对性能进行测试,我向其中加入了计时代码。

运行测试程序之前,需要先对环境进行配置,安装CFFI和CV2:

pip install cffi
pip install opencv-python

环境配置完成后即可运行检测程序。

TVM的官方示例代码中使用download_testdata函数从网络下载所需文件并返回目录,此处因为weights文件官网下载速度过慢,所以建议提前下载并放置在用户目录下的/.tvm_test_data/darknet/目录中。为了防止偶现的由于网络问题导致download_testdata函数执行出错而中断程序,当所有所需文件下载完成后,可直接填写文件的路径变量,提高运行效率。

为了防止下载、加载文件等操作影响对程序运行时间计算的干扰,我们将程序分为三部分计时。

# 导入 numpy and matplotlib
import numpy as np
import matplotlib.pyplot as plt
import sys

# 导入 tvm, relay
import tvm
from tvm import relay
from ctypes import *
from tvm.contrib.download import download_testdata
from tvm.relay.testing.darknet import __darknetffi__
import tvm.relay.testing.yolo_detection
import tvm.relay.testing.darknet

import datetime

# 设置 Model name
MODEL_NAME = 'yolov3'

######################################################################
# 下载所需文件
# -----------------------
# 这部分程序下载cfg及weights文件。
CFG_NAME = MODEL_NAME + '.cfg'
WEIGHTS_NAME = MODEL_NAME + '.weights'
REPO_URL = 'https://github.com/dmlc/web-data/blob/master/darknet/'
CFG_URL = REPO_URL + 'cfg/' + CFG_NAME + '?raw=true'
WEIGHTS_URL = 'https://pjreddie.com/media/files/' + WEIGHTS_NAME

cfg_path = download_testdata(CFG_URL, CFG_NAME, module="darknet")
# 以下为直接填写路径值示例,后同。
# cfg_path = "/home/ztj/.tvm_test_data/darknet/yolov3.cfg"

weights_path = download_testdata(WEIGHTS_URL, WEIGHTS_NAME, module="darknet")
# weights_path = "/home/ztj/.tvm_test_data/darknet/yolov3.weights"

# 下载并加载DarkNet Library
if sys.platform in ['linux', 'linux2']:
    DARKNET_LIB = 'libdarknet2.0.so'
    DARKNET_URL = REPO_URL + 'lib/' + DARKNET_LIB 
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值