具有預先訓練模型的AI人臉識別

2021-10-23 17:22:08 字數 3593 閱讀 7105

目錄介紹

為什麼要使用別人的cnn?

實現vgg16

應用於yale資料集

下一步?

如果您看過《

少數派報告》

電影,您可能還記得湯姆

·克魯斯(

tom cruise

)走進一家

gap2020

年。我們不需要視網膜掃瞄器,因為我們擁有

人工智慧(ai

)和機器學習(ml

)! 在本系列中,我們將向您展示如何使用深度學習進行面部識別,然後基於被識別的面部,使用神經網路

語音合成

(tts

我們假設您熟悉

ai/ml

的基本概念,並且可以找到使用

python

的方法。

到目前為止,我們已經完成了設計、實現和訓練自己的

cnn以進行人臉識別所需的一切。在本文中,我們將**另一種方法——使用預先訓練的

vgg(牛津大學的

visual geometry group

)模型。這些

cnn已針對大型資料集進行了設計和訓練,並取得了出色的效果。

為什麼我們要重用別人為資料集設計和訓練的

cnn,這顯然不同於我們的資料集?好吧,主要原因是有人花了大量的

cpu/gpu

時間在龐大的資料集上訓練這些模型。我們可以充分利用這項訓練。在另一種模型中重用乙個已經訓練好的

cnn的想法被稱為

「遷移學習」。

vgg16

,vgg19

,resnet50

,inceptionv3

和xception

是一些著名的

vgg模型。它們具有不同的體系結構,並且都可以在

keras

中使用。這些模型均在包含約

120萬幅影象的

imagenet

資料集上進行了訓練。

在本文中,我們將改編

vgg16模型。

vgg16

架構圖顯示此

cnn的輸入定義為(

224、

224、

3)。因此,如果要使此

cnn適應我們的問題,我們有兩種選擇。我們可以剪裁和調整我們的影象到

224 x 224

,或者,我們可以將

vgg16

的輸入層更改為彩色影象(

rgb)的

(our_img_width

,our_img_height,3

)或灰度影象的(

our_img_width

,our_img_height,1

)。 請注意,

vgg16

的輸出層包含

1,000

個類。由於我們的問題沒有太多可能的類,因此我們必須更改輸出層的形狀。

我們將使用

vgg16

作為基本模型,並從中得出新的

cnn – vggnet

。這個新的

cnn將具有

vgg16

的層和權重,並在輸入層(以使其適應我們的影象寬度、高度和配色方案)以及輸出層(以使其適應我們的分類數量)進行一些修改。

為了實現我們的自定義

vggnet

模型,讓我們建立乙個從

mlmodel

繼承的類,就像在

所做的一樣。在名為

vggmodel

的類中,除了

init_model()

以外的所有方法都將具有與我們的

convolutionalmodel

類相同的實現。**如下所示:

def init_model(self):

base_model = vgg16(weights=constant.imagenet, include_top=false,

input_tensor=input(shape=(constant.img_width,

constant.img_height, 3)), pooling='max', classes=15)

base_model.summary()

for layer in base_model.layers:

layer.trainable = false

x = base_model.get_layer('block5_pool').output

# stacking a new ****** convolutional network on top of it

x = convolution2d(64, 3)(x)

x = maxpooling2d(pool_size=(2, 2))(x)

x = flatten()(x)

x = dense(constant.number_fully_connected, activation=constant.relu_activation_function)(x)

x = dense(self.n_classes, activation=constant.softmax_activation_function)(x)

self.vgg = model(inputs=base_model.input, outputs=x)

self.vgg.summary()

請注意,我們在

cnn的末尾新增了以下幾層:

flatten

,dense

,maxpooling

和dense

。我們附加到

vgg末端的

「mini-cnn」

的目的是連線其

block5_pool

,並使其以正確的類數適合我們的問題。

另外,我們將新增的圖層的

layer.trainable

屬性設定為

false

。這樣,我們就可以通過額外的訓練來保持原始模型的權重,我們必須進行這些訓練才能適應新的圖層。您可以通過呼叫

self.vgg.summary()

以獲得修改後的模型的完整描述。

我們在類的建構函式中使用以下

loss

和optimizer

函式:

def __init__(self, dataset=none):

super().__init__(dataset)

opt = keras.optimizers.adam(learning_rate=0.001)

self.vgg.compile(loss=keras.losses.binary_crossentropy,

optimizer=opt,

metrics=[constant.metric_accuracy])

現在,將

vggnet

模型應用於

yale face

資料集。哇:我們僅在三個時代就達到了

93%以上的準確率!

cnn在經過

50個紀元後,為我們提供了約

85%的準確性。因此,使用預訓練模型已大大改善了演算法的收斂性。

tts

課程報名 基於模型訓練平台快速打造 AI 能力

我們常說的 ai 通用能力往往不針對具體的行業應用,而是主要解決日常或者泛化的問題,很多技術企業給出的方案是通用式的,比如通用文字識別,無論識別身份證 駕駛證 行駛證等,任何一張訓練後的模型都會盡可能去識別文字內容。正常 ai 模型開發過程包括資料標註,模型訓練,模型部署幾個流程,但是不同應用 不同...

華為雲技術分享 網路場景AI模型訓練效率實踐

摘要 問題 kpi異常檢測專案需要對裝置內多模組 多型別資料,並根據波形以及異常表現進行分析,這樣的資料量往往較大,對記憶體和效能要求較高。同時,在設計優化演算法時,需要快速得到訓練及測試結果並根據結果來調整演算法,因此進一步要求計算記憶體和效能達到較高的水平。當前,本地安全pc效能難以滿足除錯要求...

模型訓練和模型擬合的幾點理解

模型訓練和模型擬合的幾點理解,歡迎大牛指點 對於我們日常工作,拿到乙個挖掘專案,一般都是先走一遍標準化的資料流程,效果好大家歡喜,效果不好各種調參。這裡有幾點想說 1 在開始挖掘專案之前,是否有評估挖掘專案的可行性?2 挖掘專案可行,現有的資料是否可以支撐專案的開展?3 如何判斷現有資料可支撐需求呢...