午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > Pytorch自定義Dataset和DataLoader去除不存在和空數據的操作

Pytorch自定義Dataset和DataLoader去除不存在和空數據的操作

熱門標簽:正安縣地圖標注app qt百度地圖標注 400電話申請資格 螳螂科技外呼系統怎么用 阿里電話機器人對話 遼寧智能外呼系統需要多少錢 電銷機器人系統廠家鄭州 舉辦過冬奧會的城市地圖標注 地圖地圖標注有嘆號

【源碼GitHub地址】:點擊進入

1. 問題描述

之前寫了一篇關于《pytorch Dataset, DataLoader產生自定義的訓練數據》的博客,但存在一個問題,我們不能在Dataset做一些數據清理,如果我們傳遞給Dataset數據,本身存在問題,那么迭代過程肯定出錯的。

比如我把很多圖片路徑都傳遞給Dataset,如果圖片路徑都是正確的,且圖片都存在也沒有損壞,那顯然運行是沒有問題的;

但倘若傳遞給Dataset的圖片路徑有些圖片是不存在,這時你通過Dataset讀取圖片數據,然后再迭代返回,就會出現類似如下的錯誤:

File "D:\ProgramData\Anaconda3\envs\pytorch-py36\lib\site-packages\torch\utils\data\_utils\collate.py", line 68, in listcomp> return [default_collate(samples) for samples in transposed]

File "D:\ProgramData\Anaconda3\envs\pytorch-py36\lib\site-packages\torch\utils\data\_utils\collate.py", line 70, in default_collate

raise TypeError((error_msg_fmt.format(type(batch[0])))) TypeError: batch must contain tensors, numbers, dicts or lists; found class 'NoneType'>

2. 一般的解決方法

一般的解決方法也很簡單粗暴,就是在傳遞數據給Dataset前,就做數據清理,把不存在的圖片,損壞的數據都提前清理掉。

是的,這個是最簡單粗暴的。

3. 另一種解決方法:自定義返回數據的規則:collate_fn()校對函數

我們希望不管傳遞什么處理給Dataset,Dataset都進行處理,如果不存在或者異常,就返回None,而在DataLoader時,對于不存為None的數據,都去除掉。

這樣就保證在迭代過程中,DataLoader獲得batch數據都是正確的。

比如讀取batch_size=5的圖片數據,如果其中有1個(或者多個)圖片是不存在,那么返回的batch應該把不存在的數據過濾掉,即返回5-1=4大小的batch的數據。

是的,我要實現的就是這個功能:返回的batch數據會自定清理掉不合法的數據。

3.1 Pytorch數據處理函數:Dataset和 DataLoader

Pytorch有兩個數據處理函數:Dataset和 DataLoader

from torch.utils.data import Dataset, DataLoader

其中Dataset用于定義數據的讀取和預處理操作,而DataLoader用于加載并產生批訓練數據。

torch.utils.data.DataLoader參數說明:

DataLoader(object)可用參數:

1、dataset(Dataset) 傳入的數據集

2、batch_size(int, optional) 每個batch有多少個樣本

3、shuffle(bool, optional) 在每個epoch開始的時候,對數據進行重新排序

4、sampler(Sampler, optional) 自定義從數據集中取樣本的策略,如果指定這個參數,那么shuffle必須為False

5、batch_sampler(Sampler, optional) 與sampler類似,但是一次只返回一個batch的indices(索引),需要注意的是,一旦指定了這個參數,那么batch_size,shuffle,sampler,drop_last就不能再制定了(互斥——Mutually exclusive)

6、num_workers (int, optional) 這個參數決定了有幾個進程來處理data loading。0意味著所有的數據都會被load進主進程。(默認為0)

7、collate_fn (callable, optional) 將一個list的sample組成一個mini-batch的函數

8、pin_memory (bool, optional) 如果設置為True,那么data loader將會在返回它們之前,將tensors拷貝到CUDA中的固定內存(CUDA pinned memory)中.

9、drop_last (bool, optional) 如果設置為True:這個是對最后的未完成的batch來說的,比如你的batch_size設置為64,而一個epoch只有100個樣本,那么訓練的時候后面的36個就被扔掉了。 如果為False(默認),那么會繼續正常執行,只是最后的batch_size會小一點。

10、timeout(numeric, optional) 如果是正數,表明等待從worker進程中收集一個batch等待的時間,若超出設定的時間還沒有收集到,那就不收集這個內容了。這個numeric應總是大于等于0。默認為0

11、worker_init_fn (callable, optional) 每個worker初始化函數 If not None, this will be called on eachworker subprocess with the worker id (an int in [0, num_workers - 1]) as input, after seeding and before data loading. (default: None)

我們要用到的是collate_fn()回調函數

3.2 自定義collate_fn()函數:

torch.utils.data.DataLoader的collate_fn()用于設置batch數據拼接方式,默認是default_collate函數,但當batch中含有None等數據時,默認的default_collate校隊方法會出現錯誤。因此,我們需要自定義collate_fn()函數:

方法也很簡單:只需在原來的default_collate函數中添加下面幾句代碼:判斷image是否為None,如果為None,則在原來的batch中清除掉,這樣就可以在迭代中避免出錯了。

 # 這里添加:判斷image是否為None,如果為None,則在原來的batch中清除掉,這樣就可以在迭代中避免出錯了
 if isinstance(batch, list):
 batch = [(image, image_id) for (image, image_id) in batch if image is not None]
 if batch==[]:
 return (None,None)

dataset_collate.py:

# -*-coding: utf-8 -*-
"""
 @Project: pytorch-learning-tutorials
 @File : dataset_collate.py
 @Author : panjq
 @E-mail : pan_jinquan@163.com
 @Date : 2019-06-07 17:09:13
"""
 
r""""Contains definitions of the methods used by the _DataLoaderIter workers to
collate samples fetched from dataset into Tensor(s).
These **needs** to be in global scope since Py2 doesn't support serializing
static methods.
"""
import torch
import re
from torch._six import container_abcs, string_classes, int_classes 
_use_shared_memory = False
r"""Whether to use shared memory in default_collate"""
 
np_str_obj_array_pattern = re.compile(r'[SaUO]')
 
error_msg_fmt = "batch must contain tensors, numbers, dicts or lists; found {}"
 
numpy_type_map = {
 'float64': torch.DoubleTensor,
 'float32': torch.FloatTensor,
 'float16': torch.HalfTensor,
 'int64': torch.LongTensor,
 'int32': torch.IntTensor,
 'int16': torch.ShortTensor,
 'int8': torch.CharTensor,
 'uint8': torch.ByteTensor,
}
 
def collate_fn(batch):
 '''
 collate_fn (callable, optional): merges a list of samples to form a mini-batch.
 該函數參考touch的default_collate函數,也是DataLoader的默認的校對方法,當batch中含有None等數據時,
 默認的default_collate校隊方法會出現錯誤
 一種的解決方法是:
 判斷batch中image是否為None,如果為None,則在原來的batch中清除掉,這樣就可以在迭代中避免出錯了
 :param batch:
 :return:
 '''
 r"""Puts each data field into a tensor with outer dimension batch size"""
 # 這里添加:判斷image是否為None,如果為None,則在原來的batch中清除掉,這樣就可以在迭代中避免出錯了
 if isinstance(batch, list):
 batch = [(image, image_id) for (image, image_id) in batch if image is not None]
 if batch==[]:
 return (None,None)
 
 elem_type = type(batch[0])
 if isinstance(batch[0], torch.Tensor):
 out = None
 if _use_shared_memory:
  # If we're in a background process, concatenate directly into a
  # shared memory tensor to avoid an extra copy
  numel = sum([x.numel() for x in batch])
  storage = batch[0].storage()._new_shared(numel)
  out = batch[0].new(storage)
 return torch.stack(batch, 0, out=out)
 elif elem_type.__module__ == 'numpy' and elem_type.__name__ != 'str_' \

  and elem_type.__name__ != 'string_':
 elem = batch[0]
 if elem_type.__name__ == 'ndarray':
  # array of string classes and object
  if np_str_obj_array_pattern.search(elem.dtype.str) is not None:
  raise TypeError(error_msg_fmt.format(elem.dtype))
 
  return collate_fn([torch.from_numpy(b) for b in batch])
 if elem.shape == (): # scalars
  py_type = float if elem.dtype.name.startswith('float') else int
  return numpy_type_map[elem.dtype.name](list(map(py_type, batch)))
 elif isinstance(batch[0], float):
 return torch.tensor(batch, dtype=torch.float64)
 elif isinstance(batch[0], int_classes):
 return torch.tensor(batch)
 elif isinstance(batch[0], string_classes):
 return batch
 elif isinstance(batch[0], container_abcs.Mapping):
 return {key: collate_fn([d[key] for d in batch]) for key in batch[0]}
 elif isinstance(batch[0], tuple) and hasattr(batch[0], '_fields'): # namedtuple
 return type(batch[0])(*(collate_fn(samples) for samples in zip(*batch)))
 elif isinstance(batch[0], container_abcs.Sequence):
 transposed = zip(*batch)#ok
 return [collate_fn(samples) for samples in transposed]
 
 raise TypeError((error_msg_fmt.format(type(batch[0]))))

測試方法:

# -*-coding: utf-8 -*-
"""
 @Project: pytorch-learning-tutorials
 @File : dataset.py
 @Author : panjq
 @E-mail : pan_jinquan@163.com
 @Date : 2019-03-07 18:45:06
"""
import torch
from torch.autograd import Variable
from torchvision import transforms
from torch.utils.data import Dataset, DataLoader
import numpy as np
from utils import dataset_collate
import os
import cv2
from PIL import Image
def read_image(path,mode='RGB'):
 '''
 :param path:
 :param mode: RGB or L
 :return:
 '''
 return Image.open(path).convert(mode)
 
class TorchDataset(Dataset):
 def __init__(self, image_id_list, image_dir, resize_height=256, resize_width=256, repeat=1, transform=None):
 '''
 :param filename: 數據文件TXT:格式:imge_name.jpg label1_id labe2_id
 :param image_dir: 圖片路徑:image_dir+imge_name.jpg構成圖片的完整路徑
 :param resize_height 為None時,不進行縮放
 :param resize_width 為None時,不進行縮放,
    PS:當參數resize_height或resize_width其中一個為None時,可實現等比例縮放
 :param repeat: 所有樣本數據重復次數,默認循環一次,當repeat為None時,表示無限循環sys.maxsize
 :param transform:預處理
 '''
 self.image_dir = image_dir
 self.image_id_list=image_id_list
 self.len = len(image_id_list)
 self.repeat = repeat
 self.resize_height = resize_height
 self.resize_width = resize_width
 self.transform= transform
 
 def __getitem__(self, i):
 index = i % self.len
 # print("i={},index={}".format(i, index))
 image_id = self.image_id_list[index]
 image_path = os.path.join(self.image_dir, image_id)
 img = self.load_data(image_path)
 
 if img is None:
  return None,image_id
 img = self.data_preproccess(img)
 return img,image_id
 
 def __len__(self):
 if self.repeat == None:
  data_len = 10000000
 else:
  data_len = len(self.image_id_list) * self.repeat
 return data_len
 
 def load_data(self, path):
 '''
 加載數據
 :param path:
 :param resize_height:
 :param resize_width:
 :param normalization: 是否歸一化
 :return:
 '''
 try:
  image = read_image(path)
 except Exception as e:
  image=None
  print(e)
 # image = image_processing.read_image(path)#用opencv讀取圖像
 return image
 
 def data_preproccess(self, data):
 '''
 數據預處理
 :param data:
 :return:
 '''
 if self.transform is not None:
  data = self.transform(data)
 return data
 
if __name__=='__main__':
 
 resize_height = 224
 resize_width = 224
 image_id_list=["1.jpg","ddd.jpg","111.jpg","3.jpg","4.jpg","5.jpg","6.jpg","7.jpg","8.jpg","9.jpg"]
 image_dir="../dataset/test_images/images"
 # 相關預處理的初始化
 '''class torchvision.transforms.ToTensor把shape=(H,W,C)的像素值范圍為[0, 255]的PIL.Image或者numpy.ndarray數據
 # 轉換成shape=(C,H,W)的像素數據,并且被歸一化到[0.0, 1.0]的torch.FloatTensor類型。
 '''
 train_transform = transforms.Compose([
 transforms.Resize(size=(resize_height, resize_width)),
 # transforms.RandomHorizontalFlip(),#隨機翻轉圖像
 transforms.RandomCrop(size=(resize_height, resize_width), padding=4), # 隨機裁剪
 transforms.ToTensor(), # 吧shape=(H,W,C)->換成shape=(C,H,W),并且歸一化到[0.0, 1.0]的torch.FloatTensor類型
 # transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))#給定均值(R,G,B) 方差(R,G,B),將會把Tensor正則化
 ])
 
 epoch_num=2 #總樣本循環次數
 batch_size=5 #訓練時的一組數據的大小
 train_data_nums=10
 max_iterate=int((train_data_nums+batch_size-1)/batch_size*epoch_num) #總迭代次數
 
 train_data = TorchDataset(image_id_list=image_id_list,
    image_dir=image_dir,
    resize_height=resize_height,
    resize_width=resize_width,
    repeat=1,
    transform=train_transform)
 # 使用默認的default_collate會報錯
 # train_loader = DataLoader(dataset=train_data, batch_size=batch_size, shuffle=False)
 # 使用自定義的collate_fn
 train_loader = DataLoader(dataset=train_data, batch_size=batch_size, shuffle=False, collate_fn=dataset_collate.collate_fn)
 
 
 # [1]使用epoch方法迭代,TorchDataset的參數repeat=1
 for epoch in range(epoch_num):
 for step,(batch_image, batch_label) in enumerate(train_loader):
  if batch_image is None and batch_label is None:
  print("batch_image:{},batch_label:{}".format(batch_image, batch_label))
  continue
  image=batch_image[0,:]
  image=image.numpy()#image=np.array(image)
  image = image.transpose(1, 2, 0) # 通道由[c,h,w]->[h,w,c]
  cv2.imshow("image",image)
  cv2.waitKey(2000)
  print("batch_image.shape:{},batch_label:{}".format(batch_image.shape,batch_label))
  # batch_x, batch_y = Variable(batch_x), Variable(batch_y)

輸出結果說明:

batch_size=5,輸入圖片列表image_id_list=["1.jpg","ddd.jpg","111.jpg","3.jpg","4.jpg","5.jpg","6.jpg","7.jpg","8.jpg","9.jpg"] ,其中"ddd.jpg","111.jpg"是不存在的,resize_width=224,正常情況下返回的數據應該是torch.Size([5, 3, 224, 224]),但由于"ddd.jpg","111.jpg"不存在,被過濾掉了,所以第一個batch的維度變為torch.Size([3, 3, 224, 224])

[Errno 2] No such file or directory: '../dataset/test_images/images\\ddd.jpg'

[Errno 2] No such file or directory: '../dataset/test_images/images\\111.jpg'

batch_image.shape:torch.Size([3, 3, 224, 224]),batch_label:('1.jpg', '3.jpg', '4.jpg')

batch_image.shape:torch.Size([5, 3, 224, 224]),batch_label:('5.jpg', '6.jpg', '7.jpg', '8.jpg', '9.jpg')

[Errno 2] No such file or directory: '../dataset/test_images/images\\ddd.jpg'

[Errno 2] No such file or directory: '../dataset/test_images/images\\111.jpg'

batch_image.shape:torch.Size([3, 3, 224, 224]),batch_label:('1.jpg', '3.jpg', '4.jpg')

batch_image.shape:torch.Size([5, 3, 224, 224]),batch_label:('5.jpg', '6.jpg', '7.jpg', '8.jpg', '9.jpg')

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • pytorch DataLoader的num_workers參數與設置大小詳解
  • Pytorch數據讀取之Dataset和DataLoader知識總結
  • 我對PyTorch dataloader里的shuffle=True的理解
  • pytorch Dataset,DataLoader產生自定義的訓練數據案例
  • PyTorch實現重寫/改寫Dataset并載入Dataloader
  • Pytorch 如何加速Dataloader提升數據讀取速度

標簽:合肥 淘寶好評回訪 信陽 隨州 濟源 昭通 興安盟 阜新

巨人網絡通訊聲明:本文標題《Pytorch自定義Dataset和DataLoader去除不存在和空數據的操作》,本文關鍵詞  Pytorch,自定義,Dataset,和,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Pytorch自定義Dataset和DataLoader去除不存在和空數據的操作》相關的同類信息!
  • 本頁收集關于Pytorch自定義Dataset和DataLoader去除不存在和空數據的操作的相關信息資訊供網民參考!
  • 推薦文章
    国产女人高潮的av毛片| 人妻巨大乳一二三区| 免费观看美女裸体网站| 精品人妻少妇嫩草av无码| 国产在线观看你懂的| 捆绑调教美女网站视频一区| 自拍偷拍欧美精品| 一本大道久久加勒比香蕉| 日韩福利在线播放| 91视频国产精品| 自拍偷拍 国产| 男人的天堂免费| 亚洲卡一卡二卡三| 精品高清一区二区三区| 欧美在线激情网| 中文字幕欧美人妻精品一区| 亚洲婷婷综合网| 国产乱人伦偷精品视频不卡| 午夜精品一区二区三区三上悠亚| 欧美成人精品一区二区三区| 成人免费播放器| 一区二区三区亚洲视频| 亚洲成av人片观看| 日韩在线观看免费| 精品久久久久久无码中文野结衣| 国产高潮呻吟久久| www.激情成人| 欧美国产第二页| 亚洲一区二区图片| 久久99久久精品| 在线电影院国产精品| 性色av一区二区三区免费| 国产精品美女免费看| 99re8这里只有精品| 久久这里只有精品9| 日本欧美一区二区三区乱码| 亚洲国产精品成人av| 大片在线观看网站免费收看| av 一区二区三区| 欧美一级xxx| 青青草国产免费| 午夜福利视频一区二区| 亚洲天堂av在线播放| 日韩欧美99| 日本一级二级视频| 一区二区三区鲁丝不卡| 国产精品一区二| 国产黄色片在线免费观看| 一区二区三区成人在线视频| 久99久在线| 国产喷水福利在线视频| 日韩精品在线影院| 2025韩国理伦片在线观看| 日批视频在线播放| 在线观看网站黄不卡| 欧美一区少妇| 亚洲天堂自拍偷拍| 亚洲欧美三级伦理| 欧美伦理片在线观看| 久久免费电影网| 国产日韩二区| 精品国产18久久久久久| 久久久国产成人精品| 免费激情视频在线观看| 久久综合一区二区| 97人人干人人| 日韩色图在线观看| 国产亚洲精品一区二555| 免费一级特黄录像| 国产综合久久久久影院| 国内揄拍国内精品少妇国语| 国产三级精品三级观看| 欧美成人精品福利| 青青草成人免费在线视频| 99riav久久精品riav| 国产美女搞久久| 99久久久无码国产精品免费| 亚洲第一精品电影| 99精品99久久久久久宅男| 中文字幕在线有码| 7777精品伊人久久久大香线蕉| 国产 欧美 日韩 一区| 91亚洲精品乱码久久久久久蜜桃| 国产精品最新在线观看| 一级黄色免费片| 欧美日韩国产123| 日韩在线 中文字幕| 欧美乱大交xxxxx| 日韩在线 中文字幕| 亚洲电影成人av99爱色| 亚洲av无码一区二区三区人| 91精品午夜视频| 中文字幕在线看高清电影| 欧美在线不卡一区| www.com黄色片| 色欧美88888久久久久久影院| 久久久久久久久久福利| 亚洲一区二区影院| 亚洲第一狼人区| 在线播放亚洲一区| 欧美成人短视频| 日韩一区二区三区电影在线观看| 亚洲国产精品成人综合久久久| 欧美一区二区三区视频| 日批免费观看视频| 亚洲高清色综合| 日韩精品电影一区二区| 精品国产一区二区三区久久狼5月| 国产午夜在线播放| 国产精品极品美女粉嫩高清在线| 久一视频在线观看| 日韩av电影中文字幕| 国产三级自拍视频| 欧美性xxxx69| 亚洲欧美乱综合| 手机在线看福利| 亚洲国产精品高清久久久| 欧美福利视频一区二区| 日本不卡高字幕在线2019| 亚洲综合成人av| 亚洲曰本av电影| 国产激情精品久久久第一区二区 | 天天夜碰日日摸日日澡性色av| 91九色02白丝porn| wwwxxxx在线观看| 中文字幕一区二区三区蜜月| www.av中文字幕| 欧美刺激脚交jootjob| 日本黄色一级网站| 久久综合伊人77777| 日韩精品久久久久久| 香港三级韩国三级日本三级| 欧美日韩高清一区二区三区| 久久亚洲av午夜福利精品一区| 久久99国产精品久久久久久久久| 丝袜诱惑亚洲看片| 精品国产免费av| 亚洲视频国产视频| 奇米一区二区三区av| 在线国产伦理一区| 精品福利在线视频| 日本黄色中文字幕| 一区精品视频| 欧美伊人久久久久久久久影院 | 日本一区二区免费看| 亚洲丝袜制服诱惑| 亚洲国产综合久久| 亚洲bbw性色大片| 亚洲欧美日韩国产精品| 久久爱另类一区二区小说| 美女久久久久久久久| 91久久大香伊蕉在人线| 欧美视频在线观看一区二区| 99草在线视频| 日韩人妻精品无码一区二区三区| 久久国产精品电影| 亚洲青青青在线视频| 波多野结衣电车痴汉| 久久人妻精品白浆国产| 欧美一区二区三区成人| 国产免费www| 青草青青在线视频| 欧美壮男野外gaytube| 欧美综合色免费| 激情综合一区二区三区| 一道本在线免费视频| 久久久久国产精品www| 欧美国产日韩一二三区| 亚洲系列在线观看| 农村末发育av片一区二区| 久久亚洲精品欧美| 亚洲午夜精品久久久久久性色| 久久久国产精品麻豆| 国产精品99无码一区二区| 国产v亚洲v天堂无码久久久| 亚洲美女久久久| 日韩在线视频第一页| 国产视频精品视频| 视频一区二区三| 欧美精品久久久久久久| 欧美少妇xxx| 捆绑紧缚一区二区三区视频| 激情视频在线播放| 日本一区免费看| 91av视频在线播放| 日韩欧美精品三级| 国产精品乱码久久久久久| 波多野结衣激情视频| 久久精品国产精品亚洲色婷婷| 日韩av大片在线| 亚洲精品视频免费在线观看| 国产精品毛片高清在线完整版| 日韩欧美一级大片| 精品视频第一页| 亚洲天堂av一区二区三区| 中文字幕日韩一区二区三区不卡 | 四季av中文字幕| 日本亚洲一区二区三区| 国产精品av免费观看| 欧美一级淫片播放口| 日韩av最新在线| 亚洲精品视频一区| 成人福利视频在线| a在线观看免费| 天天干在线播放| 国产高清自拍视频| 男操女免费网站| 亚洲精品中文字幕在线| 国产成人精品福利一区二区三区| 亚洲天堂影视av| 亚洲精品xxx| 色综合久久精品| 中文字幕不卡在线播放| 免费成人性网站| 国产露脸国语对白在线| 在线观看国产精品入口男同| 国产综合精品在线| 国产成人精品综合久久久久99 | 欧美精品亚州精品| 精品视频一区在线视频| 欧美剧情电影在线观看完整版免费励志电影 | 日韩欧美第一区| 欧美一区欧美二区| 亚洲第一网站免费视频| 精品国产91乱码一区二区三区| 久久精品一区二区三区四区| 高清久久久久久| 国产美女三级无套内谢| 草莓视频18免费观看| 99热在线观看免费精品| 91网站免费视频| 国产精品理论在线| 久操免费在线视频| 少妇献身老头系列| 中文字幕免费高清| 国产免费无码一区二区视频| 丁香六月激情综合| www毛片com| 91av久久久| 亚洲色图狠狠干| 国内欧美视频一区二区| 久久久综合视频| 日本一区二区三区在线观看| 国产欧美一区二区精品久导航| 亚洲视频网在线直播| 亚洲国产精品一区二区www在线| 91视频免费观看| 精品久久久久久亚洲国产300| 亚洲国产人成综合网站| 欧美精品xxxxbbbb| 亚洲女人初尝黑人巨大| 7777精品久久久久久| 欧美最顶级的aⅴ艳星| 国产精品久久久久久久久久久久午夜片| 国产精品美女免费| 日本电影一区二区三区| 777久久久精品一区二区三区| 91精品国产高清91久久久久久| 一起操在线播放| 久久久999久久久| 国产福利精品导航| 午夜精品久久久久影视| 欧美日韩国产页| 久久久亚洲国产| 亚洲日本精品| 中文字幕免费在线播放| 久草视频在线观| 国产精品 欧美精品| 悠悠色在线精品| 日韩一级高清毛片| 国产欧美亚洲精品| 91精品国产吴梦梦| 精品无码一区二区三区蜜臀| 麻豆成人综合网| 亚洲国产成人精品视频| 欧美成年人视频| 成人午夜免费剧场| 中文文字幕文字幕高清| 天天干免费视频| 亚洲日本va午夜在线影院| 最近2019中文字幕在线高清| 香蕉久久夜色| 中文字幕免费视频| 免费在线一级片| 国产激情一区二区三区四区 | 国产嫩草影院久久久久| 日韩手机在线导航| 成人片在线免费看| 成人午夜视频在线观看免费| 91制片厂免费观看| 老司机深夜福利网站| 国产一区不卡精品| 亚洲第一区第一页| 91麻豆国产精品| 欧美双性人妖o0| 精久久久久久久久久久| 亚洲国产福利在线| 国产一区二区久久久| 无码国产精品一区二区免费式直播| 亚洲色图狠狠干| 欧美成人国产一区二区| 亚洲欧洲精品在线观看| 欧美成人黄色网| 亚洲欧美在线视频| www.久久色.com| 精品久久一二三| 国产精品xxxx喷水欧美| 亚洲午夜电影网| 麻豆传媒一区二区| 毛片毛片女人毛片毛片| 久久九九国产精品| 亚洲欧美另类自拍| 香港三级韩国三级日本三级| 亚洲图片小说视频| 欧美老年两性高潮| 国产一区一区三区| 一本到在线视频| 日韩精品一区二区三区在线观看 | 色av综合在线| 神马欧美一区二区| 97精品久久人人爽人人爽| 日本精品免费观看高清观看| 免费在线观看91| 国产性70yerg老太| 欧美在线一二三四区| 亚洲一卡二卡| 青娱乐免费在线视频| 日韩欧美精品网站| 国产伦精品一区二区三区视频免费 | hs视频在线观看| 中文字幕亚洲一区在线观看| 亚洲一区二区福利视频| 久久婷婷国产综合国色天香| 久久综合五月天| 欧美日韩在线视频免费播放| 777xxx欧美| 亚洲欧美aaa| 欧美国产精品中文字幕| 国产成人免费av电影| 精品视频一区二区在线观看| 欧美精品电影在线播放| 国产日本一区二区三区| 三级网站免费观看| 欧美国产日韩一区二区| 美女伦理水蜜桃4| 亚洲电影一级黄| 在线看视频不卡| 国产美女娇喘av呻吟久久| 欧美日韩爱爱视频| 国产一级av毛片| 日韩小视频在线观看| 中文字幕一区二区久久人妻网站| 香蕉影视欧美成人| 亚洲不卡1区| 高清av一区二区| 欧美激情视频免费观看| 午夜免费一级片| 亚洲高清不卡在线观看| 男人添女人下面高潮视频| 日韩电影免费在线看| 欧美影视一区二区| 极品少妇一区二区三区精品视频 | 国产欧美一区二区三区在线看蜜臀 | 亚洲一区二区免费| h片在线免费看| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产成人精品视频免费| 欧美一级夜夜爽| 大乳护士喂奶hd| 日韩欧美一区在线| 亚洲无人区码一码二码三码的含义 | 日本不卡在线视频| 国产精品久久久久久久久久东京 | 亚洲精品视频大全| 91成人在线观看喷潮| 特级西西人体wwwww| 伊人久久久久久久久久久久久| 欧美一区二区三区四| 色综合视频一区中文字幕| a天堂在线观看视频| 国产在线精品成人一区二区三区| 久久久久免费| 亚洲色图自拍| 国产精品短视频| 992kp免费看片| 精品粉嫩超白一线天av| 成年人视频软件| 中文字幕日韩综合av| 三级视频在线看| 中文字幕久久一区| 亚洲亚洲人成综合网络| 久久久久久久久久久久| 欧美精品videos另类日本| 亚洲国产中文字幕在线| 亚洲精品电影在线一区| 在线免费亚洲电影| 91麻豆制片厂| 国产精品旅馆在线| 不卡视频一二三| a级一a一级在线观看| 午夜免费在线观看精品视频| 日本少妇一区二区| 天天干天天草天天| 亚洲欧美国产一本综合首页| 午夜av免费观看| 成人性生交大片免费看视频直播 | 一炮成瘾1v1高h| 日本高清不卡一区二区三| 欧美视频13p| www久久久com|