窝牛号

Google发布移动终端对象检测模型——mediapipe,无GPU依然飞快

对象检测模型最出名的当选YOLO系列,其YOLO系列已经更新到V8系列,但是现有的YOLO模型面临限制,如量化支持不足和准确性延迟权衡不足。

YOLO-NAS模型在包括COCO、Objects365和Roboflow 100在内的知名数据集上进行了预训练,使其非常适合生产环境中的下游对象检测任务。YOLO-NAS的发布在对象检测模型的推理性能和效率方面实现了重大飞跃,解决了传统模型的局限性,并为各种任务和硬件提供了前所未有的适应性。新的YOLO-NAS以无与伦比的精度-速度性能提供最先进的(SOTA)性能,优于YOLOv5、YOLOv6、YOLOv7和YOLOv8等其他型号。

但是其主流的对象检测模型,要想运行的速度要快,需要使用性能强劲的GPU作为后台算力。随着移动终端的普及,对大模型使用在移动终端上的需求也越来越多。其Google 发布的mediapipe系列成功的把对象检测模型运行在移动终端上,其运行速度都是ms级别的延时。

MediaPipe对象检测模型,可以针对图片,视频或者实时直播视频流进行对象检测任务。其MediaPipe对象检测模型包含3种不同尺寸大小的模型,可以根据自己的任务,进行相关模型的选择。

模型一:EfficientDet-Lite0

EfficientDet-Lite0模型使用具有 320x320 输入尺寸大小和 BiFPN 特征网络的 EfficientNet-Lite0 主干网络模型。 该模型使用 COCO 数据集进行训练,这是一个包含 150 万个对象实例和 80 个对象标签的大规模对象检测数据集。 EfficientDet-Lite0 模型又分别使用了三种尺寸大小的模型 int8、float16 或 float32。 该模型在延迟和准确性之间取得了平衡。 对于许多任务来说,它既准确又轻量。是大多数对象检测任务的首选模型。

模型二:EfficientDet-Lite2

EfficientDet-Lite2 模型使用具有 448x448 输入尺寸大小和 BiFPN 特征网络的 EfficientNet-Lite2 主干网络模型。 该模型同样使用 COCO 数据集进行训练, EfficientDet-Lite2 也提供了三种尺寸大小的模型 int8、float16 与 float32 型号。 该模型通常比 EfficientDet-Lite0 更准确,但速度也更慢且占用更多内存。

模型三:SSD MobileNetV2

SSD MobileNetV2 模型使用具有 256x256 输入尺寸大小和 SSD 特征网络的 MobileNetV2 主干网络模型。 该模型使用 COCO 数据集进行训练,SSD MobileNetV2 提供了2种尺寸大小的模型 int8 和 float 32 。 该模型比 EfficientDet-Lite0 更快、更轻,但通常也不太准确。

无论是输入图片,或者视频,其模型最终都会转换到图片进行对象检测,针对视频来讲,使用图片进行对象检测完成后,再把每帧的图片连接一起,再次转换成视频,最终实现视频或者视频流的对象检测。其模型输出4个参数:

detection_boxes:对象检测的box位置detection_classes:对象检测的分类detection_scores:对象检测的置信度num_boxes:box的数量

在移动终端,没有GPU的条件下,其EfficientDet-Lite0 int8模型只有29.31ms的延时,其最大的模型也只有198.77ms的延时,其速度也是相当的快来。

代码实现MediaPipe对象检测模型

要实现MediaPipe对象检测模型,首先需要搭建相关的环境。安装MediaPipe 0.10版本,并下载相关的对象检测模型,这里可以下载3种模型的任意尺寸的模型。

!pip install -q mediapipe==0.10.0 !wget -q -O efficientdet.tflite -q https://storage.googleapis.com/mediapipe-models/object_detector/efficientdet_lite0/int8/1/efficientdet_lite0.tflite !wget -q -O efficientdet.tflite -q https://storage.googleapis.com/mediapipe-models/object_detector/efficientdet_lite0/float16/1/efficientdet_lite0.tflite !wget -q -O efficientdet.tflite -q https://storage.googleapis.com/mediapipe-models/object_detector/efficientdet_lite0/float32/1/efficientdet_lite0.tflite

然后新建一个可视化函数,此函数的主要目的是对象检测完成后,可以把对象检测完成的结果进行可视化。

import cv2 import numpy as np MARGIN = 10 ROW_SIZE = 10 FONT_SIZE = 1 FONT_THICKNESS = 1 TEXT_COLOR = (255, 0, 0) 39; (&39;)&39;12.jpg&39;efficientdet.tflite') options = vision.ObjectDetectorOptions(base_options=base_options,score_threshold=0.5) detector = vision.ObjectDetector.create_from_options(options) image = mp.Image.create_from_file(IMAGE_FILE) detection_result = detector.detect(image) image_copy = np.copy(image.numpy_view()) annotated_image = visualize(image_copy, detection_result) rgb_annotated_image = cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB) cv2_imshow(rgb_annotated_image)

当然从对象检测的类别与对象检测的精度来讲,其mediapipe与其他基于GPU系列的对象检测模型还有些差距,但是mediapipe并没有使用GPU进行加速,若其他对象检测模型使用在移动终端上,也并没有mediapipe效果好,其对象检测的模型也相关巨大。

YOLO模型系列文章

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除

窝牛号 wwww.93ysy.com   沪ICP备2021036305号-1