<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>

          利用OpenCV 基于Inception模型圖像分類

          共 4777字,需瀏覽 10分鐘

           ·

          2021-06-13 14:10

          點擊上方小白學視覺”,選擇加"星標"或“置頂

          重磅干貨,第一時間送達

          本文轉自:opencv學堂

          Network in Network(NIN)


          要介紹Inception網絡結構首先應該介紹一下NIN(Network in Network)網絡模型,2014年新加坡國立大學發(fā)表了一篇關于計算機視覺圖像分類的論文,提到采用了一種新的網絡結構NIN實現圖像分類,該論文的第二作者顏水成畢業(yè)于北京大學數學系,現任360人工智能研究院院長與首席科學家。NIN主要思想是認為CNN網絡中卷積濾波是基于線性濾波器實現的,抽象能力不夠,所以一般是用一大堆filter把所有特征都找出來,但是這樣就導致網絡參數過大,論文作者提出通過MLP(多個權重階層組成+一個非線性激活函數)對輸入區(qū)域通過MLP產生一個輸出feature map,然后繼續(xù)滑動MLP窗口,對比如下:

          這樣做有兩個好處,

          1. MLP可以共享參數,減少參數總數

          2. 對每個局部感受野神經元實現更加復雜計算,提升能力

          論文中提到NIN網絡完整結構如下:

          包含了三個MLP卷積層與一個全局池化層。

          Inception v1


          受到這篇文章的影響與啟發(fā),谷歌在2014也提出一個新的網絡模型結構Inception網絡也就是大家熟知v1網絡,其主要貢獻在于實現了NIN網絡層數的增加,并且在訓練各個網絡時候為了提高收斂,考慮中間層的輸出與最終分類錯誤。只是中間層不同,最初inception網絡的中間層為:

          后來發(fā)現3x3與5x5的卷積計算耗時很長,而且輸出導致卷積厚度增加,如果層數過度將導致卷積網絡不可控制,于是就在3x3與5x5的卷積之前分別加上1x1的卷積做降維,修改后的結構如下:

          最終得到v1版本的網絡結構如下:

          Inception v2 and Inception v3


          于是在v1的基礎上作者繼續(xù)工作,加入了BN層,對大于3x3的卷積用一系列小的卷積進行替代,比如7x7可以被1x7與7x1替代兩個小卷積核,5x5可以被1x5與5x1兩個小卷積核替代,這樣就得到Inception v2的版本。于是作者繼續(xù)對此網絡結構各種優(yōu)化調整,最終又得到了Inception v3版本

          Inception v4


          Inception v4一個最大的改動就是引入了殘差網絡結構,對原有的網絡結構進行優(yōu)化,得到v1與v2的殘差版本網絡結構,最終得到一個更加優(yōu)化的v4模型,完整的v4結構:

          對應的Block A、B、C結構如下:Inception-A


          Inception-B


          Inception-C


          v1模型加殘差網絡結構



          OpenCV DNN模塊中使用Inception模型


          1. 下載Inception預訓練網絡模型

          2. 使用OpenCV DNN模塊相關API加載模型

          3. 運行Inception網絡實現圖像分類 完整的代碼實現如下:

          1. #include <opencv2/opencv.hpp>

          2. #include <opencv2/dnn.hpp>

          3. #include <iostream>

          4. /******************************************************

          5. *

          6. * 作者:賈志剛

          7. * QQ: 57558865

          8. * OpenCV DNN 完整視頻教程:

          9. * http://edu.51cto.com/course/11516.html

          10. *

          11. ********************************************************/

          12. using namespace cv;

          13. using namespace cv::dnn;

          14. using namespace std;

          15. String labels_txt_file = "D:/android/opencv_tutorial/data/models/inception5h/imagenet_comp_graph_label_strings.txt";

          16. String tf_pb_file = "D:/android/opencv_tutorial/data/models/inception5h/tensorflow_inception_graph.pb";

          17. vector<String> readClassNames();

          18. int main(int argc, char** argv) {

          19.    Mat src = imread("D:/vcprojects/images/twocat.png");

          20.    if (src.empty()) {

          21.        printf("could not load image...\n");

          22.        return -1;

          23.    }

          24.    namedWindow("input", CV_WINDOW_AUTOSIZE);

          25.    imshow("input", src);

          26.    vector<String> labels = readClassNames();

          27.    Mat rgb;

          28.    cvtColor(src, rgb, COLOR_BGR2RGB);

          29.    int w = 224;

          30.    int h = 224;

          31.    // 加載網絡

          32.    Net net = readNetFromTensorflow(tf_pb_file);

          33.    if (net.empty()) {

          34.        printf("read caffe model data failure...\n");

          35.        return -1;

          36.    }

          37.    Mat inputBlob = blobFromImage(src, 1.0f, Size(224, 224), Scalar(), true, false);

          38.    inputBlob -= 117.0; // 均值

          39.    // 執(zhí)行圖像分類

          40.    Mat prob;

          41.    net.setInput(inputBlob, "input");

          42.    prob = net.forward("softmax2");

          43.    // 得到最可能分類輸出

          44.    Mat probMat = prob.reshape(1, 1);

          45.    Point classNumber;

          46.    double classProb;

          47.    minMaxLoc(probMat, NULL, &classProb, NULL, &classNumber);

          48.    int classidx = classNumber.x;

          49.    printf("\n current image classification : %s, possible : %.2f", labels.at(classidx).c_str(), classProb);

          50.    // 顯示文本

          51.    putText(src, labels.at(classidx), Point(20, 20), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(0, 0, 255), 2, 8);

          52.    imshow("Image Classification", src);

          53.    imwrite("D:/result.png", src);

          54.    waitKey(0);

          55.    return 0;

          56. }

          57. std::vector<String> readClassNames()

          58. {

          59.    std::vector<String> classNames;

          60.    std::ifstream fp(labels_txt_file);

          61.    if (!fp.is_open())

          62.    {

          63.        printf("could not open file...\n");

          64.        exit(-1);

          65.    }

          66.    std::string name;

          67.    while (!fp.eof())

          68.    {

          69.        std::getline(fp, name);

          70.        if (name.length())

          71.            classNames.push_back(name);

          72.    }

          73.    fp.close();

          74.    return classNames;

          75. }

          輸入原圖:

          測試結果:

          關鍵是速度很快,比VGG快N多,基本秒出結果!



          下載1:OpenCV-Contrib擴展模塊中文版教程
          在「小白學視覺」公眾號后臺回復:擴展模塊中文教程即可下載全網第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內容。

          下載2:Python視覺實戰(zhàn)項目52講
          小白學視覺公眾號后臺回復:Python視覺實戰(zhàn)項目即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數、添加眼線、車牌識別、字符識別、情緒檢測、文本內容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學校計算機視覺。

          下載3:OpenCV實戰(zhàn)項目20講
          小白學視覺公眾號后臺回復:OpenCV實戰(zhàn)項目20講即可下載含有20個基于OpenCV實現20個實戰(zhàn)項目,實現OpenCV學習進階。

          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據研究方向邀請進入相關微信群。請勿在群內發(fā)送廣告,否則會請出群,謝謝理解~


          瀏覽 95
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  黄色操逼视频 | 性爱视频大香蕉 | 亚洲天天射干 | 国产激情视频在线观看 | 熟女bb |