?

基于深度學習的目標檢測算法綜述

2024-01-17 08:57郭慶梅劉寧波王中訓孫艷麗
探測與控制學報 2023年6期
關鍵詞:流程分類文獻

郭慶梅,劉寧波,王中訓,孫艷麗

(1. 煙臺大學物理與電子信息學院,山東 煙臺 264005;2. 海軍航空大學信息融合研究所,山東 煙臺 264001)

0 引言

目標檢測是計算機視覺[1]領域中的一個重要方向,其目的是對目標進行定位和分類,即在所給的圖像或視頻中找到所需的目標物體,并用邊界框標出其位置,判斷出其所屬類別。由于目標物體存在差異性與不確定性,使得目標檢測一直以來都是該領域的核心問題之一。早期的目標檢測采用手工設計的特征提取方法,檢測精度并不高,文獻[2]提出的AlexNet成功推動了卷積神經網絡(convolutional neural network,CNN)[3]的發展,文獻[4]提出了基于CNN的目標檢測算法R-CNN,使得檢測精度有了很大的提升。至此,目標檢測算法主要分為傳統目標檢測算法和基于深度學習的目標檢測算法兩類[5]。

1 傳統目標檢測算法

傳統目標檢測算法是將人為設計的目標特征和機器學習的分類器進行綜合,文獻[6]提出可用于雜亂場景的靜態圖像目標檢測,直接從圖像中學習Haar特征,利用支持向量機(support vector machine,SVM)[7]對目標進行分類,從而實現目標檢測。文獻[8]提出主要用于人臉檢測的VJ檢測器,利用積分圖來計算任何尺度或位置的Haar特征,通過AdaBoost[9]方法學習分類器,以級聯的方式進行訓練,實現實時人臉檢測,在相同的分類準確度下,速度提升了幾十倍甚至上百倍。文獻[10]將1999年提出的尺度不變特征變換(scale invariant feature transform,SIFT)進一步整理和優化,結合位置、所處尺度以及方向確定特征區域,提取的特征能夠在光線和噪聲等因素下有很好的魯棒性。文獻[11]設計了方向梯度直方圖(histogram of oriented gradient,HOG),通過圖像部分區域的HOG獲得特征,結合SVM實現檢測[12]。文獻[13]設計了可變形的組件模型(deformable parts model,DPM),采用滑動窗口進行目標定位、HOG組件進行特征提取、SVM進行分類,具有良好的檢測效果。

傳統目標檢測算法存在的缺點有計算量大、效率低、魯棒性不好、針對性強、局限性大、泛化性差以及檢測效果較差等。隨著人工智能的發展,傳統目標檢測逐漸成為過去式,深度神經網絡迅速發展,在提高準確度、降低計算量等方面都有了很大進步[14]。

2 基于深度學習的目標檢測算法

隨著CNN的改進,基于深度學習的目標檢測算法也有了很大的提升,在目標識別、智慧交通等方面有著重要作用。目前出現的算法大致分為兩類:一類是基于候選區域的雙階段(two-stage)目標檢測算法;另一類是基于回歸的單階段(one-stage)目標檢測算法[15]。這兩類算法主要的區別為是否有候選區域目標推薦的步驟[16]。目標檢測算法發展時間軸如圖1所示。

圖1 目標檢測算法發展時間軸Fig.1 Timeline of object detection algorithm development

2.1 Two-stage目標檢測算法

2.1.1R-CNN算法

文獻[4]在2014年提出了R-CNN,該算法的創新點:1) 在候選區域使用CNN進行自下而上的特征提取;2) 對于數據集不足的情況,使用遷移學習,提高了檢測準確率和模型性能,解決了對小樣本難訓練和過擬合的問題,證明了CNN具有可遷移性。如圖2所示,該算法的主要流程:1) 輸入已標注的圖像;2) 使用選擇性搜索算法生成候選區域;3) 將得到的候選區域進行裁剪和縮放到規定尺寸,輸入到CNN中進行特征提取;4) 將提取到的特征輸入SVM分類器進行分類,使用非極大值抑制(non-maximum suppression,NMS)得到候選框,使用邊界框回歸對NMS處理后的候選框進行位置回歸操作,得到準確率最高最合適的候選框。

圖2 R-CNN算法流程Fig.2 R-CNN algorithm flow

2.1.2SPPNet算法

為了解決R-CNN在提取特征時需要對所有的候選區域進行提取等問題,文獻[17]在2015年提出了可以適應不同尺寸圖像輸入的空間金字塔網絡(spatial pyramid pooling network,SPPNet)。該算法在網絡中的最后一個卷積層和全連接層之間接入空間金字塔池化層(spatial pyramid pooling,SPP)[18],結構如圖3所示,目的是為了輸送給全連接層固定大小的特征圖。

圖3 SPP結構Fig.3 SPP architecture

2.1.3Fast R-CNN算法

為了解決R-CNN算法重復提取特征以及多級管道訓練等問題,文獻[19]在2015年提出了Fast R-CNN算法,該算法有四個創新點:1) 不再是多級管道訓練,將SVM分類和BBox回歸兩個部分都放到了CNN中進行訓練;2) 改進SPP提出更簡潔的感興趣區域(region of interest,RoI)池化層,添加了候選框映射功能;3) 使用了多任務損失,用其來更新參數,降低了計算的復雜度,提高了檢測速度和精度;4) 在全連接層中使用了截斷奇異值分解進行加速,降低前向傳播的時間,加速了全連接層網絡的運算。Fast R-CNN算法主要流程如圖4所示。

圖4 Fast R-CNN算法流程Fig.4 Fast R-CNN algorithm flow

2.1.4Faster R-CNN算法

為了解決Fast R-CNN獲得候選區域時間復雜度高等問題,文獻[20]提出了Faster R-CNN算法,該算法的創新點:1) 使用了區域建議網絡(region proposal network,RPN),加入Anchor機制,將候選區域、特征提取、分類和回歸融合在一起,實現了真正的端到端的訓練,保證了實時性,實現了訓練時RPN與檢測網絡Fast R-CNN共享卷積層,提高了模型的檢測速度和更高的檢測精度;2) 使用GPU,提高了運行速度。Faster R-CNN主要流程如圖5所示。

圖5 Faster R-CNN算法流程Fig.5 Faster R-CNN algorithm flow

2.1.5R-FCN算法

為了解決Faster R-CNN算法提取特征的Header部分比較重等問題,文獻[21]在2016年提出了基于區域的全卷積網絡(region based fully convolutional networks,R-FCN)算法。該算法的創新點:1) 提出了位置敏感得分圖,解決了分類的平移不變性和回歸的平移可變性之間的矛盾;2) RoI池化層后面的全連接層改用卷積層,提高了檢測速度;3) 對RoI加入了空間位置編碼信息,提高了檢測框的位置精度。R-FCN算法主要流程如圖6所示。

圖6 R-FCN算法流程Fig.6 R-FCN algorithm flow

2.1.6Mask R-CNN算法

文獻[22]在2017年對Faster R-CNN進行優化提出了Mask R-CNN算法,主干網絡在ResNet的基礎上添加了特征圖金字塔網絡(feature pyramid networks,FPN),即該算法由負責目標檢測的Faster R-CNN和負責語義分割的FPN組成。該算法的創新點:1) RoI池化部分替換為RoI Align,解決了區域不匹配問題;2) 增加Mask網絡。Mask R-CNN算法主要流程如圖7所示。

圖7 Mask R-CNN算法流程Fig.7 Mask R-CNN algorithm flow

2.1.7Libra R-CNN算法

在目標檢測過程中,存在一些問題:1) 隨機采樣會選取大量的簡單樣本,使得正負樣本數量差距大,造成樣本層面不平衡,常使用OHEM方法增加對復雜樣本的選取來解決正負樣本不平衡的問題,使用Focal loss方法可以降低噪聲的影響,對One-stage目標檢測有效,對Two-stage目標檢測效果不好;2) 使用FPN和PAN將高層的語義信息和低層的細節定位信息進行特征融合時,融合后的相鄰分辨率的特征效果很好,但忽略了非相鄰層的特征,并且其語義信息會在每次融合時都會被稀釋一次,造成特征層面不平衡;3) 在訓練過程中需要平衡分類和定位任務,否則會造成目標層面不平衡。

針對上述因素導致檢測性能差的問題,文獻[23]在2019年提出了Libra R-CNN算法,該算法的創新點:1) 使用交并比(intersection over union,IoU)平衡采樣來解決樣本層面不平衡問題,即采用分箱操作,利用IoU將正負樣本均衡分配。2) 使用平衡特征金字塔,結構如圖8所示,解決了特征層面不平衡問題,首先將FPN結構輸出的C2和C3層的特征圖進行最大池化操作,將C5層的特征圖進行雙線性插值操作,統一得到和C4層特征圖大小相等的特征圖;其次將得到的特征求平均值,融合得到一張特征圖,使用嵌入的高斯非局部注意結構對特征進一步提煉加強,提高非相鄰分辨率的特征;最后將特征圖還原到原來尺寸,分別進行add操作得到強化后的特征圖。3) 使用平衡L1損失解決了目標層面不平衡,即平衡大樣本和小樣本的梯度。

圖8 平衡特征金字塔Fig.8 Balanced semantic pyramid

2.1.8Grid R-CNN算法

為了能夠進行精確的目標檢測,文獻[24]在2018年提出了自頂向下的Grid R-CNN算法,該算法的創新點:1) 利用網格定位實現目標檢測;2) 提出了一個多點監督機制,進行更準確的定位;3) 提出了空間信息融合模塊,利用網格點的空間相關性,相互校準位置信息;4) 采用擴展區域映射修正輸出熱圖和原始圖片區域的關系;5) 可以靈活運用到不同的目標檢測框架內。Grid R-CNN算法主要流程如圖9所示。

圖9 Grid R-CNN算法流程Fig.9 Grid R-CNN algorithm flow

2.1.9小結

Two-stage目標檢測將檢測過程主要分為兩步:1) 在給出的圖像上找到有目標物體的候選區域;2) 對候選區域進行分類與回歸操作,得到目標檢測結果[25]。在區域提取方面,早期的Two-stage目標檢測算法主要使用選擇性搜索算法,如R-CNN,SPPNet和Fast R-CNN等算法,但速度較慢,實用性差;Faster R-CNN提出了基于RPN的方法,極大地提高了區域提取的速度和準確率。在特征利用方面,提出使用FPN結構,將高層的語義信息和低層的空間信息進行融合,提高對小目標的檢測效果,如Mask R-CNN和Libra R-CNN等算法。隨著網絡的改進,檢測精度得到了大幅提升,由于網絡模型復雜度提高,導致訓練和檢測速度有所下降,實時性差。Two-stage目標檢測算法的性能對比如表1所示,其中“-”表示原文獻中無相關數據信息,優缺點如表2所示。

表1 Two-stage目標檢測算法性能對比Tab.1 Performance comparison of Two-stage target detection algorithms

表2 Two-stage目標檢測算法優缺點Tab.2 Advantages and disadvantages of Two-stage object detection algorithm

2.2 One-stage目標檢測算法

2.2.1OverFeat算法

文獻[26]在2013年提出了OverFeat算法,是One-stage目標檢測的先驅,主要原理是以滑動窗口的方式在圖像多尺度區域的不同位置進行圖像分類,以及在相同的卷積層上訓練一個回歸器來預測邊界框的位置。該算法的創新點:1) 改進AlexNet實現分類、定位和檢測的融合;2) 提出offset max-pooling;3) 多尺度預測;4) 通過累積預測得到邊界框。

該算法給出了準確模型和快速模型,在準確模型中,分類錯誤率為14.18%;在快速模型中,分類錯誤率為16.39%;使用7種準確率模型組合時,分類錯誤率為13.6%。

2.2.2YOLO系列算法

文獻[27]在2016年提出了YOLO (you only look once)算法,該算法的創新點:1) 將分類、定位和檢測融合在一個網絡里,速度快;2) 避免將背景判斷為目標,降低了檢測錯誤率;3) 泛化能力強,適應性強。

為了解決YOLO檢測精度低等問題,文獻[28]在2017年對YOLO進行了更準確、更快和更強的改進,提出了YOLOv2算法。改進點:1) 在更好方面:去掉隨機失活,引入批歸一化(batch normalization,BN)來提高收斂性,mAP提升了2.4%;使用高分辨率圖像微調分類模型,mAP提升了3.7%;去掉全連接層,使用錨框卷積預測邊界框,可以預測1 000左右個邊界框,mAP降低了0.3%,召回率提高了7%;聚類提取先驗框尺度,采用K-means聚類方法進行聚類分析,提高了泛化能力,mAP提升了4.8%;通過單元格左上角格點的坐標來預測偏移量,達到對預測邊框的位置的約束,mAP提高了約5%;進行多尺度圖像訓練;進行高分辨率圖像的對象檢測,mAP提升了1.8%。2) 在更快方面:圖像尺寸為448×448時,訓練分類網絡,top-1和top-5準確率分別為76.5%和93.3%;對中間層不同尺度的特征進行拼接,擁有了細粒度特征,便于檢測小目標。3) 在更強方面:將ImageNet和COCO聯合構建WordTree進行分類數據和檢測數據聯合訓練。在數據集方面進行融合,提出可以實時預測9 000個種類的YOLO9000。后續對YOLOv2改進,文獻[29]提出了Fast YOLO,此算法主要是應用在嵌入式設備上的,實時性強,處理圖像的速度達到了155 幀/s。

為了提高小目標檢測能力,文獻[30]在2018年對YOLOv2進行改進,提出了YOLOv3。此算法的創新點:1) 主干網絡是Darknet53,以便能夠獲得更深層次的圖像特征;2) 利用殘差網絡特征融合,達到多尺度預測,在小目標檢測方面有了進一步的提升;3) 分類使用logistic算法的二元交叉熵損失函數,實現了多目標分類;4) 在物體分數和類置信度方面,使用Sigmoid函數,可以將目標進行類別細分。后續有YOLOv3-SPP對YOLOv3進行改進,加入了SPP模塊實現了不同尺度的特征融合,在數據集COCO上mAP達到了59.5%,YOLOv3-SPP-ultralytics版本在MS COCO數據集上mAP達到了62.4%。

文獻[31]在2020年對YOLOv3進行改進,提出了YOLOv4。該算法將框架分為輸入端、Backbone,Neck和Head四部分,該算法創新點:1) Neck部分采用SPP和PAN模塊進行特征融合;2) 使用CutMix和Mosaic數據增強以及DropBlock正則化,減少過擬合問題,提高泛化能力;3) 引入縮放系數,提高了準確率;4) 優化不同目標尺度的Anchor;5) 采用CIoU定位損失。

文獻[32]提出了YOLOv5,該系列包含S,M,L,X四個版本,如圖10所示是YOLOv5S的網絡結構,主要流程:1) 輸入端使用Mosaic數據增強,同時減少GPU的使用個數,使用自適應錨框計算來得到得分高的Anchor,采用自適應縮放將圖片的大小統一固定為一個合適的尺寸;2) Backbone部分采用New CSP-Darknet53模型,使用Focus模塊完成切片操作,利用CSP1_X進行特征融合,利用SPP模塊得到固定長度輸出;3) Neck部分采用了FPN和PAN模塊,兩者結合增強了多尺度的語言表達和強定位信息,CSP2_X對上一步的特征融合進一步加強;4) Prediction部分定位損失采用了GIoU_Loss損失函數。該算法在檢測速度方面有了很大的提升,是YOLOv4的2倍多,體積也小,比YOLOv4小了90%左右。

圖10 YOLOv5S算法流程Fig.10 YOLOv5S algorithm flow

文獻[33]在2021年提出了YOLOX,該系列有7個版本,這里主要介紹YOLOX-Darknet53的改進之處,其輸入部分是采用Mosaic和Mixup進行數據增強;Neck部分采用FPN進行特征融合;Prediction部分采用3個Decoupled Head提高精度和加快收斂速度,采用Anchor-free減少參數量,進行標簽分配時,首先根據中心點和目標框進行初步篩選正樣本操作,再用SimOTA進行精細化篩選,使用損失函數計算目標框和正樣本預測框之間的誤差。

2.2.3SqueezeDet算法

文獻[34]在2017年針對自動駕駛需要高精度、實時性、小模型和低能耗的任務,提出了SqueezeDet算法,該算法的流程:1) 改進YOLO模型,使用層疊卷積濾波器得到高維度低分辨的特征圖,提高了精度,降低了參數量;2) 提出了ConvDet,得到邊界框和類別;3) 通過邊界框回歸得到最終的檢測結果。優點是模型小,并且推理速度更快。

2.2.4SSD系列算法

結合Faster RCNN高檢測精度和YOLO高檢測速度的特點,文獻[35]在2016年提出可以保證精度、速度和實時性的SSD算法,主干網絡是修改后的VGG16模型。該算法的創新點:1) 采用了多尺度特征圖,提高對小目標檢測的檢測能力;2) 在特征圖上設置多個不同尺寸和寬高比的先驗框,用IoU來決定哪個Anchor負責哪個目標物體,提高了準確率;3) 在卷積層中進行分類和定位的預測,降低計算量。該算法在檢測速度方面超過了之前最優的YOLO,在檢測精度方面超過了之前最優的Faster RCNN。SSD算法主要流程如圖11所示。

圖11 SSD算法流程Fig.11 SSD algorithm flow

針對SSD算法重復檢測等問題,文獻[36]在SSD基礎上進行改進并在2017年提出了R-SSD算法,該算法的創新點:1) 使用分類網絡增加不同特征圖層之間的聯系,降低計算量;2) 增加特征金字塔中特征圖的個數,提高對小目標檢測的能力。

針對SSD算法獲取較深層語義信息能力差的問題,文獻[37]在2017年提出了DSSD算法,該算法的創新點:1) 主干網絡采用ResNet101,以便獲得深層的語義信息;2) 上采樣采用反卷積結構,將深層和淺層的特征圖進行融合,獲得語義和位置信息;3) 在預測模塊部分加入殘差結構,提取更深維度的特征,提升對小目標的檢測能力。

針對SSD算法難以進行特征融合的問題,文獻[38]在2017年將SSD和FPN進行改進提出了將定位和識別進行結合的F-SSD算法,在SSD上結合了輕量級的特征融合模塊,該算法的流程:1) 將SSD分支上不同尺度的特征圖通過雙線性插值操作調整到同尺度的特征圖;2) 通過concat進行特征融合,通過BN進行正則化;3) 通過下采樣模塊生成新的特征金字塔,使用多盒探測器預測目標。該算法在精度方面有了顯著的提升。

針對常見的目標檢測算法先預訓練再微調的問題,文獻[39]在2019年融合SSD和DenseNet的思想提出了可以從頭開始訓練的DSOD算法,經過大量的實驗得出:1) 使用無候選目標框方法可以從零訓練并收斂;2) 借鑒DenseNet的思想,其致密塊與所有塊有連接,可以跳過連接實現監督信號的傳遞,淺層也可以受目標函數的監督,同時增加致密塊的數量;3) 使用stem模塊減少信息損失,提升檢測效果;4) 融合多個階段網絡的輸出,采用順序連接,每一階段都包含前面所有階段的輸出。

2.2.5RetinaNet算法

針對常見的One-stage目標檢測算法正負樣本不平衡的問題,文獻[40]在2017年提出了Focal Loss損失函數來提高復雜樣本在標準交叉熵中所占的權重,同時提出了RetinaNet算法來驗證此損失函數的有效性。此算法的流程:1) 利用ResNet提取特征,防止梯度爆炸或消失;2) 利用FPN進行多尺度特征融合;3) 利用分類回歸網絡得到類別和定位信息。Retina Net算法主要流程如圖12所示,其中K表示類別個數,A表示anchor個數。

圖12 RetinaNet算法流程Fig.12 RetinaNet algorithm flow

2.2.6CornerNet算法

針對常見的目標檢測算法使用Anchor引起的正負樣本不平衡,導致訓練效率降低,以及引入大量超參數增加設計難度等問題,文獻[41]在2018年提出了自底向上的CornerNet算法。該算法的創新點:1) 預測方法拋棄了原先的Anchor和RPN思想,采用確定左上角和右下角兩個關鍵點的方法對邊界框進行定位;2) 識別組合屬于相同實例的關鍵點;3) 提出了使用角點池化的方法,進行兩角點的定位。CornerNet算法主要流程如圖13所示。

圖13 CornerNet算法流程Fig.13 CornerNet algorithm flow

2.2.7CenterNet算法

針對CornerNet采用雙角點確定邊界框出現準確率不高和檢測速度降低等問題,文獻[42]在2019年提出了CenterNet算法,該算法的創新點:1) 丟棄了雙角點確定邊界框的思想,借鑒關鍵點估計思想,用點代表目標,該點也是邊界框的中心點,同時去除了NMS后處理操作,降低了復雜度,提高了檢測速度;2) 可以靈活運用到2D和3D等目標檢測的任務中。該算法的流程是通過全卷積網絡生成熱力圖,熱力圖峰值點作為目標中心點,用峰值位置的圖像特征預測回歸邊界框的寬高和維度等信息。

文獻[43]在2019年提出了使用左上角點、右下角點和中心點形成三元組來判斷邊界框的方法,也被稱為CenterNet算法,利用級聯角點池化和中心池化優化關鍵點的生成,提高了精確度和召回率,但當目標物體的中心在同一個位置時,只能檢測出該位置的一個目標物體。

2.2.8EfficientDet算法

針對提高精度和檢測速度的問題,文獻[44]在2019年提出了EfficientDet算法,該系列算法的創新點:1) 提出能快速進行多尺度特征融合的加權雙向特征金字塔網絡(BiFPN);2) 提出可以對主干網絡、特征網絡和預測網絡的分辨率、深度和寬度三要素進行均勻縮放的混合縮放方法[45]。有D0到D7共8種版本,按序號模型體積越來越大,速度越來越慢,精度越來越高。EfficientDet算法主要流程如圖14所示。

圖14 EfficientDet算法流程Fig.14 EfficientDet algorithm flow

2.2.9小結

One stage目標檢測直接通過CNN提取特征,同時預測目標物體的分類與定位。在錨框設計優化方面,YOLOv2使用基于K-means聚類的方式來自適應地生成錨框,SSD系列使用多尺度的錨框生成策略,EfficientDet使用可變形錨框等,此外,還有一些算法去掉了錨框設計,如YOLOX通過預測分支解耦的方式確定邊界框;CornerNet通過雙角點確定邊界框;CenterNet通過中心點確定邊界框[15]。在特征利用方面,SSD系列使用多層特征融合的方式,EfficientDet使用BiFPN來進行特征的高效傳遞和融合。One-stage目標檢測算法的性能對比如表3所示,其中“-”表示原文獻中無相關數據信息,優缺點如表4所示。

表3 One-stage目標檢測算法的性能對比Tab.3 Performance comparison of One-stage target detection algorithms

表4 One-stage目標檢測算法優缺點Tab.4 Advantages and disadvantages of One-stage object detection algorithm

3 總結

由于傳統目標檢測算法的過程過于繁瑣,且在處理復雜場景時效果差,與深度學習相結合的目標檢測逐漸成為研究熱點,其在精度和速度方面有了很大的提升。本文分析了目標檢測的發展歷程,尤其對基于深度學習的目標檢測算法進行了深度剖析。雖然此領域發展迅速,但是仍有很多方向值得探討和研究。

1) 多領域數據集:現有數據集在單一領域完善性比較好,但是相對來說,目標類別數少,對于新場景出現的目標只能檢測出少類目標,或出現錯檢、漏檢等問題,對于建立一個多領域多場景多元化目標數據集是一個迫切需要解決的問題,同時也是一個重要的研究方向。

2) 自動標注數據集技術:當前的目標檢測數據集是人工進行標注,這一過程需要大量的時間和精力,成本高,容易出現錯標、漏標等問題,可以考慮使用遷移學習技術,將其他已標注數據集遷移使用,再訓練少量項目所需數據集,或者研究一種自動標注技術,使用網絡直接實現目標標注。

3) 小目標檢測:隨著卷積神經網絡的進一步完善,基于深度學習的目標檢測方法成為主流,但是小目標的特征存在于淺層語義中,深度學習模型往往更擅長提取深層次的語義特征,因此,對于小目標檢測效果較差,可以嘗試改進網絡結構使其更好地利用淺層語義特征。

4) 基于GAN的目標檢測:對于目標檢測需要大量數據集進行訓練,由于數據采集成本、時間限制及特殊場景等因素,會出現數據不足的問題,可以考慮使用GAN系列網絡,使用一部分真實場景數據生成部分虛擬數據,擴大數據集,使其覆蓋更多不同的場景,可以提高檢測效果。

5) 多任務學習:在傳統的單任務學習中,需要為每個任務訓練一個獨立的模型,為降低時間復雜度,可以考慮將目標檢測、語義分割以及實例分割等任務融合到一個網絡,實現同時兼顧速度與精度的目的。

猜你喜歡
流程分類文獻
Hostile takeovers in China and Japan
吃水果有套“清洗流程”
分類算一算
Cultural and Religious Context of the Two Ancient Egyptian Stelae An Opening Paragraph
分類討論求坐標
數據分析中的分類討論
違反流程 致命誤判
教你一招:數的分類
The Application of the Situational Teaching Method in English Classroom Teaching at Vocational Colleges
The Role and Significant of Professional Ethics in Accounting and Auditing
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合