前言

基于YOLO进行物体检测、对象识别,在搭建好开发环境后,先和大家进行实践应用中,体验YOLOv3物体/目标检测效果和魅力;同时逐步了解YOLOv3的不足和优化思路。

开发环境参数

系统:Windows       编程语言:Python 3.8

深度学习框架:TensorFlow 2.3        整合开发环境:Anaconda        开发代码IDE:PyCharm

主要使用TensorFlow2.3、opencv-python4.4.0、Pillow、matplotlib 等依赖库。

详情请参考我的另一篇博客:YOLO实践应用之搭建开发环境(Windows系统、Python 3.8、TensorFlow2.3版本)

YOLOv3的物体/目标检测效果:

1)有四只小猫被检测出来:

使用浅蓝色的框框,把小猫的所在位置框出来,并在框框上方注释标签(类别 置信度)。比如第一只小猫检测出的标签是cat ,置信度是0.95,即有95%的把握认为是cat 猫。

2)一只小狗和一只小猫同时被检测出来:

小猫被检测出是cat,1.00;有100%的把握认为是cat 猫;

小狗被检测出是dog,0.97;有97%的把握认为是cat 猫;

3)在复杂的十字路口,有许多行人和车辆被检测出来了:

大家可以看到大部分的行人、小汽车和公交车是被检测出来了,存在小部分没有被检测出来;如果是做特定场景的目标检测,建议大家后续采购特定场景的数据,重新训练网络,生成稳定且高精度的模型,保存权重文件,便于后续使用。

目录

前言

开发环境参数

体验YOLOv3物体/目标检测

1)下载代码,打开工程

2)下载权重文件

3)权重文件应用到工程

4)进行目标检测

调用模型的核心代码


体验YOLOv3物体/目标检测

1)下载代码,打开工程

先到githug下载代码,然后解压工程,然后使用PyCharm工具打开工程;

githug代码下载地址:https://github.com/guo-pu/yolov3-tf2

说明:此仓库代码源于zzh8829/yolov3-tf2 进行修改的,zzh8829/yolov3-tf2代码仓库地址 :https://github.com/zzh8829/yolov3-tf2

使用PyCharm工具打开工程:

打开后的页面是这样的:

【选择开发环境】

文件(file)——>设置(setting)——>项目(Project)——>Project Interpreters   选择搭建的开发环境;

然后先点击Apply,等待加载完成,再点击OK;

2)下载权重文件

方式1:使用wget 来下载

前提:需要支持wget命令;

yolov3.weights、yolov3-tiny.weights都是预先训练好的Darknet网络权重;

yolov3.weights   是默认的权重,支持识别目标的类别更多更精准;

yolov3-tiny.weights  是应用在轻量级设备的权重,对设备的性能要求没这么高,相对yolov3.weights响应速度更快;

进入windows管理员命令窗口:

【下载yolov3.weights权重文件】

进入存放数据的目录,比如e盘的data目录,然后执行如下命令进行下载权重值:

wget https://pjreddie.com/media/files/yolov3.weights  -O  .\yolov3.weights

然后就会开始下载了;


【下载yolov3-tiny.weights权重文件】

wget https://pjreddie.com/media/files/yolov3-tiny.weights  -O .\yolov3-tiny.weights

下载好后,来到存放的目录检测是否下载成功和完整;

方式2:在我网盘提取

链接: https://pan.baidu.com/s/1TK4EEWsCHPyunNkJ98Mhjw

提取码: urad

然后把数据复制到下载工程包中,yolov3-tf2-master\data

3)权重文件应用到工程

执行如下命令,把训练好的权重进行转换,并应用到工程中。

在Pycharm的命令终端进入YOLO3-GPU-TensorFlow2开发环境:

conda activate YOLO3-GPU-TensorFlow2

【yolov3.weights】

python convert.py --weights ./data/yolov3.weights --output ./checkpoints/yolov3.tf

执行命令成功后,能看到在checkpoints目录下有三个新增文件

【yolov3-tiny.weights】(可选)

python convert.py --weights ./data/yolov3-tiny.weights --output ./checkpoints/yolov3-tiny.tf --tiny

4)进行目标检测

检测图片中的目标:

python detect.py --image ./data/cat.jpg

有四只小猫被检测出来:使用浅蓝色的框框,把小猫的所在位置框出来,并在框框上方注释标签(类别 置信度)。比如第一只小猫检测出的标签是cat ,置信度是0.95,即有95%的把握认为是cat 猫。

我们可以指定目标检测后生成的图片:

python detect.py --image ./data/cat.jpg

一只小狗和一只小猫同时被检测出来:小猫被检测出是cat,1.00;有100%的把握认为是cat 猫;小狗被检测出是dog,0.97;有97%的把握认为是cat 猫;

我们还可以尝试使用摄像头实时目标检测,或对视频文件进行目标检测,详细参看如下:

目标检测执行命令汇总:

# yolov3 检测图片的对象
python detect.py --image ./data/cat.jpg# yolov3-tiny
python detect.py --weights ./checkpoints/yolov3-tiny.tf --tiny --image ./data/street.jpg# webcam  摄像头实时检测对象
python detect_video.py --video 0# video file   检测视频文件的对象
python detect_video.py --video path_to_file.mp4 --weights ./checkpoints/yolov3-tiny.tf --tiny# video file with output
python detect_video.py --video path_to_file.mp4 --output ./output.avi

调用模型的核心代码

detect.py 代码:  # yolov3 检测图片的对象

import time
from absl import app, flags, logging
from absl.flags import FLAGS
import cv2
import numpy as np
import tensorflow as tf
from yolov3_tf2.models import (YoloV3, YoloV3Tiny
)
from yolov3_tf2.dataset import transform_images, load_tfrecord_dataset
from yolov3_tf2.utils import draw_outputsflags.DEFINE_string('classes', './data/coco.names', 'path to classes file')
flags.DEFINE_string('weights', './checkpoints/yolov3.tf','path to weights file')
flags.DEFINE_boolean('tiny', False, 'yolov3 or yolov3-tiny')
flags.DEFINE_integer('size', 416, 'resize images to')
flags.DEFINE_string('image', './data/girl.png', 'path to input image')
flags.DEFINE_string('tfrecord', None, 'tfrecord instead of image')
flags.DEFINE_string('output', './output.jpg', 'path to output image')
flags.DEFINE_integer('num_classes', 80, 'number of classes in the model')def main(_argv):physical_devices = tf.config.experimental.list_physical_devices('GPU')for physical_device in physical_devices:tf.config.experimental.set_memory_growth(physical_device, True)if FLAGS.tiny:yolo = YoloV3Tiny(classes=FLAGS.num_classes)else:yolo = YoloV3(classes=FLAGS.num_classes)yolo.load_weights(FLAGS.weights).expect_partial()logging.info('weights loaded')class_names = [c.strip() for c in open(FLAGS.classes).readlines()]logging.info('classes loaded')if FLAGS.tfrecord:dataset = load_tfrecord_dataset(FLAGS.tfrecord, FLAGS.classes, FLAGS.size)dataset = dataset.shuffle(512)img_raw, _label = next(iter(dataset.take(1)))else:img_raw = tf.image.decode_image(open(FLAGS.image, 'rb').read(), channels=3)img = tf.expand_dims(img_raw, 0)img = transform_images(img, FLAGS.size)t1 = time.time()boxes, scores, classes, nums = yolo(img)t2 = time.time()logging.info('time: {}'.format(t2 - t1))logging.info('detections:')for i in range(nums[0]):logging.info('\t{}, {}, {}'.format(class_names[int(classes[0][i])],np.array(scores[0][i]),np.array(boxes[0][i])))img = cv2.cvtColor(img_raw.numpy(), cv2.COLOR_RGB2BGR)img = draw_outputs(img, (boxes, scores, classes, nums), class_names)cv2.imwrite(FLAGS.output, img)logging.info('output saved to: {}'.format(FLAGS.output))if __name__ == '__main__':try:app.run(main)except SystemExit:pass

希望对你有帮助。( •̀ ω •́ )✧

YOLOv3物体/目标检测之实战篇(Windows系统、Python3、TensorFlow2版本)相关推荐

  1. caffe框架下目标检测——faster-rcnn实战篇操作

    原有模型 1.下载fasrer-rcnn源代码并安装 git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git 1) ...

  2. 目标检测—基于Yolov3的目标检测项目实战(学习笔记)

    最近在学习tensorflow,尝试运行学习了github上基于yolov3的一个目标检测项目,此算法可对视频.图片.摄像头实时进行检测,本文主要讲述了,在windows电脑上,复现这一目标检测项目的 ...

  3. caffe框架下目标检测——faster-rcnn实战篇问题集锦

    1.问题 解决方案:没编译好,需要在lib下编译make 需要在caffe-fast-rcnn下编译make或者make all -j16  ,还需要make pycaffe 2.问题 解决方案:/p ...

  4. 【教程】opencv-python+yolov3实现目标检测

    目录 [教程]opencv-python+yolov3实现目标检测 目标检测概况 目标检测是? 目标检测算法? yolov3模型简介 性能介绍 架构介绍 opencv-python实现 why ope ...

  5. OpenCV+yolov3实现目标检测(C++,Python)

    OpenCV+yolov3实现目标检测(C++,Python) 目标检测算法主要分为两类:一类是基于Region Proposal(候选区域)的算法,如R-CNN系算法(R-CNN,Fast R-CN ...

  6. 从YOLOv1到YOLOv3,目标检测的进化之路

    本文来自 CSDN 网站,作者 EasonApp. 作者专栏: http://dwz.cn/7ZGrif YOLOv1 这是继 RCNN,fast-RCNN 和 faster-RCNN之后,Ross ...

  7. yolov3为什么对大目标检测不好_基于改进Yolov3的目标检测的研究

    晏世武 罗金良 严庆 摘要:目标检测在视频监控.无人驾驶系统.机械自动化等领域起着重要作用.在如今大数据的背景下,为进一步提高Yolov3在不同数据集下的性能,本文以KITTI数据集为基础,利用重新調 ...

  8. 智慧交通day02-车流量检测实现12:基于yoloV3的目标检测

    在本章节代码编写中,发现之前的代码所处的环境是python3,因此导致了cv2.dnn.readNetFromDarknet()在代码运行中导致了i[0]的获值失败,故总结如下: cv2.dnn.re ...

  9. 【自动驾驶】鸽了很久的小物体目标检测代码【小物体目标检测】

    鸽了很久的小物体目标检测代码 https://github.com/LT1st/SmallObstacleDetection/tree/main/code#readme Pytorch: Small ...

最新文章

  1. MySQL面试题 | 附答案解析(十四)
  2. Android开源项目SlidingMenu本学习笔记(两)
  3. 科大讯飞cordova语音插件填坑及api介绍
  4. CentOS 5.10安装Oracle 11G R2
  5. Index of Unix
  6. linux高级的脚本,【2018.07.23学习笔记】【linux高级知识 Shell脚本编程练习】
  7. java jsch session 多久会断开_What?纯Java居然能实现Xshell!
  8. idea2020不显示光标所在位置的方法名
  9. 云计算计算机二级,2021计算机二级office用的是哪个版本
  10. matlab矩阵除法
  11. ViewStub基本用法,include merge
  12. Elasticsearch5.3 JAVA Demo 聚合查询
  13. 安全模型和业务安全体系
  14. DP转HDMI/VGA方案设计电路图参考|AG6320参考电路原理图PCB电路图
  15. 高德地图WEB端,在所画的圆(Circle)内显示在圆(Marker)内的点
  16. NER的过去、现在和未来综述-现在
  17. Word 表格顶页 处理办法
  18. 可能是东半球最全的RxJava使用场景小结
  19. 第二期预告|中国工程院院刊:信息与电子工程领域青年学术前沿论坛
  20. EJB3简单Demo

热门文章

  1. ZEMAX | 室内照明案例分享2 —— 室内场景模拟
  2. chrome真机调试Android
  3. DELMIA软件:机器人仿真运行延时功能介绍与使用方法
  4. 资产设备智能化数字化管理系统在水务环保行业的应用
  5. SSD_学习笔记记录
  6. 【大数据】城市公交网络分析与可视化(六):对比分析不同城市公交的“非直线系数”
  7. 图片懒加载的原理--三种方法实现
  8. 800 篇顶会论文纵览推荐系统的前沿进展
  9. Visual Studio 2008 RTM 已经编译完毕,内部人员已可使用
  10. 在windows10基础上安装ubuntu16.04——解决分区时找不到用于efi启动项的问题