1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        TensorFlow圖像分類教程

        共 5466字,需瀏覽 11分鐘

         ·

        2023-03-08 07:44

        點(diǎn)擊下方卡片,關(guān)注“新機(jī)器視覺”公眾號(hào)

        重磅干貨,第一時(shí)間送達(dá)

        來源:阿里云云棲號(hào)


        導(dǎo)讀:深度學(xué)習(xí)算法與計(jì)算機(jī)硬件性能的發(fā)展,使研究人員和企業(yè)在圖像識(shí)別、語音識(shí)別、推薦引擎和機(jī)器翻譯等領(lǐng)域取得了巨大的進(jìn)步。六年前,視覺模式識(shí)別領(lǐng)域取得了第一個(gè)超凡的成果。兩年前,Google大腦團(tuán)隊(duì)開發(fā)了TensorFlow,并將深度學(xué)習(xí)巧妙的應(yīng)用于各個(gè)領(lǐng)域。現(xiàn)在,TensorFlow則超越了很多用于深度學(xué)習(xí)的復(fù)雜工具。


        利用TensorFlow,你可以獲得具有強(qiáng)大能力的復(fù)雜功能,其強(qiáng)大的基石來自于TensorFlow的易用性。


        在這個(gè)由兩部分組成的系列中,我將講述如何快速的創(chuàng)建一個(gè)應(yīng)用于圖像識(shí)別的卷積神經(jīng)網(wǎng)絡(luò)。


        TensorFlow計(jì)算步驟是并行的,可對(duì)其配置進(jìn)行逐幀視頻分析,也可對(duì)其擴(kuò)展進(jìn)行時(shí)間感知視頻分析。


        本系列文章直接切入關(guān)鍵的部分,只需要對(duì)命令行和Python有最基本的了解,就可以在家快速地創(chuàng)建一些令你激動(dòng)不已的項(xiàng)目。本文不會(huì)深入探討TensorFlow的工作原理,如果你想了解更多,我會(huì)提供大量額外的參考資料。本系列所有的庫和工具都是免費(fèi)開源的軟件。


        工作原理


        本教程旨在把一個(gè)事先被放到訓(xùn)練過的類別里的圖片,通過運(yùn)行一個(gè)命令以識(shí)別該圖像具體屬于哪個(gè)類別。步驟如下圖所示:



        • 標(biāo)注:管理訓(xùn)練數(shù)據(jù)。例如花卉,將雛菊的圖像放到“雛菊”目錄下,將玫瑰放到“玫瑰”目錄下等等,將盡可能多的不同種類的花朵按照類別不同放在不同的目錄下。如果我們不標(biāo)注“蕨類植物”,那么分類器永遠(yuǎn)也不會(huì)返回“蕨類植物”。這需要每個(gè)類型的很多樣本,因此這一步很重要,并且很耗時(shí)。(本文使用預(yù)先標(biāo)記好的數(shù)據(jù)以提高效率)


        • 訓(xùn)練:將標(biāo)記好的數(shù)據(jù)(圖像)提供給模型。有一個(gè)工具將隨機(jī)抓取一批圖像,使用模型猜測每種花的類型,測試猜測的準(zhǔn)確性,重復(fù)執(zhí)行,直到使用了大部分訓(xùn)練數(shù)據(jù)為止。最后一批未被使用的圖像用于計(jì)算該訓(xùn)練模型的準(zhǔn)確性。


        • 分類:在新的圖像上使用模型。例如,輸入:IMG207.JPG,輸出:雛菊。這個(gè)步驟快速簡單,且衡量的代價(jià)小。


        訓(xùn)練和分類


        本教程將訓(xùn)練一個(gè)用于識(shí)別不同類型花朵的圖像分類器。深度學(xué)習(xí)需要大量的訓(xùn)練數(shù)據(jù),因此,我們需要大量已分類的花朵圖像。值得慶幸的是,另外一個(gè)模型在圖像收集和分類這方面做得非常出色,所以我們使用這個(gè)帶有腳本的已分類數(shù)據(jù)集,它有現(xiàn)成且完全訓(xùn)練過的圖像分類模型,重新訓(xùn)練模型的最后幾層以達(dá)到我們想要的結(jié)果,這種技術(shù)稱為遷移學(xué)習(xí)。


        我們重新訓(xùn)練的模型是Inception v3,最初是在2015年12月發(fā)表的論文“重新思考計(jì)算機(jī)視覺的Inception架構(gòu)”中有做論述。


        直到我們做了這個(gè)約20分鐘的訓(xùn)練,Inception才知道如何識(shí)別雛菊和郁金香,這就是深度學(xué)習(xí)中的“學(xué)習(xí)”部分。


        安裝


        首先,在所選的平臺(tái)上安裝Docker。


        在很多TensorFlow教程中最先且唯一依賴的就是Docker(應(yīng)該表明這是個(gè)合理的開始)。我也更喜歡這種安裝TensorFlow的方法,因?yàn)椴恍枰惭b一系列的依賴項(xiàng),這可以保持主機(jī)(筆記本或桌面)比較干凈。


        Bootstrap TensorFlow


        安裝Docker后,我們準(zhǔn)備啟動(dòng)一個(gè)訓(xùn)練和分類的TensorFlow容器。在硬盤上創(chuàng)建一個(gè)2GB空閑空間的工作目錄,創(chuàng)建一個(gè)名為local的子目錄,并記錄完整路徑。


        docker run -v /path/to/local:/notebooks/local --rm -it --name tensorflow 
        tensorflow/tensorflow:nightly /bin/bash


        下面是命令解析:


        -v /path/to/local:/notebooks/local將剛創(chuàng)建的local目錄掛載到容器中適當(dāng)?shù)奈恢谩H绻褂肦HEL、Fedora或其他支持SELinux的系統(tǒng),添加:Z允許容器訪問目錄。


        --rm 退出時(shí)令docker刪除容器


        -it 連接輸入輸出,實(shí)現(xiàn)交互。


        --name tensorflow將容器命名為tensorflow,而不是sneaky_chowderhead或任何Docker定義的隨機(jī)名字。


        tensorflow/tensorflow:nightly從Docker Hub (公共圖像存儲(chǔ)庫)運(yùn)行tensorflow/tensorflow的nightly 圖像,而不是最新的圖像(默認(rèn)為最近建立/可用圖像)。使用nightly圖像而不是latest圖像,是因?yàn)椋ㄔ趯懭霑r(shí))latest包含的一個(gè)bug會(huì)破壞TensorBoard,這是我們稍后需要的一個(gè)數(shù)據(jù)可視化工具。


        /bin/bash指定運(yùn)行Bash shell,而不運(yùn)行系統(tǒng)默認(rèn)命令。


        訓(xùn)練模型


        在容器中運(yùn)行下述命令,對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行下載和完整性檢查。


        curl -O http://download.tensorflow.org/example_images/flower_photos.tgz
        echo 'db6b71d5d3afff90302ee17fd1fefc11d57f243f  flower_photos.tgz' | sha1sum -c


        如果沒有看到“flower_photos.tgz”信息:說明文件不正確。如果上訴curl 或sha1sum步驟失敗,請(qǐng)手動(dòng)下載訓(xùn)練數(shù)據(jù)包并解壓(SHA-1 校驗(yàn)碼:db6b71d5d3afff90302ee17fd1fefc11d57f243f)到本地主機(jī)的local目錄下。


        現(xiàn)在把訓(xùn)練數(shù)據(jù)放好,然后對(duì)再訓(xùn)練腳本進(jìn)行下載和完整性檢查。


        mv flower_photos.tgz local/
        cd local
        curl -O https://raw.githubusercontent.com/tensorflow/tensorflow/10cf65b48e1b2f16eaa82
        6d2793cb67207a085d0/tensorflow/examples/image_retraining/retrain.py
        echo 'a74361beb4f763dc2d0101cfe87b672ceae6e2f5  retrain.py' | sha1sum -c


        確認(rèn)retrain.py有正確的內(nèi)容,你應(yīng)該看到retrain.py: OK.。


        最后,開始學(xué)習(xí)!運(yùn)行再訓(xùn)練腳本。


        python retrain.py --image_dir flower_photos --output_graph output_graph.pb 
        --output_labels output_labels.txt


        如果遇到如下錯(cuò)誤,忽略它:


        TypeError: not all arguments converted during string formatting Logged from file
        tf_logging.py, line 82.


        隨著retrain.py 的運(yùn)行,訓(xùn)練圖像會(huì)自動(dòng)的分批次訓(xùn)練、測試和驗(yàn)證數(shù)據(jù)集。


        在輸出上,我們希望有較高的“訓(xùn)練精度”和“驗(yàn)證精度”,以及較低的“交叉熵”。有關(guān)這些術(shù)語的詳細(xì)解釋,請(qǐng)參照“如何就新圖片類型再訓(xùn)練Inception的最后一層”。在當(dāng)前的硬件上的訓(xùn)練約30分鐘。


        請(qǐng)注意控制臺(tái)輸出的最后一行:


        INFO:tensorflow:Final test accuracy = 89.1% (N=340)


        這說明我們已經(jīng)得到了一個(gè)模型:給定一張圖像,10次中有9次可正確猜出是五種花朵類型中的哪一種。由于提供給訓(xùn)練過程的隨機(jī)數(shù)不同,分類的精確度也會(huì)有所不同。


        分類


        再添加一個(gè)小腳本,就可以將新的花朵圖像添加到模型中,并輸出測試結(jié)果。這就是圖像分類。


        將下述腳本命名為 classify.py保存在本地local目錄:


        import tensorflow as tf, sys
         
        image_path = sys.argv[1]
        graph_path = 'output_graph.pb'
        labels_path = 'output_labels.txt'
         
        # Read in the image_data
        image_data = tf.gfile.FastGFile(image_path, 'rb').read()
         
        # Loads label file, strips off carriage return
        label_lines = [line.rstrip() for line
            in tf.gfile.GFile(labels_path)]
         
        # Unpersists graph from file
        with tf.gfile.FastGFile(graph_path, 'rb') as f:
            graph_def = tf.GraphDef()
            graph_def.ParseFromString(f.read())
            _ = tf.import_graph_def(graph_def, name='')
         
        # Feed the image_data as input to the graph and get first prediction
        with tf.Session() as sess:
            softmax_tensor = sess.graph.get_tensor_by_name('final_result:0')
            predictions = sess.run(softmax_tensor, 
            {'DecodeJpeg/contents:0': image_data})
            # Sort to show labels of first prediction in order of confidence
            top_k = predictions[0].argsort()[-len(predictions[0]):][::-1]
            for node_id in top_k:
                 human_string = label_lines[node_id]
                 score = predictions[0][node_id]
                 print('%s (score = %.5f)' % (human_string, score))


        為了測試你自己的圖像,保存在local目錄下并命名為test.jpg,運(yùn)行(在容器內(nèi)) python classify.py test.jpg。輸出結(jié)果如下:


        sunflowers (score = 0.78311)
        daisy (score = 0.20722)
        dandelion (score = 0.00605)
        tulips (score = 0.00289)
        roses (score = 0.00073)


        數(shù)據(jù)說明了一切!模型確定圖像中的花朵是向日葵的準(zhǔn)確度為78.311%。數(shù)值越高表明匹配度越高。請(qǐng)注意,只能有一個(gè)匹配類型。多標(biāo)簽分類則需要另外一個(gè)不同的方法。


        分類腳本中的圖表加載代碼已經(jīng)被破壞,在這里,我用graph_def = tf.GraphDef()等作為圖表加載代碼。

        利用零基礎(chǔ)知識(shí)和一些代碼,我們建了一個(gè)相當(dāng)好的花卉圖像分類器,在現(xiàn)有的筆記本電腦上每秒大約可以處理5張圖像。


        希望你能夠繼續(xù)關(guān)注系列其他博文。


        以上為譯文。本文由阿里云云棲社區(qū)組織翻譯。

        文章原標(biāo)題《Learn how to classify images with TensorFlow》,譯者:Mags,審校:袁虎。


        本文僅做學(xué)術(shù)分享,如有侵權(quán),請(qǐng)聯(lián)系刪文。

        —THE END—

        瀏覽 78
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            黄视频在线 | av男优大全 | 黄色美女网站 | 干美女网 | 国产人妻人伦精品一区二区网站 | heyzo肥臀小早川怜子 | 亚洲成人福利视频 | 自慰免费看 | 高清无码不卡一区二区三区 | 婷婷在线视频 |