日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 卷积神经网络 >内容正文

卷积神经网络

毕业设计 - 题目:基于深度学习的人脸表情识别 - 卷积神经网络 毕设 代码

發(fā)布時間:2023/12/20 卷积神经网络 97 豆豆
生活随笔 收集整理的這篇文章主要介紹了 毕业设计 - 题目:基于深度学习的人脸表情识别 - 卷积神经网络 毕设 代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 0 簡介
  • 1 項目說明
  • 2 數(shù)據(jù)集介紹:
  • 3 思路分析及代碼實現(xiàn)
    • 3.1 數(shù)據(jù)可視化
    • 3.2 數(shù)據(jù)分離
    • 3.3 數(shù)據(jù)可視化
    • 3.4 在pytorch下創(chuàng)建數(shù)據(jù)集
      • 3.4.1 創(chuàng)建data-label對照表
      • 3.4.2 重寫Dataset類
      • 3.4.3 數(shù)據(jù)集的使用
  • 4 網(wǎng)絡(luò)模型搭建
    • 4.1 訓(xùn)練模型
    • 4.2 模型的保存與加載
  • 5 相關(guān)源碼
  • 6 最后

0 簡介

今天學(xué)長向大家介紹一個機(jī)器視覺項目

基于深度學(xué)習(xí)的人臉表情識別

1 項目說明

給定數(shù)據(jù)集train.csv,要求使用卷積神經(jīng)網(wǎng)絡(luò)CNN,根據(jù)每個樣本的面部圖片判斷出其表情。在本項目中,表情共分7類,分別為:(0)生氣,(1)厭惡,(2)恐懼,(3)高興,(4)難過,(5)驚訝和(6)中立(即面無表情,無法歸為前六類)。所以,本項目實質(zhì)上是一個7分類問題。

2 數(shù)據(jù)集介紹:

  • (1)、CSV文件,大小為28710行X2305列;

  • (2)、在28710行中,其中第一行為描述信息,即“l(fā)abel”和“feature”兩個單詞,其余每行內(nèi)含有一個樣本信息,即共有28709個樣本;

  • (3)、在2305列中,其中第一列為該樣本對應(yīng)的label,取值范圍為0到6。其余2304列為包含著每個樣本大小為48X48人臉圖片的像素值(2304=48X48),每個像素值取值范圍在0到255之間;

3 思路分析及代碼實現(xiàn)

給定的數(shù)據(jù)集是csv格式的,考慮到圖片分類問題的常規(guī)做法,決定先將其全部可視化,還原為圖片文件再送進(jìn)模型進(jìn)行處理。

借助深度學(xué)習(xí)框架Pytorch1.0 CPU(窮逼)版本,搭建模型,由于需用到自己的數(shù)據(jù)集,因此我們需要重寫其中的數(shù)據(jù)加載部分,其余用現(xiàn)成的API即可。

學(xué)長這里使用CNN實現(xiàn)功能,因此基本只能在調(diào)參階段自由發(fā)揮(不要鄙視調(diào)參,參數(shù)也不是人人都能調(diào)得好的,比如我)。

3.1 數(shù)據(jù)可視化

我們需要將csv中的像素數(shù)據(jù)還原為圖片并保存下來,在python環(huán)境下,很多庫都能實現(xiàn)類似的功能,如pillow,opencv等。由于筆者對opencv較為熟悉,且opencv又是專業(yè)的圖像處理庫,因此決定采用opencv實現(xiàn)這一功能

3.2 數(shù)據(jù)分離

原文件中,label和人臉像素數(shù)據(jù)是集中在一起的。為了方便操作,決定利用pandas庫進(jìn)行數(shù)據(jù)分離,即將所有l(wèi)abel 讀出后,寫入新創(chuàng)建的文件label.csv;將所有的像素數(shù)據(jù)讀出后,寫入新創(chuàng)建的文件data.csv。

# 將label和像素數(shù)據(jù)分離 import pandas as pd# 修改為train.csv在本地的相對或絕對地址 path = './/ml2019spring-hw3//train.csv' # 讀取數(shù)據(jù) df = pd.read_csv(path) # 提取label數(shù)據(jù) df_y = df[['label']] # 提取feature(即像素)數(shù)據(jù) df_x = df[['feature']] # 將label寫入label.csv df_y.to_csv('label.csv', index=False, header=False) # 將feature數(shù)據(jù)寫入data.csv df_x.to_csv('data.csv', index=False, header=False)

以上代碼執(zhí)行完畢后,在該代碼腳本所在的文件夾下,就會生成兩個新文件label.csv以及data.csv。在執(zhí)行代碼前,注意修改train.csv在本地的路徑。

3.3 數(shù)據(jù)可視化

將數(shù)據(jù)分離后,人臉像素數(shù)據(jù)全部存儲在data.csv文件中,其中每行數(shù)據(jù)就是一張人臉。按行讀取數(shù)據(jù),利用opencv將每行的2304個數(shù)據(jù)恢復(fù)為一張48X48的人臉圖片,并保存為jpg格式。在保存這些圖片時,將第一行數(shù)據(jù)恢復(fù)出的人臉命名為0.jpg,第二行的人臉命名為1.jpg…,以方便與label[0]、label[1]…一一對應(yīng)。

import cv2 import numpy as np# 指定存放圖片的路徑 path = './/face' # 讀取像素數(shù)據(jù) data = np.loadtxt('data.csv')# 按行取數(shù)據(jù) for i in range(data.shape[0]):face_array = data[i, :].reshape((48, 48)) # reshapecv2.imwrite(path + '//' + '{}.jpg'.format(i), face_array) # 寫圖片

以上代碼雖短,但涉及到大量數(shù)據(jù)的讀取和大批圖片的寫入,因此占用的內(nèi)存資源較多,且執(zhí)行時間較長(視機(jī)器性能而定,一般要幾分鐘到十幾分鐘不等)。代碼執(zhí)行完畢,我們來到指定的圖片存儲路徑,就能發(fā)現(xiàn)里面全部是寫好的人臉圖片。

粗略瀏覽一下這些人臉圖片,就能發(fā)現(xiàn)這些圖片數(shù)據(jù)來源較廣,且并不純凈。就前60張圖片而言,其中就包含了正面人臉,如1.jpg;側(cè)面人臉,如18.jpg;傾斜人臉,如16.jpg;正面人頭,如7.jpg;正面人上半身,如55.jpg;動漫人臉,如38.jpg;以及毫不相關(guān)的噪聲,如59.jpg。放大圖片后仔細(xì)觀察,還會發(fā)現(xiàn)不少圖片上還有水印。種種因素均給識別提出了嚴(yán)峻的挑戰(zhàn)。

3.4 在pytorch下創(chuàng)建數(shù)據(jù)集

現(xiàn)在我們有了圖片,但怎么才能把圖片讀取出來送給模型呢?

最簡單粗暴的方法就是直接用opencv將所有圖片讀取出來,以numpy中array的數(shù)據(jù)格式直接送給模型。如果這樣做的話,會一次性把所有圖片全部讀入內(nèi)存,占用大量的內(nèi)存空間,且只能使用單線程,效率不高,也不方便后續(xù)操作。

其實在pytorch中,有一個類(torch.utils.data.Dataset)是專門用來加載數(shù)據(jù)的,我們可以通過繼承這個類來定制自己的數(shù)據(jù)集和加載方法。以下為基本流程。

3.4.1 創(chuàng)建data-label對照表

首先,我們需要劃分一下訓(xùn)練集和驗證集。在本次作業(yè)中,共有28709張圖片,取前24000張圖片作為訓(xùn)練集,其他圖片作為驗證集。新建文件夾train和val,將0.jpg到23999.jpg放進(jìn)文件夾train,將其他圖片放進(jìn)文件夾val。

在繼承torch.utils.data.Dataset類定制自己的數(shù)據(jù)集時,由于在數(shù)據(jù)加載過程中需要同時加載出一個樣本的數(shù)據(jù)及其對應(yīng)的label,因此最好能建立一個data-label對照表,其中記錄著data和label的對應(yīng)關(guān)系(“data-lable對照表”并非官方名詞,這個技術(shù)流程是筆者參考了他人的博客后自己摸索的,這個名字也是筆者給命的名)。

有童鞋看到這里就會提出疑問了:在人臉可視化過程中,每張圖片的命名不都和label的存放順序是一一對應(yīng)關(guān)系嗎,為什么還要多此一舉,再重新建立data-label對照表呢?筆者在剛開始的時候也是這么想的,按順序(0.jpg, 1.jpg, 2.jpg…)加載圖片和label(label[0], label[1], label[2]…),豈不是方便、快捷又高效?結(jié)果在實際操作的過程中才發(fā)現(xiàn),程序加載文件的機(jī)制是按照文件名首字母(或數(shù)字)來的,即加載次序是0,1,10,100…,而不是預(yù)想中的0,1,2,3…,因此加載出來的圖片不能夠和label[0],label[1],lable[2],label[3]…一一對應(yīng),所以建立data-label對照表還是相當(dāng)有必要的。

建立data-label對照表的基本思路就是:指定文件夾(train或val),遍歷該文件夾下的所有文件,如果該文件是.jpg格式的圖片,就將其圖片名寫入一個列表,同時通過圖片名索引出其label,將其label寫入另一個列表。最后利用pandas庫將這兩個列表寫入同一個csv文件。

執(zhí)行這段代碼前,注意修改相關(guān)文件路徑。代碼執(zhí)行完畢后,會在train和val文件夾下各生成一個名為dataset.csv的data-label對照表。

import os import pandas as pddef data_label(path):# 讀取label文件df_label = pd.read_csv('label.csv', header = None)# 查看該文件夾下所有文件files_dir = os.listdir(path)# 用于存放圖片名path_list = []# 用于存放圖片對應(yīng)的labellabel_list = []# 遍歷該文件夾下的所有文件for file_dir in files_dir:# 如果某文件是圖片,則將其文件名以及對應(yīng)的label取出,分別放入path_list和label_list這兩個列表中if os.path.splitext(file_dir)[1] == ".jpg":path_list.append(file_dir)index = int(os.path.splitext(file_dir)[0])label_list.append(df_label.iat[index, 0])# 將兩個列表寫進(jìn)dataset.csv文件path_s = pd.Series(path_list)label_s = pd.Series(label_list)df = pd.DataFrame()df['path'] = path_sdf['label'] = label_sdf.to_csv(path+'\\dataset.csv', index=False, header=False)def main():# 指定文件夾路徑train_path = 'F:\\0gold\\ML\\LHY_class\\FaceData\\train'val_path = 'F:\\0gold\\ML\\LHY_class\\FaceData\\val'data_label(train_path)data_label(val_path)if __name__ == "__main__":main()

OK,代碼執(zhí)行完畢,讓我們來看一看data-label對照表里面具體是什么樣子吧!

3.4.2 重寫Dataset類

首先介紹一下Pytorch中Dataset類:Dataset類是Pytorch中圖像數(shù)據(jù)集中最為重要的一個類,也是Pytorch中所有數(shù)據(jù)集加載類中應(yīng)該繼承的父類。其中父類中的兩個私有成員函數(shù)getitem()和len()必須被重載,否則將會觸發(fā)錯誤提示。其中g(shù)etitem()可以通過索引獲取數(shù)據(jù),len()可以獲取數(shù)據(jù)集的大小。在Pytorch源碼中,Dataset類的聲明如下:

class Dataset(object):"""An abstract class representing a Dataset.All other datasets should subclass it. All subclasses should override``__len__``, that provides the size of the dataset, and ``__getitem__``,supporting integer indexing in range from 0 to len(self) exclusive."""def __getitem__(self, index):raise NotImplementedErrordef __len__(self):raise NotImplementedErrordef __add__(self, other):return ConcatDataset([self, other])

我們通過繼承Dataset類來創(chuàng)建我們自己的數(shù)據(jù)加載類,命名為FaceDataset。

import torch from torch.utils import data import numpy as np import pandas as pd import cv2class FaceDataset(data.Dataset):

首先要做的是類的初始化。之前的data-label對照表已經(jīng)創(chuàng)建完畢,在加載數(shù)據(jù)時需用到其中的信息。因此在初始化過程中,我們需要完成對data-label對照表中數(shù)據(jù)的讀取工作。

通過pandas庫讀取數(shù)據(jù),隨后將讀取到的數(shù)據(jù)放入list或numpy中,方便后期索引。

# 初始化 def __init__(self, root):super(FaceDataset, self).__init__()# root為train或val文件夾的地址self.root = root# 讀取data-label對照表中的內(nèi)容df_path = pd.read_csv(root + '\\dataset.csv', header=None, usecols=[0]) # 讀取第一列文件名df_label = pd.read_csv(root + '\\dataset.csv', header=None, usecols=[1]) # 讀取第二列l(wèi)abel# 將其中內(nèi)容放入numpy,方便后期索引self.path = np.array(df_path)[:, 0]self.label = np.array(df_label)[:, 0]

接著就要重寫getitem()函數(shù)了,該函數(shù)的功能是加載數(shù)據(jù)。在前面的初始化部分,我們已經(jīng)獲取了所有圖片的地址,在這個函數(shù)中,我們就要通過地址來讀取數(shù)據(jù)。

由于是讀取圖片數(shù)據(jù),因此仍然借助opencv庫。需要注意的是,之前可視化數(shù)據(jù)部分將像素值恢復(fù)為人臉圖片并保存,得到的是3通道的灰色圖(每個通道都完全一樣),而在這里我們只需要用到單通道,因此在圖片讀取過程中,即使原圖本來就是灰色的,但我們還是要加入?yún)?shù)從cv2.COLOR_BGR2GARY,保證讀出來的數(shù)據(jù)是單通道的。讀取出來之后,可以考慮進(jìn)行一些基本的圖像處理操作,如通過高斯模糊降噪、通過直方圖均衡化來增強(qiáng)圖像等(經(jīng)試驗證明,在本次作業(yè)中,直方圖均衡化并沒有什么卵用,而高斯降噪甚至?xí)档驼_率,可能是因為圖片分辨率本來就較低,模糊后基本上什么都看不清了吧)。讀出的數(shù)據(jù)是48X48的,而后續(xù)卷積神經(jīng)網(wǎng)絡(luò)中nn.Conv2d() API所接受的數(shù)據(jù)格式是(batch_size, channel, width, higth),本次圖片通道為1,因此我們要將48X48 reshape為1X48X48。

# 讀取某幅圖片,item為索引號 def __getitem__(self, item):face = cv2.imread(self.root + '\\' + self.path[item])# 讀取單通道灰度圖face_gray = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)# 高斯模糊# face_Gus = cv2.GaussianBlur(face_gray, (3,3), 0)# 直方圖均衡化face_hist = cv2.equalizeHist(face_gray)# 像素值標(biāo)準(zhǔn)化face_normalized = face_hist.reshape(1, 48, 48) / 255.0 # 為與pytorch中卷積神經(jīng)網(wǎng)絡(luò)API的設(shè)計相適配,需reshape原圖# 用于訓(xùn)練的數(shù)據(jù)需為tensor類型face_tensor = torch.from_numpy(face_normalized) # 將python中的numpy數(shù)據(jù)類型轉(zhuǎn)化為pytorch中的tensor數(shù)據(jù)類型face_tensor = face_tensor.type('torch.FloatTensor') # 指定為'torch.FloatTensor'型,否則送進(jìn)模型后會因數(shù)據(jù)類型不匹配而報錯label = self.label[item]return face_tensor, label

最后就是重寫len()函數(shù)獲取數(shù)據(jù)集大小了。self.path中存儲著所有的圖片名,獲取self.path第一維的大小,即為數(shù)據(jù)集的大小。

1 # 獲取數(shù)據(jù)集樣本個數(shù) 2 def __len__(self): 3 return self.path.shape[0] class FaceDataset(data.Dataset):# 初始化def __init__(self, root):super(FaceDataset, self).__init__()self.root = rootdf_path = pd.read_csv(root + '\\dataset.csv', header=None, usecols=[0])df_label = pd.read_csv(root + '\\dataset.csv', header=None, usecols=[1])self.path = np.array(df_path)[:, 0]self.label = np.array(df_label)[:, 0]# 讀取某幅圖片,item為索引號def __getitem__(self, item):face = cv2.imread(self.root + '\\' + self.path[item])# 讀取單通道灰度圖face_gray = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)# 高斯模糊# face_Gus = cv2.GaussianBlur(face_gray, (3,3), 0)# 直方圖均衡化face_hist = cv2.equalizeHist(face_gray)# 像素值標(biāo)準(zhǔn)化face_normalized = face_hist.reshape(1, 48, 48) / 255.0 # 為與pytorch中卷積神經(jīng)網(wǎng)絡(luò)API的設(shè)計相適配,需reshape原圖# 用于訓(xùn)練的數(shù)據(jù)需為tensor類型face_tensor = torch.from_numpy(face_normalized) # 將python中的numpy數(shù)據(jù)類型轉(zhuǎn)化為pytorch中的tensor數(shù)據(jù)類型face_tensor = face_tensor.type('torch.FloatTensor') # 指定為'torch.FloatTensor'型,否則送進(jìn)模型后會因數(shù)據(jù)類型不匹配而報錯label = self.label[item]return face_tensor, label# 獲取數(shù)據(jù)集樣本個數(shù)def __len__(self):return self.path.shape[0]

3.4.3 數(shù)據(jù)集的使用

到此為止,我們已經(jīng)成功地寫好了自己的數(shù)據(jù)集加載類。那么這個類該如何使用呢?下面筆者將以訓(xùn)練集(train文件夾下的數(shù)據(jù))加載為例,講一下整個數(shù)據(jù)集加載類在模型訓(xùn)練過程中的使用方法。

首先,我們需要將這個類實例化。

1 # 數(shù)據(jù)集實例化(創(chuàng)建數(shù)據(jù)集) 2 train_dataset = FaceDataset(root='E:\\WSD\\HW3\\FaceData\\train')

train_dataset即為我們實例化的訓(xùn)練集,要想加載其中的數(shù)據(jù),還需要DataLoader類的輔助。DataLoader類總是配合Dataset類一起使用,DataLoader類可以幫助我們分批次讀取數(shù)據(jù),也可以通過這個類選擇讀取數(shù)據(jù)的方式(順序 or 隨機(jī)亂序),還可以選擇并行加載數(shù)據(jù)等,這個類并不要我們重寫。

1 # 載入數(shù)據(jù)并分割batch 2 train_loader = data.DataLoader(train_dataset, batch_size)

最后,我們就能直接從train_loader中直接加載出數(shù)據(jù)和label了,而且每次都會加載出一個批次(batch)的數(shù)據(jù)和label。

1 for images, labels in train_loader: 2 ''' 3 通過images和labels訓(xùn)練模型 4 '''

4 網(wǎng)絡(luò)模型搭建

通過Pytorch搭建基于卷積神經(jīng)網(wǎng)絡(luò)的分類器。剛開始是自己設(shè)計的網(wǎng)絡(luò)模型,在訓(xùn)練時發(fā)現(xiàn)準(zhǔn)確度一直上不去,折騰一周后走投無路,后來在github上找到了一個做表情識別的開源項目,用的是這個項目的模型結(jié)構(gòu),但還是沒能達(dá)到項目中的精度(acc在74%)。下圖為該開源項目中公布的兩個模型結(jié)構(gòu),筆者用的是Model B ,且只采用了其中的卷積-全連接部分,如果大家希望進(jìn)一步提高模型的表現(xiàn)能力,可以考慮向模型中添加Face landmarks + HOG features 部分。

可以看出,在Model B 的卷積部分,輸入圖片shape為48X48X1,經(jīng)過一個3X3X64卷積核的卷積操作,再進(jìn)行一次2X2的池化,得到一個24X24X64的feature map 1(以上卷積和池化操作的步長均為1,每次卷積前的padding為1,下同)。將feature map 1經(jīng)過一個3X3X128卷積核的卷積操作,再進(jìn)行一次2X2的池化,得到一個12X12X128的feature map 2。將feature map 2經(jīng)過一個3X3X256卷積核的卷積操作,再進(jìn)行一次2X2的池化,得到一個6X6X256的feature map 3。卷積完畢,數(shù)據(jù)即將進(jìn)入全連接層。進(jìn)入全連接層之前,要進(jìn)行數(shù)據(jù)扁平化,將feature map 3拉一個成長度為6X6X256=9216的一維tensor。隨后數(shù)據(jù)經(jīng)過dropout后被送進(jìn)一層含有4096個神經(jīng)元的隱層,再次經(jīng)過dropout后被送進(jìn)一層含有1024個神經(jīng)元的隱層,之后經(jīng)過一層含256個神經(jīng)元的隱層,最終經(jīng)過含有7個神經(jīng)元的輸出層。一般再輸出層后都會加上softmax層,取概率最高的類別為分類結(jié)果。

我們可以通過繼承nn.Module來定義自己的模型類。以下代碼實現(xiàn)了上述的模型結(jié)構(gòu)。需要注意的是,在代碼中,數(shù)據(jù)經(jīng)過最后含7個神經(jīng)元的線性層后就直接輸出了,并沒有經(jīng)過softmax層。這是為什么呢?其實這和Pytorch在這一塊的設(shè)計機(jī)制有關(guān)。因為在實際應(yīng)用中,softmax層常常和交叉熵這種損失函數(shù)聯(lián)合使用,因此Pytorch在設(shè)計時,就將softmax運(yùn)算集成到了交叉熵?fù)p失函數(shù)CrossEntropyLoss()內(nèi)部,如果使用交叉熵作為損失函數(shù),就默認(rèn)在計算損失函數(shù)前自動進(jìn)行softmax操作,不需要我們額外加softmax層。Tensorflow也有類似的機(jī)制。

class FaceCNN(nn.Module):# 初始化網(wǎng)絡(luò)結(jié)構(gòu)def __init__(self):super(FaceCNN, self).__init__()# 第一次卷積、池化self.conv1 = nn.Sequential(# 輸入通道數(shù)in_channels,輸出通道數(shù)(即卷積核的通道數(shù))out_channels,卷積核大小kernel_size,步長stride,對稱填0行列數(shù)padding# input:(bitch_size, 1, 48, 48), output:(bitch_size, 64, 48, 48), (48-3+2*1)/1+1 = 48nn.Conv2d(in_channels=1, out_channels=64, kernel_size=3, stride=1, padding=1), # 卷積層nn.BatchNorm2d(num_features=64), # 歸一化nn.RReLU(inplace=True), # 激活函數(shù)# output(bitch_size, 64, 24, 24)nn.MaxPool2d(kernel_size=2, stride=2), # 最大值池化)# 第二次卷積、池化self.conv2 = nn.Sequential(# input:(bitch_size, 64, 24, 24), output:(bitch_size, 128, 24, 24), (24-3+2*1)/1+1 = 24nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, stride=1, padding=1),nn.BatchNorm2d(num_features=128),nn.RReLU(inplace=True),# output:(bitch_size, 128, 12 ,12)nn.MaxPool2d(kernel_size=2, stride=2),)# 第三次卷積、池化self.conv3 = nn.Sequential(# input:(bitch_size, 128, 12, 12), output:(bitch_size, 256, 12, 12), (12-3+2*1)/1+1 = 12nn.Conv2d(in_channels=128, out_channels=256, kernel_size=3, stride=1, padding=1),nn.BatchNorm2d(num_features=256),nn.RReLU(inplace=True),# output:(bitch_size, 256, 6 ,6)nn.MaxPool2d(kernel_size=2, stride=2),)# 參數(shù)初始化self.conv1.apply(gaussian_weights_init)self.conv2.apply(gaussian_weights_init)self.conv3.apply(gaussian_weights_init)# 全連接層self.fc = nn.Sequential(nn.Dropout(p=0.2),nn.Linear(in_features=256*6*6, out_features=4096),nn.RReLU(inplace=True),nn.Dropout(p=0.5),nn.Linear(in_features=4096, out_features=1024),nn.RReLU(inplace=True),nn.Linear(in_features=1024, out_features=256),nn.RReLU(inplace=True),nn.Linear(in_features=256, out_features=7),)# 前向傳播def forward(self, x):x = self.conv1(x)x = self.conv2(x)x = self.conv3(x)# 數(shù)據(jù)扁平化x = x.view(x.shape[0], -1)y = self.fc(x)return y

4.1 訓(xùn)練模型

有了模型,就可以通過數(shù)據(jù)的前向傳播和誤差的反向傳播來訓(xùn)練模型了。在此之前,還需要指定優(yōu)化器(即學(xué)習(xí)率更新的方式)、損失函數(shù)以及訓(xùn)練輪數(shù)、學(xué)習(xí)率等超參數(shù)。

在本次作業(yè)中,我們采用的優(yōu)化器是SGD,即隨機(jī)梯度下降,其中參數(shù)weight_decay為正則項系數(shù);損失函數(shù)采用的是交叉熵;可以考慮使用學(xué)習(xí)率衰減。

def train(train_dataset, batch_size, epochs, learning_rate, wt_decay):# 載入數(shù)據(jù)并分割batchtrain_loader = data.DataLoader(train_dataset, batch_size)# 構(gòu)建模型model = FaceCNN()# 損失函數(shù)loss_function = nn.CrossEntropyLoss()# 優(yōu)化器optimizer = optim.SGD(model.parameters(), lr=learning_rate, weight_decay=wt_decay)# 學(xué)習(xí)率衰減# scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.8)# 逐輪訓(xùn)練for epoch in range(epochs):# 記錄損失值loss_rate = 0# scheduler.step() # 學(xué)習(xí)率衰減model.train() # 模型訓(xùn)練for images, labels in train_loader:# 梯度清零optimizer.zero_grad()# 前向傳播output = model.forward(images)# 誤差計算loss_rate = loss_function(output, labels)# 誤差的反向傳播loss_rate.backward()# 更新參數(shù)optimizer.step()

4.2 模型的保存與加載

我們訓(xùn)練的這個模型相對較小,因此可以直接保存整個模型(包括結(jié)構(gòu)和參數(shù))。

# 模型保存 torch.save(model, 'model_net1.pkl') # 模型加載 model_parm = 'model_net1.pkl' model = torch.load(net_parm)

5 相關(guān)源碼

代碼在CPU上跑起來較慢,視超參數(shù)和機(jī)器性能不同,一般跑完需耗時幾小時到幾十小時不等。代碼執(zhí)行時,每輪輸出一次損失值,每5輪輸出一次在訓(xùn)練集和驗證集上的正確率。有條件的可以在GPU上嘗試。

import torch import torch.utils.data as data import torch.nn as nn import torch.optim as optim import numpy as np import pandas as pd import cv2# 參數(shù)初始化 def gaussian_weights_init(m):classname = m.__class__.__name__# 字符串查找find,找不到返回-1,不等-1即字符串中含有該字符if classname.find('Conv') != -1:m.weight.data.normal_(0.0, 0.04)# 人臉旋轉(zhuǎn),嘗試過但效果并不好,本次并未用到 def imgProcess(img):# 通道分離(b, g, r) = cv2.split(img)# 直方圖均衡化bH = cv2.equalizeHist(b)gH = cv2.equalizeHist(g)rH = cv2.equalizeHist(r)# 順時針旋轉(zhuǎn)15度矩陣M0 = cv2.getRotationMatrix2D((24,24),15,1)# 逆時針旋轉(zhuǎn)15度矩陣M1 = cv2.getRotationMatrix2D((24,24),15,1)# 旋轉(zhuǎn)gH = cv2.warpAffine(gH, M0, (48, 48))rH = cv2.warpAffine(rH, M1, (48, 48))# 通道合并img_processed = cv2.merge((bH, gH, rH))return img_processed# 驗證模型在驗證集上的正確率 def validate(model, dataset, batch_size):val_loader = data.DataLoader(dataset, batch_size)result, num = 0.0, 0for images, labels in val_loader:pred = model.forward(images)pred = np.argmax(pred.data.numpy(), axis=1)labels = labels.data.numpy()result += np.sum((pred == labels))num += len(images)acc = result / numreturn accclass FaceDataset(data.Dataset):# 初始化def __init__(self, root):super(FaceDataset, self).__init__()self.root = rootdf_path = pd.read_csv(root + '\\dataset.csv', header=None, usecols=[0])df_label = pd.read_csv(root + '\\dataset.csv', header=None, usecols=[1])self.path = np.array(df_path)[:, 0]self.label = np.array(df_label)[:, 0]# 讀取某幅圖片,item為索引號def __getitem__(self, item):# 圖像數(shù)據(jù)用于訓(xùn)練,需為tensor類型,label用numpy或list均可face = cv2.imread(self.root + '\\' + self.path[item])# 讀取單通道灰度圖face_gray = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)# 高斯模糊# face_Gus = cv2.GaussianBlur(face_gray, (3,3), 0)# 直方圖均衡化face_hist = cv2.equalizeHist(face_gray)# 像素值標(biāo)準(zhǔn)化face_normalized = face_hist.reshape(1, 48, 48) / 255.0face_tensor = torch.from_numpy(face_normalized)face_tensor = face_tensor.type('torch.FloatTensor')label = self.label[item]return face_tensor, label# 獲取數(shù)據(jù)集樣本個數(shù)def __len__(self):return self.path.shape[0]class FaceCNN(nn.Module):# 初始化網(wǎng)絡(luò)結(jié)構(gòu)def __init__(self):super(FaceCNN, self).__init__()# 第一次卷積、池化self.conv1 = nn.Sequential(# 輸入通道數(shù)in_channels,輸出通道數(shù)(即卷積核的通道數(shù))out_channels,卷積核大小kernel_size,步長stride,對稱填0行列數(shù)padding# input:(bitch_size, 1, 48, 48), output:(bitch_size, 64, 48, 48), (48-3+2*1)/1+1 = 48nn.Conv2d(in_channels=1, out_channels=64, kernel_size=3, stride=1, padding=1), # 卷積層nn.BatchNorm2d(num_features=64), # 歸一化nn.RReLU(inplace=True), # 激活函數(shù)# output(bitch_size, 64, 24, 24)nn.MaxPool2d(kernel_size=2, stride=2), # 最大值池化)# 第二次卷積、池化self.conv2 = nn.Sequential(# input:(bitch_size, 64, 24, 24), output:(bitch_size, 128, 24, 24), (24-3+2*1)/1+1 = 24nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, stride=1, padding=1),nn.BatchNorm2d(num_features=128),nn.RReLU(inplace=True),# output:(bitch_size, 128, 12 ,12)nn.MaxPool2d(kernel_size=2, stride=2),)# 第三次卷積、池化self.conv3 = nn.Sequential(# input:(bitch_size, 128, 12, 12), output:(bitch_size, 256, 12, 12), (12-3+2*1)/1+1 = 12nn.Conv2d(in_channels=128, out_channels=256, kernel_size=3, stride=1, padding=1),nn.BatchNorm2d(num_features=256),nn.RReLU(inplace=True),# output:(bitch_size, 256, 6 ,6)nn.MaxPool2d(kernel_size=2, stride=2),)# 參數(shù)初始化self.conv1.apply(gaussian_weights_init)self.conv2.apply(gaussian_weights_init)self.conv3.apply(gaussian_weights_init)# 全連接層self.fc = nn.Sequential(nn.Dropout(p=0.2),nn.Linear(in_features=256*6*6, out_features=4096),nn.RReLU(inplace=True),nn.Dropout(p=0.5),nn.Linear(in_features=4096, out_features=1024),nn.RReLU(inplace=True),nn.Linear(in_features=1024, out_features=256),nn.RReLU(inplace=True),nn.Linear(in_features=256, out_features=7),)# 前向傳播def forward(self, x):x = self.conv1(x)x = self.conv2(x)x = self.conv3(x)# 數(shù)據(jù)扁平化x = x.view(x.shape[0], -1)y = self.fc(x)return ydef train(train_dataset, val_dataset, batch_size, epochs, learning_rate, wt_decay):# 載入數(shù)據(jù)并分割batchtrain_loader = data.DataLoader(train_dataset, batch_size)# 構(gòu)建模型model = FaceCNN()# 損失函數(shù)loss_function = nn.CrossEntropyLoss()# 優(yōu)化器optimizer = optim.SGD(model.parameters(), lr=learning_rate, weight_decay=wt_decay)# 學(xué)習(xí)率衰減# scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.8)# 逐輪訓(xùn)練for epoch in range(epochs):# 記錄損失值loss_rate = 0# scheduler.step() # 學(xué)習(xí)率衰減model.train() # 模型訓(xùn)練for images, labels in train_loader:# 梯度清零optimizer.zero_grad()# 前向傳播output = model.forward(images)# 誤差計算loss_rate = loss_function(output, labels)# 誤差的反向傳播loss_rate.backward()# 更新參數(shù)optimizer.step()# 打印每輪的損失print('After {} epochs , the loss_rate is : '.format(epoch+1), loss_rate.item())if epoch % 5 == 0:model.eval() # 模型評估acc_train = validate(model, train_dataset, batch_size)acc_val = validate(model, val_dataset, batch_size)print('After {} epochs , the acc_train is : '.format(epoch+1), acc_train)print('After {} epochs , the acc_val is : '.format(epoch+1), acc_val)return modeldef main():# 數(shù)據(jù)集實例化(創(chuàng)建數(shù)據(jù)集)train_dataset = FaceDataset(root='E:\\WSD\\HW3\\FaceData\\train')val_dataset = FaceDataset(root='E:\\WSD\\HW3\\FaceData\\val')# 超參數(shù)可自行指定model = train(train_dataset, val_dataset, batch_size=128, epochs=100, learning_rate=0.1, wt_decay=0)# 保存模型torch.save(model, 'model_net1.pkl')if __name__ == '__main__':main()

6 最后

總結(jié)

以上是生活随笔為你收集整理的毕业设计 - 题目:基于深度学习的人脸表情识别 - 卷积神经网络 毕设 代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

狠狠躁夜夜躁人人爽视频 | 久久在线看 | 亚洲欧美色婷婷 | 麻豆视频在线播放 | 日韩有码在线播放 | 日韩欧美高清一区二区三区 | 青青啪 | 精品国偷自产国产一区 | 97精品超碰一区二区三区 | 久久少妇av| 亚洲精品日韩av | 天天干,天天射,天天操,天天摸 | 婷婷伊人五月天 | 久久精品999| 久久精品一级片 | 91亚洲精品在线观看 | 激情丁香婷婷 | av理论电影 | 亚洲欧洲日韩在线观看 | 久久99精品久久久久蜜臀 | 97碰视频| av免费看在线 | 尤物九九久久国产精品的分类 | 天天干夜夜操视频 | 日日夜夜狠狠操 | 97精品国产一二三产区 | 91成人精品一区在线播放69 | 91麻豆精品国产自产在线游戏 | 88av色| 又黄又爽又色无遮挡免费 | 国产婷婷一区二区 | 黄色av网站在线观看 | 99视频在线精品 | 天天射天天搞 | 亚洲撸撸 | 亚洲精品看片 | 国产一区二区在线影院 | 色资源二区在线视频 | 日韩免费电影在线观看 | 日韩免费一级a毛片在线播放一级 | 在线视频 成人 | 亚洲女同videos | 天堂av在线网 | 五月开心激情网 | 国产精品久久久久久久久久了 | 狠狠干成人综合网 | 五月婷婷视频在线观看 | zzijzzij日本成熟少妇 | 精品一区二区在线免费观看 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 国产综合久久 | 超碰在线cao | 丁香婷婷激情五月 | 丰满少妇在线观看资源站 | 日韩一区二区在线免费观看 | 丁香久久激情 | 成人在线电影观看 | 成人午夜电影在线观看 | av线上免费看 | 美女av电影 | 99国产高清 | 日韩一级理论片 | 在线日本看片免费人成视久网 | 欧美日韩中文字幕视频 | 欧美久久久久久久 | 人人玩人人添人人澡97 | 久久成人久久 | 日韩高清久久 | 亚洲精品日韩一区二区电影 | 国内精品久久久久久 | 久久精品99国产精品日本 | 日本精品视频免费 | 手机av片| 亚洲精品999 | 中文字幕乱码电影 | 综合网欧美 | 亚洲一区二区视频在线 | 成人看片 | 在线看成人片 | 日本最新高清不卡中文字幕 | 久久久在线免费观看 | 久草在线免费色站 | 免费在线观看毛片网站 | 婷五月激情 | 免费国产黄线在线观看视频 | 射综合网 | 天天爽夜夜爽精品视频婷婷 | 久久精品日本啪啪涩涩 | 97电影网手机版 | 五月天六月婷 | 99视频99 | 国产又粗又猛又色又黄视频 | 国产中文字幕久久 | 日日干综合 | 久久成人一区二区 | 中文在线字幕免费观看 | 天天插日日插 | 日韩av在线不卡 | 国产va饥渴难耐女保洁员在线观看 | 国产精品视频永久免费播放 | 91中文字幕在线观看 | 免费中文字幕在线观看 | 日韩精品中文字幕在线不卡尤物 | 美女黄频 | 亚洲成人av电影 | 天天曰天天 | 黄色在线网站噜噜噜 | 欧美日韩啪啪 | 国产一区二区在线免费视频 | 色五月色开心色婷婷色丁香 | 亚洲va欧洲va国产va不卡 | 99精品视频在线观看播放 | 国产一区二区高清不卡 | 久久国产精品99久久久久久丝袜 | 久草精品视频 | 在线观看网站你懂的 | 超碰国产在线 | 久久国产精品99久久久久久进口 | 国产乱视频| 亚洲激情视频 | 天天插天天色 | 高清av中文字幕 | 久影院 | 久久综合中文字幕 | 亚洲国产中文字幕在线 | 免费大片av | 欧美日韩xxxxx | 日韩av视屏在线观看 | 西西444www| 国产一区二区三区黄 | 日韩女同一区二区三区在线观看 | 81国产精品久久久久久久久久 | 久久天天躁狠狠躁夜夜不卡公司 | 国产精品乱码高清在线看 | 久久久精选 | 色久网 | 日韩精品一区二区三区免费观看视频 | 久久久亚洲麻豆日韩精品一区三区 | 在线观看www视频 | 久久久国产精品免费 | 91av影视 | 国产一区在线免费观看 | 亚洲片在线资源 | 婷婷开心久久网 | 欧美夫妻性生活电影 | 久久久国产精品成人免费 | 免费观看性生活大片3 | 在线成人欧美 | 欧美日韩后 | 日韩a欧美 | 国产精品一区二区三区免费看 | 国产一区在线免费观看 | 精品人人人人 | 色欲综合视频天天天 | 中文字幕第一页在线视频 | 国产自偷自拍 | 色香蕉在线视频 | 久久99热精品这里久久精品 | 精品免费久久 | 91av免费看 | 在线电影91 | 久爱综合 | 97天天干| 天天干,天天操,天天射 | 日韩在线视频观看免费 | 亚洲精品综合一区二区 | 久久久久亚洲精品国产 | 日韩三级久久 | 一区三区在线欧 | 天天操操 | 91香蕉视频在线 | 国产五月 | 最新国产精品久久精品 | 亚洲国产操 | 国产视频2 | 黄色av成人在线 | 久久激情视频免费观看 | 欧美国产一区在线 | 成年人免费av网站 | 激情婷婷色 | 国产精品一区二区久久精品爱微奶 | a√天堂中文在线 | 久热免费在线观看 | 天堂av在线免费 | 久久久精品网站 | 国产天天爽 | 国产午夜三级一区二区三桃花影视 | 最近中文国产在线视频 | 午夜久久久精品 | 久久久亚洲麻豆日韩精品一区三区 | 米奇四色影视 | 精品视频亚洲 | 欧美极度另类性三渗透 | 8x成人免费视频 | www在线观看视频 | www亚洲视频| 丝袜护士aⅴ在线白丝护士 天天综合精品 | 亚洲aⅴ在线观看 | 中文一区二区三区在线观看 | 人人爽人人爽 | 亚洲日本欧美在线 | 婷婷色站 | 91传媒在线看 | 五月婷婷丁香六月 | 婷婷在线视频 | 欧美久久久一区二区三区 | 国产午夜精品免费一区二区三区视频 | 91在线网址| 18国产精品福利片久久婷 | 香蕉视频在线看 | 亚洲精品一区二区久 | av手机在线播放 | 久草在线费播放视频 | 久久国产精品网站 | 精品国产乱码 | 五月婷婷另类国产 | av福利在线导航 | 丁香av| av网站手机在线观看 | 四虎5151久久欧美毛片 | 国产成视频在线观看 | 亚洲国产精品500在线观看 | av不卡中文字幕 | 久久精品99国产精品亚洲最刺激 | 日韩精品短视频 | 最新日韩在线观看视频 | 精品久久免费看 | 亚洲不卡av一区二区三区 | 国产精品 日韩 | 成人综合日日夜夜 | 中文字幕在线免费看 | 日韩大片在线免费观看 | 最新一区二区三区 | 黄色av影院 | 五月婷网站 | 国产精品一区二区精品视频免费看 | 91久久精品一区 | 99久久精品久久亚洲精品 | 国产伦精品一区二区三区在线 | 日韩精品一区二区三区在线播放 | 国产一卡久久电影永久 | 久草视频免费在线播放 | 亚洲综合在线发布 | 午夜在线免费观看 | 午夜视频色 | 少妇bbbb揉bbbb日本 | 女女av在线| 亚洲在线成人精品 | 91精品国产自产在线观看永久 | 最近日本中文字幕a | 成人黄色片在线播放 | 亚洲黑丝少妇 | 天天插天天干天天操 | 开心色插| 国产精品久久久久亚洲影视 | 欧美一级激情 | 18久久久久久 | 99久久久国产精品美女 | 黄色日本免费 | 国产亚洲在线 | 91麻豆精品国产91久久久无限制版 | 久久久午夜精品理论片中文字幕 | 亚洲午夜精品一区 | 国产精品一区二区久久久久 | 人人爽网站| 日韩动漫免费观看高清完整版在线观看 | www.av免费 | 99r在线| 日韩在线看片 | 人人干人人添 | 99精品国产成人一区二区 | 在线视频福利 | 久久精品一区八戒影视 | 91精品视频导航 | 丁香花中文在线免费观看 | 久草影视在线观看 | 波多野结衣日韩 | 91成人短视频在线观看 | 操综合 | 日本一区二区三区免费看 | 日批视频在线播放 | 久久久免费观看完整版 | 久久精品三 | 五月婷婷丁香激情 | a v在线视频 | 成人黄色在线观看视频 | 伊甸园av在线 | 亚洲国产视频网站 | 97视频人人 | 色网站中文字幕 | 国产3p视频 | h视频在线看 | 玖玖玖精品 | 国产精品初高中精品久久 | 国产99久久久国产精品免费看 | 美女福利视频网 | 免费精品视频 | 久久久久久免费网 | 一区二区中文字幕在线 | 九九九免费视频 | 丁香综合网 | 久草精品网 | 国产伦精品一区二区三区四区视频 | 97超碰中文 | 免费观看www小视频的软件 | 国产精品国产亚洲精品看不卡15 | av看片网址 | 97精品在线视频 | 久久精品久久久久久久 | 手机在线欧美 | 成人免费观看在线视频 | 91中文字幕网 | 久久久久久精 | 国产专区精品 | 久久伊人五月天 | 国产精品免费久久久 | 日日干夜夜爱 | 亚洲国产视频在线 | 中文字幕美女免费在线 | 美女视频又黄又免费 | 五月天综合激情 | 国产美女永久免费 | 99国产视频在线 | 亚洲精品在线视频播放 | www.亚洲精品 | 一区二区精品国产 | 日韩欧美一区二区在线观看 | 韩国在线一区二区 | 午夜精品视频一区 | 2021久久| 久久综合久久久 | 中文字幕乱码在线播放 | 久草免费在线观看视频 | 天天操天天干天天爽 | 亚洲欧美激情插 | 亚洲国产精品久久久久 | 日韩免费三区 | 亚洲免费黄色 | www.香蕉视频 | 叶爱av在线 | av亚洲产国偷v产偷v自拍小说 | 亚洲精品欧美专区 | 久久玖 | 激情五月综合网 | 亚洲免费成人 | 午夜黄色影院 | 成人黄大片 | 中文字幕在线看视频国产中文版 | 亚洲成年人在线播放 | 9999精品视频 | 国产色在线 | 九九av| 在线观看91av | 亚洲欧洲精品在线 | 亚洲劲爆av| www.888.av | 日本韩国欧美在线观看 | 色偷偷人人澡久久超碰69 | 2020天天干夜夜爽 | 玖玖综合网 | 国产午夜三级一区二区三 | 人人超在线公开视频 | 81国产精品久久久久久久久久 | 人人网人人爽 | 国产精品6999成人免费视频 | 国产一线二线三线在线观看 | 日日激情| 狠狠躁18三区二区一区ai明星 | 亚洲国产精品va在线看黑人动漫 | 亚洲一本视频 | 在线视频麻豆 | 精品美女久久久久久免费 | 美女视频一区二区 | 四虎国产精品成人免费影视 | 国产电影一区二区三区四区 | 国产高清中文字幕 | 五月婷婷视频在线 | 五月婷婷六月丁香在线观看 | 国产精品不卡av | 国产精品免费在线播放 | 婷婷成人综合 | 亚洲欧洲视频 | 高清精品视频 | 好看av在线 | 在线小视频国产 | 中文字幕在线第一页 | 91在线视频网址 | 国产精品九九视频 | 超碰免费在线公开 | 国产精品中文久久久久久久 | 精品视频9999 | 天天干天天天 | 国产精品久久久久久模特 | 国产中文字幕在线 | 午夜精品久久久久久久久久久 | 日本久久久久久久久久 | 在线观看免费一级片 | 亚洲激情六月 | 国产日韩高清在线 | 日韩一区精品 | 成全免费观看视频 | 国产网红在线观看 | 亚洲免费观看视频 | 伊色综合久久之综合久久 | 人人干人人搞 | 亚洲高清免费在线 | 天天操综合网站 | 色综合久久五月 | 色老板在线视频 | 欧美精品乱码99久久影院 | 在线观看你懂的网站 | 精品国偷自产在线 | 色视频国产直接看 | 99久久婷婷国产 | 国产一级片免费视频 | 久久成人高清 | 美女精品在线观看 | 久久免费视频这里只有精品 | 久久毛片视频 | 黄色免费观看 | 精选久久| 免费的国产精品 | 99久久激情| 狠狠色网 | 色婷婷久久久 | 96精品在线 | 日韩av电影国产 | 天天操天天操天天操天天 | 91久久久久久久一区二区 | 中文字幕色播 | 国产高清福利在线 | 日韩精品中文字幕在线 | 91传媒免费观看 | 婷五月激情 | 国产精品96久久久久久吹潮 | 国产在线不卡视频 | 日韩久久一区二区 | 国产一区av在线 | 国产伦精品一区二区三区在线 | 国产一区在线精品 | 中文在线最新版天堂 | 国精产品满18岁在线 | 麻豆视频免费在线播放 | 午夜18视频在线观看 | 国内精品久久天天躁人人爽 | 免费看的黄网站 | 一区二区三区在线播放 | 亚洲精品在线免费播放 | 国产精品乱码久久久久 | 在线观看免费高清视频大全追剧 | 91福利社区在线观看 | 成人免费视频在线观看 | 中文字幕视频播放 | 久久综合电影 | 五月天中文字幕 | 日韩av男人的天堂 | 国产在线91在线电影 | 黄色三级av | 成人免费网视频 | 狠狠色丁香 | 四虎国产精品永久在线国在线 | 亚洲人成人99网站 | 在线免费日韩 | 亚洲精品视频网站在线观看 | 日韩区欧美久久久无人区 | 欧美成人tv| 美女又爽又黄 | 一本到视频在线观看 | 久久超级碰 | 麻豆视频免费观看 | 97福利在线 | 日韩成人不卡 | 中国一级片在线观看 | 国产精品久久久久久模特 | www.天天射| 免费在线观看黄网站 | 黄色毛片视频免费观看中文 | 99在线精品免费视频九九视 | 在线观看不卡视频 | 免费在线黄色av | 色先锋资源网 | 欧美日本三级 | av免费看av | 91久久久久久久一区二区 | 国产精品亚洲人在线观看 | 人人爽爽人人 | 成人免费网视频 | 婷婷久久综合九色综合 | 国产日韩精品在线观看 | 成人av在线一区二区 | 久久精品综合视频 | 色香蕉在线 | 中文欧美字幕免费 | 精品国产片 | 色综合久久久久久久久五月 | 日本性动态图 | 天天操福利视频 | 国产69精品久久久久9999apgf | 天天操天天操天天 | 91免费观看 | 久久久久久久久久久免费av | 久久久精品网站 | 五月天免费网站 | 91爱爱视频 | 国产一区二区精品在线 | 国产精品久久久久久久久久ktv | 精品视频99 | 国产精品久久久久一区二区三区共 | 99久免费精品视频在线观看 | 最新av在线播放 | 国产一级二级三级在线观看 | 国产91影视| 香蕉日日 | 中文字幕亚洲五码 | 视频三区在线 | 最近中文字幕在线播放 | 亚洲乱亚洲乱妇 | 日韩免费专区 | 在线视频日韩欧美 | 在线观看亚洲国产 | 天堂av一区二区 | 久热免费在线观看 | 在线观看免费av网 | www.色午夜,com | 国产精品久久久久久影院 | 一区二区三区免费在线 | 日韩一区在线免费观看 | 国产精品18久久久久久久久 | 日韩精品一区不卡 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 一级片黄色片网站 | 亚洲精品97| 日本69hd| 国产一线二线三线在线观看 | 成人中文字幕+乱码+中文字幕 | av在线成人 | 国产看片网站 | 特级毛片aaa | 福利一区二区 | 国产又粗又硬又长又爽的视频 | 黄色国产高清 | 激情欧美丁香 | 国产精品99久久久久的智能播放 | 在线色资源 | 精品视频 | 91高清免费看 | 中文字幕视频观看 | 国产精品99蜜臀久久不卡二区 | 久久av免费| 亚洲午夜电影网 | 在线韩国电影免费观影完整版 | 国产在线观看91 | 国产手机视频在线 | 中文av日韩 | 亚洲精品久久久久中文字幕二区 | 色www免费视频 | 久草久热| 丁香婷婷在线观看 | 在线观看www91 | 国产99亚洲 | 国产黄色免费观看 | 欧美va日韩va | 五月精品 | 99视频国产精品免费观看 | 亚洲理论在线观看 | 欧美在线视频一区二区三区 | 亚洲激情在线视频 | 日本久久综合视频 | 国产精品九九久久99视频 | 午夜视频一区二区三区 | 天天天天色射综合 | 黄色的视频网站 | 色婷婷国产精品一区在线观看 | 久久精品成人欧美大片古装 | 日韩激情av在线 | 操操日日| 婷婷国产v亚洲v欧美久久 | 西西444www高清大胆 | 91视频-88av| 天天草天天色 | 色噜噜狠狠色综合中国 | 国产99久久久久久免费看 | 99久久久久久 | 热久久最新地址 | 欧美在线视频精品 | 美女视频黄在线观看 | 亚洲影音先锋 | www色com| zzijzzij亚洲成熟少妇 | 欧美999| 一区二区在线电影 | 国产99久久久国产精品成人免费 | 在线观看91精品国产网站 | 日韩精品五月天 | 婷婷国产在线观看 | 夜夜躁天天躁很躁波 | 国产精品网红直播 | 免费网站在线观看成人 | 国产精品高潮呻吟久久久久 | 亚洲精品美女在线观看 | 日韩中文字幕一区 | 最新超碰在线 | 中文字幕视频网 | 国产99久久久国产 | 国产精品久久久久久吹潮天美传媒 | 日韩激情久久 | 国产男女爽爽爽免费视频 | 日韩精品中文字幕有码 | 国产成人在线综合 | 亚洲日日日 | 这里只有精品视频在线观看 | 久久伊人婷婷 | 色综合久久中文字幕综合网 | 欧美日韩精品免费观看 | 日韩高清不卡一区二区三区 | 日韩一区二区三区免费视频 | 久草在线视频在线观看 | 激情综合五月天 | 精品国产伦一区二区三区观看说明 | 亚洲另类人人澡 | 蜜臀一区二区三区精品免费视频 | 免费av观看网站 | 片网站 | 亚洲 欧洲av | 人人干天天射 | 黄色影院在线观看 | 国产精品久久久久久久久久三级 | 欧美老女人xx | 狠狠色狠狠色 | 欧美性久久久久久 | 色综合天天色综合 | 99精品视频免费在线观看 | 中文字幕一区二区三区久久 | 久久久免费网站 | 精品国产一区二区三区在线 | 国产精品一区二区三区久久久 | 四虎4hu永久免费 | 美国三级黄色大片 | 日韩高清成人在线 | 久久草在线精品 | 国产中文字幕一区二区三区 | 久久亚洲福利 | 国产精品视频免费看 | 米奇影视7777 | 久久亚洲欧美 | 日韩高清激情 | 99久久久国产精品美女 | 一性一交视频 | 日韩二区三区在线 | 婷婷色五 | 九九久久久久久久久激情 | 国产在线观看高清视频 | 国产九九在线 | 毛片永久免费 | 日韩精品一区电影 | 国产 视频 久久 | 最新色站 | 国产精品免费不卡 | 99视频免费播放 | 天天干,天天插 | 美女黄频免费 | 国内少妇自拍视频一区 | 国产一区在线观看视频 | 国产亚洲欧美日韩高清 | 超碰人人射| 在线播放一区 | 精品1区2区 | 国产精品美女久久久久久久网站 | 不卡国产在线 | 色999在线 | www.香蕉视频 | av在线在线| 一区二区三区精品在线视频 | 午夜视频一区二区三区 | 日韩欧美一区二区三区视频 | 免费观看性生活大片3 | 91人人在线| 成年人免费在线观看 | www.午夜| 久久久在线视频 | 欧美福利在线播放 | 狠狠操夜夜 | 国产高清精品在线观看 | 99在线精品免费视频九九视 | 久久久久久国产精品美女 | 狠狠干夜夜爱 | 人人射人人爱 | 免费观看性生活大片 | 免费视频黄色 | a电影在线观看 | 天天干天天操av | 综合网天天射 | 午夜精品一区二区三区四区 | 免费91在线观看 | 国产成人福利在线 | 粉嫩av一区二区三区四区在线观看 | 丝袜美腿在线 | 日b视频在线观看网址 | 黄污视频网站大全 | 在线天堂中文在线资源网 | 日本中文字幕网站 | 日韩免费小视频 | 91九色国产蝌蚪 | 国产精品久久久久久久久久久久午夜片 | 碰超在线观看 | 久久99亚洲精品久久 | 亚洲国产精品女人久久久 | 91九色成人蝌蚪首页 | 日本三级不卡视频 | 国产一区二区高清不卡 | 色婷婷在线观看视频 | 一区二区三区三区在线 | 日本一区二区三区视频在线播放 | 欧美一级片 | 天天射天天射天天 | 狠狠狠色狠狠色综合 | 国产不卡视频在线 | 黄色看片| 精品免费视频 | 久久夜色精品国产欧美乱 | 综合网久久 | 日韩大片免费在线观看 | 成人影片在线免费观看 | 国产精品一区二区免费 | 中文字幕成人在线观看 | 丁香视频在线观看 | 日韩二区三区在线观看 | 色视频网站在线观看一=区 a视频免费在线观看 | 国产免费一区二区三区最新 | 免费在线观看不卡av | 操操操操网| 超碰97公开 | 国产免费人人看 | 亚洲资源在线网 | 深爱婷婷激情 | 日韩电影在线看 | 99自拍视频在线观看 | 日韩 在线 | 国产精品夜夜夜一区二区三区尤 | 特级a老妇做爰全过程 | 福利视频导航网址 | a在线观看视频 | 伊人天堂久久 | 中文资源在线官网 | 免费视频一二三 | 欧美日韩中字 | 久久久久久久看片 | av免费在线免费观看 | 中文字幕国产精品一区二区 | 日本色小说视频 | 国产高清专区 | 久久久五月婷婷 | 亚洲成人二区 | 免费在线观看av的网站 | 五月婷婷综合在线视频 | 在线观看免费av网站 | 玖玖综合网| 日韩高清av | 五月婷婷丁香网 | 99九九免费视频 | 精品主播网红福利资源观看 | 九九影视理伦片 | 天天激情综合 | 九九九九九精品 | 一级黄色片在线播放 | 亚洲动漫在线观看 | 九九热在线观看 | 欧美日韩伦理一区 | 午夜精品一区二区三区在线播放 | 一级黄色免费 | 欧美成人基地 | 亚洲精品视频在线观看免费 | 亚洲精品免费看 | 1000部国产精品成人观看 | 免费看片在线观看 | 国产精品高清免费在线观看 | 亚洲天堂网在线观看视频 | av福利第一导航 | 国产精品亚洲a | 久久av网 | 能在线观看的日韩av | 国产成人精品一区二区 | 成人久久久久 | 久久久久中文字幕 | 香蕉视频在线观看免费 | 一区二区视频电影在线观看 | 91手机视频 | 一区二区精品在线 | 日韩中文字幕网站 | 欧美天天综合 | 看片一区二区三区 | 精品黄色视| 久久久www成人免费精品张筱雨 | 成人网444ppp | 97色婷婷成人综合在线观看 | 国产精品一区二区三区久久 | 精品中文字幕在线播放 | 午夜精品福利在线 | 亚洲精品一区二区三区在线观看 | 偷拍精品一区二区三区 | 96视频在线| 午夜免费视频网站 | www.狠狠插.com | 日韩性片 | 精品国产资源 | 日日操天天操夜夜操 | 日韩毛片在线免费观看 | 最近中文字幕久久 | 国产精品毛片一区视频播 | 婷婷亚洲综合五月天小说 | 久久看视频| 中文字幕日韩伦理 | 亚洲伊人婷婷 | 国产主播大尺度精品福利免费 | 亚洲日本韩国一区二区 | 久久久免费观看完整版 | 婷婷九月丁香 | 色婷婷婷 | 超碰精品在线观看 | 狠狠狠色狠狠色综合 | 韩日精品在线 | 鲁一鲁影院 | 国内视频1区| 久久伦理视频 | 天天干,天天插 | 天天爽天天爽夜夜爽 | 久久午夜精品视频 | 国产福利免费在线观看 | 国产精品12 | 亚洲精品美女久久久 | 婷婷久久亚洲 | 毛片网在线观看 | 亚洲欧美国产精品 | 日日干av | 天堂av一区二区 | 最新免费中文字幕 | 亚洲视频免费 | 在线国产精品一区 | 日本xxxx裸体xxxx17 | 狠狠色伊人亚洲综合成人 | 久久国产成人午夜av影院宅 | 国产精品9999| 色视频网站在线观看一=区 a视频免费在线观看 | 国产中文伊人 | 中文字幕在线免费观看视频 | 97免费 | 亚洲第一区在线观看 | 正在播放一区 | 欧美日韩视频在线观看一区二区 | 亚洲国内精品视频 | 91久久精品一区二区三区 | 色偷偷人人澡久久超碰69 | 国产精品成人自产拍在线观看 | 国产中文字幕在线观看 | 久久99网 | 美女网站视频免费都是黄 | 欧美另类交在线观看 | 天堂视频中文在线 | 国产精品女人久久久 | 99久久婷婷国产综合精品 | 午夜精品久久久久久久99无限制 | 麻豆视频在线观看免费 | 久操视频在线观看 | 久久精品视频免费播放 | 91丨九色丨国产在线 | 激情综合五月婷婷 | 在线综合 亚洲 欧美在线视频 | 亚洲第一中文网 | 天天操天天是 | 又黄又爽又无遮挡的视频 | 国产一区二区电影在线观看 | 婷婷五月情 | 91中文在线 | 激情欧美一区二区三区 | 日韩中文字幕亚洲一区二区va在线 | 有码中文字幕在线观看 | av在线播放一区二区三区 | 在线一区观看 | 欧美韩日在线 | 天天操天天操天天操天天操天天操天天操 | 国产尤物在线观看 | 在线网站黄 | 涩涩网站免费 | 四虎成人av | 中文字幕精品一区二区三区电影 | 国产在线观看你懂得 | 国产精品18久久久 | 国产视频日韩视频欧美视频 | 国产色视频网站 | 草久在线观看 | 欧美成年性 | 天天操夜夜操夜夜操 | 中文字幕 二区 | 欧美一级小视频 | 99 色| 91看片淫黄大片在线播放 | 国产大片黄色 | 91精选在线| 精品一区二区影视 | 中文字幕在线看视频国产 | 欧美伦理电影一区二区 | 高清不卡免费视频 | 中文字幕丰满人伦在线 | 69xxxx欧美 | 久久国产精品免费观看 | 美女黄频视频大全 | 99久久精品无免国产免费 | 久久精品亚洲综合专区 | 国产精品久久久久久久久久ktv | 久久精品欧美一 | 久久y| 国产成人av电影在线 | 黄色电影网站在线观看 | 国产成人综合在线观看 | 91精品久久久久久综合五月天 | 亚洲黄色区 | 一区二区三区 中文字幕 | av电影在线免费 | 国产不卡免费av | 久久9精品| av电影一区二区三区 | 国产人成精品一区二区三 | 久久人人爽人人爽人人片av软件 | 五月婷婷一区 | 久久激情婷婷 | 欧美性生活一级片 | 国产精品女主播一区二区三区 | 亚洲天天看 | 又爽又黄又无遮挡网站动态图 | 欧美激情精品久久久久久 | 97久久久免费福利网址 | 中文字幕日韩免费视频 | 81精品国产乱码久久久久久 | 91人人澡人人爽人人精品 | 欧美91成人网 | 91在线精品秘密一区二区 | 久久av中文字幕片 | 欧美a级免费视频 | 中文字幕免费播放 | 国产99re | 一区二区三区在线电影 | 亚洲一区日韩精品 | 国产中文字幕视频在线观看 | 亚洲无毛专区 | 成年人毛片在线观看 | 精品视频在线看 | 久久久久国产精品一区二区 | 国产区久久| av免费网站在线观看 | 欧美天堂视频在线 | 国产三级香港三韩国三级 | 六月色 | 久久精品成人热国产成 | 国产一区久久 | 欧洲一区二区三区精品 | 国产精品久久久久久久毛片 | 日日摸日日添夜夜爽97 | 狠狠操操网| 亚洲成人网在线 | 91视频首页| 毛片在线网 | 尤物九九久久国产精品的分类 | 国产一区不卡在线 | 免费www视频 | 久草在线视频在线观看 | 成人免费一区二区三区在线观看 | 在线蜜桃视频 | 色av男人的天堂免费在线 | 成人超碰在线 | 国产成人在线一区 | 久久激五月天综合精品 | 高清av网站| 久久亚洲成人网 | 在线免费观看黄色av | 黄色小说免费观看 | 国内精品视频久久 | 国产字幕在线播放 | 99色| 黄色一级在线免费观看 | 日韩中文字幕免费在线观看 | av在线激情 | 国产精品99久久久久的智能播放 | 日韩欧美有码在线 | 国产91在线 | 美洲 | 亚洲精品国产精品国自 | 日日夜夜中文字幕 | 欧美精品在线免费 | 亚洲日b视频 | 欧美成人中文字幕 | 麻豆一二三精选视频 | 午夜手机电影 | 日韩精品亚洲专区在线观看 | 91mv.cool在线观看 | 国产精品2019 | 久久久免费精品视频 | 草久草久 | 日韩在线视频免费看 | 中文字幕有码在线观看 |