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

前言

    基于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_outputs

flags.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

 

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

 

 

 

一颗小树x CSDN认证博客专家 华为云首席贡献官 华为云-云享专家 研发工程师
从事自动驾驶工作,华为云-云享专家,华为云-云创 首席贡献官,CSDN博客专家,华为认证AI工程师,华为云产品”四星级“体验官;GitChat认证作者。
已标记关键词 清除标记
<p> <span style="font-size:18px;color:#E53333;"><strong><span style="color:#000000;">课程演示环境:Ubuntu</span><br /> <br /> <span style="color:#000000;">需要学习Windows系统YOLOv4的同学请前往《WindowsYOLOv4目标检测实战:训练自己的数据集》,课程链接https://edu.csdn.net/course/detail/28748</span><br /> <br /> YOLOv4</strong></span><span style="font-size:18px;color:#E53333;"><strong>来了!速度和精度双提升!</strong></span> </p> <p> <span style="font-size:16px;"> </span> </p> <p> <span style="font-size:16px;">与</span><span style="font-size:16px;"> YOLOv3 </span><span style="font-size:16px;">相比,新版本的</span><span style="font-size:16px;"> AP(精度) </span><span style="font-size:16px;">和</span><span style="font-size:16px;"> FPS </span><span style="font-size:16px;">(每秒帧率)分别提高了</span><span style="font-size:16px;"> 10% </span><span style="font-size:16px;">和</span><span style="font-size:16px;"> 12%</span><span style="font-size:16px;">。</span><span></span> </p> <p> <span style="font-size:16px;"> </span> </p> <p> <span style="font-size:16px;">YOLO系列是基于深度学习的端到端实时目标检测方法。本课程将手把手地教大家使用</span><span style="font-size:16px;">labelImg</span><span style="font-size:16px;">标注和使用</span><span style="font-size:16px;">YOLOv4</span><span style="font-size:16px;">训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。</span><span></span> </p> <p> <span style="font-size:16px;"> </span> </p> <p> <span style="font-size:16px;">本课程的</span><span style="font-size:16px;">YOLOv4</span><span style="font-size:16px;">使用</span><span style="font-size:16px;">AlexAB/darknet</span><span style="font-size:16px;">,在</span><span style="font-size:16px;">Ubuntu</span><span style="font-size:16px;">系统上做项目演示。包括:安装</span><span style="font-size:16px;">YOLOv4、</span><span style="font-size:16px;">标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计</span><span style="font-size:16px;">(mAP</span><span style="font-size:16px;">计算和画出</span><span style="font-size:16px;">PR</span><span style="font-size:16px;">曲线</span><span style="font-size:16px;">)</span><span style="font-size:16px;">和先验框聚类分析。还将介绍改善</span><span style="font-size:16px;">YOLOv4</span><span style="font-size:16px;">目标训练性能的技巧。</span><span></span> </p> <p> <span style="font-size:16px;"> </span> </p> <p> <span style="font-size:16px;">除本课程《</span><span style="font-size:16px;">YOLOv4</span><span style="font-size:16px;">目标检测实战:训练自己的数据集》外,本人将推出有关</span><span style="font-size:16px;">YOLOv4</span><span style="font-size:16px;">目标检测的系列课程。请持续关注该系列的其它视频课程,包括:</span><span></span> </p> <p> <span style="font-size:16px;">《</span><span style="font-size:16px;">YOLOv4</span><span style="font-size:16px;">目标检测实战:人脸口罩佩戴识别》</span><br /> <span style="font-size:16px;">《</span><span style="font-size:16px;">YOLOv4</span><span style="font-size:16px;">目标检测实战:中国交通标志识别》</span><br /> <span style="font-size:16px;">《</span><span style="font-size:16px;">YOLOv4</span><span style="font-size:16px;">目标检测:原理与源码解析》</span> </p> <p> <br /> </p> <p> <span style="font-size:16px;"><br /> </span> </p> <p> <span style="font-size:16px;"><img src="https://img-bss.csdn.net/202004260858382698.jpg" alt="" /><br /> </span> </p> <p> <span style="font-size:16px;"><br /> </span> </p> <p> <span style="font-size:16px;"><img src="https://img-bss.csdn.net/202004260858535136.jpg" alt="" /><br /> </span> </p> <p> <span style="font-size:16px;"><img src="https://img-bss.csdn.net/202004260859074920.jpg" alt="" /><br /> </span> </p> <p> <span></span> </p> <p> <span></span> </p>
相关推荐
<span style="color:#E53333;"><strong>告知:需要学习YOLOv4进行TT100K数据集上中国交通标志识别的学员请前往</strong></span><br /><br /><span style="color:#E53333;"><strong>(1) Ubuntu系统YOLOv4目标检测实战:中国交通标志识别》课程链接:https://edu.csdn.net/course/detail/29362</strong></span> <p> <span style="color:#E53333;"><strong>(2)《WindowsYOLOv4目标检测实战:中国交通标志识别》</strong></span><span style="color:#E53333;"><strong>课程链接:https://edu.csdn.net/course/detail/29363</strong></span><span style="color:#E53333;"><strong></strong></span> </p> <br /> 在无人驾驶中,交通标志识别是一项重要的任务。本课程中的项目以<strong><span style="color:#E53333;">美国交通标志数据集LISA</span></strong>为训练对象,采用<strong><span style="color:#E53333;">YOLOv3</span></strong>目标检测方法实现实时交通标志识别。<br /><br /> 具体项目过程包括包括:安装Darknet、下载LISA交通标志数据集、数据集格式转换、修改配置文件、训练LISA数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。<br /><br /> YOLOv3基于深度学习,可以实时地进行端到端的目标检测,以速度快见长。本课程将手把手地教大家使用YOLOv3实现交通标志的多目标检测。本课程的YOLOv3使用Darknet,在Ubuntu系统上做项目演示。 Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入学习和探究。<br /><br /> 除本课程《YOLOv3目标检测实战:交通标志识别》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括:<br /><br /> 《YOLOv3目标检测实战:训练自己的数据集》<br /><br /> 《YOLOv3目标检测:原理与源码解析》<br /><br /> 《YOLOv3目标检测:网络模型改进方法》<br /><br /> 另一门课程《YOLOv3目标检测实战:训练自己的数据集》主要是介绍如何训练自己标注的数据集。而本课程的区别主要在于学习对已标注数据集的格式转换,即把LISA数据集从csv格式转换成YOLOv3所需要的PASCAL VOC格式和YOLO格式。本课程提供数据集格式转换的Python代码。<br /><br /> 请大家关注以上课程,并选择学习。<br /><br /> 下图是使用YOLOv3进行交通标志识别的测试结果<br /><p> <br /></p> <p> <img alt="" src="https://img-bss.csdn.net/201905291412089927.jpg" /><img alt="" src="https://img-bss.csdn.net/201905291412336785.jpg" /><img alt="" src="https://img-bss.csdn.net/201905291412485752.jpg" /></p> <p> <img alt="" src="https://img-bss.csdn.net/201905291413012686.jpg" /></p>
<p> <br /> </p> <p align="left" class="MsoNormal" style="background:white;"> Linux创始人<span>Linus Torvalds</span>有一句名言:<span>Talk is cheap, Show me the code.</span>(冗谈不够,放码过来!)。<span></span> </p> <p align="left" class="MsoNormal" style="background:white;"> 代码阅读是从入门到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。<span></span> </p> <p align="left" class="MsoNormal" style="background:white;">   </p> <p align="left" class="MsoNormal" style="background:white;"> YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。 </p> <p align="left" class="MsoNormal" style="background:white;"> YOLOv3的实现<span>Darknet</span>是使用<span>C</span>语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。<span></span> </p> <p align="left" class="MsoNormal" style="background:white;">   </p> <p align="left" class="MsoNormal" style="background:white;"> 本课程将解析<span>YOLOv3</span>的实现原理和源码,具体内容包括:<span></span> </p> <p align="left" class="MsoNormal" style="text-indent:-18pt;background:white;"> <br /> </p> <ul> <li>      <span>YOLO目标检测原理 </span> </li> <li>      神经网络及Darknet的C语言实现,尤其是反向传播的梯度求解和误差计算  </li> <li>      代码阅读工具及方法  </li> <li>      深度学习计算的利器:BLAS和GEMM  </li> <li>      GPU的CUDA编程方法及在Darknet的应用  </li> <li>      YOLOv3的程序流程及各层的源码解析 </li> </ul> <!--[if !supportLists]--> <p> <br /> </p> <p align="left" class="MsoNormal" style="background:white;">   </p> <p align="left" class="MsoNormal" style="background:white;"> 本课程将提供注释后的<span>Darknet</span>的源码程序文件。<span></span> </p> <p align="left" class="MsoNormal" style="background:white;">   </p> <p align="left" class="MsoNormal" style="background:white;"> 除本课程《<span>YOLOv3</span>目标检测:原理与源码解析》外,本人推出了有关<span>YOLOv3</span>目标检测的系列课程,包括:<span></span> </p> <p align="left" class="MsoNormal" style="background:white;"> <br /> </p> <ul> <li>   《YOLOv3目标检测实战:训练自己的数据集》 </li> <li>   《YOLOv3目标检测实战:交通标志识别》 </li> <li>   《YOLOv3目标检测:原理与源码解析》 </li> <li>   《YOLOv3目标检测:网络模型改进方法》 </li> </ul> <p> <br /> </p> <p align="left" class="MsoNormal" style="background:white;">   </p> <p align="left" class="MsoNormal" style="background:white;"> 建议先学习课程《<span>YOLOv3</span>目标检测实战:训练自己的数据集》或课程《<span>YOLOv3</span>目标检测实战:交通标志识别》,对<span>YOLOv3</span>的使用方法了解以后再学习本课程。<span></span> </p> <p> <br /> </p> <p> <span></span><span></span><span></span><span></span> </p>
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页
实付 29.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值