物件檢測 (objectdetection) 或物件定位 (object location) 是目前普及度最高的人工智能應用,也是過去幾年中神經網絡發展最迅猛的領域,短短幾年之中創造出非常多優異的經典算法,并且各有所長,如今在數量與質量上都還持續進化中,這現象其實也是造成使用者很大困擾之處,因為究竟哪種神經網絡最適合您的使用場景,最終還是得經過實際驗證之后才能確認。
TAO 工具非常高效地協助我們解決這個難題,讓我們在不了解各種神經網絡結構與算法、也不熟悉 Tensorflow 或 Pytorch 這些復雜框架之前,不用撰寫任何 C++ 或 Python 代碼,就能非常輕易地訓練好深度學習模型,并且快速驗證不同網絡模型的性能與效果,這估計能減少能降低 80% 以上的前期學習與評估的時間成本。
在 TAO 的 cv_samples 里提供多個物件檢測算法,包括 detectnet_v2、dssd、ssd、facenet、fast_rcnn、lprnet、mask_rcnn、retinanet、unet、ssd、yolo_v4等十多個物件檢測范例,每一個流程與本系列前一個 “圖像分類的模型訓練” 的范例是一致的,因此這里只挑選目前普及度較高的 ssd 神經網絡進行示范就行。
首先進入 Jupyter 操作界面,打開 cv_samples/ssd/ssd.ipynb腳本,然后按照以下步驟逐步執行:
0. 環境變量配置與路徑映射(Setup env variables and map drives):
在系列文章 “視覺類訓練腳本的環境配置” 內有詳細的講解,這里只要對下面兩變量進行處理就可以:
-
%env KEY=<您的NGC秘鑰>
-
將“%envLOCAL_PROJECT_DIR=YOUR_LOCAL_PROJECT_DIR_PATH”改成“os.environ["LOCAL_PROJECT_DIR"] = os.getcwd()”
然后執行這部分的 4 個指令塊
-
安裝 TAO 啟動器(Install the TAO launcher):
跳過第一個安裝指令塊,執行“!tao info”指令塊就行。
2. 準備數據集與預訓練模型(Preparedataset and pre-trained model)
數據集處理通常是模型訓練過程比較消耗人力的步驟。這里推薦不使用腳本里的步驟去下載與解壓縮,因為這里指向的下載位置在國外網站,這對大部分使用者是很困擾的,因此最好自行手動下載處理。
(1) TAO 的物件檢測模型訓練支持 KITTI 標注格式,這里使用的范例數據集與系列文章“視覺數據格式處理與增強”是同一套,如果前面實驗已將下載的話就復制一份過來就行,也可以重新在https://pan.baidu.com/s/1WcRt9ONqsYhLRmL8Rg8_YQ(密碼855n),下載 data_object_image_2.zip 與 data_object_label_2.zip 到 ssd.ipynb 相同目錄下,然后執行以下指令進行解壓縮:
cd ~/tao/cv_samples/ssd # 請根據您實際路徑
unzip -u data_object_image_2.zip -d data
unzip-udata_object_label_2.zip-ddata
會在這個工作目錄下生成 data/training/image_2、data/training/label_2 與 data/testing三個子目錄,其中訓練用數據量為 7481 張圖片、測試數據量為 7518 張。
如果有自己的數據集想要轉到 TAO 來進行訓練,除了先將標注格式轉成 KITTI 之外,最好也遵循上面的路徑結構,這樣就不需修改 spec 目錄下相關配置文件里面的設定值,對初學者是最便利的方式。
(1) 接著調用 generate_val_dataset.py,從訓練數據中提取 10% 內容作為校驗用途,存放在 data/val 目錄,于是在 data/training 下面的圖像與標注文件數量就剩下 6733 個。然后執行 “2.3Generate tfrecords” 指令塊,將訓練與校驗數據集都轉成 tfrecords 格式,分別存放在對應的路徑之下。
(2) 如果要配合遷移學習功能的話,接下來就是從 NGC 下載合適的預訓練模型。這里選擇的是 “nvidia/tao/pretrained_object_detection:resnet18”,最終下載的模型文件為 89MB 大小的 resnet_18.hdf5 模型文件。
只要這個數據集整理步驟做得完整,后面的部分就會很簡單。
3. 提供訓練用配置文件(Providetraining specification)
在 TAO 所有范例里,配置文件是所有內容的精華之處,這必須由專業算法工程師群進行調試,不僅要這些神經網絡的結構與算法有足夠深入的了解,還需要經過足夠長的重復調試過程,才能調試出一個夠完整的優化參數組合,這部分是英偉達非常龐大精英人力與成本的所提煉出來的精髓。
物件檢測應用的設定組,比前面的圖像分類要復雜很多,雖然初學者沒有能力去做細節參數的調整,但還是得了解一下主要結構,對于學習深度神經網絡會有很大的幫助。
在 ssd 項目的 specs 目錄下有 5 個配置文件,其中與訓練相關的有 4 個,但實際使用到的就是ssd_train_resnet18_kitti.txt與ssd_retrain_resnet18_kitti.txt這兩個配置文件。
前者是提供給首次訓練模型時使用,后者是對修剪過的模型進行再訓練時使用,兩者的內容幾乎一樣,主要差異在配合遷移學習功能的部分,前者使用“pretrain_model_path”指向從NGC下載的預訓練模型,后者使用“pruned_model_path”指向后面會操作的 “修剪過的模型”,其他參數都一樣。
現在就以 ssd_train_resnet18_kitti.txt 配置文件來做說明,里面總共有 6 個參數組:
(1) ssd_config:
這是根據網絡種類所命名,不同網絡的配置組內容都不太一樣,例如 yolov3 范例的配置組為 “yolov3_config”,以此類推。每種神經網絡都有截然不同的參數內容,在 ssd 網絡有 12 個參數的設定,而 yolo_v4 網絡有將近 20 個,所以網絡之間的配置是不能套用或互換的。如果未來要開發自己的特殊模型,最好從現有的 20 范例里面去挑選,就能以該網絡的配置文件為基礎進行修改。
關于這個配置組的內容就不多時間去說明,初學者先不要貿然去修改,以免訓練過程發生不可預期的錯誤,或者模型效果不好。
(2) training_config:
執行訓練時的一些參數設定,這是使用者能進行調整的部分,包括以下部分:
-
batch_size_per_gpu:根據執行訓練的GPU總顯存進行調整
-
num_epochs:訓練回合數,這里設定為80
-
enable_qat:開啟QAT訓練模式,這里預設值為 ”false”,表示不開啟
-
checkpoint_interval:每多少回合生成一次模型文件,這里預設值為1
-
learning_rate、regularizer 與 optimizer:如果對 ssd 有深入了解的,可以進一步調整。
(3) evaluation_config:
這些存放模型評估的一些參數,可以根據計算設備的顯存值調整 batch_size 大小,不過這些并不影響訓練的結果。
(4) nms_config:
NMS (Non-maximumsuppression) 非極大抑制應用的目的,是要消除多余的框,找到最佳的物體檢查位置。
(5) augmentation_config:
這部分的參數內容請參考系類文章 “視覺類的數據增強”,有詳細的說明。雖然沒辦法進入 TAO 源碼(未開放)去確認,但這項參數設定組應該顯示在物件檢測模型訓練過程中,并將“數據增強”功能加進來,這對提高模型精準度會起到很大的效果。
(6) dataset_config:
這里最主要配置數據源的路徑,以及類別 “key:value” 對的映射關系;
-
一組 data_source:
里面包含 tfrecords_path 與 image_directory_path 兩個路徑設定;
-
多組 target_class_mapping:
每一組對應的 “key” 是數據集的原始類別名稱,后面映射的 “value” 是訓練后模型的識別分類。
例如這里使用的 KITTI 數據集中,原始分類有 “car/ van/cyclist/ person_sitting/ pedestrian/ DontCare/ tram/ truck/ misc” 等 9 種分類,經過映射后只保留 “Car/cyclist/ pedestrian” 三個分類,沒有在映射組里的分類就會忽略,例如 truck、misc 等。
如果使用自己的數據集訓練模型,這部分需要自行調整到合適的類別對應,否則訓練的結果也不能實現您要達到的識別效果。
-
一組 validation_data_sources:
包括 label_directory_path 與 label_directory_path,存放校驗數據集的圖像與標注路徑。
以上 6 組配置在每個物件檢測模型的配置文件中都有,但是配置內容不盡相同, TAO 已經為所支持的網絡都提供優化過的參數內容,初學者只要直接使用就可以,等日后有更深入的掌握,再試著去修改這些參數。
原文標題:NVIDIA Jetson Nano 2GB 系列文章(61):物件檢測的模型訓練與優化
文章出處:【微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。
-
神經網絡
+關注
關注
42文章
4772瀏覽量
100851 -
檢測
+關注
關注
5文章
4492瀏覽量
91522 -
模型
+關注
關注
1文章
3254瀏覽量
48889
原文標題:NVIDIA Jetson Nano 2GB 系列文章(61):物件檢測的模型訓練與優化
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論