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

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介:  基于YOLO进行物体检测、对象识别,在搭建好开发环境后,先和大家进行实践应用中,体验YOLOv3物体/目标检测效果和魅力;同时逐步了解YOLOv3的不足和优化思路。

前言

   基于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 猫。

image.gif

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

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

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

image.gif

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

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

image.gif


体验YOLOv3物体/目标检测

1)下载代码,打开工程

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

githug代码下载地址:GitHub - guo-pu/yolov3-tf2: 基于Tensorflow 2.3、Python3 实现YOLOv3目标检测

说明:此仓库代码源于zzh8829/yolov3-tf2 进行修改的,zzh8829/yolov3-tf2代码仓库地址 :GitHub - zzh8829/yolov3-tf2: YoloV3 Implemented in Tensorflow 2.0

image.gif

使用PyCharm工具打开工程:

image.gif

打开后的页面是这样的:

image.gif

【选择开发环境】

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

image.gif

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

2)下载权重文件

方式1:使用wget 来下载

前提:需要支持wget命令;

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

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

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

进入windows管理员命令窗口:

image.gif

【下载yolov3.weights权重文件】

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

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

然后就会开始下载了;

image.gif


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

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

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

image.gif编辑

方式2:在我网盘提取

image.gif

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

提取码: urad

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

image.gif

3)权重文件应用到工程

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

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

conda activate YOLO3-GPU-TensorFlow2

【yolov3.weights】

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

image.gif

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

image.gif

【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 猫。

image.gif

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

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

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

image.gif

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

目标检测执行命令汇总:

# 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

image.gif

调用模型的核心代码

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

image.gif

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

相关文章
|
8月前
|
机器学习/深度学习 PyTorch TensorFlow
TensorFlow与PyTorch深度对比分析:从基础原理到实战选择的完整指南
蒋星熠Jaxonic,深度学习探索者。本文深度对比TensorFlow与PyTorch架构、性能、生态及应用场景,剖析技术选型关键,助力开发者在二进制星河中驾驭AI未来。
940 13
|
11月前
|
人工智能 数据安全/隐私保护 Python
小红书图文生成器,小红书AI图文生成工具,python版本软件
Pillow库自动生成符合平台尺寸要求的配图7;3)利用Playwright实现自动化发布流程6。
|
8月前
|
人工智能 自然语言处理 TensorFlow
134_边缘推理:TensorFlow Lite - 优化移动端LLM部署技术详解与实战指南
在人工智能与移动计算深度融合的今天,将大语言模型(LLM)部署到移动端和边缘设备已成为行业发展的重要趋势。TensorFlow Lite作为专为移动和嵌入式设备优化的轻量级推理框架,为开发者提供了将复杂AI模型转换为高效、低功耗边缘计算解决方案的强大工具。随着移动设备硬件性能的不断提升和模型压缩技术的快速发展,2025年的移动端LLM部署已不再是遥远的愿景,而是正在成为现实的技术实践。
1647 39
|
12月前
|
Ubuntu 安全 API
Python3.14正式支持Free Threaded版本!
Python 社区迎来历史性时刻!Python 3.14 正式将无 GIL 构建列为受支持选项,标志着 Free‑Threaded Phase II 启动。本文将深入解析 PEP 779 规定的支持标准、3.14.0b3 版本的新变化,以及这对Python开发者意味着什么。文末还有小彩蛋哦!
1908 87
|
11月前
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
825 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
838 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
1407 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
1450 55
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
890 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别

推荐镜像

更多