在图像识别领域,对象检测技术正迅速发展,每年有成千上万的研究报告发表,每一篇都在前人的基础上提高了准确性和检测速度。本文将带快速入门,使用YOLO v1架构在Google Colab平台上进行图像中的对象检测。值得一提的是,可以免费使用GPU加速计算。
YOLO(You Only Look Once)模型由Joseph Redmon及其团队于2014年提出。与之前的模型不同,YOLO将对象检测的所有操作(使用CNN提取特征、预测对象周围的边界框、使用SVM评分等)统一在一个CNN模型中完成,并且能够实时进行。例如,Fast R-CNN的速度仅为0.5 FPS,而YOLO v1的速度为45 FPS,比Fast R-CNN快90倍,并且减少了背景误检错误。
YOLO v1模型的结构如下:
# 模型包含24个卷积层和2个全连接层
# 输入图像尺寸为224x224,调整为448x448进行检测
# 输出为7x7x30的张量,包含模型对输入图像的预测
此外,还有Fast YOLO模型,其实时性能高达155 FPS,比YOLO快3倍以上,且模型大小仅为103 MB,远小于YOLO的753 MB。Fast YOLO只有9个卷积层,而YOLO有24个,且Fast YOLO的层使用的特征数量较少。
以下是使用YOLO的步骤:
首先,设置Colab运行时使用GPU。然后,安装Darknet,这是一个由Joseph Redmon创建的库,用于简化YOLO和其他对象检测模型的实现。
!git clone https://github.com/pjreddie/darknet.git
import os
os.chdir("/content/darknet")
如果上述步骤正确,可以通过输入!ls查看文件夹内容。
接下来,下载预训练的YOLO v1模型权重。
!wget http://pjreddie.com/media/files/yolov1/yolov1.weights
注意:根据网络连接速度,这可能需要一段时间,文件大小为753 MB。
在/content/darknet/data目录下有许多图像可供测试。先尝试dog.jpg。
!./darknet yolo test /content/darknet/cfg/yolov1.cfg /content/yolov1.weights /content/darknet/data/dog.jpg
模型将检测图像中的对象,并输出概率。例如,检测到狗、汽车和自行车的概率分别为26%、74%和39%。
模型将预测结果保存为predictions.jpg,可以通过以下代码查看:
import cv2
import matplotlib.pyplot as plt
import os.path
fig,ax = plt.subplots()
ax.tick_params(labelbottom="off",bottom="off")
ax.tick_params(labelleft="off",left="off")
ax.set_xticklabels([])
ax.axis('off')
file = '/content/darknet/predictions.jpg'
if os.path.exists(file):
img = cv2.imread(file)
show_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(show_img)
刚刚使用YOLO v1模型完成了第一次图像检测。接下来,可以尝试更多的图像。
Fast YOLO模型的设计目标是在保持高准确性的同时,实现更快的检测速度。它只有9个卷积层,比YOLO的24层少,因此模型大小也更小。要使用Fast YOLO进行检测,需要下载其权重:
!wget http://pjreddie.com/media/files/yolov1/tiny-yolov1.weights
然后,可以使用Fast YOLO对之前YOLO未能准确检测的图像进行测试。
!./darknet yolo test /content/darknet/cfg/yolov1-tiny.cfg /content/darknet/tiny-yolov1.weights /content/darknet/data/person.jpg
Fast YOLO成功地检测出了图像中的3个对象及其类别。
还可以上传互联网上的任意图像,看看YOLO模型的表现。以下是上传图像到Colab运行时的代码:
os.chdir("/content")
from google.colab import files
uploaded = files.upload()
os.chdir("/content/darknet/")
!./darknet yolo test /content/darknet/cfg/yolov1-tiny.cfg /content/darknet/tiny-yolov1.weights /content/selfie.jpg