VGG卷積神經網絡模型解析

VGG卷積神經網絡模型解析

一:VGG介紹與模型結構

VGG全稱是Visual Geometry Group屬於牛津大學科學工程系,其發佈了一些列以VGG開頭的卷積網絡模型,能夠應用在人臉識別、圖像分類等方面,分別從VGG16~VGG19。VGG研究卷積網絡深度的初衷是想搞清楚卷積網絡深度是如何影響大規模圖像分類與識別的精度和準確率的,最初是VGG-16號稱很是深的卷積網絡全稱爲(GG-Very-Deep-16 CNN),VGG在加深網絡層數同時爲了不參數過多,在全部層都採用3x3的小卷積核,卷積層步長被設置爲1。VGG的輸入被設置爲224x244大小的RGB圖像,在訓練集圖像上對全部圖像計算RGB均值,而後把圖像做爲輸入傳入VGG卷積網絡,使用3x3或者1x1的filter,卷積步長被固定1。VGG全鏈接層有3層,根據卷積層+全鏈接層總數目的不一樣能夠從VGG11 ~ VGG19,最少的VGG11有8個卷積層與3個全鏈接層,最多的VGG19有16個卷積層+3個全鏈接層,此外VGG網絡並非在每一個卷積層後面跟上一個池化層,仍是總數5個池化層,分佈在不一樣的卷積層之下,下圖是VGG11 ~GVV19的結構圖:
VGG卷積神經網絡模型解析
考慮到整個網絡的精簡結構顯示,ReLU激活函數並無被顯示在上述結構中。上述結構中一些說明:html

  • conv表示卷積層
  • FC表示全鏈接層
  • conv3表示卷積層使用3x3 filters
  • conv3-64表示 深度64
  • maxpool表示最大池化

上述VGG11 ~ VGG19參數總數列表以下:
VGG卷積神經網絡模型解析網絡

在實際處理中還能夠對第一個全鏈接層改成7x7的卷積網絡,後面兩個全鏈接層改成1x1的卷積網絡,這個整個VGG就變成一個全卷積網絡FCN。在VGG網絡以前,卷積神經網絡CNN不多有突破10層的,VGG在加深CNN網絡深度方面首先作出了貢獻,可是VGG也有自身的侷限性,不能無限制的加深網絡,在網絡加深到必定層數以後就會出現訓練效果褪化、梯度消逝或者梯度爆炸等問題,總的來講VGG在剛提出的時候也是風靡一時,在ImageNet競賽數據集上都取得了不錯的效果
VGG卷積神經網絡模型解析ide

在其餘相似數據上一樣表現不俗:
VGG卷積神經網絡模型解析函數

二:預訓練模型使用(Caffe)
VGG自己提供了預訓練模型供你們能夠自由使用,預訓練的VGG-16模型與VGG-19模型下載地址能夠在這裏發現:
http://www.robots.ox.ac.uk/~vgg/research/very_deep/
下載VGG-16模型以後使用OpenCV DNN模塊相關API,就能夠實現一個圖像分類器,支持1000種圖像分類,基於ImageNet 2014-ILSVRC數據集訓練。原圖:
VGG卷積神經網絡模型解析學習

VGG-16預測分類結果:
VGG卷積神經網絡模型解析code

稍微有點尷尬的是,OpenCL初始化內存不夠了,只能說個人機器不給力:
VGG卷積神經網絡模型解析視頻

演示網絡加載與圖像分類的OpenCV程序代碼以下:htm

Net net = readNetFromCaffe(model_txt_file, model_bin_file);
    if (net.empty()) {
        printf("read caffe model data failure...\n");
        return -1;
    }
    Mat inputBlob = blobFromImage(src, 1.0, Size(w, h), Scalar(104, 117, 123));
    Mat prob;
    for (int i = 0; i < 10; i++) {
        net.setInput(inputBlob, "data");
        prob = net.forward("prob");
    }
    Mat probMat = prob.reshape(1, 1);
    Point classNumber;
    double classProb;
    minMaxLoc(probMat, NULL, &classProb, NULL, &classNumber);
    int classidx = classNumber.x;
    printf("\n current image classification : %s, possible : %.2f", labels.at(classidx).c_str(), classProb);

    putText(src, labels.at(classidx), Point(20, 20), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(0, 0, 255), 2, 8);
    imshow("Image Classification", src);

學習OpenCV 深度學習視頻教程 點擊下面:
OpenCV深度學習模塊 -《OpenCV 深度神經網絡教程》blog

相關文章
相關標籤/搜索