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