日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 知識百科

AI實戰,用Python玩個自動駕駛!

來源: 責編: 時間:2023-08-07 16:30:09 299觀看
導讀 安裝環境gym是用于開發和比較強化學習算法的工具包,在python中安裝gym庫和其中子場景都較為簡便。安裝gym:pip install gym安裝自動駕駛模塊,這里使用 Edouard Leurent 發布在

 安裝環境RRi28資訊網——每日最新資訊28at.com

gym是用于開發和比較強化學習算法的工具包,在python中安裝gym庫和其中子場景都較為簡便。RRi28資訊網——每日最新資訊28at.com

安裝gym:RRi28資訊網——每日最新資訊28at.com

pip install gymRRi28資訊網——每日最新資訊28at.com

安裝自動駕駛模塊,這里使用 Edouard Leurent 發布在 github 上的包 highway-env:RRi28資訊網——每日最新資訊28at.com

pip install --user git+https://github.com/eleurent/highway-envRRi28資訊網——每日最新資訊28at.com

其中包含6個場景:RRi28資訊網——每日最新資訊28at.com

高速公路——“highway-v0” 匯入——“merge-v0” 環島——“roundabout-v0” 泊車——“parking-v0” 十字路口——“intersection-v0” 賽車道——“racetrack-v0”RRi28資訊網——每日最新資訊28at.com

詳細文檔可以參考這里:RRi28資訊網——每日最新資訊28at.com

https://highway-env.readthedocs.io/en/latest/RRi28資訊網——每日最新資訊28at.com

配置環境RRi28資訊網——每日最新資訊28at.com

安裝好后即可在代碼中進行實驗(以高速公路場景為例):RRi28資訊網——每日最新資訊28at.com

import gymRRi28資訊網——每日最新資訊28at.com
import highway_envRRi28資訊網——每日最新資訊28at.com
%matplotlib inlineRRi28資訊網——每日最新資訊28at.com
env = gym.make('highway-v0')RRi28資訊網——每日最新資訊28at.com
env.reset()RRi28資訊網——每日最新資訊28at.com
for _ in range(3):RRi28資訊網——每日最新資訊28at.com
action = env.action_type.actions_indexes["IDLE"]RRi28資訊網——每日最新資訊28at.com
obs, reward, done, info = env.step(action)RRi28資訊網——每日最新資訊28at.com
env.render()RRi28資訊網——每日最新資訊28at.com

運行后會在模擬器中生成如下場景:RRi28資訊網——每日最新資訊28at.com

RRi28資訊網——每日最新資訊28at.com

env類有很多參數可以配置,具體可以參考原文檔。RRi28資訊網——每日最新資訊28at.com

訓練模型 1、數據處理RRi28資訊網——每日最新資訊28at.com

(1)stateRRi28資訊網——每日最新資訊28at.com

highway-env包中沒有定義傳感器,車輛所有的state (observations) 都從底層代碼讀取,節省了許多前期的工作量。根據文檔介紹,state (ovservations) 有三種輸出方式:Kinematics,Grayscale Image和Occupancy grid。RRi28資訊網——每日最新資訊28at.com

KinematicsRRi28資訊網——每日最新資訊28at.com

輸出V*F的矩陣,V代表需要觀測的車輛數量(包括ego vehicle本身),F代表需要統計的特征數量。例:RRi28資訊網——每日最新資訊28at.com

數據生成時會默認歸一化,取值范圍:[100, 100, 20, 20],也可以設置ego vehicle以外的車輛屬性是地圖的絕對坐標還是對ego vehicle的相對坐標。RRi28資訊網——每日最新資訊28at.com

在定義環境時需要對特征的參數進行設定:RRi28資訊網——每日最新資訊28at.com

config = RRi28資訊網——每日最新資訊28at.com
{RRi28資訊網——每日最新資訊28at.com
"observation": RRi28資訊網——每日最新資訊28at.com
{RRi28資訊網——每日最新資訊28at.com
"type": "Kinematics",RRi28資訊網——每日最新資訊28at.com
#選取5輛車進行觀察(包括ego vehicle)RRi28資訊網——每日最新資訊28at.com
"vehicles_count": 5, RRi28資訊網——每日最新資訊28at.com
#共7個特征RRi28資訊網——每日最新資訊28at.com
"features": ["presence", "x", "y", "vx", "vy", "cos_h", "sin_h"], RRi28資訊網——每日最新資訊28at.com
"features_range": RRi28資訊網——每日最新資訊28at.com
{RRi28資訊網——每日最新資訊28at.com
"x": [-100, 100],RRi28資訊網——每日最新資訊28at.com
"y": [-100, 100],RRi28資訊網——每日最新資訊28at.com
"vx": [-20, 20],RRi28資訊網——每日最新資訊28at.com
"vy": [-20, 20]RRi28資訊網——每日最新資訊28at.com
},RRi28資訊網——每日最新資訊28at.com
"absolute": False,RRi28資訊網——每日最新資訊28at.com
"order": "sorted"RRi28資訊網——每日最新資訊28at.com
},RRi28資訊網——每日最新資訊28at.com
"simulation_frequency": 8, # [Hz]RRi28資訊網——每日最新資訊28at.com
"policy_frequency": 2, # [Hz]RRi28資訊網——每日最新資訊28at.com
}RRi28資訊網——每日最新資訊28at.com

Grayscale ImageRRi28資訊網——每日最新資訊28at.com

生成一張W*H的灰度圖像,W代表圖像寬度,H代表圖像高度RRi28資訊網——每日最新資訊28at.com

Occupancy gridRRi28資訊網——每日最新資訊28at.com

生成一個WHF的三維矩陣,用W*H的表格表示ego vehicle周圍的車輛情況,每個格子包含F個特征。RRi28資訊網——每日最新資訊28at.com

(2) actionRRi28資訊網——每日最新資訊28at.com

highway-env包中的action分為連續和離散兩種。連續型action可以直接定義throttle和steering angle的值,離散型包含5個meta actions:RRi28資訊網——每日最新資訊28at.com

ACTIONS_ALL = {RRi28資訊網——每日最新資訊28at.com
0: 'LANE_LEFT',RRi28資訊網——每日最新資訊28at.com
1: 'IDLE',RRi28資訊網——每日最新資訊28at.com
2: 'LANE_RIGHT',RRi28資訊網——每日最新資訊28at.com
3: 'FASTER',RRi28資訊網——每日最新資訊28at.com
4: 'SLOWER'RRi28資訊網——每日最新資訊28at.com
}RRi28資訊網——每日最新資訊28at.com

(3) rewardRRi28資訊網——每日最新資訊28at.com

highway-env包中除了泊車場景外都采用同一個reward function:RRi28資訊網——每日最新資訊28at.com

RRi28資訊網——每日最新資訊28at.com

這個function只能在其源碼中更改,在外層只能調整權重。RRi28資訊網——每日最新資訊28at.com

(泊車場景的reward function原文檔里有)RRi28資訊網——每日最新資訊28at.com

2、搭建模型RRi28資訊網——每日最新資訊28at.com

DQN網絡,我采用第一種state表示方式——Kinematics進行示范。由于state數據量較小(5輛車*7個特征),可以不考慮使用CNN,直接把二維數據的size[5,7]轉成[1,35]即可,模型的輸入就是35,輸出是離散action數量,共5個。RRi28資訊網——每日最新資訊28at.com

import torchRRi28資訊網——每日最新資訊28at.com
import torch.nn as nnRRi28資訊網——每日最新資訊28at.com
from torch.autograd import VariableRRi28資訊網——每日最新資訊28at.com
import torch.nn.functional as FRRi28資訊網——每日最新資訊28at.com
import torch.optim as optimRRi28資訊網——每日最新資訊28at.com
import torchvision.transforms as TRRi28資訊網——每日最新資訊28at.com
from torch import FloatTensor, LongTensor, ByteTensorRRi28資訊網——每日最新資訊28at.com
from collections import namedtupleRRi28資訊網——每日最新資訊28at.com
import random RRi28資訊網——每日最新資訊28at.com
Tensor = FloatTensorRRi28資訊網——每日最新資訊28at.com
EPSILON = 0 # epsilon used for epsilon greedy approachRRi28資訊網——每日最新資訊28at.com
GAMMA = 0.9RRi28資訊網——每日最新資訊28at.com
TARGET_NETWORK_REPLACE_FREQ = 40 # How frequently target netowrk updatesRRi28資訊網——每日最新資訊28at.com
MEMORY_CAPACITY = 100RRi28資訊網——每日最新資訊28at.com
BATCH_SIZE = 80RRi28資訊網——每日最新資訊28at.com
LR = 0.01 # learning rateRRi28資訊網——每日最新資訊28at.com
class DQNNet(nn.Module):RRi28資訊網——每日最新資訊28at.com
def __init__(self):RRi28資訊網——每日最新資訊28at.com
super(DQNNet,self).__init__() RRi28資訊網——每日最新資訊28at.com
self.linear1 = nn.Linear(35,35)RRi28資訊網——每日最新資訊28at.com
self.linear2 = nn.Linear(35,5) RRi28資訊網——每日最新資訊28at.com
def forward(self,s):RRi28資訊網——每日最新資訊28at.com
s=torch.FloatTensor(s) RRi28資訊網——每日最新資訊28at.com
s = s.view(s.size(0),1,35) RRi28資訊網——每日最新資訊28at.com
s = self.linear1(s)RRi28資訊網——每日最新資訊28at.com
s = self.linear2(s)RRi28資訊網——每日最新資訊28at.com
return s RRi28資訊網——每日最新資訊28at.com
class DQN(object):RRi28資訊網——每日最新資訊28at.com
def __init__(self):RRi28資訊網——每日最新資訊28at.com
self,self.target_net = DQNNet(),DQNNet() RRi28資訊網——每日最新資訊28at.com
self.learn_step_counter = 0 RRi28資訊網——每日最新資訊28at.com
self.memory = []RRi28資訊網——每日最新資訊28at.com
self.position = 0 RRi28資訊網——每日最新資訊28at.com
self.capacity = MEMORY_CAPACITY RRi28資訊網——每日最新資訊28at.com
self.optimizer = torch.optim.Adam(self.parameters(), lr=LR)RRi28資訊網——每日最新資訊28at.com
self.loss_func = nn.MSELoss()RRi28資訊網——每日最新資訊28at.com
def choose_action(self,s,e):RRi28資訊網——每日最新資訊28at.com
x=np.expand_dims(s, axis=0)RRi28資訊網——每日最新資訊28at.com
if np.random.uniform() < 1-e: RRi28資訊網——每日最新資訊28at.com
actions_value = self.forward(x) RRi28資訊網——每日最新資訊28at.com
action = torch.max(actions_value,-1)[1].data.numpy()RRi28資訊網——每日最新資訊28at.com
action = action.max() RRi28資訊網——每日最新資訊28at.com
else: RRi28資訊網——每日最新資訊28at.com
action = np.random.randint(0, 5)RRi28資訊網——每日最新資訊28at.com
return actionRRi28資訊網——每日最新資訊28at.com
def push_memory(self, s, a, r, s_):RRi28資訊網——每日最新資訊28at.com
if len(self.memory) < self.capacity:RRi28資訊網——每日最新資訊28at.com
self.memory.append(None)RRi28資訊網——每日最新資訊28at.com
self.memory[self.position] = Transition(torch.unsqueeze(torch.FloatTensor(s), 0),torch.unsqueeze(torch.FloatTensor(s_), 0),RRi28資訊網——每日最新資訊28at.com
torch.from_numpy(np.array([a])),torch.from_numpy(np.array([r],dtype='float32')))#RRi28資訊網——每日最新資訊28at.com
self.position = (self.position + 1) % self.capacityRRi28資訊網——每日最新資訊28at.com
def get_sample(self,batch_size):RRi28資訊網——每日最新資訊28at.com
sample = random.sample(self.memory,batch_size)RRi28資訊網——每日最新資訊28at.com
return sampleRRi28資訊網——每日最新資訊28at.com
def learn(self):RRi28資訊網——每日最新資訊28at.com
if self.learn_step_counter % TARGET_NETWORK_REPLACE_FREQ == 0:RRi28資訊網——每日最新資訊28at.com
self.target_net.load_state_dict(self.state_dict())RRi28資訊網——每日最新資訊28at.com
self.learn_step_counter += 1RRi28資訊網——每日最新資訊28at.com
transitions = self.get_sample(BATCH_SIZE)RRi28資訊網——每日最新資訊28at.com
batch = Transition(*zip(*transitions))RRi28資訊網——每日最新資訊28at.com
b_s = Variable(torch.cat(batch.state))RRi28資訊網——每日最新資訊28at.com
b_s_ = Variable(torch.cat(batch.next_state))RRi28資訊網——每日最新資訊28at.com
b_a = Variable(torch.cat(batch.action))RRi28資訊網——每日最新資訊28at.com
b_r = Variable(torch.cat(batch.reward)) RRi28資訊網——每日最新資訊28at.com
q_eval = self.forward(b_s).squeeze(1).gather(1,b_a.unsqueeze(1).to(torch.int64)) RRi28資訊網——每日最新資訊28at.com
q_next = self.target_net.forward(b_s_).detach() #RRi28資訊網——每日最新資訊28at.com
q_target = b_r + GAMMA * q_next.squeeze(1).max(1)[0].view(BATCH_SIZE, 1).t() RRi28資訊網——每日最新資訊28at.com
loss = self.loss_func(q_eval, q_target.t()) RRi28資訊網——每日最新資訊28at.com
self.optimizer.zero_grad() # reset the gradient to zero RRi28資訊網——每日最新資訊28at.com
loss.backward()RRi28資訊網——每日最新資訊28at.com
self.optimizer.step() # execute back propagation for one step RRi28資訊網——每日最新資訊28at.com
return lossRRi28資訊網——每日最新資訊28at.com
Transition = namedtuple('Transition',('state', 'next_state','action', 'reward'))RRi28資訊網——每日最新資訊28at.com
3、運行結果RRi28資訊網——每日最新資訊28at.com

各個部分都完成之后就可以組合在一起訓練模型了,流程和用CARLA差不多,就不細說了。RRi28資訊網——每日最新資訊28at.com

初始化環境(DQN的類加進去就行了):RRi28資訊網——每日最新資訊28at.com

import gymRRi28資訊網——每日最新資訊28at.com
import highway_envRRi28資訊網——每日最新資訊28at.com
from matplotlib import pyplot as pltRRi28資訊網——每日最新資訊28at.com
import numpy as npRRi28資訊網——每日最新資訊28at.com
import timeRRi28資訊網——每日最新資訊28at.com
config = RRi28資訊網——每日最新資訊28at.com
{RRi28資訊網——每日最新資訊28at.com
"observation": RRi28資訊網——每日最新資訊28at.com
{RRi28資訊網——每日最新資訊28at.com
"type": "Kinematics",RRi28資訊網——每日最新資訊28at.com
"vehicles_count": 5,RRi28資訊網——每日最新資訊28at.com
"features": ["presence", "x", "y", "vx", "vy", "cos_h", "sin_h"],RRi28資訊網——每日最新資訊28at.com
"features_range": RRi28資訊網——每日最新資訊28at.com
{RRi28資訊網——每日最新資訊28at.com
"x": [-100, 100],RRi28資訊網——每日最新資訊28at.com
"y": [-100, 100],RRi28資訊網——每日最新資訊28at.com
"vx": [-20, 20],RRi28資訊網——每日最新資訊28at.com
"vy": [-20, 20]RRi28資訊網——每日最新資訊28at.com
},RRi28資訊網——每日最新資訊28at.com
"absolute": False,RRi28資訊網——每日最新資訊28at.com
"order": "sorted"RRi28資訊網——每日最新資訊28at.com
},RRi28資訊網——每日最新資訊28at.com
"simulation_frequency": 8, # [Hz]RRi28資訊網——每日最新資訊28at.com
"policy_frequency": 2, # [Hz]RRi28資訊網——每日最新資訊28at.com
}RRi28資訊網——每日最新資訊28at.com
env = gym.make("highway-v0")RRi28資訊網——每日最新資訊28at.com
env.configure(config)RRi28資訊網——每日最新資訊28at.com

訓練模型:RRi28資訊網——每日最新資訊28at.com

dqn=DQN()RRi28資訊網——每日最新資訊28at.com
count=0RRi28資訊網——每日最新資訊28at.com
reward=[]RRi28資訊網——每日最新資訊28at.com
avg_reward=0RRi28資訊網——每日最新資訊28at.com
all_reward=[]RRi28資訊網——每日最新資訊28at.com
time_=[]RRi28資訊網——每日最新資訊28at.com
all_time=[]RRi28資訊網——每日最新資訊28at.com
collision_his=[]RRi28資訊網——每日最新資訊28at.com
all_collision=[]RRi28資訊網——每日最新資訊28at.com
while True:RRi28資訊網——每日最新資訊28at.com
done = False RRi28資訊網——每日最新資訊28at.com
start_time=time.time()RRi28資訊網——每日最新資訊28at.com
s = env.reset()RRi28資訊網——每日最新資訊28at.com
while not done:RRi28資訊網——每日最新資訊28at.com
e = np.exp(-count/300) #隨機選擇action的概率,隨著訓練次數增多逐漸降低RRi28資訊網——每日最新資訊28at.com
a = dqn.choose_action(s,e)RRi28資訊網——每日最新資訊28at.com
s_, r, done, info = env.step(a)RRi28資訊網——每日最新資訊28at.com
env.render()RRi28資訊網——每日最新資訊28at.com
dqn.push_memory(s, a, r, s_)RRi28資訊網——每日最新資訊28at.com
if ((dqn.position !=0)&(dqn.position % 99==0)):RRi28資訊網——每日最新資訊28at.com
loss_=dqn.learn()RRi28資訊網——每日最新資訊28at.com
count+=1RRi28資訊網——每日最新資訊28at.com
print('trained times:',count)RRi28資訊網——每日最新資訊28at.com
if (count%40==0):RRi28資訊網——每日最新資訊28at.com
avg_reward=np.mean(reward)RRi28資訊網——每日最新資訊28at.com
avg_time=np.mean(time_)RRi28資訊網——每日最新資訊28at.com
collision_rate=np.mean(collision_his)RRi28資訊網——每日最新資訊28at.com
all_reward.append(avg_reward)RRi28資訊網——每日最新資訊28at.com
all_time.append(avg_time)RRi28資訊網——每日最新資訊28at.com
all_collision.append(collision_rate)RRi28資訊網——每日最新資訊28at.com
plt.plot(all_reward)RRi28資訊網——每日最新資訊28at.com
plt.show()RRi28資訊網——每日最新資訊28at.com
plt.plot(all_time)RRi28資訊網——每日最新資訊28at.com
plt.show()RRi28資訊網——每日最新資訊28at.com
plt.plot(all_collision)RRi28資訊網——每日最新資訊28at.com
plt.show()RRi28資訊網——每日最新資訊28at.com
reward=[]RRi28資訊網——每日最新資訊28at.com
time_=[]RRi28資訊網——每日最新資訊28at.com
collision_his=[]RRi28資訊網——每日最新資訊28at.com
s = s_RRi28資訊網——每日最新資訊28at.com
reward.append(r) RRi28資訊網——每日最新資訊28at.com
end_time=time.time()RRi28資訊網——每日最新資訊28at.com
episode_time=end_time-start_timeRRi28資訊網——每日最新資訊28at.com
time_.append(episode_time)RRi28資訊網——每日最新資訊28at.com
is_collision=1 if info['crashed']==True else 0RRi28資訊網——每日最新資訊28at.com
collision_his.append(is_collision)RRi28資訊網——每日最新資訊28at.com

我在代碼中添加了一些畫圖的函數,在運行過程中就可以掌握一些關鍵的指標,每訓練40次統計一次平均值。RRi28資訊網——每日最新資訊28at.com

平均碰撞發生率:RRi28資訊網——每日最新資訊28at.com

RRi28資訊網——每日最新資訊28at.com

epoch平均時長(s):RRi28資訊網——每日最新資訊28at.com

RRi28資訊網——每日最新資訊28at.com

平均reward:RRi28資訊網——每日最新資訊28at.com

RRi28資訊網——每日最新資訊28at.com

可以看出平均碰撞發生率會隨訓練次數增多逐漸降低,每個epoch持續的時間會逐漸延長(如果發生碰撞epoch會立刻結束)RRi28資訊網——每日最新資訊28at.com

總結RRi28資訊網——每日最新資訊28at.com

相比于模擬器CARLA,highway-env環境包明顯更加抽象化,用類似游戲的表示方式,使得算法可以在一個理想的虛擬環境中得到訓練,而不用考慮數據獲取方式、傳感器精度、運算時長等現實問題。對于端到端的算法設計和測試非常友好,但從自動控制的角度來看,可以入手的方面較少,研究起來不太靈活。RRi28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-119-2267-0.htmlAI實戰,用Python玩個自動駕駛!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 無人出租車被警察截停后逃逸!AI:我當時害怕極了

下一篇: 京東云發布云原生自研中間件JCQ 性能容量接近無限擴展

標簽:
  • 熱門焦點
  • 5月安卓手機好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 從零到英雄:高并發與性能優化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構師或者程序員,你是否曾經為公司的系統在面對高并發和性能瓶頸時感到手足無措或者焦頭爛額呢?筆者在出道那會為此是吃盡了苦頭的,不過也得
  • 零售大模型“干中學”,攀爬數字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對于絕大多數登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標。攀登珠峰的商業路線有兩條,一是尼泊爾境內的南坡路線,一是中國境內的北坡路線。相
  • 雅柏威士忌多款單品價格大跌,泥煤頂流也不香了?

    來源 | 烈酒商業觀察編 | 肖海林今年以來,威士忌市場開始出現了降溫跡象,越來越多不斷暴漲的網紅威士忌也開始悄然回歸市場理性。近日,LVMH集團旗下蘇格蘭威士忌品牌雅柏(Ardbeg
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運營研究社作者 | 張知白編輯 | 楊佩汶設計 | 晏談夢潔這個暑期,旅游賽道徹底火了:有的「地方」火了&mdash;&mdash;貴州村超旅游收入 1 個月超過 12 億;有的「博主」火了&m
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁&ldquo;充值中心&rdquo;入口上線了本機生活界面。壹覽商業發現,該界面目前主要
  • 2021中國國際消費電子博覽會與青島國際軟件融合創新博覽會新聞發布會隆重舉行

    9月18日,2021中國國際消費電子博覽會與青島國際軟件融合創新博覽會新聞發布會在青島國際新聞中心隆重舉行。發布會上青島市政府領導聯袂出席,對本次雙展會情
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學的小東加入了一個大學生兼職QQ群。群主&ldquo;七王&rdquo;在群里介紹一些刷單賺
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
麻豆成人小视频| 亚洲欧美电影在线观看| 好吊色欧美一区二区三区四区| 国产网站欧美日韩免费精品在线观看 | 国产日韩综合一区二区性色av| 国产精品视频导航| 国产一区二区日韩| 亚洲第一综合天堂另类专| 亚洲精品一区二区三区在线观看| 亚洲性感美女99在线| 久久国内精品视频| 欧美波霸影院| 国产精品免费观看在线| 伊人精品在线| 欧美涩涩视频| 国产老女人精品毛片久久| 尤妮丝一区二区裸体视频| 99国产一区| 欧美一区二区黄| 欧美黄网免费在线观看| 国产欧美91| 亚洲日本成人| 亚洲欧美韩国| 免费欧美视频| 国产精品区一区二区三| 亚洲国产精品国自产拍av秋霞| 亚洲欧美激情精品一区二区| 免费不卡中文字幕视频| 国产精品色婷婷久久58| 亚洲国产老妈| 欧美一区二区久久久| 欧美好骚综合网| 国产欧美日韩亚洲精品| 亚洲精品在线三区| 欧美在线亚洲一区| 亚洲欧美日韩国产精品| 蜜臀av在线播放一区二区三区| 国产精品高潮视频| 91久久嫩草影院一区二区| 欧美一区二区三区喷汁尤物| 欧美屁股在线| 在线观看欧美日本| 午夜欧美不卡精品aaaaa| 欧美黄色视屏| 在线视频观看日韩| 羞羞答答国产精品www一本| 欧美日本韩国一区二区三区| 黄色一区二区三区四区| 亚洲欧美文学| 欧美日韩黄视频| 亚洲电影在线看| 久久高清免费观看| 国产精品久久久一区二区| 亚洲激情视频| 久久人人爽国产| 国产日韩综合| 午夜精品福利在线观看| 欧美性猛交xxxx乱大交退制版 | 欧美日韩国产影片| 亚洲电影免费观看高清完整版在线观看| 午夜精品国产更新| 欧美视频精品在线| 日韩一区二区高清| 欧美国产日韩在线| 在线观看欧美视频| 久久久99国产精品免费| 国产欧美日韩视频在线观看| 夜夜嗨av一区二区三区四季av| 欧美风情在线观看| 在线欧美福利| 久久一区视频| 欧美精品久久99| 影音先锋国产精品| 久久精品在这里| 国产亚洲精品综合一区91| 亚洲欧美乱综合| 国产精品久久久久aaaa| 制服丝袜亚洲播放| 欧美日韩免费观看一区二区三区| 亚洲激情视频| 欧美精品成人| 亚洲看片网站| 欧美日韩第一区| 99精品福利视频| 欧美日韩卡一卡二| 亚洲色图在线视频| 国产精品福利网站| 亚洲一区在线直播| 国产女同一区二区| 久久国产精品高清| 狠狠色综合色区| 久久综合网色—综合色88| 在线精品观看| 欧美激情精品久久久久久变态| 亚洲精品一区在线| 欧美日韩国产首页| 亚洲桃色在线一区| 国产精品久久综合| 午夜精品美女自拍福到在线| 国产手机视频精品| 久久亚洲风情| 亚洲人人精品| 欧美日韩综合网| 亚洲午夜电影| 国产精品视频免费观看www| 香蕉久久夜色精品| 韩国一区电影| 欧美成人久久| 一区二区欧美国产| 国产精品视频网址| 久久国产精品色婷婷| 在线观看成人av| 欧美精品一区二区蜜臀亚洲| 亚洲午夜久久久久久尤物| 国产色视频一区| 久久综合久久久久88| 亚洲乱码久久| 国产精品日韩在线| 久久精品二区亚洲w码| 亚洲国产一区二区a毛片| 欧美日韩精品在线观看| 欧美一区不卡| 亚洲国产综合在线看不卡| 欧美日韩午夜剧场| 欧美一区二区精品| 91久久精品国产91久久性色tv| 欧美日韩国产综合新一区| 亚洲欧美日韩爽爽影院| 伊人夜夜躁av伊人久久| 欧美日韩精品福利| 欧美亚洲一区二区三区| 亚洲第一综合天堂另类专| 国产精品hd| 久久性天堂网| 亚洲综合激情| 亚洲国产成人久久综合一区| 国产精品白丝黑袜喷水久久久| 久久成人综合网| 一本色道久久88综合日韩精品| 国产精品入口| 欧美大片91| 欧美一区二区三区在线视频| 91久久综合| 国产日韩一区二区三区在线播放 | 国产精品最新自拍| 狂野欧美激情性xxxx欧美| 夜夜嗨一区二区| 国外视频精品毛片| 欧美日韩在线播放| 久久裸体视频| 亚洲午夜精品国产| 在线看日韩av| 国产啪精品视频| 欧美日本精品| 久久九九热免费视频| 亚洲色无码播放| 亚洲第一福利社区| 国产精品久久久久久久久久ktv | 国产精品久久久久久福利一牛影视| 久久人人九九| 亚洲女同性videos| 亚洲精品综合精品自拍| 韩国在线一区| 国产免费成人| 欧美日韩在线播放| 欧美成人在线影院| 久久精品国产一区二区三区| 亚洲一区二区毛片| 亚洲三级电影在线观看| 雨宫琴音一区二区在线| 国产欧美日韩一区二区三区在线| 欧美日韩国产综合视频在线观看中文| 免费成人你懂的| 久久久久国产精品厨房| 亚洲综合色噜噜狠狠| 日韩一区二区久久| 亚洲国产精品成人综合| 国内成人精品2018免费看| 国产麻豆成人精品| 国产精品电影网站| 欧美日韩亚洲一区二区三区在线| 免费短视频成人日韩| 久久精品国产免费| 亚洲欧美高清| 制服丝袜激情欧洲亚洲| 日韩视频精品在线| 亚洲狠狠婷婷| 亚洲国产精品高清久久久| 一区一区视频| 狠狠色丁香久久婷婷综合_中| 国产日韩欧美不卡| 国产精品亚洲片夜色在线| 欧美日韩国产成人在线免费| 欧美国产专区| 欧美激情一区二区三区全黄| 美女免费视频一区| 裸体一区二区三区| 鲁大师影院一区二区三区| 久久亚洲一区| 六月婷婷久久| 欧美成人黄色小视频| 欧美成人一区二区三区在线观看| 欧美成人一区二区三区片免费| 免费永久网站黄欧美|