0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解TAO的配置文件與執(zhí)行流程

NVIDIA英偉達企業(yè)解決方案 ? 來源:NVIDIA英偉達企業(yè)解決方案 ? 作者:NVIDIA英偉達企業(yè)解 ? 2022-04-25 11:47 ? 次閱讀

圖像分類 (image classification) 是視覺人工智能的最基礎(chǔ)應(yīng)用,目前 TAO 模型訓(xùn)練工具支持 resnet、vgg、mobilenet_v1、mobilenet_v2、googlenet、cspdarknet、darknet、efficientnet_b0、efficientnet_b1、cspdarknet_tiny 等 10 種神經(jīng)網(wǎng)絡(luò),其中 resnet、vgg、darknet、cspdarknet 還有不同結(jié)構(gòu)層數(shù)的區(qū)分。

在 TAO 啟動器中只用 “classification” 這個任務(wù)指令,去面對上面所列出的十多種網(wǎng)絡(luò)結(jié)構(gòu),其關(guān)鍵處就是結(jié)合“配置文件”的協(xié)助,因此這個配置文件的設(shè)置組是 TAO 工具的核心所在,也是本文一開始要花時間說明的部分。

在 cv_samples 下面的 classification 項目,是 TAO 工具的圖像分類模型訓(xùn)練的標準范例,里面提供 classification.ipynb 執(zhí)行腳本與 specs 目錄下兩個 .cfg 配置文件,基本上在執(zhí)行腳本里只需要修改一些路徑的設(shè)定就行,其余細節(jié)都在配置文件里面進行調(diào)整,包括所選擇的神經(jīng)網(wǎng)絡(luò)種類與結(jié)構(gòu)。

這個項目以 PascalVOC 2012 數(shù)據(jù)集作為訓(xùn)練源,與 TAO 所支持的格式并不相同,因此在訓(xùn)練之前還需要進行格式的轉(zhuǎn)換。還好這里的轉(zhuǎn)換比較簡單,只要將圖像分別存放在以“類別”所命名的目錄下就可以,同時分割成訓(xùn)練與校驗兩個不同用途的數(shù)據(jù)集,在腳本里透過一段簡單的 Python 代碼就能完成,并沒有什么難度。

最后在訓(xùn)練之前,可以選擇是否啟動 “遷移學(xué)習(xí)” 的功能?在這個實驗中也會示范這中間所得到的精度差異,讓大家直接體驗到遷移學(xué)習(xí)所帶來的的好處。

以下就將幾個執(zhí)行重點提出來說明,協(xié)助大家可以輕松地執(zhí)行。

配置文件內(nèi)容

TAO 的 CLI 指令集只使用一個 classification 去面對所有的圖形分類應(yīng)用,其余的工作就全部交給配置文件去處理。在圖像分類的配置文件里,主要有以下三個配置組:

1、model_config:存放神經(jīng)網(wǎng)絡(luò)種類、結(jié)構(gòu)(層數(shù))與特性的內(nèi)容,以下列出比較重要的部分:

(1) arch:網(wǎng)絡(luò)名稱,可使用所有已支持的網(wǎng)絡(luò),包括 resnet、vgg、mobilenet_v1、mobilenet_v2、googlenet、cspdarknet、darknet、efficientnet_b0、efficientnet_b1、cspdarknet_tiny 等;

(2) n_layer:有些網(wǎng)絡(luò)有多種結(jié)構(gòu)層,例如 resnet有10/18/34/50/101、vgg 有16/19、darknet 有 19/53、cspdarknet 有 19/53 等;

其余參數(shù)都按照配置文件里面所設(shè)定的值,因為 NGC 提供的預(yù)訓(xùn)練模型是按照這些參數(shù)所訓(xùn)練的,能在遷移學(xué)習(xí)過程中得到比較好的效果。

2、train_config:執(zhí)行訓(xùn)練時所需要參考的

(1) train_dataset_path: 訓(xùn)練用數(shù)據(jù)集的位置,需要輸入在容器內(nèi)的完整路徑

(2) val_dataset_path: 校驗用數(shù)據(jù)集的位置,需要輸入在容器內(nèi)的完整路徑

(3) pretrained_model_path: 預(yù)訓(xùn)練模型位置,需要輸入在容器內(nèi)的完整路徑

(4) batch_size_per_gpu:請根據(jù)GPU顯存大小進行調(diào)整

(5) n_epochs:訓(xùn)練的回合數(shù)

(6) n_workersCPU的并行線程數(shù),請根據(jù)實際CPU核數(shù)量進行調(diào)整

其余參數(shù)清先安裝范例所提供的設(shè)置。

3、eval_config:評估模型時所需要用到的參數(shù),需要輸入在容器內(nèi)的完整路徑

(1) eval_dataset_path: 測試用數(shù)據(jù)集路徑,與前面相同

(2) model_path: 在前面訓(xùn)練模型過程中所生成的 .tlt 模型文件中,挑選效果最好的一個模型來進行評估,通常最后一個的效果會最好。這里的 “resnet_080.tlt” 是因為訓(xùn)練回合數(shù)為 80。

其余參數(shù)請先按照范例所提供的設(shè)置。

以上關(guān)于路徑部分的設(shè)置,只要遵循腳本一開始 “0. Set up env variables and map drives” 的配置規(guī)則,文件里基本上不需要做修改。其他參數(shù)的定義與設(shè)定值,請訪問 https://docs.nvidia.com/tao/tao-toolkit/text/image_classification.html#model-config 有完整的說明。

數(shù)據(jù)集格式轉(zhuǎn)換與分配

TAO 支持的圖像分類數(shù)據(jù)格式,是以“分類名”作為路徑名,將所有該類的圖像都放置到分類名目錄之下,例如有 20 個分類的數(shù)據(jù)集,就會有 20 個分類目錄。

本實驗使用 PascalVOC 的 VOCtrainval_11-May-2012.tar (1.9GB) 數(shù)據(jù)集,可以用腳本提供的鏈接,也可以在https://pan.baidu.com/s/1JhnBCRi32xblhSSWFmF5aA (密碼: gg95) 下載壓縮文件。

請按照腳本的數(shù)據(jù)集處理過程,包括放置路徑與解壓縮的指令。由于這個數(shù)據(jù)集的格式并不符合 TAO 的要求,因此腳本中使用一段 Python 代碼來進行轉(zhuǎn)換,詳細內(nèi)容請自行閱讀代碼,其主要功能就是將下圖左邊 VOC 路徑結(jié)構(gòu)轉(zhuǎn)換成右邊符合 TAO 要求的結(jié)構(gòu),存放在 “formated” 目錄下。

接著再將 “formated” 的數(shù)據(jù),隨機分割成 train、val與test 三大類存放到 “split” 目錄下,作為后面執(zhí)行訓(xùn)練、校驗與測試時所需要的數(shù)據(jù)路徑。

動遷移學(xué)習(xí)功能

TAO 的模型訓(xùn)練繼承 TLT 的遷移學(xué)習(xí)功能,只要在配置文件中的“train_config” 配置組里,指定好 “pretrained_model_path:” 的路徑就可以,如果不想啟用這個功能,只要在這個參數(shù)前面用 “#” 去關(guān)閉就行。

在 NGC 提供 300 多個預(yù)訓(xùn)練模型,我們需要挑選合適的模型來協(xié)助執(zhí)行遷移學(xué)習(xí),這部分的下載需要使用 NGC 的指令來操作,在腳本中已經(jīng)提供完整的安裝步驟,只要執(zhí)行命令塊就行,然后用以下指令去下載所選的模型:

ngc registry model download-version 模型全名 --dest 本地存放路徑

這里配合所使用的網(wǎng)絡(luò)種類,挑選 nvidia/tao/pretrained_classification:resnet18 作為本次的預(yù)訓(xùn)練模型,文件大小在 80MB 左右。

下圖左方是這個實驗中,關(guān)閉遷移學(xué)習(xí)功能所訓(xùn)練出來的模型,經(jīng)過下面評估步驟所測算出來的結(jié)果,下圖右方則是在基于 NGC 下載的預(yù)訓(xùn)練模型基礎(chǔ)上,利用遷移學(xué)習(xí)功能所訓(xùn)練出來的模型效果,總體來說得到的精準度提升還是很明顯的。

但如果是缺乏合適預(yù)訓(xùn)練模型的狀況下,也不能硬是挑選不合適的模型來做遷移學(xué)習(xí),可能得到的效果會更差。

執(zhí)行模型訓(xùn)練

當(dāng)前面的準備工作都做到位之后,這個步驟就是水到渠成。執(zhí)行訓(xùn)練所耗費的時間就只跟 GPU 卡的總體計算資源有關(guān)系,如果您的設(shè)備有一張以上 GPU 計算卡的話,可以透過 TAO 指令以下參數(shù),去調(diào)整可用的計算資源:

--gpus [N]:指定要調(diào)用的 GPU 卡數(shù)量;

--gpu_index 編號1 [編號2...]

例如設(shè)備上有 2 片 GPU 卡時,想要全部用上的話就直接用 “--gpus 2” 參數(shù)進行調(diào)用;如果設(shè)備上有 4 片 GPU 計算卡,想要指定調(diào)用 0 號與 3 號這兩張卡的時,就用 “--gpus 2--gpu_index 0 3” 參數(shù),就能精準調(diào)用指定的GPU來進行訓(xùn)練。

在這個圖像分類實驗中,我們以 NVIDIA RTX2070 與 RTX3070 進行測試,這兩張計算卡都具有 8GB 顯存。在固定回合數(shù)為 80、batch_size_per_gpu 為 64 的條件下,所耗費的訓(xùn)練時間如下:

單GPU/3070-8G : 52分19秒

單GPU/2070-8G : 62分44秒

雙GPU/3070+2070 : 38分03秒

修剪模型

這個步驟的目的,是要在維持足夠精準度的前提下縮小模型的尺寸,越小的模型會消耗更少的計算資源,特別是內(nèi)存與顯存。

這對于計算資源充沛的計算設(shè)備來說,所體現(xiàn)的差異并不明顯,但是對于計算資源相對吃緊的邊緣設(shè)備來說,就有非常大的影響,甚至影響推理識別的性能,因此請自行決定是否需要執(zhí)行這個步驟。

這里的要剪裁的對象是已訓(xùn)練好的模型,而不是從網(wǎng)絡(luò)結(jié)構(gòu)層進行融合處理,最簡單的方法就是調(diào)整 “-pth(閾值)” ,在精確度與模型大小之間取得平衡,調(diào)整的值越高就會得到越小的模型,但精準度會受到比較大的損失,這就需要經(jīng)過不斷嘗試去調(diào)節(jié)出滿足要求的模型。

以這個 classification 項目為例,在 80 回合中訓(xùn)練的模型大小為 87.7MB,通常最后一回合訓(xùn)練的模型精確度會最好,因此用 resnet_080.tlt 模型進行修剪測試:

-pth=0.6:修剪后生成大小為38.5MB的resnet18_nopool_bn_pruned.tlt

-pth=0.3:修剪后生成大小為44.2MB的resnet18_nopool_bn_pruned.tlt

至于修剪后模型對精確度產(chǎn)生怎樣的影響?就需繼續(xù)往下執(zhí)行“再訓(xùn)練”之后,看看評估的效果如何!

模型再訓(xùn)練

經(jīng)過修剪的模型并不能立即使用,而是作為“再訓(xùn)練”的預(yù)訓(xùn)練模型,再次利用遷移學(xué)習(xí)的技巧,以前面的數(shù)據(jù)集進行模型再訓(xùn)練的工作,唯一不一樣的地方是這次使用的配置文件為 classification_retrain_spec.cfg,這個配置內(nèi)容與前面的 classification_spec.cfg 只有三個差異的地方:

1. 在 model_config 設(shè)置組少了兩個 “freeze_blocks” 設(shè)置;

2. 在 train_config 設(shè)置組的 “pretrained_model_path” 換成前面修剪過的模型;

3. 在 eval_config 設(shè)置組的 “model_path” 換成修剪后重新訓(xùn)練的模型

繼續(xù)往下執(zhí)行 “7. Retrain pruned models” 與 “8. Testing the model” 兩個步驟,就能得到修剪過模型的精確度評估結(jié)果。

從上面的比較表中可以看出,這個剪裁的方式對模型文件大小的影響是很明顯的,但精確度的損失并不是太大,所以這個剪裁應(yīng)視為有效果。

本實驗結(jié)語

這個范例主要讓大家體會并熟悉 TAO 的配置文件與執(zhí)行流程,事實上 TAO 所提供的范例幾乎都是一樣的流程,后面還有導(dǎo)出模型、INT8 優(yōu)化、生成 TensorRT 引擎的步驟,我們結(jié)合在后面的物件檢測范例中進行說明。

原文標題:NVIDIA Jetson Nano 2GB 系列文章(60):圖像分類的模型訓(xùn)練與修剪

文章出處:【微信公眾號:NVIDIA英偉達企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    4817

    瀏覽量

    102637
  • TAO
    TAO
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    6987
  • 模型訓(xùn)練
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    1328

原文標題:NVIDIA Jetson Nano 2GB 系列文章(60):圖像分類的模型訓(xùn)練與修剪

文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    springboot的項目如何既要用jar包啟動,同時還可以為不同的機房設(shè)置不同的配置文件

    作者:京東科技 李意文 1、首先先把配置文件從jar中抽離 示例代碼: ? org.apache.maven.plugins maven-jar-plugin 3.2.0
    的頭像 發(fā)表于 10-19 16:48 ?199次閱讀
    springboot的項目如何既要用jar包啟動,同時還可以為不同的機房設(shè)置不同的<b class='flag-5'>配置文件</b>

    HID over GATT配置文件(HOGP)低功耗藍牙

    電子發(fā)燒友網(wǎng)站提供《HID over GATT配置文件(HOGP)低功耗藍牙.pdf》資料免費下載
    發(fā)表于 09-26 11:01 ?0次下載
    HID over GATT<b class='flag-5'>配置文件</b>(HOGP)低功耗藍牙

    確定LDO的任務(wù)配置文件兼容性

    電子發(fā)燒友網(wǎng)站提供《確定LDO的任務(wù)配置文件兼容性.pdf》資料免費下載
    發(fā)表于 09-24 10:44 ?0次下載
    確定LDO的任務(wù)<b class='flag-5'>配置文件</b>兼容性

    鴻蒙開發(fā)Ability Kit程序框架服務(wù):FA模型應(yīng)用配置文件

    應(yīng)用配置文件中包含應(yīng)用配置信息、應(yīng)用組件信息、權(quán)限信息、開發(fā)者自定義信息等,這些信息在編譯構(gòu)建、分發(fā)和運行解決分別提供給編譯工具、應(yīng)用市場和操作系統(tǒng)使用。
    的頭像 發(fā)表于 06-24 14:49 ?264次閱讀
    鴻蒙開發(fā)Ability Kit程序框架服務(wù):FA模型應(yīng)用<b class='flag-5'>配置文件</b>

    鴻蒙開發(fā):【Stage模型應(yīng)用配置文件

    應(yīng)用配置文件中包含應(yīng)用配置信息、應(yīng)用組件信息、權(quán)限信息、開發(fā)者自定義信息等,這些信息在編譯構(gòu)建、分發(fā)和運行解決分別提供給編譯工具、應(yīng)用市場和操作系統(tǒng)使用。
    的頭像 發(fā)表于 06-15 09:15 ?1421次閱讀
    鴻蒙開發(fā):【Stage模型應(yīng)用<b class='flag-5'>配置文件</b>】

    labview生成exe文件如何配置文件

    執(zhí)行文件之前,您需要確保正確配置文件,以便應(yīng)用程序能夠在不同計算機上正確運行。 下面是一個詳盡、詳實、細致的步驟指南,告訴您如何配置LabVIEW生成的可執(zhí)行文件: 確保您的應(yīng)用程序
    的頭像 發(fā)表于 12-27 16:28 ?1915次閱讀

    labview的opc生成配置文件

    的數(shù)據(jù)交互和通信。在 LabVIEW 中生成 OPC 配置文件有助于實現(xiàn)與其他設(shè)備的數(shù)據(jù)傳輸和共享,本文將詳細介紹如何生成 OPC 配置文件。 首先,在 LabVIEW 中生成 OPC 配置文件,我們
    的頭像 發(fā)表于 12-26 17:57 ?1583次閱讀

    oracle配置文件類型關(guān)聯(lián)

    Oracle是一種業(yè)界領(lǐng)先的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它在大型企業(yè)中被廣泛使用。Oracle的配置文件對于數(shù)據(jù)庫的穩(wěn)定運行和性能優(yōu)化至關(guān)重要。在這篇文章中,我們將詳細討論Oracle的一些重要配置文件
    的頭像 發(fā)表于 12-06 10:17 ?426次閱讀

    oracle配置文件tnsnames怎么配置

    Oracle配置文件tnsnames.ora是一個文本文件,用于定義數(shù)據(jù)庫連接的別名和連接信息。通過配置文件,可以在應(yīng)用程序中使用別名來連接數(shù)據(jù)庫,而不必直接給出數(shù)據(jù)庫的具體連接信息
    的頭像 發(fā)表于 12-06 10:15 ?6536次閱讀

    php的配置文件是什么

    PHP的配置文件是一種用于配置PHP解釋器的文本文件。它包含了一系列的指令和選項,用于影響PHP的行為和性能。通過修改配置文件,可以改變PHP解釋器的默認行為,從而滿足不同的需求。 在
    的頭像 發(fā)表于 12-04 15:55 ?1416次閱讀

    zookeeper的核心配置文件是什么

    Zookeeper是一個常用的分布式協(xié)調(diào)服務(wù),它被廣泛應(yīng)用于大型分布式系統(tǒng)中。Zookeeper的核心配置文件是zoo.cfg,它包含了Zookeeper服務(wù)器的各種配置參數(shù),可以通過修改這些參數(shù)
    的頭像 發(fā)表于 12-04 10:33 ?651次閱讀

    springboot的核心配置文件有哪些

    的工作量。 Spring Boot的核心配置文件主要有以下幾個: application.properties:Spring Boot應(yīng)用程序的主要配置文件。它使用Java的鍵值對格式來定義各種配置屬性
    的頭像 發(fā)表于 12-03 15:30 ?1080次閱讀

    springboot的全局配置文件有幾種

    Spring Boot是一種快速開發(fā)框架,其通過提供配置文件來實現(xiàn)對應(yīng)用程序的配置。全局配置文件在Spring Boot中起著非常重要的作用,可以用于配置各種不同的屬性,包括數(shù)據(jù)庫連接
    的頭像 發(fā)表于 12-03 15:28 ?1450次閱讀

    ROS編寫參數(shù)配置文件示例程序

    _config.yaml這三個文件中,這三個文件均位于下圖所示的目錄下,下面依次進行詳細的介紹 1、編寫user_config.yaml參數(shù)配置文件 首先,我們來看作者提供的示例程序,如下所示:
    的頭像 發(fā)表于 11-26 17:35 ?1456次閱讀
    ROS編寫參數(shù)<b class='flag-5'>配置文件</b>示例程序

    linux修改網(wǎng)卡ip配置文件

    Linux是一種開源的操作系統(tǒng),因此,它給用戶提供了很高的自由度,可以根據(jù)個人需要進行各種定制和配置。其中,修改網(wǎng)絡(luò)接口配置文件是常見的操作,可以通過修改網(wǎng)卡ip配置文件來設(shè)置網(wǎng)絡(luò)接口的IP地址
    的頭像 發(fā)表于 11-17 10:51 ?1998次閱讀