国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

目標(biāo)跟蹤初探之DeepSORT:源碼詳解DeepSort工作流程

共 23424字,需瀏覽 47分鐘

 ·

2023-01-07 10:50

作者 | 可樂  編輯 | 汽車人

原文鏈接:https://zhuanlan.zhihu.com/p/90835266

最近由于工作原因,首次接觸到了目標(biāo)跟蹤任務(wù),這幾天讀了一些該領(lǐng)域的優(yōu)秀論文,真心感覺目標(biāo)跟蹤任務(wù)的難度和復(fù)雜度要比分類和目標(biāo)檢測(cè)高不少,具有更大的挑戰(zhàn)性。

如果你跟我一樣是正在學(xué)習(xí)目標(biāo)跟蹤的新手,希望本文能讓你對(duì)目標(biāo)跟蹤任務(wù)和DeepSORT算法的工作流程有個(gè)初步的了解,如果你是該領(lǐng)域的前輩,歡迎對(duì)文中的不足之處進(jìn)行指正,多多指教。


本文首先將介紹在目標(biāo)跟蹤任務(wù)中常用的匈牙利算法(Hungarian Algorithm)和卡爾曼濾波(Kalman Filter),然后介紹經(jīng)典算法DeepSORT的工作流程以及對(duì)相關(guān)源碼進(jìn)行解析。

目前主流的目標(biāo)跟蹤算法都是基于Tracking-by-Detecton策略,即基于目標(biāo)檢測(cè)的結(jié)果來進(jìn)行目標(biāo)跟蹤。DeepSORT運(yùn)用的就是這個(gè)策略,上面的視頻是DeepSORT對(duì)人群進(jìn)行跟蹤的結(jié)果,每個(gè)bbox左上角的數(shù)字是用來標(biāo)識(shí)某個(gè)人的唯一ID號(hào)。

這里就有個(gè)問題,視頻中不同時(shí)刻的同一個(gè)人,位置發(fā)生了變化,那么是如何關(guān)聯(lián)上的呢?答案就是匈牙利算法和卡爾曼濾波。

  • 匈牙利算法可以告訴我們當(dāng)前幀的某個(gè)目標(biāo),是否與前一幀的某個(gè)目標(biāo)相同。
  • 卡爾曼濾波可以基于目標(biāo)前一時(shí)刻的位置,來預(yù)測(cè)當(dāng)前時(shí)刻的位置,并且可以比傳感器(在目標(biāo)跟蹤中即目標(biāo)檢測(cè)器,比如Yolo等)更準(zhǔn)確的估計(jì)目標(biāo)的位置。

1匈牙利算法(Hungarian Algorithm)

首先,先介紹一下什么是分配問題(Assignment Problem):假設(shè)有N個(gè)人和N個(gè)任務(wù),每個(gè)任務(wù)可以任意分配給不同的人,已知每個(gè)人完成每個(gè)任務(wù)要花費(fèi)的代價(jià)不盡相同,那么如何分配可以使得總的代價(jià)最小。

舉個(gè)例子,假設(shè)現(xiàn)在有3個(gè)任務(wù),要分別分配給3個(gè)人,每個(gè)人完成各個(gè)任務(wù)所需代價(jià)矩陣(cost matrix)如下所示(這個(gè)代價(jià)可以是金錢、時(shí)間等等):

怎樣才能找到一個(gè)最優(yōu)分配,使得完成所有任務(wù)花費(fèi)的代價(jià)最小呢?

匈牙利算法(又叫KM算法)就是用來解決分配問題的一種方法,它基于定理:

如果代價(jià)矩陣的某一行或某一列同時(shí)加上或減去某個(gè)數(shù),則這個(gè)新的代價(jià)矩陣的最優(yōu)分配仍然是原代價(jià)矩陣的最優(yōu)分配。

算法步驟(假設(shè)矩陣為NxN方陣):

  1. 對(duì)于矩陣的每一行,減去其中最小的元素
  2. 對(duì)于矩陣的每一列,減去其中最小的元素
  3. 用最少的水平線或垂直線覆蓋矩陣中所有的0
  4. 如果線的數(shù)量等于N,則找到了最優(yōu)分配,算法結(jié)束,否則進(jìn)入步驟5
  5. 找到?jīng)]有被任何線覆蓋的最小元素,每個(gè)沒被線覆蓋的行減去這個(gè)元素,每個(gè)被線覆蓋的列加上這個(gè)元素,返回步驟3

繼續(xù)拿上面的例子做演示:

step1 每一行最小的元素分別為15、20、20,減去得到:

step2 每一列最小的元素分別為0、20、5,減去得到:

step3 用最少的水平線或垂直線覆蓋所有的0,得到:

step4 線的數(shù)量為2,小于3,進(jìn)入下一步;

step5 現(xiàn)在沒被覆蓋的最小元素是5,沒被覆蓋的行(第一和第二行)減去5,得到:

被覆蓋的列(第一列)加上5,得到:

跳轉(zhuǎn)到step3,用最少的水平線或垂直線覆蓋所有的0,得到:

step4:線的數(shù)量為3,滿足條件,算法結(jié)束。顯然,將任務(wù)2分配給第1個(gè)人、任務(wù)1分配給第2個(gè)人、任務(wù)3分配給第3個(gè)人時(shí),總的代價(jià)最?。?+0+0=0):

所以原矩陣的最小總代價(jià)為(40+20+25=85):

sklearn里的linear_assignment()函數(shù)以及scipy里的linear_sum_assignment()函數(shù)都實(shí)現(xiàn)了匈牙利算法,兩者的返回值的形式不同:

import numpy as np 
from sklearn.utils.linear_assignment_ import linear_assignment
from scipy.optimize import linear_sum_assignment
 

cost_matrix = np.array([
    [15,40,45],
    [20,60,35],
    [20,40,25]
])
 
matches = linear_assignment(cost_matrix)
print('sklearn API result:\n', matches)
matches = linear_sum_assignment(cost_matrix)
print('scipy API result:\n', matches)
 

"""Outputs
sklearn API result:
 [[0 1]
  [1 0]
  [2 2]]
scipy API result:
 (array([0, 1, 2], dtype=int64), array([1, 0, 2], dtype=int64))
"""

在DeepSORT中,匈牙利算法用來將前一幀中的跟蹤框tracks與當(dāng)前幀中的檢測(cè)框detections進(jìn)行關(guān)聯(lián),通過外觀信息(appearance information)和馬氏距離(Mahalanobis distance),或者IOU來計(jì)算代價(jià)矩陣。

源碼解讀:

#  linear_assignment.py
def min_cost_matching(distance_metric, max_distance, tracks, detections, 
                      track_indices=None, detection_indices=None):
    ...
    
    # 計(jì)算代價(jià)矩陣
    cost_matrix = distance_metric(tracks, detections, track_indices, detection_indices)
    cost_matrix[cost_matrix > max_distance] = max_distance + 1e-5
    
    # 執(zhí)行匈牙利算法,得到匹配成功的索引對(duì),行索引為tracks的索引,列索引為detections的索引
    row_indices, col_indices = linear_assignment(cost_matrix)
 
    matches, unmatched_tracks, unmatched_detections = [], [], []
 
    # 找出未匹配的detections
    for col, detection_idx in enumerate(detection_indices):
        if col not in col_indices:
            unmatched_detections.append(detection_idx)
     
    # 找出未匹配的tracks
    for row, track_idx in enumerate(track_indices):
        if row not in row_indices:
            unmatched_tracks.append(track_idx)
    
    # 遍歷匹配的(track, detection)索引對(duì)
    for row, col in zip(row_indices, col_indices):
        track_idx = track_indices[row]
        detection_idx = detection_indices[col]
        # 如果相應(yīng)的cost大于閾值max_distance,也視為未匹配成功
        if cost_matrix[row, col] > max_distance:
            unmatched_tracks.append(track_idx)
            unmatched_detections.append(detection_idx)
        else:
            matches.append((track_idx, detection_idx))
 
    return matches, unmatched_tracks, unmatched_detections

2卡爾曼濾波(Kalman Filter)

卡爾曼濾波被廣泛應(yīng)用于無人機(jī)、自動(dòng)駕駛、衛(wèi)星導(dǎo)航等領(lǐng)域,簡(jiǎn)單來說,其作用就是基于傳感器的測(cè)量值來更新預(yù)測(cè)值,以達(dá)到更精確的估計(jì)。

假設(shè)我們要跟蹤小車的位置變化,如下圖所示,藍(lán)色的分布是卡爾曼濾波預(yù)測(cè)值,棕色的分布是傳感器的測(cè)量值,灰色的分布就是預(yù)測(cè)值基于測(cè)量值更新后的最優(yōu)估計(jì)。

Kalman Filter

在目標(biāo)跟蹤中,需要估計(jì)track的以下兩個(gè)狀態(tài):

  • 均值(Mean):表示目標(biāo)的位置信息,由bbox的中心坐標(biāo) (cx, cy),寬高比r,高h(yuǎn),以及各自的速度變化值組成,由8維向量表示為 x = [cx, cy, r, h, vx, vy, vr, vh],各個(gè)速度值初始化為0。
  • 協(xié)方差(Covariance ):表示目標(biāo)位置信息的不確定性,由8x8的對(duì)角矩陣表示,矩陣中數(shù)字越大則表明不確定性越大,可以以任意值初始化。

卡爾曼濾波分為兩個(gè)階段:(1) 預(yù)測(cè)track在下一時(shí)刻的位置,(2) 基于detection來更新預(yù)測(cè)的位置。

下面將介紹這兩個(gè)階段用到的計(jì)算公式。(這里不涉及公式的原理推導(dǎo),因?yàn)槲乙膊磺宄??_?) ,只是說明一下各個(gè)公式的作用)

預(yù)測(cè)

基于track在t-1時(shí)刻的狀態(tài)來預(yù)測(cè)其在t時(shí)刻的狀態(tài)。

在公式1中,x為track在t-1時(shí)刻的均值,F(xiàn)稱為狀態(tài)轉(zhuǎn)移矩陣,該公式預(yù)測(cè)t時(shí)刻的x':

矩陣F中的dt是當(dāng)前幀和前一幀之間的差,將等號(hào)右邊的矩陣乘法展開,可以得到cx'=cx+dt*vx,cy'=cy+dt*vy...,所以這里的卡爾曼濾波是一個(gè)勻速模型(Constant Velocity Model)。

在公式2中,P為track在t-1時(shí)刻的協(xié)方差,Q為系統(tǒng)的噪聲矩陣,代表整個(gè)系統(tǒng)的可靠程度,一般初始化為很小的值,該公式預(yù)測(cè)t時(shí)刻的P'。

源碼解讀:

#  kalman_filter.py
def predict(self, mean, covariance):
    """Run Kalman filter prediction step.
    
    Parameters
    ----------
    mean: ndarray, the 8 dimensional mean vector of the object state at the previous time step.
    covariance: ndarray, the 8x8 dimensional covariance matrix of the object state at the previous time step.
 
    Returns
    -------
    (ndarray, ndarray), the mean vector and covariance matrix of the predicted state. 
     Unobserved velocities are initialized to 0 mean.
    """

    std_pos = [
        self._std_weight_position * mean[3],
        self._std_weight_position * mean[3],
        1e-2,
        self._std_weight_position * mean[3]]
    std_vel = [
        self._std_weight_velocity * mean[3],
        self._std_weight_velocity * mean[3],
        1e-5,
        self._std_weight_velocity * mean[3]]
    
    motion_cov = np.diag(np.square(np.r_[std_pos, std_vel]))  # 初始化噪聲矩陣Q
    mean = np.dot(self._motion_mat, mean)  # x' = Fx
    covariance = np.linalg.multi_dot((self._motion_mat, covariance, self._motion_mat.T)) + motion_cov  # P' = FPF(T) + Q
 
    return mean, covariance

更新

基于t時(shí)刻檢測(cè)到的detection,校正與其關(guān)聯(lián)的track的狀態(tài),得到一個(gè)更精確的結(jié)果。

在公式3中,z為detection的均值向量,不包含速度變化值,即z=[cx, cy, r, h],H稱為測(cè)量矩陣,它將track的均值向量x'映射到檢測(cè)空間,該公式計(jì)算detection和track的均值誤差;

在公式4中,R為檢測(cè)器的噪聲矩陣,它是一個(gè)4x4的對(duì)角矩陣,對(duì)角線上的值分別為中心點(diǎn)兩個(gè)坐標(biāo)以及寬高的噪聲,以任意值初始化,一般設(shè)置寬高的噪聲大于中心點(diǎn)的噪聲,該公式先將協(xié)方差矩陣P'映射到檢測(cè)空間,然后再加上噪聲矩陣R;

公式5計(jì)算卡爾曼增益K,卡爾曼增益用于估計(jì)誤差的重要程度;

公式6和公式7得到更新后的均值向量x和協(xié)方差矩陣P。

源碼解讀:

#  kalman_filter.py
def project(self, mean, covariance):
    """Project state distribution to measurement space.
        
    Parameters
    ----------
    mean: ndarray, the state's mean vector (8 dimensional array).
    covariance: ndarray, the state's covariance matrix (8x8 dimensional).

    Returns
    -------
    (ndarray, ndarray), the projected mean and covariance matrix of the given state estimate.
    """

    std = [self._std_weight_position * mean[3],
           self._std_weight_position * mean[3],
           1e-1,
           self._std_weight_position * mean[3]]
        
    innovation_cov = np.diag(np.square(std))  # 初始化噪聲矩陣R
    mean = np.dot(self._update_mat, mean)  # 將均值向量映射到檢測(cè)空間,即Hx'
    covariance = np.linalg.multi_dot((
        self._update_mat, covariance, self._update_mat.T))  # 將協(xié)方差矩陣映射到檢測(cè)空間,即HP'H^T
    return mean, covariance + innovation_cov


def update(self, mean, covariance, measurement):
    """Run Kalman filter correction step.

    Parameters
    ----------
    mean: ndarra, the predicted state's mean vector (8 dimensional).
    covariance: ndarray, the state's covariance matrix (8x8 dimensional).
    measurement: ndarray, the 4 dimensional measurement vector (x, y, a, h), where (x, y) is the 
                 center position, a the aspect ratio, and h the height of the bounding box.
    Returns
    -------
    (ndarray, ndarray), the measurement-corrected state distribution.
    """

    # 將mean和covariance映射到檢測(cè)空間,得到Hx'和S
    projected_mean, projected_cov = self.project(mean, covariance)
    # 矩陣分解(這一步?jīng)]看懂)
    chol_factor, lower = scipy.linalg.cho_factor(projected_cov, lower=True, check_finite=False)
    # 計(jì)算卡爾曼增益K(這一步?jīng)]看明白是如何對(duì)應(yīng)上公式5的,求線代大佬指教)
    kalman_gain = scipy.linalg.cho_solve(
            (chol_factor, lower), np.dot(covariance, self._update_mat.T).T,
            check_finite=False).T
    # z - Hx'
    innovation = measurement - projected_mean
    # x = x' + Ky
    new_mean = mean + np.dot(innovation, kalman_gain.T)
    # P = (I - KH)P'
    new_covariance = covariance - np.linalg.multi_dot((kalman_gain, projected_cov, kalman_gain.T))
        
    return new_mean, new_covariance

3DeepSort工作流程

DeepSORT對(duì)每一幀的處理流程如下:

檢測(cè)器得到bbox → 生成detections → 卡爾曼濾波預(yù)測(cè)→ 使用匈牙利算法將預(yù)測(cè)后的tracks和當(dāng)前幀中的detecions進(jìn)行匹配(級(jí)聯(lián)匹配和IOU匹配) → 卡爾曼濾波更新

  • Frame 0:檢測(cè)器檢測(cè)到了3個(gè)detections,當(dāng)前沒有任何tracks,將這3個(gè)detections初始化為tracks
  • Frame 1:檢測(cè)器又檢測(cè)到了3個(gè)detections,對(duì)于Frame 0中的tracks,先進(jìn)行預(yù)測(cè)得到新的tracks,然后使用匈牙利算法將新的tracks與detections進(jìn)行匹配,得到(track, detection)匹配對(duì),最后用每對(duì)中的detection更新對(duì)應(yīng)的track

檢測(cè)

使用Yolo作為檢測(cè)器,檢測(cè)當(dāng)前幀中的bbox:

#  demo_yolo3_deepsort.py
def detect(self):
    while self.vdo.grab():
 ...
 bbox_xcycwh, cls_conf, cls_ids = self.yolo3(im)  # 檢測(cè)到的bbox[cx,cy,w,h],置信度,類別id
 if bbox_xcycwh is not None:
         # 篩選出人的類別
         mask = cls_ids == 0
       bbox_xcycwh = bbox_xcycwh[mask]
       bbox_xcycwh[:, 3:] *= 1.2
        cls_conf = cls_conf[mask]
            ...

生成detections

將檢測(cè)到的bbox轉(zhuǎn)換成detections:

#  deep_sort.py
def update(self, bbox_xywh, confidences, ori_img):
    self.height, self.width = ori_img.shape[:2]
    # 提取每個(gè)bbox的feature
    features = self._get_features(bbox_xywh, ori_img)
    # [cx,cy,w,h] -> [x1,y1,w,h]
    bbox_tlwh = self._xywh_to_tlwh(bbox_xywh)
    # 過濾掉置信度小于self.min_confidence的bbox,生成detections
    detections = [Detection(bbox_tlwh[i], conf, features[i]) for i,conf in enumerate(confidences) if conf > self.min_confidence]
    # NMS (這里self.nms_max_overlap的值為1,即保留了所有的detections)
    boxes = np.array([d.tlwh for d in detections])
    scores = np.array([d.confidence for d in detections])
    indices = non_max_suppression(boxes, self.nms_max_overlap, scores)
    detections = [detections[i] for i in indices]
    ...

卡爾曼濾波預(yù)測(cè)階段

使用卡爾曼濾波預(yù)測(cè)前一幀中的tracks在當(dāng)前幀的狀態(tài):

#  track.py
def predict(self, kf):
    """Propagate the state distribution to the current time step using a 
       Kalman filter prediction step.
    Parameters
    ----------
    kf: The Kalman filter.
    """

    self.mean, self.covariance = kf.predict(self.mean, self.covariance)  # 預(yù)測(cè)
    self.age += 1  # 該track自出現(xiàn)以來的總幀數(shù)加1
    self.time_since_update += 1  # 該track自最近一次更新以來的總幀數(shù)加1

匹配

首先對(duì)基于外觀信息的馬氏距離計(jì)算tracks和detections的代價(jià)矩陣,然后相繼進(jìn)行級(jí)聯(lián)匹配和IOU匹配,最后得到當(dāng)前幀的所有匹配對(duì)、未匹配的tracks以及未匹配的detections:

#  tracker.py
def _match(self, detections):
    def gated_metric(racks, dets, track_indices, detection_indices):
        """
        基于外觀信息和馬氏距離,計(jì)算卡爾曼濾波預(yù)測(cè)的tracks和當(dāng)前時(shí)刻檢測(cè)到的detections的代價(jià)矩陣
        """

        features = np.array([dets[i].feature for i in detection_indices])
        targets = np.array([tracks[i].track_id for i in track_indices]
 # 基于外觀信息,計(jì)算tracks和detections的余弦距離代價(jià)矩陣
        cost_matrix = self.metric.distance(features, targets)
 # 基于馬氏距離,過濾掉代價(jià)矩陣中一些不合適的項(xiàng) (將其設(shè)置為一個(gè)較大的值)
        cost_matrix = linear_assignment.gate_cost_matrix(self.kf, cost_matrix, tracks, 
                      dets, track_indices, detection_indices)
        return cost_matrix

    # 區(qū)分開confirmed tracks和unconfirmed tracks
    confirmed_tracks = [i for i, t in enumerate(self.tracks) if t.is_confirmed()]
    unconfirmed_tracks = [i for i, t in enumerate(self.tracks) if not t.is_confirmed()]

    # 對(duì)confirmd tracks進(jìn)行級(jí)聯(lián)匹配
    matches_a, unmatched_tracks_a, unmatched_detections = \
        linear_assignment.matching_cascade(
            gated_metric, self.metric.matching_threshold, self.max_age,
            self.tracks, detections, confirmed_tracks)

    # 對(duì)級(jí)聯(lián)匹配中未匹配的tracks和unconfirmed tracks中time_since_update為1的tracks進(jìn)行IOU匹配
    iou_track_candidates = unconfirmed_tracks + [k for k in unmatched_tracks_a if
                                                 self.tracks[k].time_since_update == 1]
    unmatched_tracks_a = [k for k in unmatched_tracks_a if
                          self.tracks[k].time_since_update != 1]
    matches_b, unmatched_tracks_b, unmatched_detections = \
        linear_assignment.min_cost_matching(
            iou_matching.iou_cost, self.max_iou_distance, self.tracks,
            detections, iou_track_candidates, unmatched_detections)
 
    # 整合所有的匹配對(duì)和未匹配的tracks
    matches = matches_a + matches_b
    unmatched_tracks = list(set(unmatched_tracks_a + unmatched_tracks_b))
    
    return matches, unmatched_tracks, unmatched_detections


# 級(jí)聯(lián)匹配源碼  linear_assignment.py
def matching_cascade(distance_metric, max_distance, cascade_depth, tracks, detections, 
                     track_indices=None, detection_indices=None):
    ...
    unmatched_detections = detection_indice
    matches = []
    # 由小到大依次對(duì)每個(gè)level的tracks做匹配
    for level in range(cascade_depth):
 # 如果沒有detections,退出循環(huán)
        if len(unmatched_detections) == 0:  
            break
 # 當(dāng)前l(fā)evel的所有tracks索引
        track_indices_l = [k for k in track_indices if 
                           tracks[k].time_since_update == 1 + level]
 # 如果當(dāng)前l(fā)evel沒有track,繼續(xù)
        if len(track_indices_l) == 0: 
            continue
  
 # 匈牙利匹配
        matches_l, _, unmatched_detections = min_cost_matching(distance_metric, max_distance, tracks, detections, 
                                                               track_indices_l, unmatched_detections)
        
 matches += matches_l
 unmatched_tracks = list(set(track_indices) - set(k for k, _ in matches))
    return matches, unmatched_tracks, unmatched_detections

卡爾曼濾波更新階段

對(duì)于每個(gè)匹配成功的track,用其對(duì)應(yīng)的detection進(jìn)行更新,并處理未匹配tracks和detections:

def update(self, detections):
"""Perform measurement update and track management.
Parameters
----------
detections: List[deep_sort.detection.Detection]
A list of detections at the current time step.
"""
# 得到匹配對(duì)、未匹配的tracks、未匹配的dectections
matches, unmatched_tracks, unmatched_detections = self._match(detections)

# 對(duì)于每個(gè)匹配成功的track,用其對(duì)應(yīng)的detection進(jìn)行更新
for track_idx, detection_idx in matches:
self.tracks[track_idx].update(self.kf, detections[detection_idx])

# 對(duì)于未匹配的成功的track,將其標(biāo)記為丟失
for track_idx in unmatched_tracks:
self.tracks[track_idx].mark_missed()

# 對(duì)于未匹配成功的detection,初始化為新的track
for detection_idx in unmatched_detections:
self._initiate_track(detections[detection_idx])

...

4參考

[1] SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC

[2] https://github.com/ZQPei/deep_sort_pytorch

[3] https://towardsdatascience.com/computer-vision-for-tracking-8220759eee85

END

分享

收藏

點(diǎn)贊

在看

瀏覽 90
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 久久久婷婷| 久久国产精品精品国产色婷婷 | 久久国产亚洲| 国产成人精品a视频一区| 亚洲视频在线观看中文字幕| 黄色片基地| 色五月婷婷AV| 超碰在线91| 中文字幕精品在线| 河南少妇搡BBBB搡BBBB| 亚洲日韩Av无码中文字幕美国| 国产又爽又黄在线看视频| 艳妇乳肉豪妇荡乳AV无码福利| 超碰在线人人| 久久黄色的| 天堂在线观看av| 熟女熟妇人妻一区二区三区| 清清草在线视频| 亚洲日本中文字幕在线观看| 亚洲欧美激情小说另类| 国产精品日韩| 另类色| 羽月希在线播放| 曰本中文字幕在线视频| 色情一级A片成人片| 黄色片免费观看| 俺去俺来也www色视频| 俺来也俺也去| 色老板在线观看永久免费视频| 91小宝寻花一区二区三区三级| 精品综合网| 草逼视频网| 欧美高潮喷水| 在线无码一区二区三区| 欧美日韩国内| 99热网| 日批免费视频| 91嫩逼| 69成人免费视频| 91福利视频网站| 五月丁香六月婷婷综合| 中文字幕人妻系列| 超碰97免费在线| 精品人妻二区三区蜜桃| 毛片久久久| 性无码一区二区三区在线观看| 日韩一级免费看| 在线伊人| 人人色人人看| 日韩中文字幕网站| 18AV在线观看| 国产AV无码成人精品区| 成人毛片100免费观看| 欧美在线黄片| 91蜜桃网| 91av在线免费观看| 欧美久久网| 人人射人人操| 99久久婷婷国产综合精品草原| 人人爽人人干| 免费激情网站| 亚欧精品久久久久久久久久久| 强开小嫩苞一区二区三区视频| 黄色毛片网站| 男女操逼视频网站免费观看| 无码AV高清| 欧美操逼免费视频| 久久久无码人妻精品无码| 日韩免费在线观看| 蜜乳av红桃嫩久久| 俺去也俺去啦| 亚洲黄色在线观看视频| 久久国产亚洲| 在线a免费| 人妻福利导航| 亚洲涩情91日韩一区二区| 婷婷六月综合| 欧美精品久久| 大香蕉伊人在线观看| 中文字幕伊人| 18禁网址| 亚洲国产精品成人va在线观看| 亚洲国产成人精品综合99| 亚洲日韩欧美国产| 91av一区二区| 国产精品视频色| a网站在线| 蜜臀久久久99久久久久久久| 女生操逼网站| 丝袜足交在线| 亚洲天堂一区二区三区| 国产操片| 老司机永久免费91| 中文无码熟妇一区二区| 久久精品无码一区二区无码性色| 啪啪网站免费看| 97人妻一区二区精品视频| 草草浮力院| 久草福利网| 激情五月天丁香| 成人影音先锋| 亚洲综合日韩在线| 国产av资源| 精品国产免费观看久久久_久久天天| 亚洲美女网站在线观看| 国产波霸爆乳一区二区| 91精品国产一区三一| 午夜激情久久| 午夜无码高清| 亚洲天堂男人| 午夜国产在线观看| 国产午夜激情| 日韩人妻午夜| 操逼三级片| 特写毛茸茸BBwBBwBBw| 久久婷婷五月综合伊人| 国产棈品久久久久久久久久九秃 | 成人网站在线免费观看| 美女久草| 成年人激情网| 久久aaaa| 特大妓女BBwBBWBBw| 免费观看黄色片| jizz在线观看视频| 无码高清视频| 欧美自拍一区| 欧美三级欧美三级三级| 国产免费无码视频| 日韩AV免费电影| 日韩极品视频| 久久久一区二区| 日本成片网| 天天草网| 97精品人妻一区二区三区香蕉 | 欧美精品秘一区二区三区蜜臀| 97超碰人人| 国产又大又粗又爽| 天堂中文8资源在线8| 久久无码专区| 69xx视频| 粉粉嫩嫩的18虎白女| 操比视频| 91东热激情| 免费爱爱视频网站| 又黄又爽的视频| 亚洲成人观看| 精品中文字幕在线观看| 操你啦无码日韩| 一区二区三区麻豆| 亚洲成人无码视频在线观看| a视频免费| 久久凹凸视频| 欧美色成人免费在线视频| 中文字幕免费中文| 亚洲欧美另类色图| 欧美成人超碰| 色老汉视频| 三级片AAA成人免费| 丝袜天堂| 一级免费黄色视频| 操操网| 五月天婷婷视频| 亚洲天堂女| 国产91嫩草乱婬A片2蜜臀| 亚洲天堂无码AV| 免费A网站| 伊人网成人| 青青草免费福利视频| 国产亚洲精品久久久波多野结衣| 亚洲免费观看高清完整版在线观| 中文字幕人妻丰满熟妇| 欧美日韩在线免费观看| 国产精品视频久久久久| 一区二区无码av| 免费A片观看| 亚洲无码综合| 可以看的三级网站| 欧美国产第一页| 思思热在线观看视频| 強姦婬片A片AAA毛片Mⅴ| 天天色伊人| 成人理论片| 一起草在线视频| 在线观看的av| 中文无码人妻少妇| 欧美日韩高清丝袜| 免费在线观看黄视频| 天天操免费视频| 黄色电影免费在线观看| 3D动漫精品啪啪一区二区| 中文字幕巨肉乱码中文乱码| 色悠久久久| 亚洲成人黄色| av一二三区| 韩国人妻无码| 操逼网站免费观看| 欧美性爱香蕉视频| 日韩欧美高清在线| 五月在线视频| 免费看操逼| 高清无码操逼视频| 国产一a毛一a免费观看| 国产在线a| 在线看片AV| 中文字幕免费无码| 天堂在线无码| 国产精品大香蕉| 成人国产三级| 一本色综合亚洲精品| 中文字幕日韩有码| 久久久人妻无码精品蜜桃| 青青草娱乐视频| 东方AV在线播放| 欧美日日| 先锋AV资源在线| 国产丝袜无码| 超碰超碰| 亚洲国产精品成人综合色在线婷婷| 青青草原视频在线| 国产成人网| 91黄色在线视频| 国內精品久久久久久久| 亚洲AV无码成人精品国产五月天| 超碰超爽| 欧美日韩一区在线观看| 肏屄视频免费观看| 亚洲草逼视频| 黄色视频A| 亚洲青青草| 中文字幕你懂的在线三级| 性爱视频99| 国产操逼视频网站| 天堂A片电影网站在线观看| 午夜无码福利在线观看| 黄片日逼| 木下凛凛子AV888AV在线观看| 456成人| 国产在线视频一区| 亚洲精品视频在线观看网站| 久久黄色视屏| 北条麻妃高清无码| 毛片69| 国产成人无码Av片在线公司| 一级A片60分钟免费看| 久久黄色视频免费看| 精品中文字幕在线| 欧美成人视频网站| 婷婷电影网| www.99av| 日韩一级在线| 屁屁影院CCYYCOM国产| 国产一级a一级a免费视频| 人妻77777| 欧美日韩在线视频一区| 成人三级在线观看| 91精品国产一区二区三区四区大 | 久久艹骚逼| 黄色电影中文字幕| 亚洲天堂网站| www.五月天.con| 四虎一区| 国产成人毛片18女人18精品| 日韩一级黄色毛片| 伊人大香蕉网| 婷婷色视频| 残忍另类BBWBBWBBW| 人妻少妇被猛烈进入中文字幕| 久久久久99精品成人片三人毛片 | 暴操美女网站| 99国产热| 国产成人精品视频| 国产精品久久久久久婷婷天堂| 国产欧美性爱| 开心色播五月| www.亚洲| 欧美性猛交一区二区三区| 国产久久久久久久久| 自拍偷拍视频网址| 久草网在线观看| 高清无码自拍| 天堂在线视频免费| 俺来也在线视频| 大香蕉综合| 成人做爰黄片视频免费| 中文国产| 在线伊人网| 欧美色图另类| 日韩无码123区| 午夜成人福利片| 午色婷婷国产无码| 国产黄a| 青青草视频在线观看| 91.xxxx| 人妻精品一区二区三区| 黄色毛片在线播放| 一道本高清无码| 伊人久久大香色综合久久| 色婷婷一区二区三区久久| 久久久久久久久久国产精品免费观看-百度 | 老女人毛片| 黑人AV在线播放| 91人妻人人澡人人澡人人精品| 亚洲国产精品自在自线| 人人干天天干| 91香蕉视频在线| 摸BBB搡BBB搡BBBB| www.骚逼| 99免费在线视频| 男人的天堂在线视频| 久视频在线观看| 免费黄色一级片| 久久久久亚洲AV无码专区成人| 日本欧美亚洲| 偷拍内射| 日韩成人在线免费观看| 福利视频中文字幕| 影音先锋国产资源| 五月天国产视频| 91久久国产综合久| 四川BBB搡BBB爽爽爽欧美| 熟妇人妻中文AV无码| 熟女人妻一区二区三区免费看| 在线观看免费无码| 亚洲avwww| 99久久99九九九99九他书对| 黄网在线观看视频| 韩日中文字幕| 青娱乐亚洲精品视频| 午夜电影福利| 国内免费毛片| 欧美天堂在线观看| 欧美久久婷婷| 亚洲天堂视频在线| 99re视频在线播放| 欧美成人精品一区二区三区| 精品人妻一区二区三区蜜桃| 日韩一级黄| 国产网站视频| 欧美三区| 2025中文字幕在线| 97超碰人人| 成人网址大全| 中文字幕乱伦性爱| 九色PORN视频成人蝌蚪自拍 | 一级黄色免费看| 黄色视频一区二区| 国产在线精品观看| 怡春院日韩| 黄片一区二区三区| 中文字幕无码综合| 黄色av免费在线观看| 天堂国产一区二区三区| 欧美黄色一级视频| 日韩无码视频观看| 欧美黄片免费看| 成年人在线播放| 91视频成人版一区二区| 国产插逼视频| 91.射| 成人精品午夜无码免费| 免费在线观看视频a| 91你懂的| 性九九九九九九| 欧美性视频网站| 亚洲无码观看视频| 欧美性爱内射| 无码中文字幕网站| 亚洲黄色在线观看视频| 免费毛片视频| 大香蕉东京热| 亚洲综合免费| 影音先锋国产资源| 国产乱子伦一区二区三| 欧美做爱网站| 欧美午夜伦理| 麻豆一区视频| 人妻人人操人人爽| 人人妻人人操人人干| 亚洲成人一区二区三区| 成人爽爽视频| 婷婷五月天激情丁香| 亚洲精品国产精品国自产曰本| 黑种人配中国少妇HD| 色老板在线观看永久免费视频| 黄色在线视频观看| 亚洲中文无码第一页| 欧美成人精品激情在线视频| 国产欧美综合在线观看| 大鸡巴在线观看| 无码欧美成人AAAA三区在线| 成人三级电影网| 免费看黄片的网站| 清清草在线视频| www.天天干| 激情综合久久| 大香蕉亚洲网| 欧美视频在线观看免费| 亚洲AV无码成人专区| 日韩黄色电影在线免费观看| 国产性爱网址| 中文在线A∨在线| 国产激情在线观看| 无码人妻精品一区二区三区蜜臀百度 | 欧美国产综合在线| 国产精品HongKong麻豆| 福利导航在线| 日韩欧美在线一区| 亚洲一本在线电影av| 国产情侣在线视频| 男人天堂资源网| 日韩人妻丰满无码区A片| WWW久久| 中文字幕+乱码+中文字幕一区| 亚洲人成在线观看| 911香蕉视频| 台湾成人在线视频| 国产一区二区av| 江苏妇搡BBB搡BBBB| 欧美爱爱视屏| 中文字幕av久久久久久欧洲尺码| 91无码秘蜜桃一区二区三区-百度| 免费av毛片| 久久久久久久国产精品| 天天干无码| 超碰最新在线观看| 性爱乱伦视频| 欧美在线大香蕉| 688AV秘无码一区二区| 婷婷欧美| 白嫩在线| 国产精品美女久久久| 日韩三级电影| 麻豆av在线观看| 一级AAAAA片裸体做受| 日韩精品成人专区无码| 51av在线| 制服丝袜在线视频| 牛牛精品视频一区二区| 日本A∨| 五月天久久久久| 中文字幕在线欧美| 国产福利91精品一区二区三区 | 一本无码视频| 麻豆性交| 韩国AV在线| 在线观看污网站| 天堂v视频| 亚洲天媒在线播放| 熟女三区| h片在线免费观看视频| 超碰91免费在线观看| 色播五月丁香| 久久XX| 久久久黄色电影| 久久久中文字幕| 韩国无码免费| 欧美一级AA| 日本中文字幕精品| 天天影视综合网免费观看电视剧国产 | 午夜福利无码电影| 婷婷草逼| 久草中文视频| AV网站在线免费观看| 无码在线看| 香蕉操逼小视频| 中国字幕在线观看韩国电影| 三级黄色视频在线观看| 苍井空精毛片精品久久久| 免费在线a| 日韩成人A片| 97人妻人人澡人人爽人人| 国产女人18毛片水18精品软件| 影音先锋一区二区三区| AV一区二区三区四区| 婷婷69| 成人水蜜桃| 爱搞视频在线观看| 东方AV在线播放| 亚洲视频大全| 日韩久久久| 99热免费| 国产一级a毛一级做a爱| 91.www91成人影视在线观看91成人网址9| 亚洲视频在线观| 男女操逼视频网站免费观看| 老司机免费视频| 伊人久久视频| www在线播放| 人人妻日日摸狠狠躁| 亚洲中文字幕第一页| 操天天操| 日韩在线观看一区二区| 蜜桃一区| 国产毛片久久久久久国产毛片| 亚洲视频网| 人妻成人网| 国产午夜激情视频| 91AV在线观看视频| 2025av中文字幕| 日韩无码播放| 一区二区三区视频在线| jlzzzjlzzz国产免费观看| 婷色五月| 91夫妻交友视频| 成人做爰A片一区二区app| 97久久人人| 特级西西人体444www高清大胆 | 老司机免费福利视频| 中文字幕第10页| 影音先锋AV资源在线| 婷婷A片| 日本免费黄色| 99精品视频在线观看免费| 男人午夜天堂| 国产午夜精品一区二区三区牛牛| 国产亚洲婷婷| 人人爱人人妻人人操| 麻豆乱码国产一区二区三区| 亚洲欧洲精品在线| 久久永久免费视频| 欧美AAAAAAAAAA特级| 操逼网站在线| 天堂VA蜜桃一区二区三区| 久久久久大香蕉| 国产人人色| 2021国产视频| 国产日韩二区| 亚洲日韩网站| 韩国中文字幕HD久久精品| 久久大香| 中文字幕人妻丰满熟妇| 中文字幕一区二区二三区四区| 婷婷69| 欧美日韩一级二级三级| 九九九热精品| 久久午夜无码鲁丝片午夜精品| 日韩av电影在线观看| 国产福利一区二区| 91热久久| 乱伦AV片| 免费在线观看内射| 大鸡吧大香蕉| 国产精品HongKong麻豆| 91视频亚洲| 五月综合久久| 性满足BBWBBWBBW| 围产精品久久久久久久| 亚洲精品伦理| 久久久久99精品成人片直播| 91久久久久久久91| 艾操网| 五月丁香婷婷综合| 黄色免费大片| 亚洲乱伦中文字幕| 欧美内射网站| 影音先锋亚洲AV| 欧美成人手机在线观看| 免费观看黄色一级片| 三级片在线观看网站| 亚洲高清无码在线观看| 久久久91| 国产成人精品在线| 丁香五月激情小说| 波多野结衣视频一区| 在线视频99| 秋霞丝鲁片一区二区三区手机在绒免| 午夜成人国产| 亚洲日韩免费在线观看| 一本道不卡色色| 嫩草视频在线观看| 日本黄色免费| 精品无码免费| 天天肏天天干| 午夜精东影业传媒在线观看| 视频一区二区三| 中文无码在线观看中文字幕av中文 | 大香蕉综合| 一区免费视频| 麻豆精品久久久久久久99蜜桃| 欧美一级婬片免费视频华泰老添妇| 国产日韩在线观看视频| 亚洲天堂无码高清| 欧美射精视频| 久久午夜无码鲁丝| 三级在线网站| 97色吧| 大香蕉大香蕉免费网| 亚洲国产精品18久久久久久 | 日韩a在线观看| 在线无.码| 99免费热视频| 色呦呦视频| 午夜操B| 69av视频在线观看| 六月丁香久久| 国产成人一级| 日韩av三级在线观看| 黄色三级网站| 色网在线观看| 夜夜嗨老熟女AV一区二区三区 | 五月天婷婷激情| 在线中文字幕视频| 97在线免费视频| 国产精品久久久久久久久久久免费看| 欧美一级黄色A片| 国产一级片免费看| 开心深爱激情网| 久久久黄色视频| 日本天天操| 精东AV| 91九色国产| 99热这里只有精| 色网站在线| 夜夜操天天日| 一区二区三区观看| 一插菊花综合| 日日摸夜夜| 成人性爱视频网站| 日韩网站在线观看| 国产乱人伦无码视频| 国产成人午夜高潮毛片| 91欧美性爱| 黄色视频A| 亚洲第一色| 99久久国产热无码精品免费| 亚洲成人网站免费观看| 成人综合在线观看| 亚洲日韩一级| 91中文字幕网| 蜜桃亚洲AV无码一区二区三区| 国产女人高潮毛片| 免费黄色福利视频| 亚洲砖区区免费| 亚洲色操| 秘亚洲国产精品成人网站| 人妻斩り43歳| 亚洲精选中文字幕| 狠狠干伊人| 特级婬片A片AAA毛片AA做头| 亚洲一级免费视频| 天天操夜夜操人人操| 亚洲天码中字| 婷婷五月综合在线| 久草免费电影| 免费看黄片,在线观看| 日本乱伦中文字幕| 中文在线字幕电视剧免费平台 | 亚洲日韩Av无码中文字幕美国| 免费一级黄色视频| 中文国产| av在线无码| 国产精品一级| 91性爱视频| 亚洲无码一级电影| 最新久欠一区二区免费看| 国产精品啪啪啪| 国产一视频| 亚洲精品18在线观看| 无码精品一区二区免费| 亚洲无码少妇| 无码人妻一区二区三一区免费n狂飙| 熟女资源网| 日韩高清欧美| 国产毛片久久久久久久| 日韩香蕉视频| 国产精品不卡在线观看| 一级国产欧美成人A片| 亚洲国产精品成人久久蜜臀| 蜜桃BBwBBWBBwBBw| 91探花视频精选在线播放| 搡BBBB搡BBB搡五十| 欧美操比视频| 一插菊花综合网| 亚洲无码中文人妻| 久久久久久久久久久久久久久久久久免费精品分类视频 | 免费观看一级A片| 国产AV无码影院| 亚洲精品aaa| 国产亚洲99久久精品熟女| 久操网在线| 一级黄影| 天天日天天撸| 日韩少妇视频| 操B视频在线观看| 蜜桃视频网站| 99热精品在线| 国产中文人人国际| 日日碰狠狠躁久久躁婷婷| 欧美黄网站在线观看| 阿v视频在线观看| 97人妻人人澡人人爽人人| 在线久草| 日韩欧美一| 四虎性爱| 蜜桃av秘无码一区三区四| 高清无码免费| 就爱操逼网| 国产精品一卡二卡三卡| 精品人妻一区二区三区蜜桃| 黄色电影大香蕉| 日韩AV一级| 免费一级A片在线播放| 18岁毛片| 免费在线观看A片| 一级黄色毛片| 成人AV在线一区二区| 久久yy| 亚洲一线视频| 高清无码第一页| 在线免费看A片| 波多野结衣亚洲无码| 无码人妻一区二区三区精品不付款 | 欧美国产在线观看综合| 黄一级| 国产精品中文字幕在线观看| 一区免费在线| 北条麻妃毛片| 少妇黄色视频| 牛牛Av| 日韩一级一片| 国产精品一级无码免费播放| 高清无码视频直接看| 三级黄色免费网站| 日韩婬乱片A片AAA真人视频| 国精产品一区一区三区四川| 天堂网在线视频| 日韩成人无码全裸视频| jizz免费视频| 操逼999| 久久婷五月天| 久久99久久99精品免视看婷婷| 中日韩一级片| 中文无码在线观看| 手机AV免费| 国内无码视频| 成人精品123| 操逼在线看| www香蕉成人片com| 中文字幕一级A片免费看| 国产一区免费观看| 免费在线观看AV片| 日韩黄色在线视频| 中文字幕+乱码+中文乱码电影| 免费无码视频在线观看| 色mm在线播放| 国产在线色视频| 翔田千里无码AV在线观看| 波多野结衣亚洲视频| 欧美三级精品| 亚洲色图15P| 黄网| 日韩中文字幕专区| 自拍偷拍网址| 西西444WWW无码大胆| 伊人成人在线观看| 亚洲综合免费| 国精产品一区一区三区有限公司杨 | 日韩毛片网站| 人妻精品一卡二卡| 日韩无码中文字| 狠狠干狠狠艹| 久久草大香蕉| 乱婬妺妺躁爽A片| 日韩性爱视屏| 欧美一区二区三区在线播放| 人人爽人人操人人| 亚洲精品在线看| 男女啪啪免费| 麻豆91久久久| 日韩无码视频一区二区| 国产高潮在线| 白浆av| 日韩视频播放在线综合| 男女一区| 欧美精品亚洲| 精品码一区二在线观看| 人妻无码中文字幕免费视频蜜桃| 亚洲A网站| 蜜臀AV一区二区| 成人欧美精品区二区三| 強姧伦一区二区三区在线播放| 特黄特黄免费看| 久草视频2| 国产一片黑夜内射| 91久久国产综合| 狼人社區91國產精品| 香蕉国产在线| 亚洲视频欧美| 成人在线精品| 国产欧美在线综合| 97免费视频在线观看| 伊人69| 日本久久电影| 成人做爰100部片视频| 逼逼AV| 亚洲国产成人91PORN| 日韩黄色三级片| 熟妇人妻久久中文字幕| 久久久黄色电影| 中文字幕日本在线| 91黄色片| 中国极品少妇XXX| 日韩有码中文字幕在线观看| 中文字幕精品亚洲熟女| 91精品又粗又猛又爽| 9久精品| 亚洲无码精品一区二区三区| 久久亚洲国产| 午夜福利手机在线| 亚洲免费大片| 国产女人18毛片水18精| 人妻精品| 黄色激情av| 一区在线免费观看| 91大鸡巴| 九九九在线观看视频| 免费无码婬片aaaa| 亚洲精品911| 91精品无码| 欧美老司机| 久久久久麻豆V国产精华液好用吗 色噜噜狠狠一区二区三区牛牛影视 | 国产成人宗合| 在线久操| 国内精品卡一卡二卡三| 五月天激情网站| re久久| 囯产精品一区二区三区线一牛影视1 | 亚洲XXXXX| 大鸡巴视频在线观看| 一级a片激情啪啪免费观| 逼逼AV| 乱子伦国产精品视频| 男人色天堂| 免费观看黄片网站| 国产AV无码成人精品区| 九一精品| 色优久久| 未满十八18禁止免费无码网站| 欧美日韩在线看| 日韩成人在线播放| 亚洲福利久久| 婷婷伊人中文字幕| 韩国无码一区二区三区| 2016av天堂网| 亚洲日韩精品无码| 久草超碰在线| 美少妇AV| 欧美黄色免费在线观看| 亚洲A∨无码无在线观看| 中文字幕11页| 欧美日本成人网站入口| 天天天日天天天天天天天日歌词 | 亚洲午夜福利视频| 综合网操笔| 国产免费自拍视频| 最全av在线| 女生自慰网站免费| 97视频在线免费观看| 羽月希在线播放| 老熟女伦一区二区三区| 97碰碰碰| 天天撸免费视频| 中文在线一区| 九色91视频| а√天堂中文官网8| 成人黄色视频免费| 欧美无人区码suv| 天天撸天天日| 亚洲成人av在线播放| 免费看成人片| 看一级黄色毛片| 亚洲天堂在线观看免费视频| 亚洲国产精品久久人人爱| 黄色福利网址| 日本边摸边吻奶边做爰| 亚洲AV高清无码| 国产女同在线观看| 在线网址你懂的| 日韩无码久久久| 丁香六月婷婷| 免费黄色av网址| 亚洲精品成a人在线观看| 天天爽爽爽爽爽成人片| 天天干妹子| 日韩黄色电影网站| 自慰喷水在线观看| 成人做爰69片免费观看| 91视频美女内射| 午夜性爱视频| www国产亚洲精品久久网站| 国产成人三级在线播放| 青娱乐AV在线| 特黄特色免费大片| 丁香五月中文| 夜夜骚av一区二区三区| 国产熟女AV| 波多野结衣东京热| 日韩乱轮小说与视频| 波多野结衣一级婬片A片免费下载| 成人无码精品|