<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【入門教程】異常檢測(Anomaly Detection)到底是什么?

          共 7191字,需瀏覽 15分鐘

           ·

          2021-03-18 18:15

          ↑ 點(diǎn)擊藍(lán)字 關(guān)注極市平臺(tái)

          作者丨成森@知乎(已授權(quán))
          來源丨h(huán)ttps://zhuanlan.zhihu.com/p/116235115
          編輯丨極市平臺(tái)

          極市導(dǎo)讀

           

          異常檢測(Anomaly Detection), 作為機(jī)器學(xué)習(xí)的一個(gè)重要分支,實(shí)際應(yīng)用領(lǐng)域廣泛,本文作者通過一些有趣的卡通形象作為例子講解了異常檢測入門概念及分類,并通過完整的介紹了如帶標(biāo)簽與不代表標(biāo)簽的異常檢測的過程。 >>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺的最前沿

          Anomaly Detection,也叫做 異常檢測,目的在于讓機(jī)器知道我所不知道的事情。

          1. 什么是 Anomaly(異常)?

          雖然說是 異常,但其實(shí)是以訓(xùn)練集為核心,判斷輸入數(shù)據(jù)是否與訓(xùn)練集中的數(shù)據(jù) “類似”。在不同的領(lǐng)域可以有不同的叫法,比如:outlier Detection,novelty Detection,exceptions Detection。

          至于什么才是“類似”,它的定義這取決于你所用的方法。如下圖所示,如果你給的訓(xùn)練集只有雷丘,那么比卡丘就是“異常”;相反,如果你給的訓(xùn)練集是比卡丘,那雷丘就是“異常”。

          什么是異常取決于你所給的訓(xùn)練集

          1.1 問題定義 Problem Formulation

          • 給定一個(gè)訓(xùn)練集 
          • 我們要找到一個(gè)函數(shù)來檢測 輸入 x 是不是屬于訓(xùn)練集(是否和訓(xùn)練集的數(shù)據(jù)屬于同一類)
          用來判斷是否和訓(xùn)練集屬于一類

          1.2 為什么不能用二分類來解決這個(gè)問題?

          如上面所說的,所謂“異常”,其實(shí)就是看是否和訓(xùn)練集“相似”,雖然我們很容易獲得正訓(xùn)練集(如上面的雷丘),但是負(fù)訓(xùn)練集我們無法來決定,如果我們用 寶可夢 來作為負(fù)訓(xùn)練集來訓(xùn)練二分類,那下次輸入一個(gè) 亞古獸 呢?這時(shí)候二分類模型就無法識(shí)別這個(gè)沒見過的 負(fù)樣本,而這樣的負(fù)樣本實(shí)在是太多了,我們沒法窮舉。如下圖所示。

          負(fù)樣本的種類太多反而無法用來訓(xùn)練二分類器

          更壞的情況就是,很多情景下,我們沒法收集到負(fù)樣本。比如說刷卡行為,大多數(shù)情況都只是正常的交易行為,而盜刷這一類情況就少之又少,甚至(目前)沒有。

          所以異常檢測無法簡化成二分類來實(shí)現(xiàn),這是一個(gè)獨(dú)立的研究主題。

          1.3 異常檢測模型分類

          根據(jù)給出的訓(xùn)練集,我們可以大致將其分成兩大類三小類:

          • (labeled)訓(xùn)練集中每個(gè)樣本都有標(biāo)簽,用這些樣本來訓(xùn)練一個(gè)分類器,這個(gè)分類器除了能夠識(shí)別訓(xùn)練集中已有樣本標(biāo)簽外,還能輸出 “unknown” 標(biāo)簽,用來表示該輸入是“沒見過的”、不在訓(xùn)練集中的。我們把它叫做 “open-set recognition(開放式識(shí)別)”

          • (unlabeled)另一種情況是,我的訓(xùn)練集是沒有標(biāo)簽的

            • (clean)但這個(gè)訓(xùn)練集是“干凈”的,我們可以將這個(gè)訓(xùn)練集里所有的樣本都視為“正樣本“;
            • (polluted)然而干凈的數(shù)據(jù)集在現(xiàn)實(shí)應(yīng)用中很少,大多數(shù)都是或多或少參雜著”異常樣本“,而且你無法知道,比如說銀行給你大量刷卡數(shù)據(jù)進(jìn)行訓(xùn)練,而這些數(shù)據(jù)里有可能有盜刷的數(shù)據(jù)且沒有標(biāo)注出來。
          異常檢測的兩大類三小類

          2. Labeled(帶標(biāo)簽)

          在這里就用 辛普森家族 來舉例子。這里有一堆辛普森家族的人物形象及其對(duì)應(yīng)的人物名稱(視為標(biāo)簽),這樣我們就能訓(xùn)練一個(gè)“辛普森角色分類器”,輸入一個(gè)人物的形象,輸出該人物的名稱(標(biāo)簽)。

          辛普森家族的人物形象及其名稱標(biāo)簽,訓(xùn)練一個(gè)分類器

          那我們訓(xùn)練好“辛普森角色分類器”后,這個(gè)分類器會(huì)輸出兩類數(shù)據(jù):類別(預(yù)測的名字)、信心值;然后給定一個(gè)閾值  ,當(dāng)信心度大于這個(gè)閾值,就視為“正常值(屬于辛普森家族)”,低于則視為“異常值(不屬于辛普森家族)”

          分類器的使用

          分類器的輸出其實(shí)是一個(gè)概率分布(distribution),輸出前經(jīng)過一個(gè) softmax,使得這個(gè)分布中的值之和為1,其輸出每一項(xiàng) 表示 每一個(gè)類別及其對(duì)應(yīng)的信心值;我們將其中的最大值,視為分類器對(duì)該輸入的信心值.

          除了最高值,我們還可以用 熵(entropy)來決定分類器最后的信心值。

          如下圖所示,第一個(gè)分類器中,霸子的信心值很高(總體熵低),且其他很低,就說明分類器能夠很好地把這個(gè)人物形象進(jìn)行分類,故認(rèn)為該形象是“正常值”;

          而第二個(gè)分類器中,每一類的信心值都不高且均勻(最大值不高,總體熵高),說明分類器沒見過該形象,信心不夠,沒法很好地區(qū)分,則可以認(rèn)為該形象是“異常值”。

          辛普森家族分類器,輸出了類別和信心度

          除了用分類器與其輸出的分布來 判斷 該分類器的信心度,當(dāng)然還有其他的方式,如下圖所說的,不僅輸出分布(用來分類),還教分類器直接輸出其信心度(直接可以判斷是否異常)。

          可以直接輸出分類和信心值的分類器

          關(guān)于上面模型訓(xùn)練部分,一般來說我們有個(gè)“驗(yàn)證集”來調(diào)節(jié)模型的超參數(shù),在“訓(xùn)練集”中,所有的樣本都是“正樣本“且有各自的標(biāo)簽(如都是辛普森和他們的人物名字),而在”驗(yàn)證集“中就沒必要每個(gè)樣本都有其“人物標(biāo)簽”,只需要判斷其“是否屬于辛普森家族”就行了(兩個(gè)標(biāo)簽:屬于、不屬于)。

          2.1 評(píng)價(jià)標(biāo)準(zhǔn)

          在上面的例子中,“辛普森家族異常檢測模型“其實(shí)是一個(gè)普通分類器,那我們是否也可以用準(zhǔn)確率(Accuracy)來評(píng)估這個(gè)模型的好壞呢?答案是:這不是一個(gè)好的選擇。

          正如我們前面所說的,異常檢測的數(shù)據(jù)集的標(biāo)簽分布是不均勻的,也就是說我們很大概率能夠找到“正樣本”而缺少“負(fù)樣本”;這種情況下,如果模型“無情地”把所有的樣本都預(yù)測成正樣本,那準(zhǔn)確率也會(huì)很高,這樣顯然是不對(duì)的。

          在這里,只有5張“異常圖片”,模型準(zhǔn)確率卻很高

          準(zhǔn)確率對(duì)于不平衡數(shù)據(jù)沒法很好地評(píng)估,其實(shí)也有很多方法來解決,比如說成本積分制:當(dāng)正常數(shù)據(jù)沒有檢測出,則成本為100,異常數(shù)據(jù)沒有檢測出,成本為1(見Cost Table A),這時(shí)候左邊模型的成本則會(huì)低于右邊模型的成本(紅色字體),則左邊的模型更優(yōu)秀; 而如果正常數(shù)據(jù)沒檢測出的成本為1,異常數(shù)據(jù)沒檢測出的成本為100,這時(shí)候右邊的模型就更優(yōu)秀(藍(lán)色字體);

          積分制的使用要取決于你對(duì)業(yè)務(wù)的理解:異常數(shù)據(jù)沒檢測出、正常數(shù)據(jù)沒檢測出,哪個(gè)更加重要?比如在醫(yī)療上,對(duì)于癌細(xì)胞的異常檢測,寧愿檢測錯(cuò)正常人,也不要漏過一個(gè)病人,這時(shí)候“異常數(shù)據(jù)沒檢測出的成本更高”。

          除了積分制,還有很多方法,比如AUC、Macro-F1等等。

          積分制,左邊模型和右邊模型誰更優(yōu)秀取決于Cost Table的定制

          2.2 存在的問題

          分類器也許可以能夠?qū)Α耙话惝惓!边M(jìn)行“識(shí)別”,比如下面貓狗的分類器,就能夠把羊駝和馬來貘識(shí)別為“異常”,然而有一些“異常數(shù)據(jù)”則沒那么容易了,比如說老虎和狼,這就是模型泛化問題;

          因?yàn)槟P鸵话阒粫?huì)抽取出一類圖片中的共同特征,而此時(shí)“異常數(shù)據(jù)”無意中也具備了這一共同特征,那么就會(huì)出現(xiàn)把狼識(shí)別成狗的情況了。

          下面的模型把老虎識(shí)別成貓,把狼識(shí)別成狗

          另一個(gè)例子就是上面的“辛普森家族分類器”,將人物涂黃后,模型就會(huì)進(jìn)一步識(shí)別成“麗莎”,這就說明了模型識(shí)別麗莎靠的是顏色,這顯然是不正確的。

          圖片涂改后,就會(huì)識(shí)別成其他人物

          針對(duì)以上存在的問題,也有很多工作試圖去解決,比如說收集一些“異常數(shù)據(jù)”,讓分類器去學(xué)習(xí)給它們更低的信心值;然而我們一開始就說了,異常數(shù)據(jù)很難獲取,那我們就想:能不能自動(dòng)生成“異常數(shù)據(jù)”?

          這時(shí)候我們就可以用GAN來嘗試生成“有點(diǎn)像正常數(shù)據(jù)卻又沒那么像”的異常數(shù)據(jù)。

          下面給出了相關(guān)文獻(xiàn),有興趣的可以去了解一下。

          解決該問題的相關(guān)文獻(xiàn)

          3. Without Labels(不帶標(biāo)簽的)

          這一部分,就是得到了沒有標(biāo)簽的數(shù)據(jù)。該問題的定義和帶標(biāo)簽的分類器一樣,都是根據(jù)訓(xùn)練集訓(xùn)練模型,然后幫我分析輸入數(shù)據(jù)相較于訓(xùn)練集是否屬于異常數(shù)據(jù)。與分類器給出的信心值不同,這一類的模型給出的是一個(gè)概率,如果概率大于某個(gè)閾值,才認(rèn)為是正常值;

          在這一部分,用一個(gè)游戲舉個(gè)例子:Twitch Plays Pokemon。這個(gè)游戲是一個(gè)多人同時(shí)“玩一個(gè)角色”的在線游戲,然而和我們平時(shí)玩的網(wǎng)游不一樣,在這個(gè)游戲中,下一步動(dòng)作取決于所有在線用戶的操作(如下圖的右邊,是每一個(gè)用戶按下的指令)。

          眾多用戶的指令靠某種機(jī)制共同決定游戲角色下一步操作

          然而玩這個(gè)游戲的人非常崩潰,因?yàn)檫@個(gè)游戲很難進(jìn)行下去(因?yàn)橐性诰€玩家都給一個(gè)角色發(fā)送指令,而每個(gè)玩家的指令又不相同,而游戲只會(huì)執(zhí)行其中一個(gè)指令)。所以玩家們就在想:是不是有些“惡意玩家”在亂發(fā)送指令,阻止游戲進(jìn)程?也就是說是不是有人不想讓這個(gè)游戲結(jié)束。

          這樣我們就有需求——找出“惡意用戶”。在這之前,我們先有個(gè)假設(shè):大部分玩家都希望完成這個(gè)游戲(也就是說大部分都是正常數(shù)據(jù)),而這部分?jǐn)?shù)據(jù)我們會(huì)用來訓(xùn)練。然后我們使用異常檢測,找出其中的“惡意玩家”(異常數(shù)據(jù))。

          由該游戲產(chǎn)生的思考

          接下來,我們就要對(duì)其進(jìn)行建模。在這里,我們的需求是把一堆“無標(biāo)簽”玩家分為正常用戶和異常用戶,這時(shí)我們需要把用戶表示成一個(gè)向量,這樣才能輸入進(jìn)我們的模型;而向量中的每一項(xiàng)可以表示這個(gè)用戶的一種行為。

          如下圖,  表示這個(gè)用戶過去一段時(shí)間內(nèi)說垃圾話的頻率(垃圾話是指游戲指令之外的話,多余的,不影響游戲進(jìn)程),  表示的是這個(gè)用戶過去一段時(shí)間內(nèi),隨機(jī)機(jī)制下的發(fā)言頻率。

          這個(gè)游戲有兩種機(jī)制:投票機(jī)制和隨機(jī)機(jī)制 投票機(jī)制:20秒內(nèi)最多玩家輸入的指令,則作為游戲下一步的指令;隨機(jī)機(jī)制:隨機(jī)選擇在線玩家輸入的指令,作為游戲下一步的指令。

          用向量表示用戶

          輸入定義好了,我們就可以看看輸出:模型會(huì)輸出一個(gè)概率  ,和分類器不一樣,無標(biāo)簽訓(xùn)練模型沒有對(duì)應(yīng)的Y值(標(biāo)簽)和信心值,只會(huì)輸出一個(gè)概率  ;而和分類器相似的是,我們一樣有一個(gè)  ,當(dāng)  時(shí),視為正常數(shù)據(jù);當(dāng)  時(shí),視為異常數(shù)據(jù)。如下圖所示。

          輸出一個(gè)概率值,需要設(shè)定一個(gè)閾值

          假設(shè)我們現(xiàn)在已經(jīng)獲取了大量用戶的數(shù)據(jù),下圖是這些數(shù)據(jù)可視化展示。從可視化中可以獲得一些信息:

          • 在隨機(jī)機(jī)制下,用戶就越喜歡發(fā)指令(左上圖);
          • 大部分用戶都會(huì)或多或少地亂輸入指令(說垃圾話,右下圖)。

          這時(shí)候,我們就可以很直觀地看到,但用戶落在左上角的位置,則很大可能這就是一個(gè)“正常玩家”,而用戶落在靠右或者靠下的位置,則很大可能是“異常玩家”。

          已知用戶行為數(shù)據(jù)的可視化圖

          然而,我們需要一個(gè)數(shù)值化的表示方法,給每一個(gè)玩家一個(gè)分?jǐn)?shù)。

          假設(shè)我們之前看到的圖,圖上面所有的點(diǎn)都是由一個(gè)概率密度函數(shù)  生成的(不懂也沒關(guān)系,就當(dāng)它是一個(gè)函數(shù)就行了),  是該函數(shù)的參數(shù),決定了這個(gè)函數(shù)“長什么樣”,是未知的,需要從數(shù)據(jù)中學(xué)習(xí)。

          而我們的工作就變成了:  它究竟長什么樣?這時(shí)候我們就需要一個(gè)“Likelihood”的概念,意思就是說,根據(jù)我們的概率密度函數(shù)  ,能夠產(chǎn)生這樣的已知數(shù)據(jù)的概率有多大。

          如果嚴(yán)格來說,  輸出的不是概率,而是概率密度,它的值也不是介于0~1之間,而是有可能大于1的。在這里,為了簡化問題,我們簡單地認(rèn)為是概率就好

          而這個(gè)“Likelihood”要怎么算呢,它其實(shí)就等于每項(xiàng)已知數(shù)據(jù)根據(jù)  這個(gè)函數(shù)所產(chǎn)生出來的概率的乘積;于是我們就有下面這條公式,很顯然,這個(gè)公式是由  來控制的,不同的  ,就會(huì)有不同的  ,就會(huì)算出不同的“Likelihood”

          這時(shí)候,我們并不知道  是多少,但我們知道,這個(gè)  ,能夠使我們的“Likelihood”最大化

          我們使用Likelihood來訓(xùn)練模型

          上面是只是一個(gè)抽象的說法。在這里,我們?yōu)榱俗尨蠹腋美斫猓覀兙图僭O(shè)概率密度函數(shù)  為常用的高斯分布(Gaussian Distribution),這個(gè)概率密度函數(shù)并不簡單,大家看不懂也沒關(guān)系,就當(dāng)它是一個(gè)普通函數(shù)就可以了,輸入一個(gè)向量x,輸出這個(gè)x被采樣到的概率  ;而我們前面提到需要學(xué)習(xí)的  ,在這里就等于這里需要學(xué)習(xí)的均值  和協(xié)方差矩陣 

          為什么這里選擇高斯分布?
          其實(shí)這只是舉例子,  甚至可以是一個(gè)神經(jīng)網(wǎng)絡(luò),而此時(shí)  就是神經(jīng)網(wǎng)絡(luò)的參數(shù),所以我們沒必要在這里糾結(jié),我們只需要清楚無標(biāo)簽時(shí),異常檢測是如何處理的,從而觸類旁通。

          高斯分布,及其需要學(xué)習(xí)的參數(shù)

          這時(shí)候,Likelihood方程就會(huì)置換成下圖的形式,用來找出能使Likelihood最大化的   

          左圖給了一個(gè)很好的示例,告訴我們,  的取值,如何影響Likelihood的取值;左上角時(shí),數(shù)據(jù)落在這個(gè)區(qū)域的概率就很大,這時(shí)候Likelihood就很大,而右下角時(shí),落在這個(gè)區(qū)域的概率就小,這是Likelihood就小。

            其實(shí)是有公式算出來的,  就是所有的訓(xùn)練數(shù)據(jù)的向量做一個(gè)平均(輸入向量是二維的,所以  也是二維的),而  就看圖的右下角這個(gè)公式,這里很簡單。

          抽象的概念替換為具體的高斯分布時(shí)的計(jì)算方法

          在這里,我們已經(jīng)得到了    ,我們可以用來做異常檢測,我們把測試數(shù)據(jù)代入我們的高斯分布方程,我們就能算出其概率,如果這個(gè)概率大于閾值  ,是認(rèn)為是正常值,否則視為異常值。

          如果我們用這個(gè)訓(xùn)練好的方程,大概就是下圖右下角的樣子,顏色越深代表這個(gè)方程輸出的數(shù)值就越大,就越代表“正常玩家”,而顏色越淺越藍(lán)的,就代表“異常玩家”;而這個(gè)閾值  ,其實(shí)其中一條等高線;右下圖就給出了正常點(diǎn)和異常點(diǎn)的位置示意。

          根據(jù)公式,可以獲得其對(duì)應(yīng)的概率,從而判斷是否異常

          以上的例子,我們只是使用了兩個(gè)特征,也就是輸入向量x只是二維;而機(jī)器學(xué)習(xí)的好處就是可以處理更多特征,只要你想到的,都可以加進(jìn)去。下圖就增加到5個(gè)特征,再訓(xùn)練一個(gè)Likelihood,從而獲得“更準(zhǔn)確的”異常檢測效果。

          我們可以添加更多的特征

          3.1 更多的方法

          除了上面的方法,還有一種常用方法是:Auto-encoder(自動(dòng)編碼器),如下圖所示,Encoder(編碼器)先把辛普森的照片編碼成一個(gè)code(隱含層),然后Decoder(解碼器)把code解碼回原來的的照片,訓(xùn)練時(shí)會(huì)同時(shí)訓(xùn)練編碼器和解碼器,盡量讓解碼后的照片和原照片盡可能相似(甚至相同)。這時(shí)候如果用Auto-encoder來識(shí)別一張“異常圖片”,這時(shí)候的解碼器是無法重構(gòu)回原來的照片,通過計(jì)算重構(gòu)后的照片和原照片的“距離”(或者說是相似度、還原度),就可以區(qū)分該照片是不是“異常值”。

          在我看來,Auto-encoder比分類器多了一重保障(指Decoder解碼器),在分類器上,找到對(duì)應(yīng)的特征,就進(jìn)行判斷,比如顏色、輪廓等等,上面就有例子說明這樣的情況并不可靠;而解碼器就是一種利用特征的過程,我利用編碼器提取的特征,看是否能夠重構(gòu)回原來照片,就能知道這是不是異常值;

          自動(dòng)編碼器的工作流程

          下圖是正常的圖片,可以看到模型很容易就重構(gòu)了回來,而且和原圖非常接近。因?yàn)檫@個(gè)模型看過辛普森,所以非常“擅長”還原辛普森。

          辛普森家族的照片就能很好地復(fù)原

          如下圖的Testing階段,對(duì)比原圖和重構(gòu)圖,我們可以看到,編碼器提取到的應(yīng)該是“黃色”和“棕色”這兩個(gè)特征,然而編碼器用兩個(gè)特征構(gòu)建出來的圖片,顯然和原圖相差甚遠(yuǎn),這時(shí)候就可以識(shí)別為“異常值”。(從重構(gòu)圖可以隱約看到,這大概也是一個(gè)辛普森角色)

          其他圖片就會(huì)復(fù)原到模型所“理解”到的辛普森角色形象

          除了自動(dòng)編碼器,還有很多其他模型可以做這樣的事,比如one-class SVM,Isolated Forest。有興趣的可以自行進(jìn)一步學(xué)習(xí)。

          更多的模型

          4. 應(yīng)用

          異常檢測的應(yīng)用非常廣泛,下面幾項(xiàng)是非常常見的:

          • Fraud Detection(欺詐識(shí)別)

            • 訓(xùn)練集:正常的刷卡行為;輸入x:盜刷行為?
          • Network Intrusion Detection(網(wǎng)絡(luò)入侵檢測)

            • 訓(xùn)練集:正常的訪問;輸入x:攻擊行為?
          • Cancer Detection(癌癥檢測)

            • 訓(xùn)練集:正常細(xì)胞;輸入x:癌細(xì)胞


          參考文獻(xiàn):

          李宏毅機(jī)器學(xué)習(xí)2019(國語)_嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili

          https://www.bilibili.com/video/BV1Gb411n7dE?p=8


          推薦閱讀


          CV實(shí)踐教程|生產(chǎn)線上的異常檢測

          2021-02-03

          大盤點(diǎn) | 2020年 2 篇異常算法最佳綜述

          2021-02-07

          四類異常檢測算法綜述:Isolation Forest、LOF、PCA及DAGMM

          2020-12-10



          # CV技術(shù)社群邀請(qǐng)函 #

          △長按添加極市小助手
          添加極市小助手微信(ID : cvmart2)

          備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測-深圳)


          即可申請(qǐng)加入極市目標(biāo)檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學(xué)影像/3D/SLAM/自動(dòng)駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群


          每月大咖直播分享、真實(shí)項(xiàng)目需求對(duì)接、求職內(nèi)推、算法競賽、干貨資訊匯總、與 10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動(dòng)交流~


          △點(diǎn)擊卡片關(guān)注極市平臺(tái),獲取最新CV干貨

          覺得有用麻煩給個(gè)在看啦~  
          瀏覽 88
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品二区高清在线苍井空 | 日本A片在线免费观看 | 麻豆成人网一区二区 | 91久久久无码视频 | 国产一级a毛一级a看无码免费看 |