精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

CycleGAN生成對抗網絡圖像處理工具

人工智能 深度學習
本文要講的GAN是Goodfellow2014提出的生成產生對抗模型,即Generative Adversarial Nets。那么GAN到底有什么神奇的地方?來看看吧。

 1. GAN簡介

"干飯人,干飯魂,干飯都是人上人"。

此GAN飯人非彼干飯人。本文要講的GAN是Goodfellow2014提出的生成產生對抗模型,即Generative Adversarial Nets。那么GAN到底有什么神奇的地方?

常規的深度學習任務如圖像分類,目標檢測以及語義分割或者實例分割,這些任務的結果都可以歸結為預測。圖像分類是預測單一的類別,目標檢測是預測bbox和類別,語義分割或者實例分割是預測每個像素的類別。而GAN是生成一個新的東西如一個圖片。

GAN的原理用一句話來說明:

  •  通過對抗的方式,去學習數據分布的生成式模型。GAN是無監督的過程,能夠捕捉數據集的分布,以便于可以從隨機噪聲中生成同樣分布的數據

GAN的組成:判別式模型和生成式模型的左右手博弈

  •  D判別式模型:學習真假邊界,判斷數據是真的還是假的
  •  G生成式模型:學習數據分布并生成數據

GAN經典的loss如下(minmax體現的就是對抗)

2. 實戰cycleGAN 風格轉換

了解了GAN的作用,來體驗的GAN的神奇效果。這里以cycleGAN為例子來實現圖像的風格轉換。所謂的風格轉換就是改變原始圖片的風格,如下圖左邊是原圖,中間是風格圖(梵高畫),生成后是右邊的具有梵高風格的原圖,可以看到總體上生成后的圖保留大部分原圖的內容。

2.1 cycleGAN簡介

cycleGAN本質上和GAN是一樣的,是學習數據集中潛在的數據分布。GAN是從隨機噪聲生成同分布的圖片,cycleGAN是在有意義的圖上加上學習到的分布從而生成另一個領域的圖。cycleGAN假設image-to-image的兩個領域存在的潛在的聯系。

眾所周知,GAN的映射函數很難保證生成圖片的有效性。cycleGAN利用cycle consistency來保證生成的圖片與輸入圖片的結構上一致性。我們看下cycleGAN的結構:

特點總結如下:

  •  兩路GAN:兩個生成器[ G:X->Y , F:Y->X ]  和兩個判別器[Dx, Dy], G和Dy目的是生成的對象,Dy(正類是Y領域)無法判別。同理F和Dx也是一樣的。
  •  cycle consistency:G是生成Y的生成器, F是生成X的生成器,cycle consistency是為了約束G和F生成的對象的范圍,  是的G生成的對象通過F生成器能夠回到原始的領域如:x->G(x)->F(G(x))=x

對抗loss如下:

2.2 實現cycleGAN

2.2.1 生成器

從上面簡介中生成器有兩個生成器,一個是正向,一個是反向的。結構是參考論文Perceptual Losses for Real-Time Style Transfer and Super-Resolution: Supplementary Material。大致可以分為:下采樣 + residual 殘差block + 上采樣,如下圖(摘自論文):

實現上下采樣是stride=2的卷積, 上采樣用nn.Upsample: 

  1. # 殘差block  
  2. class ResidualBlock(nn.Module):  
  3.     def __init__(self, in_features):  
  4.         super(ResidualBlock, self).__init__()  
  5.         self.block = nn.Sequential(  
  6.             nn.ReflectionPad2d(1),  
  7.             nn.Conv2d(in_features, in_features, 3),  
  8.             nn.InstanceNorm2d(in_features),  
  9.             nn.ReLU(inplace=True),  
  10.             nn.ReflectionPad2d(1),  
  11.             nn.Conv2d(in_features, in_features, 3),  
  12.             nn.InstanceNorm2d(in_features),  
  13.         )  
  14.     def forward(self, x):  
  15.         return x + self.block(x) 
  16. class GeneratorResNet(nn.Module):  
  17.     def __init__(self, input_shape, num_residual_blocks):  
  18.         super(GeneratorResNet, self).__init__()  
  19.         channels = input_shape[0]  
  20.         # Initial convolution block  
  21.         out_features = 64  
  22.         model = [  
  23.             nn.ReflectionPad2d(channels),  
  24.             nn.Conv2d(channels, out_features, 7),  
  25.             nn.InstanceNorm2d(out_features),  
  26.             nn.ReLU(inplace=True),  
  27.         ]  
  28.         in_features = out_features  
  29.         # Downsampling  
  30.         for _ in range(2):  
  31.             out_features *= 2  
  32.             model += [  
  33.                 nn.Conv2d(in_features, out_features, 3, stride=2padding=1),  
  34.                 nn.InstanceNorm2d(out_features),  
  35.                 nn.ReLU(inplace=True),  
  36.             ]  
  37.             in_features = out_features 
  38.         # Residual blocks  
  39.         for _ in range(num_residual_blocks):  
  40.             model += [ResidualBlock(out_features)]  
  41.         # Upsampling  
  42.         for _ in range(2):  
  43.             out_features //= 2  
  44.             model += [  
  45.                 nn.Upsample(scale_factor=2),  
  46.                 nn.Conv2d(in_features, out_features, 3, stride=1padding=1),  
  47.                 nn.InstanceNorm2d(out_features),  
  48.                 nn.ReLU(inplace=True),  
  49.             ]  
  50.             in_features = out_features  
  51.         # Output layer  
  52.         model += [nn.ReflectionPad2d(channels), nn.Conv2d(out_features, channels, 7), nn.Tanh()]  
  53.         self.model = nn.Sequential(*model)  
  54.     def forward(self, x):  
  55.         return self.model(x) 

2.2.2 判別器

傳統的GAN 判別器輸出的是一個值,判斷真假的程度。而patchGAN輸出是N*N值,每一個值代表著原始圖像上的一定大小的感受野,直觀上就是對原圖上crop下可重復的一部分區域進行判斷真假,可以認為是一個全卷積網絡,最早是在pix2pix提出(Image-to-Image Translation with Conditional Adversarial Networks)。好處是參數少,另外一個從局部可以更好的抓取高頻信息。 

  1. class Discriminator(nn.Module):  
  2.     def __init__(self, input_shape):  
  3.         super(Discriminator, self).__init__()  
  4.         channels, height, width = input_shape  
  5.         # Calculate output shape of image discriminator (PatchGAN) 
  6.         self.output_shape = (1, height // 2 ** 4, width // 2 ** 4)  
  7.         def discriminator_block(in_filters, out_filters, normalize=True):  
  8.             """Returns downsampling layers of each discriminator block"""  
  9.             layers = [nn.Conv2d(in_filters, out_filters, 4, stride=2padding=1)]  
  10.             if normalize:  
  11.                 layers.append(nn.InstanceNorm2d(out_filters))  
  12.             layers.append(nn.LeakyReLU(0.2, inplace=True))  
  13.             return layers  
  14.         self.model = nn.Sequential(  
  15.             *discriminator_block(channels, 64, normalize=False),  
  16.             *discriminator_block(64, 128),  
  17.             *discriminator_block(128, 256),  
  18.             *discriminator_block(256, 512),  
  19.             nn.ZeroPad2d((1, 0, 1, 0)), 
  20.             nn.Conv2d(512, 1, 4, padding=1 
  21.         )  
  22.     def forward(self, img):  
  23.         return self.model(img) 

2.2.3 訓練

loss和模型初始化 

  1. # Losses  
  2. criterion_GAN = torch.nn.MSELoss()  
  3. criterion_cycle = torch.nn.L1Loss()  
  4. criterion_identity = torch.nn.L1Loss()  
  5. cuda = torch.cuda.is_available()  
  6. input_shape = (opt.channels, opt.img_height, opt.img_width)  
  7. # Initialize generator and discriminator  
  8. G_AB = GeneratorResNet(input_shape, opt.n_residual_blocks)  
  9. G_BA = GeneratorResNet(input_shape, opt.n_residual_blocks)  
  10. D_A = Discriminator(input_shape)  
  11. D_B = Discriminator(input_shape) 

優化器和訓練策略 

  1. # Optimizers  
  2. optimizer_G = torch.optim.Adam(  
  3.     itertools.chain(G_AB.parameters(), G_BA.parameters()), lr=opt.lr, betas=(opt.b1, opt.b2)  
  4.  
  5. optimizer_D_A = torch.optim.Adam(D_A.parameters(), lr=opt.lr, betas=(opt.b1, opt.b2))  
  6. optimizer_D_B = torch.optim.Adam(D_B.parameters(), lr=opt.lr, betas=(opt.b1, opt.b2))  
  7. # Learning rate update schedulers  
  8. lr_scheduler_G = torch.optim.lr_scheduler.LambdaLR(  
  9.     optimizer_G, lr_lambda=LambdaLR(opt.n_epochs, opt.epoch, opt.decay_epoch).step  
  10.  
  11. lr_scheduler_D_A = torch.optim.lr_scheduler.LambdaLR(  
  12.     optimizer_D_A, lr_lambda=LambdaLR(opt.n_epochs, opt.epoch, opt.decay_epoch).step  
  13.  
  14. lr_scheduler_D_B = torch.optim.lr_scheduler.LambdaLR(  
  15.     optimizer_D_B, lr_lambda=LambdaLR(opt.n_epochs, opt.epoch, opt.decay_epoch).step  

訓練迭代

  •  訓練數據是成對的數據,但是是非配對的數據,即A和B是沒有直接的聯系的。A是原圖,B是風格圖
  •  生成器訓練
    •  GAN loss:判別器判別A和B生成的兩個圖fake_A、fake_B與GT的loss
    •  Cycle loss:反過來fake_A和fake_B 生成的圖與A和B像素上差異
  •  判別器訓練:
    •  loss_real: 判別A/B和GT的MSELoss
    •  loss_fake:判別生成的fake_A/fake_B與GT的MSELoss 
  1. for epoch in range(opt.epoch, opt.n_epochs):  
  2.     for i, batch in enumerate(dataloader):  
  3.         # 數據是成對的數據,但是是非配對的數據,即A和B是沒有直接的聯系的  
  4.         real_A = Variable(batch["A"].type(Tensor))  
  5.         real_B = Variable(batch["B"].type(Tensor))  
  6.         # Adversarial ground truths  
  7.         valid = Variable(Tensor(np.ones((real_A.size(0), *D_A.output_shape))), requires_grad=False 
  8.         fake = Variable(Tensor(np.zeros((real_A.size(0), *D_A.output_shape))), requires_grad=False 
  9.         # ------------------  
  10.         #  Train Generators  
  11.         # ------------------  
  12.         G_AB.train()  
  13.         G_BA.train()  
  14.         optimizer_G.zero_grad()  
  15.         # Identity loss  
  16.         loss_id_A = criterion_identity(G_BA(real_A), real_A)  
  17.         loss_id_B = criterion_identity(G_AB(real_B), real_B)  
  18.         loss_identity = (loss_id_A + loss_id_B) / 2  
  19.         # GAN loss  
  20.         fake_B = G_AB(real_A)  
  21.         loss_GAN_AB = criterion_GAN(D_B(fake_B), valid) 
  22.         fake_A = G_BA(real_B)  
  23.         loss_GAN_BA = criterion_GAN(D_A(fake_A), valid)  
  24.         loss_GAN = (loss_GAN_AB + loss_GAN_BA) / 2 
  25.         # Cycle loss  
  26.         recov_A = G_BA(fake_B)  
  27.         loss_cycle_A = criterion_cycle(recov_A, real_A)  
  28.         recov_B = G_AB(fake_A)  
  29.         loss_cycle_B = criterion_cycle(recov_B, real_B)  
  30.         loss_cycle = (loss_cycle_A + loss_cycle_B) / 2  
  31.         # Total loss  
  32.         loss_G = loss_GAN + opt.lambda_cyc * loss_cycle + opt.lambda_id * loss_identity 
  33.         loss_G.backward()  
  34.         optimizer_G.step()  
  35.         # -----------------------  
  36.         #  Train Discriminator A  
  37.         # -----------------------   
  38.         optimizer_D_A.zero_grad()  
  39.         # Real loss  
  40.         loss_real = criterion_GAN(D_A(real_A), valid)  
  41.         # Fake loss (on batch of previously generated samples)  
  42.         # fake_A_ = fake_A_buffer.push_and_pop(fake_A)  
  43.         loss_fake = criterion_GAN(D_A(fake_A_.detach()), fake)  
  44.         # Total loss 
  45.         loss_D_A = (loss_real + loss_fake) / 2 
  46.         loss_D_A.backward()  
  47.         optimizer_D_A.step()  
  48.         # -----------------------  
  49.         #  Train Discriminator B  
  50.         # -----------------------  
  51.         optimizer_D_B.zero_grad() 
  52.         # Real loss  
  53.         loss_real = criterion_GAN(D_B(real_B), valid)  
  54.         # Fake loss (on batch of previously generated samples)  
  55.         # fake_B_ = fake_B_buffer.push_and_pop(fake_B)  
  56.         loss_fake = criterion_GAN(D_B(fake_B_.detach()), fake)  
  57.         # Total loss  
  58.         loss_D_B = (loss_real + loss_fake) / 2  
  59.         loss_D_B.backward() 
  60.         optimizer_D_B.step()  
  61.         loss_D = (loss_D_A + loss_D_B) / 2  
  62.         # --------------  
  63.         #  Log Progress  
  64.         # --------------  
  65.         # Determine approximate time left  
  66.         batches_done = epoch * len(dataloader) + i  
  67.         batches_left = opt.n_epochs * len(dataloader) - batches_done  
  68.         time_left = datetime.timedelta(seconds=batches_left * (time.time() - prev_time))  
  69.         prev_time = time.time()  
  70.     # Update learning rates  
  71.     lr_scheduler_G.step()  
  72.     lr_scheduler_D_A.step()  
  73.     lr_scheduler_D_B.step() 

2.2.4 結果展示

本文訓練的是莫奈風格的轉變,如下圖:第一二行是莫奈風格畫轉換為普通照片,第三四行為普通照片轉換為莫奈風格畫

再來看實際手機拍攝圖片:

2.2.5 cycleGAN其他用途

3. 總結

本文詳細介紹了GAN的其中一種應用cycleGAN,并將它應用到圖像風格的轉換。總結如下:

  •  GAN是學習數據中分布,并生成同樣分布但全新的數據
  •  CycleGAN是兩路GAN:兩個生成器和兩個判別器;為了保證生成器的生成的圖片與輸入圖存在一定的關系,不是隨機生產的圖片, 引入cycle consistency,判定A->fake_B->recove_A和A的差異
  •  生成器:下采樣 + residual 殘差block + 上采樣
  •  判別器: 不是一個圖生成一個判定值,而是patchGAN方式,生成很N*N個值,而后取均值 

 

責任編輯:龐桂玉 來源: Python中文社區 (ID:python-china)
相關推薦

2022-09-20 08:00:00

暗數據機器學習數據

2020-05-28 10:45:36

機器學習人工智能 PyTorch

2023-10-31 10:33:35

對抗網絡人工智能

2024-04-01 08:00:00

2022-11-28 08:47:33

AI圖片GAN

2017-05-10 14:32:31

神經網絡網絡架構模型

2023-07-04 09:49:50

人工智能GAN

2010-03-09 19:19:40

Python圖像處理

2017-10-23 06:36:27

生成對抗網絡架構訓練技巧

2018-07-11 10:46:05

人工智能計算機視覺面部屬性

2022-08-31 09:52:19

Python圖像處理

2021-10-22 09:09:27

Python圖像處理工具編程語言

2019-10-16 10:23:59

Python圖像處理編程語言

2022-12-26 00:43:26

python擴展庫可視化

2020-05-21 14:05:59

人工智能機器學習技術

2018-07-04 09:10:54

人工智能機器人側臉

2021-08-11 10:30:26

Python圖像工具

2020-10-22 17:56:40

神經網絡生成式對抗網絡

2017-09-11 17:16:35

2019-06-10 07:44:45

Python圖像處理編程
點贊
收藏

51CTO技術棧公眾號

国产精品99久久| 国产91对白刺激露脸在线观看| 超碰97人人射妻| 97国产成人无码精品久久久| 亚洲日产av中文字幕| 亚洲综合免费观看高清完整版在线 | 成人在线黄色| 99久久婷婷国产| 欧美成人精品在线播放| 国产九九在线观看| 麻豆影视在线| 色老板在线视频一区二区| 亚洲女女做受ⅹxx高潮| 国产精品私拍pans大尺度在线| 亚洲天堂资源在线| 国产高清中文字幕在线| 国产ts人妖一区二区| 草民午夜欧美限制a级福利片| 91小视频网站| 尤物网在线观看| 毛片av一区二区| 日韩专区在线观看| 亚洲精品第三页| 看黄网站在线| 国产精品一二三区在线| 欧美大片va欧美在线播放| 国产三级国产精品| 国偷自产一区二区免费视频| 久久久久久9999| 国产成人在线视频| 国产高清一区二区三区四区| 亚洲欧美在线成人| 国产精品久久毛片av大全日韩| 国产男人精品视频| 一区二区三区福利视频| 午夜欧洲一区| 日韩精品一区二区三区在线| 给我免费播放片在线观看| 色窝窝无码一区二区三区成人网站| 激情综合电影网| 日韩精品免费电影| 91视频免费版污| 国产丝袜在线| 中文欧美字幕免费| 99超碰麻豆| 日产精品久久久| 欧美久久综合网| 欧美一区二区免费| 欧美丰满熟妇bbbbbb百度| 高清av在线| 国产精品夜夜爽| 成人免费看吃奶视频网站| 精品视频在线观看免费| 欧美日韩夜夜| 欧美美女网站色| 成年女人18级毛片毛片免费| 国产精品麻豆一区二区三区| 久久久久久久久久电影| 免费观看成人在线| 国产又爽又黄又嫩又猛又粗| 欧美天天在线| 国产亚洲精品美女| av在线免费观看不卡| 中文字幕在线直播| 一色桃子久久精品亚洲| 国产在线一区二| 91亚洲欧美激情| 美腿丝袜亚洲三区| 97视频免费看| 2014亚洲天堂| 亚洲亚洲免费| 亚洲欧美日韩高清| 亚洲黄色小说在线观看| 97精品国产综合久久久动漫日韩| 亚洲乱码一区二区三区在线观看| 亚洲国产欧美不卡在线观看| 人妻一区二区三区免费| 韩国v欧美v亚洲v日本v| 欧美一区二区三区……| 欧美日韩在线国产| 欧美色图一区| 日韩精品视频免费专区在线播放 | yourporn久久国产精品| 精品视频免费观看| 在线观看免费视频a| 国产麻豆综合| 欧美肥老妇视频| 亚洲图片第一页| 妖精一区二区三区精品视频| 国产亚洲精品久久久久久| 免费精品在线视频| 亚洲激情不卡| 欧美日本亚洲视频| 国产美女福利视频| 日韩一区二区三区免费播放| 亚洲人成在线观| 日韩成人av一区二区| 伊人久久影院| 日韩精品一区二区三区四区视频| 熟妇高潮精品一区二区三区| 日韩国产一区二区| 午夜精品国产精品大乳美女| 午夜视频网站在线观看| 久久高清国产| 欧美一级在线播放| 中文字幕一区二区三区四区视频 | 国产精品日韩专区| 久久久国产精品成人免费| 日本va欧美va精品| 国产精品av网站| www.xxxx国产| 国产成人精品亚洲日本在线桃色| 91在线观看免费网站| 在线观看免费观看在线| www.成人网.com| 一区二区三区观看| 国产鲁鲁视频在线观看特色| 欧美日韩国产在线| 成熟了的熟妇毛茸茸| 亚洲欧美久久精品| 欧美一区二区精美| xxxx日本黄色| 欧美高清在线| 伦理中文字幕亚洲| 日本一本在线观看| 免费精品视频最新在线| 久久99精品久久久久久久青青日本| 日批免费在线观看| 亚洲人xxxx| 男人添女荫道口女人有什么感觉| av毛片午夜不卡高**水| 狠狠躁夜夜躁久久躁别揉| aaaaaaaa毛片| 999久久久亚洲| 国产精品高清在线观看| 国产在成人精品线拍偷自揄拍| 久久久久久久网| 欧美三级在线观看视频| 亚洲承认视频| 欧美精品日韩一本| 五月天精品在线| 午夜精品视频| 日本欧美在线视频| 一级片视频网站| 91在线视频网址| 亚洲人成77777| 成人亚洲综合| 黄色av小说在线观看| 久久久噜噜噜久久人人看| 免费观看国产精品视频| 国产精品sss在线观看av| 亚洲午夜激情免费视频| 国产无套丰满白嫩对白| 91视频精品在这里| 小说区视频区图片区| 91九色porn在线资源| 亚洲成人亚洲激情| 一本色道久久88| 青娱乐精品在线视频| 亚洲国产精品综合| 国产精品美女久久久久人| 亚洲精品乱码久久久久久按摩观| 日本熟妇一区二区| 免费的成人av| 中文字幕剧情在线观看一区| 免费在线小视频| 6080午夜不卡| 欧美偷拍一区二区三区| 日本不卡在线视频| 亚洲一区二区三区免费观看| 亚洲欧洲日韩精品在线| 欧美日韩爱爱视频| 亚洲欧美日韩精品永久在线| 亚洲精品写真福利| 佐佐木明希电影| 国产精品试看| 亚洲欧洲精品一区二区| 无码国模国产在线观看| 精品久久久999| 日本一本在线观看| 国产精品看片你懂得| 在线观看视频你懂得| 中国女人久久久| 成人在线观看网址| h片在线免费观看| 欧洲国产伦久久久久久久| 日本美女视频网站| 亚洲激情中文在线| 国产精品wwwwww| 久久精品视频免费看| 亚洲国产高清自拍| 中文字幕日韩经典| 亚洲一区二区不卡免费| 丰满饥渴老女人hd| 国产精品福利在线观看播放| 99在线观看视频| 影视一区二区三区| 欧美激情18p| yourporn在线观看中文站| 色老汉一区二区三区| 国产精品无码一区二区三区免费| 蜜臀va亚洲va欧美va天堂| 精品人妻人人做人人爽| 国产成人手机高清在线观看网站| 777国产偷窥盗摄精品视频| 亚洲黄色一级大片| 亚洲一二三级电影| 日本一卡二卡在线播放| 成人小视频在线观看| 久久人人爽人人爽人人av| 国内精品伊人久久久| 俄罗斯精品一区二区| 日韩黄色在线| 久久色精品视频| 天堂成人在线| 色欧美片视频在线观看 | 天天影视天天精品| 日本不卡一区二区三区视频| 性爽视频在线| 欧美大片在线免费观看| 午夜免费播放观看在线视频| 亚洲免费电影一区| 好吊视频一区二区三区| 91精品在线观看入口| 综合久久中文字幕| 欧美日韩国产综合视频在线观看中文| 国产探花在线播放| 国产精品区一区二区三| 中文字幕av久久爽一区| 91香蕉视频污| 日本精品一二三| 国产乱码精品一品二品| 亚洲欧美久久久久| 日本sm残虐另类| 国语对白做受xxxxx在线中国| 红桃视频在线观看一区二区| 狠狠色噜噜狠狠狠狠色吗综合| 国产亚洲久久| 91久久久国产精品| 国产福利亚洲| 国产精品国产三级国产aⅴ9色| 在线天堂资源| 91av在线精品| 天堂资源在线| 日本久久久久久久久| 欧美xx视频| 欧美一区二区三区免费观看| 国产一二在线播放| 91精品国产网站| 一二三四视频在线中文| 奇米成人av国产一区二区三区| 在线看的av网站| 精品区一区二区| 欧美brazzers| 欧美在线制服丝袜| 中文字幕av资源| 欧美日产在线观看| 伊人365影院| 日本一区二区久久| 色噜噜噜噜噜噜| 国产精品久久久久永久免费观看 | 久久裸体网站| 大桥未久一区二区| 国产91精品对白在线播放| 亚洲xxxx18| 中文一区一区三区高中清不卡免费 | 91视频99| av在线不卡精品| 国产精品永久免费视频| 中文字幕综合| 国产精品免费一区二区三区四区| 成人av集中营| 成人黄色免费在线观看| 亚洲一区二区三区日本久久九| 国产精品区二区三区日本| 亚洲深夜福利在线观看| 9999在线观看| 影音先锋亚洲精品| www.欧美日本| 雨宫琴音一区二区在线| 成人综合视频在线| 另类综合日韩欧美亚洲| 天堂va欧美va亚洲va老司机| 26uuu亚洲| 国产真实乱在线更新| 精品久久久久国产| 久久久久无码国产精品| 欧美性猛交xxxx乱大交3| 久久久www成人免费毛片| 日韩欧美精品中文字幕| 一区二区的视频| 日韩电影中文字幕在线观看| av成人手机在线| 欧美日韩国产123| 久久精品女人天堂av免费观看 | 久久精品国产99久久99久久久| 久久亚洲精选| 男人操女人免费软件| 蜜臀久久99精品久久久久宅男| 欧美一级片在线免费观看| 久久精品视频在线免费观看| www青青草原| 91黄色在线观看| 天堂8在线视频| 久久精品在线播放| 亚洲天堂电影| 国产精品免费在线| 天天操综合网| 老司机午夜av| 99riav久久精品riav| 欧美黄色aaa| 亚洲嫩草精品久久| 久久精品久久久久久久| 337p日本欧洲亚洲大胆色噜噜| 好男人www在线视频| 在线播放国产一区中文字幕剧情欧美 | 农村妇女精品一区二区| 日韩欧美国产成人| 国产香蕉在线观看| 色偷偷91综合久久噜噜| 免费在线视频欧美| 日韩视频在线免费观看| 亚洲色图官网| 国产精品一级久久久| 一区二区影院| 国产女教师bbwbbwbbw| 韩日在线一区| 精品中文字幕av| 国产成人综合在线| 国产精品视频一区二区三| 欧美日韩综合在线免费观看| 一级黄色短视频| 亚洲天堂av在线免费| 亚洲综合电影| 精品乱码一区| 亚洲激情综合| 黄色免费视频网站| 亚洲成a天堂v人片| 欧美在线视频精品| 亚洲视频国产视频| 欧美电影免费观看| 欧美亚洲爱爱另类综合| 欧美成人直播| 亚洲欧美国产日韩综合| 国产欧美日韩综合精品一区二区| 成年人二级毛片| 欧美巨大另类极品videosbest| avav免费在线观看| 国产美女久久精品| 99久久久国产精品美女| 制服丝袜中文字幕第一页| 综合久久久久久久| av免费观看在线| 亚洲男人天堂久| 电影一区二区三| 日韩电影免费观看高清完整| 午夜欧美精品| 肉丝美足丝袜一区二区三区四| 亚洲一区二区三区在线| 天天色综合av| 国产91色在线| 色呦哟—国产精品| 日本女人黄色片| 亚洲成va人在线观看| 久久经典视频| 久久久久久久久久久亚洲| 美女色狠狠久久| 一区二区三区我不卡| 国产精品一区在线观看乱码| 国产精品suv一区二区69| 日韩精品一二三四区| 国产91足控脚交在线观看| 国产欧美日韩中文字幕在线| 夜色77av精品影院| 在线免费视频a| 综合分类小说区另类春色亚洲小说欧美| 国产精品视频在线观看免费 | 亚洲精品mp4| 色婷婷av在线| 国产中文欧美精品| 好吊视频一区二区三区四区| 无码h肉动漫在线观看| 亚洲午夜精品网| 国产一区电影| 亚洲自拍偷拍网址| 亚洲影音一区| 精品影片一区二区入口| 91国偷自产一区二区使用方法| 免费高清完整在线观看| 国产福利不卡| 日本在线不卡一区| 黄色一级片在线| 日韩一区二区三区电影在线观看 | 欧美成人中文字幕| 亚洲三级精品| 久久久久99人妻一区二区三区| 91国产精品成人| 女人天堂av在线播放| av在线不卡一区| 日本中文一区二区三区|