要開發準確的計算機視覺 AI 應用程序,您需要大量高質量的數據。對于傳統的數據集,您可能需要花費數月的時間來收集圖像、獲取注釋和清理數據。完成后,您可以找到邊緣案例并需要更多數據,從而重新開始循環。
多年來,這種循環阻礙了人工智能的發展,尤其是在計算機視覺領域。 Lexset 構建工具,使您能夠生成數據 來解決這個瓶頸。作為 AI 培訓周期的一部分,可以開發和迭代具有培訓數據的強大新工作流。
Lexset 的 Seahaven 平臺可以在幾分鐘內生成完全帶注釋的數據集,包括照片級真實感 RGB 圖像、語義分割和深度圖。迭代可以快速有效地提高模型的準確性。尋找異常事件或罕見情況的數據不再需要幾個月的時間。只需快速調整配置并生成新數據,即可使您的模型比以往任何時候都更好。
從 Seahaven 生成的合成數據可用于微調和定制 NVIDIA TAO 工具包中的預訓練模型。 TAO 工具包是一種低代碼 AI 模型開發解決方案,它抽象了 AI 框架的復雜性,并使您能夠使用 transfer learning 為您的特定用例創建定制的、生產就緒的模型。
通過使用 Seahaven 和 TAO 工具包創建初始數據集,大大減少時間并提高準確性。最重要的是,您可以使用合成數據快速調整模型以適應不斷變化的條件和不斷增加的復雜性。
解決方案概述
對于這個實驗,您可以使用一個簡單的用例,構建一個計算機視覺模型,該模型能夠發現并區分常見的硬件項目,例如螺釘。您從一個簡單的背景開始,引入更多的復雜性來展示合成數據如何適應不斷變化的條件。
我們創建了一個包含四個螺釘注釋的圖像的數據集,并使用 TAO 工具包對象檢測模型開始。我們使用了更快的 R-CNN 、 RetinaNet 和 YOLOv3 。
在這篇文章中,我介紹了運行這個示例數據集所需的步驟,您可以通過更快的R-CNN來運行這個示例數據集。要運行RetinaNet或YOLOv3,步驟相同,并且在提供的Jupyter筆記本中。
我還分享了 Lexset 合成數據如何與模型訓練配合使用,以快速解決隨著用例變得更加復雜而可能出現的準確性問題。
要創建自己的數據集以與 TAO 工具包一起使用,請按照 Using Seahaven 和 Seahaven documentation 中的說明進行操作。
要再現所述結果,請遵循以下主要步驟:
使用預先訓練的 ResNet-18 模型,并在 Lexset 的四螺釘合成數據集上訓練 ResNet-18 更快的 RCNN 模型。
在合成數據集上使用經過最佳訓練的權重,并使用真實世界四螺桿數據集的 10% 對其進行微調。
在真實螺釘驗證數據集上評估最佳訓練和微調權重。
對經過訓練的模型進行推理。
先決條件
NVIDIA TAO 工具包需要 NVIDIA GPU (例如, A100 )和驅動程序才能使用其 Docker 容器,因此必須有一個才能繼續。
您還需要至少 16 GB 的物理 RAM 、 50 GB 的可用內存和 8 核。我們在 Python 3.6.9 上進行了測試,并使用了 Ubuntu 18.04 。 TAO 工具包需要 NVIDIA 驅動程序 455 。 xx 或更高版本。
tao 啟動器嚴格來說是一個只支持 python3 的包,能夠在 Python 3.6.9 或 3.7 或 3.8 上運行。
按照 Docker 官方說明 安裝 docker ce 。
安裝 docker ce 后,請遵循 post-installation steps 以確保 docker 可以在沒有 sudo 的情況下運行。
Install nvidia-container-toolkit 。
您必須有一個 NGC 帳戶和一個與您的帳戶關聯的 API 密鑰。
下載數據集
從 Google 驅動器文件夾 (筆記本中也提供了鏈接)下載數據集,其中包含螺釘合成圖像和真實圖像的所有 zip 文件。
● synthetic_dataset_without_complex_phase1.zip ● synthetic_dataset_with_complex_phase2.zip ● real_dataset.zip
將synthetic_dataset_without_complex_phase1.zip
和real_dataset.zip
中的數據集提取到/data
目錄中。數據集目錄結構應如下所示:
├── real_test ├── real_train ├── synthetic_test └── synthetic_train
TAO Toolkit 支持 KITTI 格式的數據集,并且提供的數據集已經是該格式。要進一步驗證,請參閱 KITTI 文件格式 。
環境設置
使用virtualenvwrapper創建新的虛擬環境。有關更多信息,請參閱 Python 指南中的 Virtual Environments 。
按照說明安裝virtualenv和virtualenvwrapper后,設置 Python 版本:
echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.bashrc source ~/.bashrc mkvirtualenv launcher -p /usr/bin/python3
克隆存儲庫:
git clone https://github.com/Lexset/NVIDIA-TAO-Toolkit---Synthetic-Data.git cd tao-screws
要安裝環境所需的依賴項,請安裝需求。 txt 文件:
pip3 install -r requirements.txt
啟動 Jupyter 筆記本:
cd faster_rcnn jupyter notebook --ip 0.0.0.0 --allow-root --port 8888
設置 TAO 工具包裝載
筆記本有一個生成~/.tao_mounts.json文件的腳本。
{ "Mounts": [ { "source": "ABSOLUTE_PATH_TO_PROJECT_NETWORK_DIRECTORY", "destination": "/workspace/tao-experiments" }, { "source": "ABSOLUTE_PATH_TO_PROJECT_NETWORK_SPECS_DIRECTORY", "destination": "/workspace/tao-experiments/faster_rcnn/specs" } ], "Envs": [ { "variable": "CUDA_VISIBLE_DEVICES", "value": "0" } ], "DockerOptions": { "shm_size": "16G", "ulimits": { "memlock": -1, "stack": 67108864 }, "user": "1001:1001" } }
代碼示例在 Ubuntu 主目錄中生成全局~/.tao_mounts.json文件。
將數據集處理為 TFRecords
下載數據集并將其放入數據目錄后,下一步是將 KITTI 文件轉換為 NVIDIA TAO 工具包使用的 TFRecord 格式。為合成數據集和真實數據集生成 TFrecords 。 Jupyter 筆記本中的此代碼示例生成 TFrecords :
#KITTI trainval !tao faster_rcnn dataset_convert --gpu_index $GPU_INDEX -d $SPECS_DIR/faster_rcnn_tfrecords_kitti_synth_train.txt \ -o $DATA_DOWNLOAD_DIR/tfrecords/kitti_synthetic_train/kitti_synthetic_train !tao faster_rcnn dataset_convert --gpu_index $GPU_INDEX -d $SPECS_DIR/faster_rcnn_tfrecords_kitti_synth_test.txt \ -o $DATA_DOWNLOAD_DIR/tfrecords/kitti_synthetic_test/kitti_synthetic_test
筆記本中的下一個代碼示例對真實數據集應用了相同的轉換。
下載 ResNet-18 卷積主干網
在本地設置 NGC CLI 時,下載卷積主干網 ResNet-18 。
!ngc registry model list nvidia/tao/pretrained_object_detection*
使用合成數據運行基準測試
以下命令開始對合成數據進行訓練,所有日志都保存在out_resnet18_synth_amp16.log文件中。要查看日志,請打開文件,如果文件已打開,請刷新選項卡。
!tao faster_rcnn train --gpu_index $GPU_INDEX -e $SPECS_DIR/default_spec_resnet18_synth_train.txt --use_amp > out_resnet18_synth_amp16.log
或者,您可以使用tail
命令查看日志的最后幾行。
!tail -f ./out_resnet18_synth_amp16.log
在合成數據集上完成訓練后,可以使用以下命令在 10% 合成驗證數據集上評估合成訓練模型:
!tao faster_rcnn evaluate --gpu_index $GPU_INDEX -e $SPECS_DIR/default_spec_resnet18_synth_train.txt
您可以看到如下結果。
mAP@0.5 = 0.9986
您還可以看到每個類的各個地圖分數。
用真實數據微調綜合訓練模型
現在,使用來自合成訓練的最佳訓練權重,并對真實螺釘數據集的 10% 進行微調。real_train中的/train文件夾已處于 10% 的拆分狀態,您可以使用以下命令開始微調:
!tao faster_rcnn train --gpu_index $GPU_INDEX -e $SPECS_DIR/default_spec_resnet18_real_train.txt --use_amp > out_resnet18_synth_fine_tune_10_amp16.log
結果:實際數據改善了 10%
每個歷元的地圖分數如下所示:
mAP@0.5 = 0.9408 mAP@0.5 = 0.9714 mAP@0.5 = 0.9732 mAP@0.5 = 0.9781 mAP@0.5 = 0.9745 mAP@0.5 = 0.9780 mAP@0.5 = 0.9815 mAP@0.5 = 0.9820 mAP@0.5 = 0.9803 mAP@0.5 = 0.9796 mAP@0.5 = 0.9810 mAP@0.5 = 0.9817
只需對真實螺釘數據集的 10% 進行微調,即可快速改善結果, mAP 得分超過 98% 。從合成數據集中學習到的功能在微調過程中對實際螺釘數據集的 10% 有所幫助。
在合成螺釘驗證數據集中添加復雜背景
為了進一步驗證綜合訓練模型,我們向復雜背景數據集中添加了 300 多幅圖像。由于初始合成數據集不是在復雜背景下獲取的,因此平均精度顯著下降。
就像真實世界一樣,隨著用例變得更加復雜,準確性也會受到影響。當對包含更復雜或敵對背景的圖像進行驗證時,地圖得分從 98% 左右下降到 83.5% 。
重新訓練具有復雜背景的合成數據集
這就是合成數據真正閃耀的地方。為了減少在復雜圖像上驗證時地圖的丟失,我生成了具有更復雜背景的其他圖像,以添加到訓練數據中。我只是調整了背景,以便新的訓練數據集在幾秒鐘內就準備好了。新數據集推出后,性能提高了令人難以置信的 10-12% ,而無需進行其他更改。
具有復雜背景的數據集位于前面提到的 zip 文件synthetic_dataset_with_complex.zip中。提取此文件并用相同的名稱替換/ data 目錄中的文件夾,以獲得具有復雜背景的更新合成數據集。
Average Mean Precision: mAP= 94.97% Increase in mAP score: 11.47%
具體來說,在幾分鐘的工作后,復雜背景系統的準確率提高了 11.47% ,達到 94.97% 。
結論
結果表明,使用合成數據和 TAO 工具包進行迭代是多么有效和快速。使用 Lexset’s Seahaven ,您可以在幾分鐘內生成新數據,并使用它解決引入復雜背景時遇到的準確性問題。
合成數據集的重要性現在已經很清楚了,因為針對真實螺釘數據的 90% 驗證數據集上的微調模型的性能非常好。當實際或真實數據較少時,使用合成數據集進行初始特征學習。合成數據集可以節省大量時間和成本,同時產生優異的結果。
我相信這是計算機視覺發展的未來,數據生成與模型迭代同步進行。這將為用戶提供更大的控制,并使您能夠構建世界上最好的系統。
關于作者
Christian Gartland 是 Lexset 的軟件工程師,他在 Lexset 生產合成數據集,并為公司的合成數據生成平臺 Seahaven 開發新功能。在加入 Lexset 之前,他為建筑、工程和建筑行業開發了軟件。他擁有倫斯勒理工學院建筑學士學位。
審核編輯:郭婷
-
NVIDIA
+關注
關注
14文章
5026瀏覽量
103280 -
gpu
+關注
關注
28文章
4754瀏覽量
129083 -
python
+關注
關注
56文章
4800瀏覽量
84829
發布評論請先 登錄
相關推薦
評論