怎样做门窗网站,无锡本地网站有哪些,做图片格式跟尺度用哪个网站好,网站建设用户画像例子概述
在目标检测中#xff0c;有许多经算法如Faster RCNN、SSD和YOLO的各种版本#xff0c;这些算法利用深度学习技术#xff0c;特别是卷积神经网络#xff08;CNN#xff09;#xff0c;能够高效地在图像中定位和识别不同类别的目标。Faster RCNN是一种基于区域提议的…概述
在目标检测中有许多经算法如Faster RCNN、SSD和YOLO的各种版本这些算法利用深度学习技术特别是卷积神经网络CNN能够高效地在图像中定位和识别不同类别的目标。Faster RCNN是一种基于区域提议的目标检测算法通过引入区域建议网络RPN来生成候选框然后使用分类器和回归器来识别和精确定位目标。SSDSingle Shot MultiBox Detector是一种单阶段的目标检测算法它在单个卷积网络中同时进行目标分类和定位具有较快的速度和较高的准确性。而YOLOYou Only Look Once则是一种端到端的目标检测算法通过将图像分割为网格并预测每个网格中的目标类别和边界框来实现目标检测具有实时性的优势。 但这里有一个问题是在目标检测上所检测到的目标是一帧帧的同一个目标在帧与帧之间并没有关联起来这个时候如果要确定上一帧的A_1目标是不是下一帧的A_2目标这里就要用到多目标跟踪。多目标追踪传输的是一个视频流对于每一帧需要检测目标并分配一个“对象 ID”在下一帧中如果检测到相同的对象则需要分配相同的对象 ID。有许多算法用于 MOT如 SORT简单在线实时跟踪、DeepSort、StrongSort 等。 SORTSimple Online and Realtime Tracking这是一种简单而高效的在线多目标跟踪算法它结合了卡尔曼滤波和匈牙利算法来实现目标跟踪。SORT适用于实时应用并且在计算资源有限的情况下表现良好。 DeepSort这是在SORT基础上发展而来的算法它引入了深度学习技术特别是卷积神经网络CNN用于提取目标的特征表示。DeepSort在目标跟踪的准确性和鲁棒性方面相对于传统方法有所提升。 StrongSort这是另一种基于深度学习的多目标跟踪算法它通过设计更强大的特征提取网络和更精细的跟踪策略来提高目标跟踪的性能。
目标跟踪可分为下面几种
基于特征的跟踪这涉及基于其特征如颜色、形状、纹理等进行跟踪。
模板匹配顾名思义这种方法使用预定义的模板在每个视频序列中进行匹配。
基于相关性的跟踪这种方法用于计算目标对象与后续帧中候选区域之间的相似性。
基于深度学习的跟踪这种方法使用在大型数据集上训练的神经网络实时检测和跟踪对象。
ByteSort
其他MOT算法中移除低置信度检测框的问题主要源于对检测框置信度的阈值设置以及对检测框的筛选策略。因为低置信度的检测框被认为可能是误检测或者不可靠的检测结果因此会被丢弃以提高跟踪的准确性。然而这种策略可能会带来一些问题 遮挡目标 低置信度的检测框有时确实可以指示目标的存在尤其是在目标被部分遮挡或者遮挡物很大时。丢弃这些低置信度的检测框可能会导致漏检目标因为算法无法正确地识别被遮挡的目标。 轨迹断裂 移除低置信度的检测框可能导致轨迹的不连续性因为目标在一帧中被识别出来在另一帧中却被移除了。这可能会导致跟踪算法无法正确地维持目标的标识符从而产生碎片化的轨迹使跟踪结果不连贯。
ByteTrack考虑低置信度的检测框的原因在于 避免漏检 ByteTrack意识到低置信度的检测框可能是有价值的目标信息尤其是在目标被遮挡的情况下。因此保留这些检测框有助于避免目标漏检的情况提高跟踪的完整性。 减少轨迹断裂 通过保留低置信度的检测框ByteTrack可以减少轨迹的不连续性从而提高了多目标跟踪的连贯性和准确性。这有助于跟踪算法更好地维持目标的标识符减少碎片化轨迹的出现。
可以从下面的例子说明这个问题如下图1 在帧 t1 中初始化了三个不同的轨迹因为它们的置信度都高于 0.5。但在帧 t2 和 t3 中置信度从 0.8 下降到 0.4然后从 0.4 下降到 0.1。
图2 这些检测框将被阈值机制消除相应的红色轨迹也会相应消失如上图所示。但如果考虑所有的检测框更多的误报率将会被引入例如图1中右most的框。这带来了第二个问题。
图3 例如如图3所示两个低分检测框通过运动预测框虚线与轨迹匹配因此对象被正确恢复。背景框被移除因为它没有匹配的轨迹。
因此使用高分到低分检测框在匹配过程中。这种简单而有效的关联方法称为 BYTE因为每个检测框都是轨迹的基本单位。首先它根据运动或外观相似性将高分检测框匹配到轨迹。然后它采用卡尔曼滤波器来预测下一帧中轨迹的位置。然后可以使用 IoU 或 Re-ID 特征距离计算预测框和检测框之间的相似性。在第二次匹配步骤中低分检测和未匹配的轨迹即红色框中的轨迹使用相同的运动相似性进行匹配。
数据关联
数据关联是多目标跟踪的核心之一它涉及计算轨迹和检测框之间的相似性并根据相似性应用不同的策略进行匹配。
在相似性度量方面位置、运动和外观是三个重要的线索。SORT算法通常简单地利用位置和运动线索。它使用卡尔曼滤波器来预测下一帧中的轨迹并计算检测框和预测框之间的IoU作为相似性度量。然而位置和运动线索更适用于短距离匹配。对于长距离匹配外观相似性则变得更加重要。例如长时间被遮挡的对象可能会通过外观相似性进行识别。外观相似性通常通过计算Re-ID特征的余弦相似性来衡量。与此类似DeepSort采用了独立的深度学习模型来处理外观相似性。
在匹配策略方面不同的算法使用不同的方法为对象分配ID。SORT通常通过一次匹配将检测框与轨迹匹配而DeepSort则采用级联匹配策略。这种策略首先将检测框与最近的跟踪器匹配然后与丢失的跟踪器进行匹配。
BYTE 算法
BYTE算法的输入是视频序列和检测器以及一个检测阈值值。该算法的输出是视频的每一帧中的轨迹T其中包含对象的边界框和ID。
对于视频中的每一帧首先使用检测器Det预测检测框和相应的预测分数。然后根据设定的检测分数阈值将检测框分为高分Det(high)和低分Det(low)两部分。
分离检测框后BYTE算法将卡尔曼滤波器应用于预测当前帧中每个轨迹T的新位置。首先对高分检测框进行关联然后再处理剩余的低分检测框。
BYTE算法的主要亮点在于其非常灵活能够与不同的关联方法兼容。这意味着它可以根据特定的应用场景选择最合适的关联方法从而提高多目标跟踪的性能和效果。
性能测试
在同一个数据集上的表现ByteTrack算法的性能优于SORT和DeepSORT算法这表明它在多目标跟踪任务上具有较好的表现。ByteTrack的MOTA达到了76.6而SORT和DeepSORT的性能分别为74.6和75.4。
ByteTrack在算法架构上相对简单但其性能却十分可观。这种性能提升可能源于它在关联过程中的灵活性以及对外观相似性的更好处理。
ByteTrack 与 YOLOv8 示例
多目标追踪场景中大部分遮挡物体的检测结果都是低分框ByteTrack 非常简洁地从低分检测框中寻找遮挡的物体对遮挡非常鲁棒。ByteTrack 同时也为如何最大程度利用检测结果来帮助 MOT 提供了启发下面提供了 ByteTrack 的部署代码和模型
import supervision as sv
from ultralytics import YOLO
from tqdm import tqdm
import argparse
import numpy as nptracker sv.ByteTrack()
def process_video(source_weights_path: str, source_video_path: str,target_video_path: str, confidence_threshold: float 0.3,iou_threshold: float 0.7
) - None:model YOLO(source_weights_path) # Load YOLO model classes list(model.names.values()) # Class names LINE_STARTS sv.Point(0,500) # Line start point for count in/out vehicleLINE_END sv.Point(1280, 500) # Line end point for count in/out vehicletracker sv.ByteTrack() # Bytetracker instance box_annotator sv.BoundingBoxAnnotator() # BondingBox annotator instance label_annotator sv.LabelAnnotator() # Label annotator instance frame_generator sv.get_video_frames_generator(source_pathsource_video_path) # for generating frames from videovideo_info sv.VideoInfo.from_video_path(video_pathsource_video_path)line_counter sv.LineZone(startLINE_STARTS, end LINE_END)line_annotator sv.LineZoneAnnotator(thickness2, text_thickness2, text_scale 0.5)with sv.VideoSink(target_pathtarget_video_path, video_infovideo_info) as sink:for frame in tqdm(frame_generator, total video_info.total_frames):# Getting result from modelresults model(frame, verboseFalse, conf confidence_threshold, iou iou_threshold)[0] detections sv.Detections.from_ultralytics(results) # Getting detections#Filtering classes for car and truck only instead of all COCO classes.detections detections[np.where((detections.class_id2)|(detections.class_id7))]detections tracker.update_with_detections(detections) # Updating detection to Bytetracker# Annotating detection boxesannotated_frame box_annotator.annotate(scene frame.copy(), detections detections) #Prepare labelslabels []for index in range(len(detections.class_id)):# creating labels as per required.labels.append(# str(detections.tracker_id[index]) classes[detections.class_id[index]] str(round(detections.confidence[index],2)) )# Line counter in/out triggerline_counter.trigger(detectionsdetections)# Annotating labelsannotated_label_frame label_annotator.annotate(sceneannotated_frame, detectionsdetections, labelslabels)# Annotating line labelsline_annotate_frame line_annotator.annotate(frameannotated_label_frame, line_counterline_counter)sink.write_frame(frame line_annotate_frame)if __name__ __main__:parser argparse.ArgumentParser(video processing with YOLO and ByteTrack) parser.add_argument(--source_weights_path,requiredTrue,helpPath to the source weights file,typestr)parser.add_argument(--source_video_path,requiredTrue, helpPath to the source video file,type str)parser.add_argument(--target_video_path,requiredTrue,helpPath to the target video file,type str)parser.add_argument(--confidence_threshold,default 0.3,help Confidence threshold for the model,typefloat)parser.add_argument(--iou_threshold,default0.7,helpIou threshold for the model,type float)args parser.parse_args() process_video(source_weights_pathargs.source_weights_path, source_video_path args.source_video_path,target_video_pathargs.target_video_path, confidence_thresholdargs.confidence_threshold,iou_thresholdargs.iou_threshold)完整代码带GUI界面代码和代码部署可参考《YOLOv8项目实践——目标检测、实例分割、姿态估计、目标追踪算法原理及模型部署Python实现带界面》 源码下载地址https://download.csdn.net/download/matt45m/89036361?spm1001.2014.3001.5503 模型下载地址链接https://pan.baidu.com/s/1-t5TwKzdRuHF3dL7POk1dA 提取码3r1v