目录
目标检测
网络架构
改进点
应用领域
deepsort追踪
多目标跟踪算法
代码
模块
新特点
单目测距
# 介绍
代码
测距步骤
结论
前言
项目成果图
正文
目标检测
YOLOv5是一种计算机视觉算法,它是YOLO(You Only Look Once)系列算法的最新版本,由Joseph Redmon和Alexey Bochkovskiy等人开发。它是一种单阶段目标检测算法,可以在图像中检测出多个物体,并输出它们的类别和位置信息。相比于以往的YOLO版本,YOLOv5具有更高的检测精度和更快的速度。
网络架构
YOLOv5使用了一种新的检测架构,称为CSP(Cross-Stage Partial)架构,它将原始的卷积层替换为CSP卷积层,这种新的卷积层可以更好地利用计算资源,提高模型的效率和准确度。此外,YOLOv5还使用了一种新的数据增强技术,称为Mosaic数据增强,这种技术可以在单个图像中合并多个图像,以增加样本的复杂性和多样性,提高模型的泛化能力。
改进点
YOLOv5引入了一种新的训练策略,称为Self-Adversarial Training(SAT),它可以在模型训练过程中自动生成对抗性样本,以帮助模型更好地学习物体的特征和位置信息,提高模型的鲁棒性和准确度。
应用领域
YOLOv5的同时也提供了预训练模型,可以直接用于物体检测任务。此外,YOLOv5还可以在不同的硬件平台上运行,包括CPU、GPU和TPU等。因此,YOLOv5非常适合在嵌入式设备、移动设备和云端服务器等不同场景中应用,可以广泛应用于交通、安防、无人驾驶、智能家居等领域。
deepsort追踪
多目标跟踪算法
DeepSORT是一种基于深度学习的多目标跟踪算法,可以在复杂的场景中实现高效准确的目标追踪。DeepSORT的核心思想是将目标检测和目标跟踪两个任务分开处理,利用深度学习网络提取目标特征,并结合卡尔曼滤波和匈牙利算法等传统跟踪方法,实现对多个目标的准确追踪。
代码
def main(_argv): #--->全部代码qq1309399183--< # Definition of the parameters max_cosine_distance = 0.4 nn_budget = None nms_max_overlap = 1.0 # initialize deep sort model_filename = 'model_data/mars-small128.pb' encoder = gdet.create_box_encoder(model_filename, batch_size=1) # calculate cosine distance metric metric = nn_matching.NearestNeighborDistanceMetric("cosine", max_cosine_distance, nn_budget) # initialize tracker tracker = Tracker(metric) # load configuration for object detector config = ConfigProto() config.gpu_options.allow_growth = True session = InteractiveSession(config=config) STRIDES, ANCHORS, NUM_CLASS, XYSCALE = utils.load_config(FLAGS) input_size = FLAGS.size video_path = FLAGS.video # load tflite model if flag is set if FLAGS.framework == 'tflite': interpreter = tf.lite.Interpreter(model_path=FLAGS.weights) interpreter.allocate_tensors() input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() print(input_details) print(output_details) # otherwise load standard tensorflow saved model else: saved_model_loaded = tf.saved_model.load(FLAGS.weights, tags=[tag_constants.SERVING]) infer = saved_model_loaded.signatures['serving_default'] # begin video capture try: vid = cv2.VideoCapture(int(video_path)) except: vid = cv2.VideoCapture(video_path) out = None # get video ready to save locally if flag is set if FLAGS.output: # by default VideoCapture returns float instead of int width = int(vid.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(vid.get(cv2.CAP_PROP_FRAME_HEIGHT)) fps = int(vid.get(cv2.CAP_PROP_FPS)) codec = cv2.VideoWriter_fourcc(*FLAGS.output_format) out = cv2.VideoWriter(FLAGS.output, codec, fps, (width, height)) frame_num = 0 # while video is running while True: return_value, frame = vid.read() if return_value: frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) image = Image.fromarray(frame) else: print('Video has ended or failed, try a different video format!') break frame_num += 1 print('Frame #: ', frame_num) frame_size = frame.shape[:2] image_data = cv2.resize(frame, (input_size, input_size)) image_data = image_data / 255. image_data = image_data[np.newaxis, ...].astype(np.float32)