在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

圖像分類任務的各種tricks

新機器視覺 ? 來源:新機器視覺 ? 作者:新機器視覺 ? 2022-09-14 16:42 ? 次閱讀

導讀

計算機視覺主要問題有圖像分類、目標檢測和圖像分割等。針對圖像分類任務,提升準確率的方法路線有兩條,一個是模型的修改,另一個是各種數據處理和訓練的tricks。圖像分類中的各種技巧對于目標檢測、圖像分割等任務也有很好的作用。本文在精讀論文的基礎上,總結了圖像分類任務的各種tricks。

目錄:

Warmup

Linear scaling learning rate

Label-smoothing

Random image cropping and patching

Knowledge Distillation

Cutout

Random erasing

Cosine learning rate decay

Mixup training

AdaBoud

AutoAugment

其他經典的tricks

Warmup

學習率是神經網絡訓練中最重要的超參數之一,針對學習率的技巧有很多。Warm up是在ResNet論文[1]中提到的一種學習率預熱的方法。由于剛開始訓練時模型的權重(weights)是隨機初始化的(全部置為0是一個坑,原因見[2]),此時選擇一個較大的學習率,可能會帶來模型的不穩定。學習率預熱就是在剛開始訓練的時候先使用一個較小的學習率,訓練一些epoches或iterations,等模型穩定時再修改為預先設置的學習率進行訓練。論文[1]中使用一個110層的ResNet在cifar10上訓練時,先用0.01的學習率訓練直到訓練誤差低于80%(大概訓練了400個iterations),然后使用0.1的學習率進行訓練。

上述的方法是constant warmup,18年Facebook又針對上面的warmup進行了改進[3],因為從一個很小的學習率一下變為比較大的學習率可能會導致訓練誤差突然增大。論文[3]提出了gradual warmup來解決這個問題,即從最開始的小學習率開始,每個iteration增大一點,直到最初設置的比較大的學習率。

Gradual warmup代碼如下:

fromtorch.optim.lr_schedulerimport_LRScheduler

classGradualWarmupScheduler(_LRScheduler):
"""
Args:
optimizer(Optimizer):Wrappedoptimizer.
multiplier:targetlearningrate=baselr*multiplier
total_epoch:targetlearningrateisreachedattotal_epoch,gradually
after_scheduler:aftertarget_epoch,usethisscheduler(eg.ReduceLROnPlateau)
"""

def__init__(self,optimizer,multiplier,total_epoch,after_scheduler=None):
self.multiplier=multiplier
ifself.multiplier<=??1.:
?????????????raise??ValueError('multiplier?should?be?greater?than?1.')
?????????self.total_epoch?=?total_epoch
?????????self.after_scheduler?=?after_scheduler
?????????self.finished?=??False
?????????super().__init__(optimizer)

????def?get_lr(self):
????????if?self.last_epoch?>self.total_epoch:
ifself.after_scheduler:
ifnotself.finished:
self.after_scheduler.base_lrs=[base_lr*self.multiplierforbase_lrinself.base_lrs]
self.finished=True
returnself.after_scheduler.get_lr()
return[base_lr*self.multiplierforbase_lrinself.base_lrs]

return[base_lr*((self.multiplier-1.)*self.last_epoch/self.total_epoch+1.)forbase_lrinself.base_lrs]

defstep(self,epoch=None):
ifself.finishedandself.after_scheduler:
returnself.after_scheduler.step(epoch)
else:
returnsuper(GradualWarmupScheduler,self).step(epoch)

Linear scaling learning rate

Linear scaling learning rate是在論文[3]中針對比較大的batch size而提出的一種方法。

在凸優化問題中,隨著批量的增加,收斂速度會降低,神經網絡也有類似的實證結果。隨著batch size的增大,處理相同數據量的速度會越來越快,但是達到相同精度所需要的epoch數量越來越多。也就是說,使用相同的epoch時,大batch size訓練的模型與小batch size訓練的模型相比,驗證準確率會減小。

上面提到的gradual warmup是解決此問題的方法之一。另外,linear scaling learning rate也是一種有效的方法。在mini-batch SGD訓練時,梯度下降的值是隨機的,因為每一個batch的數據是隨機選擇的。增大batch size不會改變梯度的期望,但是會降低它的方差。也就是說,大batch size會降低梯度中的噪聲,所以我們可以增大學習率來加快收斂。

具體做法很簡單,比如ResNet原論文[1]中,batch size為256時選擇的學習率是0.1,當我們把batch size變為一個較大的數b時,學習率應該變為 0.1 × b/256。

Label-smoothing

在分類問題中,我們的最后一層一般是全連接層,然后對應標簽的one-hot編碼,即把對應類別的值編碼為1,其他為0。這種編碼方式和通過降低交叉熵損失來調整參數的方式結合起來,會有一些問題。這種方式會鼓勵模型對不同類別的輸出分數差異非常大,或者說,模型過分相信它的判斷。但是,對于一個由多人標注的數據集,不同人標注的準則可能不同,每個人的標注也可能會有一些錯誤。模型對標簽的過分相信會導致過擬合。

標簽平滑(Label-smoothing regularization,LSR)是應對該問題的有效方法之一,它的具體思想是降低我們對于標簽的信任,例如我們可以將損失的目標值從1稍微降到0.9,或者將從0稍微升到0.1。標簽平滑最早在inception-v2[4]中被提出,它將真實的概率改造為:

886b7422-33e4-11ed-ba43-dac502259ad0.jpg

其中,ε是一個小的常數,K是類別的數目,y是圖片的真正的標簽,i代表第i個類別,是圖片為第i類的概率。

總的來說,LSR是一種通過在標簽y中加入噪聲,實現對模型約束,降低模型過擬合程度的一種正則化方法。LSR代碼如下:

importtorch
importtorch.nnasnn

classLSR(nn.Module):

def__init__(self,e=0.1,reduction='mean'):
super().__init__()

self.log_softmax=nn.LogSoftmax(dim=1)
self.e=e
self.reduction=reduction

def_one_hot(self,labels,classes,value=1):
"""

Convertlabelstoonehotvectors

Args:
labels:torchtensorinformat[label1,label2,label3,...]
classes:int,numberofclasses
value:labelvalueinonehotvector,defaultto1

Returns:
returnonehotformatlabelsinshape[batchsize,classes]
"""

one_hot=torch.zeros(labels.size(0),classes)

#labelsandvalue_addedsizemustmatch
labels=labels.view(labels.size(0),-1)
value_added=torch.Tensor(labels.size(0),1).fill_(value)

value_added=value_added.to(labels.device)
one_hot=one_hot.to(labels.device)

one_hot.scatter_add_(1,labels,value_added)

returnone_hot

def_smooth_label(self,target,length,smooth_factor):
"""converttargetstoone-hotformat,andsmooththem.
Args:
target:targetinformwith[label1,label2,label_batchsize]
length:lengthofone-hotformat(numberofclasses)
smooth_factor:smoothfactorforlabelsmooth

Returns:
smoothedlabelsinonehotformat
"""
one_hot=self._one_hot(target,length,value=1-smooth_factor)
one_hot+=smooth_factor/length

returnone_hot.to(target.device)

Random image cropping and patching

Random image cropping and patching (RICAP)[7]方法隨機裁剪四個圖片的中部分,然后把它們拼接為一個圖片,同時混合這四個圖片的標簽。

RICAP在caifar10上達到了2.19%的錯誤率。

如下圖所示,Ix, Iy是原始圖片的寬和高。w和h稱為boundary position,它決定了四個裁剪得到的小圖片的尺寸。w和h從beta分布Beta(β, β)中隨機生成,β也是RICAP的超參數。最終拼接的圖片尺寸和原圖片尺寸保持一致。

88aa8aae-33e4-11ed-ba43-dac502259ad0.jpg

RICAP的代碼如下:

beta=0.3#hyperparameter
for(images,targets)intrain_loader:

#gettheimagesize
I_x,I_y=images.size()[2:]

#drawaboundryposition(w,h)
w=int(np.round(I_x*np.random.beta(beta,beta)))
h=int(np.round(I_y*np.random.beta(beta,beta)))
w_=[w,I_x-w,w,I_x-w]
h_=[h,h,I_y-h,I_y-h]

#selectandcropfourimages
cropped_images={}
c_={}
W_={}
forkinrange(4):
index=torch.randperm(images.size(0))
x_k=np.random.randint(0,I_x-w_[k]+1)
y_k=np.random.randint(0,I_y-h_[k]+1)
cropped_images[k]=images[index][:,:,x_k:x_k+w_[k],y_k:y_k+h_[k]]
c_[k]=target[index].cuda()
W_[k]=w_[k]*h_[k]/(I_x*I_y)

#patchcroppedimages
patched_images=torch.cat(
(torch.cat((cropped_images[0],cropped_images[1]),2),
torch.cat((cropped_images[2],cropped_images[3]),2)),
3)
#patched_images=patched_images.cuda()

#getoutput
output=model(patched_images)

#calculatelossandaccuracy
loss=sum([W_[k]*criterion(output,c_[k])forkinrange(4)])
acc=sum([W_[k]*accuracy(output,c_[k])[0]forkinrange(4)])

Knowledge Distillation

提高幾乎所有機器學習算法性能的一種非常簡單的方法是在相同的數據上訓練許多不同的模型,然后對它們的預測進行平均。但是使用所有的模型集成進行預測是比較麻煩的,并且可能計算量太大而無法部署到大量用戶。Knowledge Distillation(知識蒸餾)[8]方法就是應對這種問題的有效方法之一。

在知識蒸餾方法中,我們使用一個教師模型來幫助當前的模型(學生模型)訓練。教師模型是一個較高準確率的預訓練模型,因此學生模型可以在保持模型復雜度不變的情況下提升準確率。比如,可以使用ResNet-152作為教師模型來幫助學生模型ResNet-50訓練。在訓練過程中,我們會加一個蒸餾損失來懲罰學生模型和教師模型的輸出之間的差異。

給定輸入,假定p是真正的概率分布,z和r分別是學生模型和教師模型最后一個全連接層的輸出。之前我們會用交叉熵損失l(p,softmax(z))來度量p和z之間的差異,這里的蒸餾損失同樣用交叉熵。所以,使用知識蒸餾方法總的損失函數是

88bf3a4e-33e4-11ed-ba43-dac502259ad0.jpg

上式中,第一項還是原來的損失函數,第二項是添加的用來懲罰學生模型和教師模型輸出差異的蒸餾損失。其中,T是一個溫度超參數,用來使softmax的輸出更加平滑的。實驗證明,用ResNet-152作為教師模型來訓練ResNet-50,可以提高后者的準確率。

Cutout

Cutout[9]是一種新的正則化方法。原理是在訓練時隨機把圖片的一部分減掉,這樣能提高模型的魯棒性。它的來源是計算機視覺任務中經常遇到的物體遮擋問題。通過cutout生成一些類似被遮擋的物體,不僅可以讓模型在遇到遮擋問題時表現更好,還能讓模型在做決定時更多地考慮環境(context)。

代碼如下:

importtorch
importnumpyasnp

classCutout(object):
"""Randomlymaskoutoneormorepatchesfromanimage.
Args:
n_holes(int):Numberofpatchestocutoutofeachimage.
length(int):Thelength(inpixels)ofeachsquarepatch.
"""
def__init__(self,n_holes,length):
self.n_holes=n_holes
self.length=length

def__call__(self,img):
"""
Args:
img(Tensor):Tensorimageofsize(C,H,W).
Returns:
Tensor:Imagewithn_holesofdimensionlengthxlengthcutoutofit.
"""
h=img.size(1)
w=img.size(2)

mask=np.ones((h,w),np.float32)

forninrange(self.n_holes):
y=np.random.randint(h)
x=np.random.randint(w)

y1=np.clip(y-self.length//2,0,h)
y2=np.clip(y+self.length//2,0,h)
x1=np.clip(x-self.length//2,0,w)
x2=np.clip(x+self.length//2,0,w)

mask[y1:y2,x1:x2]=0.

mask=torch.from_numpy(mask)
mask=mask.expand_as(img)
img=img*mask

returnimg

效果如下圖,每個圖片的一小部分被cutout了。

Random erasing

Random erasing[6]其實和cutout非常類似,也是一種模擬物體遮擋情況的數據增強方法。區別在于,cutout是把圖片中隨機抽中的矩形區域的像素值置為0,相當于裁剪掉,random erasing是用隨機數或者數據集中像素的平均值替換原來的像素值。而且,cutout每次裁剪掉的區域大小是固定的,Random erasing替換掉的區域大小是隨機的。

Random erasing代碼如下:

from__future__importabsolute_import
fromtorchvision.transformsimport*
fromPILimportImage
importrandom
importmath
importnumpyasnp
importtorch

classRandomErasing(object):
'''
probability:Theprobabilitythattheoperationwillbeperformed.
sh:maxerasingarea
r1:minaspectratio
mean:erasingvalue
'''
def__init__(self,probability=0.5,sl=0.02,sh=0.4,r1=0.3,mean=[0.4914,0.4822,0.4465]):
self.probability=probability
self.mean=mean
self.sl=sl
self.sh=sh
self.r1=r1
def__call__(self,img):
ifrandom.uniform(0,1)>self.probability:
returnimg

forattemptinrange(100):
area=img.size()[1]*img.size()[2]

target_area=random.uniform(self.sl,self.sh)*area
aspect_ratio=random.uniform(self.r1,1/self.r1)

h=int(round(math.sqrt(target_area*aspect_ratio)))
w=int(round(math.sqrt(target_area/aspect_ratio)))

ifw

Cosine learning rate decay

在warmup之后的訓練過程中,學習率不斷衰減是一個提高精度的好方法。其中有step decay和cosine decay等,前者是隨著epoch增大學習率不斷減去一個小的數,后者是讓學習率隨著訓練過程曲線下降。

對于cosine decay,假設總共有T個batch(不考慮warmup階段),在第t個batch時,學習率η_t為:

88eff800-33e4-11ed-ba43-dac502259ad0.jpg

這里,η代表初始設置的學習率。這種學習率遞減的方式稱之為cosine decay。

下面是帶有warmup的學習率衰減的可視化圖[4]。其中,圖(a)是學習率隨epoch增大而下降的圖,可以看出cosine decay比step decay更加平滑一點。圖(b)是準確率隨epoch的變化圖,兩者最終的準確率沒有太大差別,不過cosine decay的學習過程更加平滑。

88fad680-33e4-11ed-ba43-dac502259ad0.jpg

在pytorch的torch.optim.lr_scheduler中有更多的學習率衰減的方法,至于哪個效果好,可能對于不同問題答案是不一樣的。對于step decay,使用方法如下:

#Assumingoptimizeruseslr=0.05forallgroups
#lr=0.05ifepoch

Mixup training

Mixup[10]是一種新的數據增強的方法。Mixup training,就是每次取出2張圖片,然后將它們線性組合,得到新的圖片,以此來作為新的訓練樣本,進行網絡的訓練,如下公式,其中x代表圖像數據,y代表標簽,則得到的新的xhat, yhat。

89080256-33e4-11ed-ba43-dac502259ad0.jpg

其中,λ是從Beta(α, α)隨機采樣的數,在[0,1]之間。在訓練過程中,僅使用(xhat, yhat)。Mixup方法主要增強了訓練樣本之間的線性表達,增強網絡的泛化能力,不過mixup方法需要較長的時間才能收斂得比較好。

Mixup代碼如下:

for(images,labels)intrain_loader:

l=np.random.beta(mixup_alpha,mixup_alpha)

index=torch.randperm(images.size(0))
images_a,images_b=images,images[index]
labels_a,labels_b=labels,labels[index]

mixed_images=l*images_a+(1-l)*images_b

outputs=model(mixed_images)
loss=l*criterion(outputs,labels_a)+(1-l)*criterion(outputs,labels_b)
acc=l*accuracy(outputs,labels_a)[0]+(1-l)*accuracy(outputs,labels_b)[0]

AdaBound

AdaBound是最近一篇論文[5]中提到的,按照作者的說法,AdaBound會讓你的訓練過程像adam一樣快,并且像SGD一樣好。如下圖所示,使用AdaBound會收斂速度更快,過程更平滑,結果更好。

8916318c-33e4-11ed-ba43-dac502259ad0.jpg

另外,這種方法相對于SGD對超參數的變化不是那么敏感,也就是說魯棒性更好。但是,針對不同的問題還是需要調節超參數的,只是所用的時間可能變少了。

8924b75c-33e4-11ed-ba43-dac502259ad0.jpg

當然,AdaBound還沒有經過普遍的檢驗,也有可能只是對于某些問題效果好。

使用方法如下:安裝AdaBound

pipinstalladabound

使用AdaBound(和其他PyTorch optimizers用法一致)

optimizer=adabound.AdaBound(model.parameters(),lr=1e-3,final_lr=0.1)

AutoAugment

數據增強在圖像分類問題上有很重要的作用,但是增強的方法有很多,并非一股腦地用上所有的方法就是最好的。那么,如何選擇最佳的數據增強方法呢?AutoAugment[11]就是一種搜索適合當前問題的數據增強方法的方法。該方法創建一個數據增強策略的搜索空間,利用搜索算法選取適合特定數據集的數據增強策略。此外,從一個數據集中學到的策略能夠很好地遷移到其它相似的數據集上。

AutoAugment在cifar10上的表現如下表,達到了98.52%的準確率。

8934adce-33e4-11ed-ba43-dac502259ad0.jpg

其他經典的tricks

常用的正則化方法為

Dropout

L1/L2正則

Batch Normalization

Early stopping

Random cropping

Mirroring

Rotation

Color shifting

PCA color augmentation

...

其他

Xavier init[12]

...

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 圖像分割
    +關注

    關注

    4

    文章

    182

    瀏覽量

    18024
  • 模型
    +關注

    關注

    1

    文章

    3279

    瀏覽量

    48974
  • 計算機視覺
    +關注

    關注

    8

    文章

    1699

    瀏覽量

    46051

原文標題:其他經典的tricks

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于多通道分類合成的SAR圖像分類研究

    【作者】:李長春;冒亞明;孫灝;慎利;【來源】:《計算機與現代化》2010年03期【摘要】:SAR具有全天時、全天候工作能力,且能夠提供高分辨率圖像數據。SAR圖像分類是SAR圖像處理
    發表于 04-23 11:52

    區分圖像分類方法是什么

    區分圖像分類方法
    發表于 05-07 09:37

    基于Brushlet和RBF網絡的SAR圖像分類

    針對SAR圖像紋理特征豐富的特點,本文提出一種新的SAR圖像分類方法:通過提取Brushlet變換的能量及相位信息作為SAR圖像的紋理特征,然后輸入徑向基函數RBF網絡對
    發表于 12-18 16:20 ?20次下載

    Programming Tricks for Higher Conversion Speeds Utilizing De

    PROGRAMMING TRICKS FOR HIGHER CONVERSION SPEEDS UTILIZING DELTA SIGMA CONVERTERS:編程更高的轉換利用Δ-Σ轉換速度把戲
    發表于 06-01 18:05 ?28次下載

    圖像分類的方法之深度學習與傳統機器學習

    圖像分類,顧名思義,是一個輸入圖像,輸出對該圖像內容分類的描述的問題。它是計算機視覺的核心,實際應用廣泛。
    發表于 09-28 19:43 ?0次下載

    基于顯著性檢測的圖像分類算法

    針對傳統的圖像分類方法對整個圖像不分等級處理以及缺乏高層認知的問題,提出了一種基于顯著性檢測的圖像分類方法。首先,利用視覺注意模型進行顯著性
    發表于 01-04 13:47 ?0次下載

    簡單好上手的圖像分類教程!

    簡單好上手的圖像分類教程!構建圖像分類模型的一個突破是發現卷積神經網絡(CNN)可以用來逐步地提取圖像內容的更高層的表示。CNN不是預先處理
    的頭像 發表于 05-31 16:36 ?8260次閱讀
    簡單好上手的<b class='flag-5'>圖像</b><b class='flag-5'>分類</b>教程!

    如何利用機器學習思想,更好地去解決NLP分類任務

    NLP分類任務我們每個NLPer都異常熟悉了,其在整個NLP業務中占據著舉足輕重的地位,更多領域的子任務也常常轉化為一個分類任務,例如新聞
    的頭像 發表于 08-28 10:02 ?2308次閱讀
    如何利用機器學習思想,更好地去解決NLP<b class='flag-5'>分類</b><b class='flag-5'>任務</b>

    針對遙感圖像場景分類的多粒度特征蒸餾方法

    深度神經網絡廣泛應用于遙感圖像場景分類任務中并能大幅提高分類精度,但隱藏層數較少的神經網絡在標記數據不足的遙感場景分類中泛化能力較低,而隱層
    發表于 03-11 17:18 ?20次下載
    針對遙感<b class='flag-5'>圖像</b>場景<b class='flag-5'>分類</b>的多粒度特征蒸餾方法

    關于深度學習圖像分類不得不說的技巧詳解

    計算機視覺主要問題有圖像分類、目標檢測和圖像分割等。針對圖像分類任務,提升準確率的方法路線有兩條
    的頭像 發表于 04-01 14:29 ?3007次閱讀
    關于深度學習<b class='flag-5'>圖像</b><b class='flag-5'>分類</b>不得不說的技巧詳解

    文本分類任務的Bert微調trick大全

    1 前言 大家現在打比賽對預訓練模型非常喜愛,基本上作為NLP比賽基線首選(圖像分類也有預訓練模型)。預訓練模型雖然很強,可能通過簡單的微調就能給我們帶來很大提升,但是大家會發現比賽做到后期
    的頭像 發表于 07-18 09:49 ?2516次閱讀

    圖像關系型KD方法語義分割任務-CIRKD

    語義分割任務作為計算機視覺中的基礎任務之一,其目的是對圖像中的每一個像素進行分類。該任務也被廣泛應用于實踐,例如自動駕駛和醫學
    的頭像 發表于 05-10 11:30 ?2480次閱讀
    跨<b class='flag-5'>圖像</b>關系型KD方法語義分割<b class='flag-5'>任務</b>-CIRKD

    一種對紅細胞和白細胞圖像分類任務的主動學習端到端工作流程

    細胞成像的分割和分類等技術是一個快速發展的領域研究。就像在其他機器學習領域一樣,數據的標注是非常昂貴的,并且對于數據標注的質量要求也非常的高。針對這一問題,本篇文章介紹一種對紅細胞和白細胞圖像分類
    的頭像 發表于 08-13 10:27 ?1299次閱讀

    計算機視覺的5大核心任務是什么?

    圖像分類是將圖像分配到某個特定類別的任務,而圖像識別則進一步將類別關聯到具體的實體或對象。例如,分類
    發表于 08-28 11:45 ?936次閱讀
    計算機視覺的5大核心<b class='flag-5'>任務</b>是什么?

    計算機視覺怎么給圖像分類

    圖像分類是計算機視覺領域中的一項核心任務,其目標是將輸入的圖像自動分配到預定義的類別集合中。這一過程涉及圖像的特征提取、特征表示以及
    的頭像 發表于 07-08 17:06 ?810次閱讀
    主站蜘蛛池模板: 日本免费成人| 欧美日韩视频综合一区无弹窗| 四虎永久网址影院| 91男人| 午夜寂寞影| 18年大片免费在线观看| 亚洲一卡2卡3卡4卡5卡乱码 | 中文字幕亚洲一区二区三区| 国产亚洲新品一区二区| 亚洲日本一区二区三区 | 天天爱天天做天天爽夜夜揉| 骚黄视频| 女18poren69| 国产三及| 四虎成人精品在永久在线观看| 国产香蕉一区二区精品视频| 激情综合五月亚洲婷婷| 一级毛片黄色| 看黄网站在线看| 理论片午夜| bt天堂电影| 你懂的在线观看网站| 日本不卡在线视频| 国产精品视频久久久| 夜夜爱视频| 精品女视频在线观看免费| 性色爽爱性色爽爱网站| 35qao强力打造免费上线高清| 奇米影视四色7777| 成人欧美一区二区三区的电影| 色香蕉视频| 中文字幕在线天堂| 苍井优一级毛片免费观看| 国产未成女年一区二区| 日本19xxxxxxxxx69| 国产高清区| 苦瓜se影院在线视频网站| 狠久久| aa视频在线| 91aaa免费观看在线观看资源| 91三级视频|