VGG16/19 是 ImageNet 每年舉辦的模型演算競賽(ILSVRC)中,於2014年獲得亞軍的模型。以前曾說明 VGG16 模型的運用,此篇改成 VGG19,其實用法差不多。VGG16/19 用來偵測圖片,將圖片進行分類,是由牛津大學計算機視覺組對 100 萬張圖片進行訓練,然後分成1000 個種類。
安裝套件
如果是使用 python 3.8,則可安裝 tensorflow 2.10.1 啟動 GPU,如下安裝指令
pip install tensorflow==2.10.1 opencv-python Pillow matplotlib
但如果是使用 python 3.10 以上的版本,則 tensorflow 2.10.1 是無法安裝的,必需安裝最新版本 2.17.0 以上,而且無法啟動 GPU,安裝指令如下
pip install tensorflow opencv-python Pillow matplotlib
簡易偵測
model=VGG19() 會建立模型,若是第一次執行,會到網路上下載模型,並儲存在 C:\Users\mahal\.keras\models 目錄中,所以會比較久。第二次執行,就不會重複下載,所以速度就快多了。
在取得圖片的numpy陣列後,必需使用 np.expand_dims(x, axis=0) 由 3 維的最前面一維擴展成 4 維,原因在於 VGG19 規定傳入 predict 開始偵測時,必需是 (1, 224,224, 3) 的陣列格式。
preprocess_input()稱為圖片預處理。預處理有三種方式,分別為 caffe, tf, troch。
VGG19採用 caffe方式,先將RGB 轉成 BGR格式,然後將所有點的B值減掉B的平均數,G及R亦同。如此就可以讓每個點的每個顏色值分佈在 0 的左右二邊。
predict() 偵測後,會傳回 1000 個分數,分別代表每一個種類的分數,分數愈高表示愈接近此分類。所以取得分數最高的那一個分類即可。
