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 plt
from model_darknet19 import darknet
from decode import decode
from utils import preprocess_image, postprocess, draw_detection
from config import anchors, class_names
#%matplotlib inline
def 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进行更新即可。
文章来源:https://www.toymoban.com/news/detail-485313.html
pip升级指令:文章来源地址https://www.toymoban.com/news/detail-485313.html
python -m pip install --upgrade pip
到了这里,关于YOLO v2实现图像目标检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!