YOLO v2实现图像目标检测

news/2024/11/22 19:37:46/

目录

  • 1、作者介绍
  • 2、算法简介
  • 3、环境配置
  • 4、代码实现
    • 4.1 数据准备
    • 4.2 完整代码
    • 4.3 运行结果
  • 常见问题总结

1、作者介绍

熊文博,男,西安工程大学电子信息学院,2020级硕士研究生,张宏伟人工智能课题组。
研究方向:机器视觉与人工智能
电子邮件:996270714@qq.com
师兄的CSDN主页:欢迎关注和相互交流学习.

YOLO系列学习-主要熟悉各个模型的改进

2、算法简介

YOLO英文名字为Yolo Only Look Once,意为你只看一次,也就是说你只看一次,就可以把图像中的目标检测出来。

YOLO是一种目标检测的算法,其于2015年首次提出,目前最新的已经到YOLO v8了。

现在用YOLO v2加载训练好的COCO数据集权重模型进行图片目标预测,有关细节部分就不赘述了。

这里放上YOLO v2的论文地址:
YOLO v2论文地址:https://arxiv.org/pdf/1612.08242.pdf

3、环境配置

首先需要配置好相关镜像,这里需要安装上OpenCV和TensorFlow这两个安装包。
清华镜像安装OpenCV:

pip install opencv-python==3.4.9.31 -i https://pypi.tuna.tsinghua.edu.cn/simple

豆瓣镜像安装TensorFlow:(这里强烈建议大家安装CPU版本的TensorFlow,GPU版本需要提前配置好cuda和cudnn(具体步骤见: Windows系统GPU版本PyTorch安装教程),CPU版本的用于图片目标检测足够了)

安装CPU版本:

pip install tensorflow==1.13.1 -i https://pypi.douban.com/simple

安装GPU版本的TensorFlow:

pip install tensorflow-gpu==1.13.1 -i https://pypi.douban.com/simple

4、代码实现

4.1 数据准备

这里给出YOLO v2算法用TensorFlow框架编写好的程序的百度网盘链接:
链接: https://pan.baidu.com/s/1ZDTfuDHh1jXgc271KDnrsw 提取码: rtbx

文件夹里面文件分布如下图所示:
在这里插入图片描述
其中Main.py就是用于图像目标检测的程序,在该程序中,需要修改相应的读取图片路径、输出路径和模型路径。
30行修改读入图片的路径,这里要注意最好用图片的绝对路径

image_file = '1.jpg'    #读取输入图片

55行修改图片的输出保存路径

cv2.imwrite("detection_result.jpg", img_detection)

44行是读取模型权重文件的路径

model_path = "./yolo2_model/yolo2_coco.ckpt"

4.2 完整代码

下面是完整的Main.py中的代码:

# %load Main.py
# --------------------------------------
# @Time    : 2018/5/16$ 17:17$
# @Author  : KOD Chen
# @Email   : 821237536@qq.com
# @File    : Main$.py
# Description :YOLO_v2主函数.
# --------------------------------------import numpy as np
import tensorflow as tf
import cv2,os
from PIL import Image
import matplotlib.pyplot as pltfrom model_darknet19 import darknet
from decode import decode
from utils import preprocess_image, postprocess, draw_detection
from config import anchors, class_names
#%matplotlib inlinedef main():input_size = (416,416)image_file = '1.jpg'    #读取输入图片image = cv2.imread(image_file)image_shape = image.shape[:2] #只取wh,channel=3不取# copy、resize416*416、归一化、在第0维增加存放batchsize维度image_cp = preprocess_image(image,input_size)# 【1】输入图片进入darknet19网络得到特征图,并进行解码得到:xmin xmax表示的边界框、置信度、类别概率tf_image = tf.placeholder(tf.float32,[1,input_size[0],input_size[1],3])model_output = darknet(tf_image) # darknet19网络输出的特征图output_sizes = input_size[0]//32, input_size[1]//32 # 特征图尺寸是图片下采样32倍output_decoded = decode(model_output=model_output,output_sizes=output_sizes,num_class=len(class_names),anchors=anchors)  # 解码model_path = "./yolo2_model/yolo2_coco.ckpt"saver = tf.train.Saver()with tf.Session() as sess:saver.restore(sess,model_path)bboxes,obj_probs,class_probs = sess.run(output_decoded,feed_dict={tf_image:image_cp})# 【2】筛选解码后的回归边界框——NMS(post process后期处理)bboxes,scores,class_max_index = postprocess(bboxes,obj_probs,class_probs,image_shape=image_shape)# 【3】绘制筛选后的边界框img_detection = draw_detection(image, bboxes, scores, class_max_index, class_names)cv2.imwrite("detection_result.jpg", img_detection)img_detection = cv2.cvtColor(img_detection, cv2.COLOR_RGB2BGR) plt.figure(figsize=(10,10))plt.imshow(img_detection) #界面显示#print('YOLO_v2 detection has done!')print('YOLO_v2 检测完成!')#cv2.imshow("detection_results", img_detection)#cv2.waitKey(0)plt.show()
if __name__ == '__main__':main()

4.3 运行结果

运行程序,就可以对图片进行目标检测了。更换图片路径,可以对不同的图片进行目标检测了。
下面展示一些图片的运行结果:
在这里插入图片描述在这里插入图片描述

常见问题总结

1、问题1:AttributeError: module ‘tensorflow’ has no attribute ‘placeholder’
在这里插入图片描述
报错原因:加载的虚拟环境中Tensorflow版本太高,Tensorflow 1.x 版本提供placeholder,而Tensorflow 2.x 版本暂时没有这个模块。
解决办法:降低Tensorflow版本。

注意:Python解释器版本太高也无法安装成功,建议安装3.7.x版本解释器。

pip install tensorflow==1.13.1 -i https://pypi.douban.com/simple

2、问题2:TypeError: Descriptors cannot not be created directly. If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0. If you cannot immediately regenerate your protos, some other possible work
在这里插入图片描述
报错原因:这是由于我们使用pip安装tensorflow的时候,安装依赖包protobuf的版本过高造成的。

解决办法:只需要卸掉原来的,按照编译器提示的信息下载3.19.0对应的版本即可解决问题。

# 卸载原来的版本
pip uninstall protobuf   # 安装新版本
pip install protobuf==3.19.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

3、问题3:使用pip指令进行安装时,若出现以下提示信息,则只需对pip进行更新即可。
在这里插入图片描述

pip升级指令

python -m pip install --upgrade pip

http://www.ppmy.cn/news/477502.html

相关文章

URAL 做题记录 V2

题号 标题 难度系数 算法 1100 Final Standings 50% 反复统计 1101 Robot in the field 30% 表达式求值 1102 Strange Dialog 60% 动态规划或语法图 1103 Pencils and Circles 65% 不错的几何问题 1104 Donk ask a woman about her age 55% 同余问题 1105 Observers coloring 7…

使用mp4v2将H264+AAC合成mp4文件

本文转载自:http://www.cnblogs.com/chutianyao/archive/2012/04/13/2446140.html 录制程序要添加新功能:录制CMMB电视节目,我们的板卡发送出来的是RTP流(H264视频和AAC音频),录制程序要做的工作是&#xf…

【ShuffleNet V2】《ShuffleNet V2:Practical Guidelines for Efficient CNN Architecture Design》

ECCV-2018 caffe 版代码:https://github.com/miaow1988/ShuffleNet_V2_pytorch_caffe/blob/master/shufflenet_v2_x1.0.prototxt caffe 代码可视化工具:http://ethereon.github.io/netscope/#/editor 文章目录 1 Background and Motivation2 Advantages…

三万字全面概述关于5G-V2X技术和应用

5G技术有望实现更快的网联链接、更低的延迟、更高的可靠性、更大的容量和更广的覆盖范围。希望依靠这些技术来实现车辆到一切(V2X)的通信,除了道路安全外,还能提高车辆的安全性和自动驾驶性能,节约能源和成本。车辆通信…

学习使用mp4v2-2.0.0 —— 1

本来想自己根据mp4的结构自己创建mp4文件的,但。。。还是先去找现有的解决方案看是否更好。 找到了一篇:http://www.ahlinux.com/embed/6770.html 然后到这里:https://launchpad.net/ubuntu/source/mp4v2/2.0.0~dfsg0-3 下载了mp4v2的源码…

靶机渗透练习55-digitalworld.local:MERCY v2

靶机描述 靶机地址:https://www.vulnhub.com/entry/digitalworldlocal-mercy-v2,263/ Description MERCY is a machine dedicated to Offensive Security for the PWK course, and to a great friend of mine who was there to share my sufferance with me. &…

m_map下载

转载自;https://www.eoas.ubc.ca/~rich/map.html Introduction GalleryGetting M_Map Release NotesUsers GuideExample Code Citation Acknowledgements Last changed 9/Jan/2019. Questions and comments to richeos.ubc.ca M_Map: A mapping package for Matla…

JUC之CompletableFuture

文章目录 1 Future接口1.1 FutureTask相关接口关系1.2 Future接口的优缺点1.2.1 优点1.2.2 缺点 2 Complatable Future2.1 CompletionStage2.2 使用案例2.2.1 runAsync2.2.2 supplyAsync2.2.3 join和get的区别2.2.4 CF simple project使用案例2.2.5 CF 常用API2.2.5.1 获取结果…