# **2021/07/22&23**
[[15 Re-training SSD-Mobilenet]](https://github.com/dusty-nv/jetson-inference/blob/master/docs/pytorch-ssd.md)
###### tags: `藍柏婷`
###### tags: `2021/07/22`
### **==== 重新訓練SSD-Mobilenet (Re-training SSD-Mobilenet) ====**
>*Next, we'll train our own SSD-Mobilenet object detection model using PyTorch and the Open Images dataset. SSD-Mobilenet is a popular network architecture for realtime object detection on mobile and embedded devices that combines the SSD-300 Single-Shot MultiBox Detector with a Mobilenet backbone.
接下來,我們將使用 PyTorch 和 Open Images 數據集訓練我們自己的 SSD-Mobilenet 對象檢測模型。 SSD-Mobilenet 是一種流行的網絡架構,用於移動和嵌入式設備上的實時對象檢測,它將 SSD-300 單次多盒檢測器與 Mobilenet 骨幹網相結合。
--- by dusty-nv on jetson-inference*

#### **== 設置 Setup ==**
:::info
**首先確保您的Jetson和PyTorch上安裝了JetPack 4.4或更高版本,用於Python 3.6**
:::
:::info
**我們沒有使用 docker container**
:::
# you only need to run these if you aren't using the container
$ cd jetson-inference/python/training/detection/ssd
$ wget https://nvidia.box.com/shared/static/djf5w54rjvpqocsiztzaandq1m3avr7c.pth -O models/mobilenet-v1-ssd-mp-0_675.pth
$ pip3 install -v -r requirements.txt
#### **== 途中遇到問題 ==**
:::warning
```
$ cd jetson-inference/python/training/detection/ssd
$ wget https://nvidia.box.com/shared/static/djf5w54rjvpqocsiztzaandq1m3avr7c.pth -O models/mobilenet-v1-ssd-mp-0_675.pth
```
>-> 可以運行
```
$ pip3 install -v -r requirements.txt
```
>-> 一開始回顯示找不到`requirements.txt`
>
>-> 我將`requirements.txt`貼至`jetson-inference/python/training/detection/ssd`下
>
>-> 它顯示<font color="red">`Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-build-Fv1UbD/torch/`</font>
>>
>>*I actually managed to resolve this issue myself, I traced the problem to a glitch with the Jetpack image after experiencing various other issues. I reformatted the SD card, flashed the Jetpack image and then rebuilt the jetson-inference project again and all the issues were resolved.*
>>*實際上,我自己設法解決了這個問題,在遇到各種其他問題後,我將問題追溯到 Jetpack 映像的故障。我重新格式化了 SD 卡,刷新了 Jetpack 映像,然後再次重建了 jetson-inference 項目,所有問題都解決了。*
>>--- by https://forums.developer.nvidia.com/t/issues-installing-pytorch-on-jetson-nano-running-jetpack-4-2/119972
:::
:::info
因為`jetson-inference/python/training/detection/ssd`中沒有任何檔案,所以要到 https://github.com/dusty-nv/pytorch-ssd (點`jetson-inference/Re-training SSD-Mobilenet`那頁,`設置 Setup`下的`jetson-inference/python/training/detection/ssd`連結)中,點`Code`、`Download ZIP`,下載完壓縮檔(ZIP)後,右鍵`解壓縮(Open With Archive Manager)`、`Extract`,選`jetson-inference/python/training/detection/ssd`,將所有檔案存到`ssd`中。
:::
#### **== 重新設置 Re-setup ==**
$ cd jetson-inference/python/training/detection/ssd
$ wget https://nvidia.box.com/shared/static/djf5w54rjvpqocsiztzaandq1m3avr7c.pth -O models/mobilenet-v1-ssd-mp-0_675.pth
$ pip3 install -v -r requirements.txt
>```
>$ cd jetson-inference/python/training/detection/ssd
>```
>進入`jetson-inference/python/training/detection/ssd`。
>
>```
>$ mkdir models
>```
>在`ssd`中創建資料夾`models`。
>
>```
>$ wget https://nvidia.box.com/shared/static/djf5w54rjvpqocsiztzaandq1m3avr7c.pth -O models/mobilenet-v1-ssd-mp-0_675.pth`
>```
>在 https://nvidia.box.com/shared/static/djf5w54rjvpqocsiztzaandq1m3avr7c.pth 中,下載`mobilenet-v1-ssd-mp-0_675.pth`,存進`models`資料夾中。
>
>```
>$ pip3 install -v -r requirements.txt
>```
>註:`$ pip3 install -v -r requirements.txt`要跑個20多分鐘,請耐心等候!
---
#### **== 下載數據 Downloading the Data ==**
$ python3 open_images_downloader.py --class-names " Apple,Orange,Banana,Strawberry,Grape,Pear,Pineapple,Watermelon " --data=data/fruit
>註:`$ python3 open_images_downloader.py --class-names " Apple,Orange,Banana,Strawberry,Grape,Pear,Pineapple,Watermelon " --data=data/fruit`要跑很久,請耐心等候!
#### **== 途中遇到問題 ==**
:::warning
很不幸的,我又遇到問題了!
```javascript
iamai2021@iamai2021:~/Desktop/scifair/image_classification_demo/jetson-inference/python/training/detection/ssd$ python3 open_images_downloader.py --class-names "Apple,Orange,Banana,Strawberry,Grape,Pear,Pineapple,Watermelon" --data=data/fruit
2021-07-22 20:02:48 - Requested 8 classes, found 8 classes
2021-07-22 20:02:48 - Read annotation file data/fruit/train-annotations-bbox.csv
2021-07-22 20:15:52 - Available train images: 5145
2021-07-22 20:15:52 - Available train boxes: 23539
Traceback (most recent call last):
File "open_images_downloader.py", line 138, in <module>
os.makedirs(image_dir, exist_ok=True)
File "/usr/lib/python3.6/os.py", line 220, in makedirs
mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: 'data/fruit/validation'
```
大致上就是我沒有`data`的權限。
:::
:::info
(我查看了`data`的內容,發現它的擁有者是 "root",也就是說我最初是有用過`docker container`的。所以接下來我如果要使用到`ssd/data`的話,就要進入`docker container`。)
:::
#### **== 進入docker container ==**
###### tags: `2021/07/23`
$ docker/run.sh
輸入密碼後,出現`#`代表進入`docker container`了。
```javascript
iamai2021@iamai2021:~/Desktop/scifair/image_classification_demo/jetson-inference$ docker/run.sh
reading L4T version from /etc/nv_tegra_release
L4T BSP Version: L4T R32.5.1
[sudo] password for iamai2021:
size of data/networks: 696577370 bytes
CONTAINER: dustynv/jetson-inference:r32.5.0
DATA_VOLUME: --volume /home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/data:/jetson-inference/data --volume /home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/python/training/classification/data:/jetson-inference/python/training/classification/data --volume /home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/python/training/classification/models:/jetson-inference/python/training/classification/models --volume /home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/python/training/detection/ssd/data:/jetson-inference/python/training/detection/ssd/data --volume /home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/python/training/detection/ssd/models:/jetson-inference/python/training/detection/ssd/models
USER_VOLUME:
USER_COMMAND:
V4L2_DEVICES: --device /dev/video0
localuser:root being added to access control list
```
#### **== 重新下載數據 Downloading the Data Again ==**
# python3 open_images_downloader.py --class-names " Apple,Orange,Banana,Strawberry,Grape,Pear,Pineapple,Watermelon " --data=data/fruit
>註:`# python3 open_images_downloader.py --class-names " Apple,Orange,Banana,Strawberry,Grape,Pear,Pineapple,Watermelon " --data=data/fruit`要跑很久,請耐心等候!
>>註:下載完後可以直接關閉 stell,再另開一個新的 stell。
>**`--data=<PATH>`:改變下載目錄**
>(預設:jetson->inference/python/training/detection/ssd/data)
>**`--stats-only`:顯示該類別圖像數量**
>
>ex.
>```javascript
>...
>2020-07-09 16:18:06 - Total available images: 6360
>2020-07-09 16:18:06 - Total available boxes: 27188
>
>-------------------------------------
> 'train' set statistics
>-------------------------------------
> Image count: 5145
> Bounding box count: 23539
> Bounding box distribution:
> Strawberry: 7553/23539 = 0.32
> Orange: 6186/23539 = 0.26
> Apple: 3622/23539 = 0.15
> Grape: 2560/23539 = 0.11
> Banana: 1574/23539 = 0.07
> Pear: 757/23539 = 0.03
> Watermelon: 753/23539 = 0.03
> Pineapple: 534/23539 = 0.02
>
>...
>
>-------------------------------------
> Overall statistics
>-------------------------------------
> Image count: 6360
> Bounding box count: 27188
>```
>**`--max-images=<number>`:將總數據量限制為指定數量的圖像,同時保持每個類別的圖像分佈與原始數據量大致相同。如果一個類別的圖像比另一個類別多,則比例將大致保持不變。**
>ex.
>```javascript
>$ python3 open_images_downloader.py --max-images=2500 --class-names "Apple,Orange,Banana,Strawberry,Grape,Pear,Pineapple,Watermelon" --data=data/fruit
>```
>**`--max-annotations-per-class=<number>`:將每個類別限制指定數量上限,如果一個類別的可用數量少於該數量,則將使用它的所有數據 --- 如果原數據在各類別之間分佈不平衡,這將非常有用。**
跑出之結果 ->
```javascript
root@iamai2021:/jetson-inference# cd python/training/detection/ssd
root@iamai2021:/jetson-inference/python/training/detection/ssd# python3 open_images_downloader.py --max-images=1000 --class-names "Apple,Orange,Banana,Strawberry,Grape,Pear,Pineapple,Watermelon" --data=data/fruit
2021-07-23 07:10:42 - Requested 8 classes, found 8 classes
2021-07-23 07:10:42 - Read annotation file data/fruit/train-annotations-bbox.csv
2021-07-23 07:23:27 - Available train images: 5145
2021-07-23 07:23:27 - Available train boxes: 23539
2021-07-23 07:23:27 - Download https://storage.googleapis.com/openimages/2018_04/validation/validation-annotations-bbox.csv.
2021-07-23 07:23:31 - Read annotation file data/fruit/validation-annotations-bbox.csv
2021-07-23 07:23:33 - Available validation images: 285
2021-07-23 07:23:33 - Available validation boxes: 825
2021-07-23 07:23:33 - Download https://storage.googleapis.com/openimages/2018_04/test/test-annotations-bbox.csv.
2021-07-23 07:23:38 - Read annotation file data/fruit/test-annotations-bbox.csv
2021-07-23 07:23:41 - Available test images: 930
2021-07-23 07:23:41 - Available test boxes: 2824
2021-07-23 07:23:41 - Total available images: 6360
2021-07-23 07:23:41 - Total available boxes: 27188
2021-07-23 07:23:41 - Limiting train dataset to: 808 images (3763 boxes)
2021-07-23 07:23:41 - Limiting validation dataset to: 44 images (163 boxes)
2021-07-23 07:23:41 - Limiting test dataset to: 146 images (340 boxes)
-------------------------------------
'train' set statistics
-------------------------------------
Image count: 808
Bounding box count: 3763
Bounding box distribution:
Strawberry: 1338/3763 = 0.36
Orange: 987/3763 = 0.26
Apple: 510/3763 = 0.14
Grape: 427/3763 = 0.11
Banana: 248/3763 = 0.07
Watermelon: 111/3763 = 0.03
Pear: 75/3763 = 0.02
Pineapple: 67/3763 = 0.02
-------------------------------------
'validation' set statistics
-------------------------------------
Image count: 44
Bounding box count: 163
Bounding box distribution:
Strawberry: 42/163 = 0.26
Grape: 36/163 = 0.22
Orange: 33/163 = 0.20
Apple: 32/163 = 0.20
Watermelon: 7/163 = 0.04
Banana: 6/163 = 0.04
Pineapple: 4/163 = 0.02
Pear: 3/163 = 0.02
-------------------------------------
'test' set statistics
-------------------------------------
Image count: 146
Bounding box count: 340
Bounding box distribution:
Orange: 103/340 = 0.30
Grape: 92/340 = 0.27
Strawberry: 56/340 = 0.16
Apple: 26/340 = 0.08
Watermelon: 25/340 = 0.07
Banana: 17/340 = 0.05
Pineapple: 17/340 = 0.05
Pear: 4/340 = 0.01
-------------------------------------
Overall statistics
-------------------------------------
Image count: 998
Bounding box count: 4266
2021-07-23 07:23:42 - Saving 'train' data to data/fruit/sub-train-annotations-bbox.csv.
2021-07-23 07:23:42 - Saving 'validation' data to data/fruit/sub-validation-annotations-bbox.csv.
2021-07-23 07:23:42 - Saving 'test' data to data/fruit/sub-test-annotations-bbox.csv.
2021-07-23 07:23:42 - Starting to download 998 images.
2021-07-23 07:23:56 - Downloaded 100 images.
2021-07-23 07:24:07 - Downloaded 200 images.
2021-07-23 07:24:21 - Downloaded 300 images.
2021-07-23 07:24:39 - Downloaded 400 images.
2021-07-23 07:24:54 - Downloaded 500 images.
2021-07-23 07:25:07 - Downloaded 600 images.
2021-07-23 07:25:22 - Downloaded 700 images.
2021-07-23 07:25:37 - Downloaded 800 images.
2021-07-23 07:25:50 - Downloaded 900 images.
2021-07-23 07:26:22 - Task Done.
root@iamai2021:/jetson-inference/python/training/detection/ssd#
```
---
#### **== 訓練 SSD-Mobilenet 模型 Training the SSD-Mobilenet Model ==**
$ python3 train_ssd.py --data=data/fruit --model-dir=models/fruit --batch-size=4 --epochs=5
| Argument 引數 | Default 預設 | Description 描述 |
| -------- | -------- | -------- |
| `--data` | data/ | 數據存的位置 |
| `--model-dir` | models/ | 輸出訓練模型"檢查點"的目錄 |
| `--resume` | None | 從現有"檢查點"恢復訓練的路徑 |
| `--batch-size` | 4 | 嘗試根據可用內存增加 |
| `--epochs` | 30 | 最多 100 個,會增加訓練時間 |
| `--workers` | 2 | 數據加載器線程數(0 = 禁用多線程)|
:::info
注意:如果在訓練期間內存不足或進程“終止”,請嘗試`Mounting SWAP`和`Disabling the Desktop GUI`(https://github.com/dusty-nv/jetson-inference/blob/master/docs/pytorch-transfer-learning.md#mounting-swap)。
為了節省內存,您還可以減少`--batch-size`(默認4)和`--workers`(默認2)
:::
:::danger
千萬不要使用 `禁用桌面 GUI (Disabling the Desktop GUI)`
:::
>**訓練表現 Training Performance**
>下面是 SSD-Mobilenet 訓練性能,以幫助估計訓練所需的時間:
>| | Images/sec |Time per epoch*|
>| ------- | -------- | ------- |
>| Nano | 4.77 | 17 min 55 sec |
>
>註:fruits dataset (5145 training images, batch size=4)
>註:18 min x 5 epochs = 90 min(不可考,我家電腦慢的可憐)
>註:網站有 100 epochs 下載包 (存進`/ssd/models/fruit`裡面)https://nvidia.box.com/shared/static/gq0zlf0g2r258g3ldabl9o7vch18cxmi.gz
跑出之結果 ->
```javascript
iamai2021@iamai2021:~/Desktop/scifair/image_classification_demo/jetson-inference/python/training/detection/ssd$ python3 train_ssd.py --data=data/fruit --model-dir=models/fruit --batch-size=4 --epochs=5
2021-07-23 17:51:18 - Using CUDA...
2021-07-23 17:51:18 - Namespace(balance_data=False, base_net=None, base_net_lr=0.001, batch_size=4, checkpoint_folder='models/fruit', dataset_type='open_images', datasets=['data/fruit'], debug_steps=10, extra_layers_lr=None, freeze_base_net=False, freeze_net=False, gamma=0.1, lr=0.01, mb2_width_mult=1.0, milestones='80,100', momentum=0.9, net='mb1-ssd', num_epochs=5, num_workers=2, pretrained_ssd='models/mobilenet-v1-ssd-mp-0_675.pth', resume=None, scheduler='cosine', t_max=100, use_cuda=True, validation_epochs=1, weight_decay=0.0005)
2021-07-23 17:51:18 - Prepare training datasets.
2021-07-23 17:51:18 - loading annotations from: data/fruit/sub-train-annotations-bbox.csv
2021-07-23 17:51:18 - annotations loaded from: data/fruit/sub-train-annotations-bbox.csv
num images: 808
2021-07-23 17:51:21 - Dataset Summary:Number of Images: 808
Minimum Number of Images for a Class: -1
Label Distribution:
Apple: 510
Banana: 248
Grape: 427
Orange: 987
Pear: 75
Pineapple: 67
Strawberry: 1338
Watermelon: 111
2021-07-23 17:51:21 - Stored labels into file models/fruit/labels.txt.
2021-07-23 17:51:21 - Train dataset size: 808
2021-07-23 17:51:21 - Prepare Validation datasets.
2021-07-23 17:51:21 - loading annotations from: data/fruit/sub-test-annotations-bbox.csv
2021-07-23 17:51:21 - annotations loaded from: data/fruit/sub-test-annotations-bbox.csv
num images: 146
2021-07-23 17:51:21 - Dataset Summary:Number of Images: 146
Minimum Number of Images for a Class: -1
Label Distribution:
Apple: 26
Banana: 17
Grape: 92
Orange: 103
Pear: 4
Pineapple: 17
Strawberry: 56
Watermelon: 25
2021-07-23 17:51:21 - Validation dataset size: 146
2021-07-23 17:51:21 - Build network.
2021-07-23 17:51:21 - Init from pretrained ssd models/mobilenet-v1-ssd-mp-0_675.pth
2021-07-23 17:51:22 - Took 0.51 seconds to load the model.
2021-07-23 17:52:42 - Learning rate: 0.01, Base net learning rate: 0.001, Extra Layers learning rate: 0.01.
2021-07-23 17:52:42 - Uses CosineAnnealingLR scheduler.
2021-07-23 17:52:42 - Start training from epoch 0.
/home/iamai2021/.local/lib/python3.6/site-packages/torch/optim/lr_scheduler.py:123: UserWarning: Detected call of lr_scheduler.step() before optimizer.step(). In PyTorch 1.1.0 and later, you should call them in the opposite order: optimizer.step() before lr_scheduler.step(). Failure to do this will result in PyTorch skipping the first value of the learning rate schedule. See more details at https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate
"https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate", UserWarning)
/home/iamai2021/.local/lib/python3.6/site-packages/torch/nn/_reduction.py:44: UserWarning: size_average and reduce args will be deprecated, please use reduction='sum' instead.
warnings.warn(warning.format(ret))
2021-07-23 18:07:52 - Epoch: 0, Step: 10/202, Avg Loss: 13.9509, Avg Regression Loss 4.1929, Avg Classification Loss: 9.7580
2021-07-23 18:29:33 - Epoch: 0, Step: 20/202, Avg Loss: 9.2671, Avg Regression Loss 3.7125, Avg Classification Loss: 5.5546
2021-07-23 19:02:31 - Epoch: 0, Step: 30/202, Avg Loss: 8.6253, Avg Regression Loss 3.2659, Avg Classification Loss: 5.3594
```
---
#### **== 將模型轉換為 ONNX (Converting the Model to ONNX) ==**
$ python3 onnx_export.py --model-dir=models/fruit
>保存一個`ssd-mobilenet.onnx`的模型在`jetson-inference/python/training/detection/ssd/models/fruit/`下
---
#### **== 使用 TensorRT 處理圖像 Processing Images with TensorRT ==**
:::info
在jetson-inference/python/training/detection/ssd/中操作
:::
$ IMAGES=/home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/data/images
$ detectnet --model=models/fruit/ssd-mobilenet.onnx --labels=models/fruit/labels.txt \
--input-blob=input_0 --output-cvg=scores --output-bbox=boxes \
"$IMAGES/fruit_<number>.jpg" $IMAGES/test/fruit_<number>.jpg
>```
>$ IMAGES=<path-to-your-jetson-inference>/data/images # substitute your jetson-inference path here
>```
>從以下圖片可以看出`jetson-inference`的位置位於`/home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference`
>
>
>```
>$ detectnet --model=models/fruit/ssd-mobilenet.onnx --labels=models/fruit/labels.txt \
> --input-blob=input_0 --output-cvg=scores --output-bbox=boxes \
> "$IMAGES/fruit_<number>.jpg" $IMAGES/test/fruit_<number>.jpg
>```
><number>要改為0,1,2,3......等數字
跑出之結果 ->
```javascript
iamai2021@iamai2021:~/Desktop/scifair/image_classification_demo/jetson-inference/python/training/detection/ssd$ detectnet --model=models/fruit/ssd-mobilenet.onnx --labels=models/fruit/labels.txt \
--input-blob=input_0 --output-cvg=scores --output-bbox=boxes \
"$IMAGES/fruit_1.jpg" $IMAGES/test/fruit_1.jpg
[video] created imageLoader from file:///home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/data/images/fruit_1.jpg
------------------------------------------------
imageLoader video options:
------------------------------------------------
-- URI: file:///home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/data/images/fruit_1.jpg
- protocol: file
- location: /home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/data/images/fruit_1.jpg
- extension: jpg
-- deviceType: file
-- ioType: input
-- codec: unknown
-- width: 0
-- height: 0
-- frameRate: 0.000000
-- bitRate: 0
-- numBuffers: 4
-- zeroCopy: true
-- flipMethod: none
-- loop: 0
-- rtspLatency 2000
------------------------------------------------
[video] created imageWriter from file:///home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/data/images/test/fruit_1.jpg
------------------------------------------------
imageWriter video options:
------------------------------------------------
-- URI: file:///home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/data/images/test/fruit_1.jpg
- protocol: file
- location: /home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/data/images/test/fruit_1.jpg
- extension: jpg
-- deviceType: file
-- ioType: output
-- codec: unknown
-- width: 0
-- height: 0
-- frameRate: 0.000000
-- bitRate: 0
-- numBuffers: 4
-- zeroCopy: true
-- flipMethod: none
-- loop: 0
-- rtspLatency 2000
------------------------------------------------
[OpenGL] glDisplay -- X screen 0 resolution: 1920x1080
[OpenGL] glDisplay -- X window resolution: 1920x1080
[OpenGL] glDisplay -- display device initialized (1920x1080)
[video] created glDisplay from display://0
------------------------------------------------
glDisplay video options:
------------------------------------------------
-- URI: display://0
- protocol: display
- location: 0
-- deviceType: display
-- ioType: output
-- codec: raw
-- width: 1920
-- height: 1080
-- frameRate: 0.000000
-- bitRate: 0
-- numBuffers: 4
-- zeroCopy: true
-- flipMethod: none
-- loop: 0
-- rtspLatency 2000
------------------------------------------------
detectNet -- loading detection network model from:
-- prototxt NULL
-- model models/fruit/ssd-mobilenet.onnx
-- input_blob 'input_0'
-- output_cvg 'scores'
-- output_bbox 'boxes'
-- mean_pixel 0.000000
-- mean_binary NULL
-- class_labels models/fruit/labels.txt
-- threshold 0.500000
-- batch_size 1
[TRT] TensorRT version 7.1.3
[TRT] loading NVIDIA plugins...
[TRT] Registered plugin creator - ::GridAnchor_TRT version 1
[TRT] Registered plugin creator - ::NMS_TRT version 1
[TRT] Registered plugin creator - ::Reorg_TRT version 1
[TRT] Registered plugin creator - ::Region_TRT version 1
[TRT] Registered plugin creator - ::Clip_TRT version 1
[TRT] Registered plugin creator - ::LReLU_TRT version 1
[TRT] Registered plugin creator - ::PriorBox_TRT version 1
[TRT] Registered plugin creator - ::Normalize_TRT version 1
[TRT] Registered plugin creator - ::RPROI_TRT version 1
[TRT] Registered plugin creator - ::BatchedNMS_TRT version 1
[TRT] Could not register plugin creator - ::FlattenConcat_TRT version 1
[TRT] Registered plugin creator - ::CropAndResize version 1
[TRT] Registered plugin creator - ::DetectionLayer_TRT version 1
[TRT] Registered plugin creator - ::Proposal version 1
[TRT] Registered plugin creator - ::ProposalLayer_TRT version 1
[TRT] Registered plugin creator - ::PyramidROIAlign_TRT version 1
[TRT] Registered plugin creator - ::ResizeNearest_TRT version 1
[TRT] Registered plugin creator - ::Split version 1
[TRT] Registered plugin creator - ::SpecialSlice_TRT version 1
[TRT] Registered plugin creator - ::InstanceNormalization_TRT version 1
[TRT] detected model format - ONNX (extension '.onnx')
[TRT] desired precision specified for GPU: FASTEST
[TRT] requested fasted precision for device GPU without providing valid calibrator, disabling INT8
[TRT] native precisions detected for GPU: FP32, FP16
[TRT] selecting fastest native precision for GPU: FP16
[TRT] attempting to open engine cache file models/fruit/ssd-mobilenet.onnx.1.1.7103.GPU.FP16.engine
[TRT] loading network plan from engine cache... models/fruit/ssd-mobilenet.onnx.1.1.7103.GPU.FP16.engine
[TRT] device GPU, loaded models/fruit/ssd-mobilenet.onnx
[TRT] Deserialize required 16159728 microseconds.
[TRT]
[TRT] CUDA engine context initialized on device GPU:
[TRT] -- layers 107
[TRT] -- maxBatchSize 1
[TRT] -- workspace 0
[TRT] -- deviceMemory 23420416
[TRT] -- bindings 3
[TRT] binding 0
-- index 0
-- name 'input_0'
-- type FP32
-- in/out INPUT
-- # dims 4
-- dim #0 1 (SPATIAL)
-- dim #1 3 (SPATIAL)
-- dim #2 300 (SPATIAL)
-- dim #3 300 (SPATIAL)
[TRT] binding 1
-- index 1
-- name 'scores'
-- type FP32
-- in/out OUTPUT
-- # dims 3
-- dim #0 1 (SPATIAL)
-- dim #1 3000 (SPATIAL)
-- dim #2 9 (SPATIAL)
[TRT] binding 2
-- index 2
-- name 'boxes'
-- type FP32
-- in/out OUTPUT
-- # dims 3
-- dim #0 1 (SPATIAL)
-- dim #1 3000 (SPATIAL)
-- dim #2 4 (SPATIAL)
[TRT]
[TRT] binding to input 0 input_0 binding index: 0
[TRT] binding to input 0 input_0 dims (b=1 c=3 h=300 w=300) size=1080000
[TRT] binding to output 0 scores binding index: 1
[TRT] binding to output 0 scores dims (b=1 c=3000 h=9 w=1) size=108000
[TRT] binding to output 1 boxes binding index: 2
[TRT] binding to output 1 boxes dims (b=1 c=3000 h=4 w=1) size=48000
[TRT]
[TRT] device GPU, models/fruit/ssd-mobilenet.onnx initialized.
[TRT] detectNet -- number object classes: 9
[TRT] detectNet -- maximum bounding boxes: 3000
[TRT] detectNet -- loaded 9 class info entries
[TRT] detectNet -- number of object classes: 9
[image] loaded '/home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/data/images/fruit_1.jpg' (1024x683, 3 channels)
2 objects detected
detected obj 0 class #1 (Apple) confidence=0.966337
bounding box 0 (392.750000, 306.816406) (745.179688, 659.201538) w=352.429688 h=352.385132
detected obj 1 class #1 (Apple) confidence=0.875261
bounding box 1 (244.625000, 42.770874) (558.347961, 393.125183) w=313.722961 h=350.354309
[OpenGL] glDisplay -- set the window size to 1024x683
[OpenGL] creating 1024x683 texture (GL_RGB8 format, 2098176 bytes)
[cuda] registered openGL texture for interop access (1024x683, GL_RGB8, 2098176 bytes)
[image] saved '/home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/data/images/test/fruit_1.jpg' (1024x683, 3 channels)
[TRT] ------------------------------------------------
[TRT] Timing Report models/fruit/ssd-mobilenet.onnx
[TRT] ------------------------------------------------
[TRT] Pre-Process CPU 0.14365ms CUDA 3.27328ms
[TRT] Network CPU 351.21375ms CUDA 347.62515ms
[TRT] Post-Process CPU 130.86665ms CUDA 131.09120ms
[TRT] Visualize CPU 316.61752ms CUDA 316.79739ms
[TRT] Total CPU 798.84155ms CUDA 798.78699ms
[TRT] ------------------------------------------------
[TRT] note -- when processing a single image, run 'sudo jetson_clocks' before
to disable DVFS for more accurate profiling/timing measurements
[image] imageLoader -- End of Stream (EOS) has been reached, stream has been closed
detectnet: shutting down...
detectnet: shutdown complete.
```
#### **== 靜態測試圖像結果圖示 ==**
(位於`/home/iamai2021/Desktop/scifair/image_classification_demo/jetson-inference/data/images/test`中)

#### **== 運行實時攝像頭程序 Running the Live Camera Program ==**
detectnet --model=models/fruit/ssd-mobilenet.onnx --labels=models/fruit/labels.txt \
--input-blob=input_0 --output-cvg=scores --output-bbox=boxes \
/dev/video0
跑出之結果 ->
```javascript
iamai2021@iamai2021:~/Desktop/scifair/image_classification_demo/jetson-inference/python/training/detection/ssd$ detectnet --model=models/fruit/ssd-mobilenet.onnx --labels=models/fruit/labels.txt --input-blob=input_0 --output-cvg=scores --output-bbox=boxes /dev/video0
[gstreamer] initialized gstreamer, version 1.14.5.0
[gstreamer] gstCamera -- attempting to create device v4l2:///dev/video0
[gstreamer] gstCamera -- found v4l2 device: UVC Camera (046d:0825)
[gstreamer] v4l2-proplist, device.path=(string)/dev/video0, udev-probed=(boolean)false, device.api=(string)v4l2, v4l2.device.driver=(string)uvcvideo, v4l2.device.card=(string)"UVC\ Camera\ \(046d:0825\)", v4l2.device.bus_info=(string)usb-70090000.xusb-2, v4l2.device.version=(uint)264649, v4l2.device.capabilities=(uint)2216689665, v4l2.device.device_caps=(uint)69206017;
[gstreamer] gstCamera -- found 38 caps for v4l2 device /dev/video0
[gstreamer] [0] video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)960, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 15/2, 5/1 };
[gstreamer] [1] video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 15/2, 5/1 };
[gstreamer] [2] video/x-raw, format=(string)YUY2, width=(int)1184, height=(int)656, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 10/1, 5/1 };
[gstreamer] [3] video/x-raw, format=(string)YUY2, width=(int)960, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 10/1, 5/1 };
[gstreamer] [4] video/x-raw, format=(string)YUY2, width=(int)1024, height=(int)576, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 10/1, 5/1 };
[gstreamer] [5] video/x-raw, format=(string)YUY2, width=(int)960, height=(int)544, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 15/1, 10/1, 5/1 };
[gstreamer] [6] video/x-raw, format=(string)YUY2, width=(int)800, height=(int)600, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [7] video/x-raw, format=(string)YUY2, width=(int)864, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [8] video/x-raw, format=(string)YUY2, width=(int)800, height=(int)448, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [9] video/x-raw, format=(string)YUY2, width=(int)752, height=(int)416, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [10] video/x-raw, format=(string)YUY2, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [11] video/x-raw, format=(string)YUY2, width=(int)640, height=(int)360, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [12] video/x-raw, format=(string)YUY2, width=(int)544, height=(int)288, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [13] video/x-raw, format=(string)YUY2, width=(int)432, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [14] video/x-raw, format=(string)YUY2, width=(int)352, height=(int)288, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [15] video/x-raw, format=(string)YUY2, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [16] video/x-raw, format=(string)YUY2, width=(int)320, height=(int)176, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [17] video/x-raw, format=(string)YUY2, width=(int)176, height=(int)144, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [18] video/x-raw, format=(string)YUY2, width=(int)160, height=(int)120, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [19] image/jpeg, width=(int)1280, height=(int)960, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [20] image/jpeg, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [21] image/jpeg, width=(int)1184, height=(int)656, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [22] image/jpeg, width=(int)960, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [23] image/jpeg, width=(int)1024, height=(int)576, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [24] image/jpeg, width=(int)960, height=(int)544, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [25] image/jpeg, width=(int)800, height=(int)600, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [26] image/jpeg, width=(int)864, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [27] image/jpeg, width=(int)800, height=(int)448, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [28] image/jpeg, width=(int)752, height=(int)416, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [29] image/jpeg, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [30] image/jpeg, width=(int)640, height=(int)360, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [31] image/jpeg, width=(int)544, height=(int)288, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [32] image/jpeg, width=(int)432, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [33] image/jpeg, width=(int)352, height=(int)288, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [34] image/jpeg, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [35] image/jpeg, width=(int)320, height=(int)176, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [36] image/jpeg, width=(int)176, height=(int)144, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] [37] image/jpeg, width=(int)160, height=(int)120, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction){ 30/1, 25/1, 20/1, 15/1, 10/1, 5/1 };
[gstreamer] gstCamera -- selected device profile: codec=mjpeg format=unknown width=1280 height=720
[gstreamer] gstCamera pipeline string:
[gstreamer] v4l2src device=/dev/video0 ! image/jpeg, width=(int)1280, height=(int)720 ! jpegdec ! video/x-raw ! appsink name=mysink
[gstreamer] gstCamera successfully created device v4l2:///dev/video0
[video] created gstCamera from v4l2:///dev/video0
------------------------------------------------
gstCamera video options:
------------------------------------------------
-- URI: v4l2:///dev/video0
- protocol: v4l2
- location: /dev/video0
-- deviceType: v4l2
-- ioType: input
-- codec: mjpeg
-- width: 1280
-- height: 720
-- frameRate: 30.000000
-- bitRate: 0
-- numBuffers: 4
-- zeroCopy: true
-- flipMethod: none
-- loop: 0
-- rtspLatency 2000
------------------------------------------------
[OpenGL] glDisplay -- X screen 0 resolution: 1920x1080
[OpenGL] glDisplay -- X window resolution: 1920x1080
[OpenGL] glDisplay -- display device initialized (1920x1080)
[video] created glDisplay from display://0
------------------------------------------------
glDisplay video options:
------------------------------------------------
-- URI: display://0
- protocol: display
- location: 0
-- deviceType: display
-- ioType: output
-- codec: raw
-- width: 1920
-- height: 1080
-- frameRate: 0.000000
-- bitRate: 0
-- numBuffers: 4
-- zeroCopy: true
-- flipMethod: none
-- loop: 0
-- rtspLatency 2000
------------------------------------------------
detectNet -- loading detection network model from:
-- prototxt NULL
-- model models/fruit/ssd-mobilenet.onnx
-- input_blob 'input_0'
-- output_cvg 'scores'
-- output_bbox 'boxes'
-- mean_pixel 0.000000
-- mean_binary NULL
-- class_labels models/fruit/labels.txt
-- threshold 0.500000
-- batch_size 1
[TRT] TensorRT version 7.1.3
[TRT] loading NVIDIA plugins...
[TRT] Registered plugin creator - ::GridAnchor_TRT version 1
[TRT] Registered plugin creator - ::NMS_TRT version 1
[TRT] Registered plugin creator - ::Reorg_TRT version 1
[TRT] Registered plugin creator - ::Region_TRT version 1
[TRT] Registered plugin creator - ::Clip_TRT version 1
[TRT] Registered plugin creator - ::LReLU_TRT version 1
[TRT] Registered plugin creator - ::PriorBox_TRT version 1
[TRT] Registered plugin creator - ::Normalize_TRT version 1
[TRT] Registered plugin creator - ::RPROI_TRT version 1
[TRT] Registered plugin creator - ::BatchedNMS_TRT version 1
[TRT] Could not register plugin creator - ::FlattenConcat_TRT version 1
[TRT] Registered plugin creator - ::CropAndResize version 1
[TRT] Registered plugin creator - ::DetectionLayer_TRT version 1
[TRT] Registered plugin creator - ::Proposal version 1
[TRT] Registered plugin creator - ::ProposalLayer_TRT version 1
[TRT] Registered plugin creator - ::PyramidROIAlign_TRT version 1
[TRT] Registered plugin creator - ::ResizeNearest_TRT version 1
[TRT] Registered plugin creator - ::Split version 1
[TRT] Registered plugin creator - ::SpecialSlice_TRT version 1
[TRT] Registered plugin creator - ::InstanceNormalization_TRT version 1
[TRT] detected model format - ONNX (extension '.onnx')
[TRT] desired precision specified for GPU: FASTEST
[TRT] requested fasted precision for device GPU without providing valid calibrator, disabling INT8
[TRT] native precisions detected for GPU: FP32, FP16
[TRT] selecting fastest native precision for GPU: FP16
[TRT] attempting to open engine cache file models/fruit/ssd-mobilenet.onnx.1.1.7103.GPU.FP16.engine
[TRT] loading network plan from engine cache... models/fruit/ssd-mobilenet.onnx.1.1.7103.GPU.FP16.engine
[TRT] device GPU, loaded models/fruit/ssd-mobilenet.onnx
[TRT] Deserialize required 34499541 microseconds.
[TRT]
[TRT] CUDA engine context initialized on device GPU:
[TRT] -- layers 107
[TRT] -- maxBatchSize 1
[TRT] -- workspace 0
[TRT] -- deviceMemory 23420416
[TRT] -- bindings 3
[TRT] binding 0
-- index 0
-- name 'input_0'
-- type FP32
-- in/out INPUT
-- # dims 4
-- dim #0 1 (SPATIAL)
-- dim #1 3 (SPATIAL)
-- dim #2 300 (SPATIAL)
-- dim #3 300 (SPATIAL)
[TRT] binding 1
-- index 1
-- name 'scores'
-- type FP32
-- in/out OUTPUT
-- # dims 3
-- dim #0 1 (SPATIAL)
-- dim #1 3000 (SPATIAL)
-- dim #2 9 (SPATIAL)
[TRT] binding 2
-- index 2
-- name 'boxes'
-- type FP32
-- in/out OUTPUT
-- # dims 3
-- dim #0 1 (SPATIAL)
-- dim #1 3000 (SPATIAL)
-- dim #2 4 (SPATIAL)
[TRT]
[TRT] binding to input 0 input_0 binding index: 0
[TRT] binding to input 0 input_0 dims (b=1 c=3 h=300 w=300) size=1080000
[TRT] binding to output 0 scores binding index: 1
[TRT] binding to output 0 scores dims (b=1 c=3000 h=9 w=1) size=108000
[TRT] binding to output 1 boxes binding index: 2
[TRT] binding to output 1 boxes dims (b=1 c=3000 h=4 w=1) size=48000
[TRT]
[TRT] device GPU, models/fruit/ssd-mobilenet.onnx initialized.
[TRT] detectNet -- number object classes: 9
[TRT] detectNet -- maximum bounding boxes: 3000
[TRT] detectNet -- loaded 9 class info entries
[TRT] detectNet -- number of object classes: 9
[gstreamer] opening gstCamera for streaming, transitioning pipeline to GST_STATE_PLAYING
[gstreamer] gstreamer changed state from NULL to READY ==> mysink
[gstreamer] gstreamer changed state from NULL to READY ==> capsfilter1
[gstreamer] gstreamer changed state from NULL to READY ==> jpegdec0
[gstreamer] gstreamer changed state from NULL to READY ==> capsfilter0
[gstreamer] gstreamer changed state from NULL to READY ==> v4l2src0
[gstreamer] gstreamer changed state from NULL to READY ==> pipeline0
[gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter1
[gstreamer] gstreamer changed state from READY to PAUSED ==> jpegdec0
[gstreamer] gstreamer changed state from READY to PAUSED ==> capsfilter0
[gstreamer] gstreamer stream status CREATE ==> src
[gstreamer] gstreamer changed state from READY to PAUSED ==> v4l2src0
[gstreamer] gstreamer changed state from READY to PAUSED ==> pipeline0
[gstreamer] gstreamer message new-clock ==> pipeline0
[gstreamer] gstreamer stream status ENTER ==> src
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter1
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> jpegdec0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> capsfilter0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> v4l2src0
[gstreamer] gstreamer message stream-start ==> pipeline0
detectnet: failed to capture video frame
detectnet: failed to capture video frame
detectnet: failed to capture video frame
[gstreamer] gstCamera -- onPreroll
[gstreamer] gstCamera -- map buffer size was less than max size (1382400 vs 1382407)
[gstreamer] gstCamera recieve caps: video/x-raw, format=(string)I420, width=(int)1280, height=(int)720, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)1:4:0:0, framerate=(fraction)30/1
[gstreamer] gstCamera -- recieved first frame, codec=mjpeg format=i420 width=1280 height=720 size=1382407
RingBuffer -- allocated 4 buffers (1382407 bytes each, 5529628 bytes total)
[gstreamer] gstreamer changed state from READY to PAUSED ==> mysink
[gstreamer] gstreamer message async-done ==> pipeline0
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> mysink
[gstreamer] gstreamer changed state from PAUSED to PLAYING ==> pipeline0
RingBuffer -- allocated 4 buffers (2764800 bytes each, 11059200 bytes total)
[gstreamer] gstreamer message qos ==> v4l2src0
[OpenGL] glDisplay -- set the window size to 1280x720
[OpenGL] creating 1280x720 texture (GL_RGB8 format, 2764800 bytes)
[cuda] registered openGL texture for interop access (1280x720, GL_RGB8, 2764800 bytes)
[TRT] ------------------------------------------------
[TRT] Timing Report models/fruit/ssd-mobilenet.onnx
[TRT] ------------------------------------------------
[TRT] Pre-Process CPU 139.35304ms CUDA 141.23817ms
[TRT] Network CPU 388.54294ms CUDA 386.25436ms
[TRT] Post-Process CPU 3.97593ms CUDA 4.20906ms
[TRT] Total CPU 531.87195ms CUDA 531.70160ms
[TRT] ------------------------------------------------
[TRT] note -- when processing a single image, run 'sudo jetson_clocks' before
to disable DVFS for more accurate profiling/timing measurements
[TRT] ------------------------------------------------
[TRT] Timing Report models/fruit/ssd-mobilenet.onnx
[TRT] ------------------------------------------------
[TRT] Pre-Process CPU 0.05547ms CUDA 1.56542ms
[TRT] Network CPU 67.45556ms CUDA 54.54016ms
[TRT] Post-Process CPU 3.96697ms CUDA 4.17838ms
[TRT] Total CPU 71.47800ms CUDA 60.28396ms
[TRT] ------------------------------------------------
...
...
[TRT] ------------------------------------------------
[TRT] Timing Report models/fruit/ssd-mobilenet.onnx
[TRT] ------------------------------------------------
[TRT] Pre-Process CPU 0.05912ms CUDA 2.62240ms
[TRT] Network CPU 40.36085ms CUDA 27.54724ms
[TRT] Post-Process CPU 4.40839ms CUDA 4.45115ms
[TRT] Total CPU 44.82835ms CUDA 34.62078ms
[TRT] ------------------------------------------------
[OpenGL] glDisplay -- the window has been closed
[TRT] ------------------------------------------------
[TRT] Timing Report models/fruit/ssd-mobilenet.onnx
[TRT] ------------------------------------------------
[TRT] Pre-Process CPU 0.09860ms CUDA 1.17719ms
[TRT] Network CPU 39.76318ms CUDA 28.97302ms
[TRT] Post-Process CPU 4.35792ms CUDA 4.40286ms
[TRT] Total CPU 44.21970ms CUDA 34.55307ms
[TRT] ------------------------------------------------
detectnet: shutting down...
[gstreamer] gstCamera -- stopping pipeline, transitioning to GST_STATE_NULL
[gstreamer] gstCamera -- pipeline stopped
detectnet: shutdown complete.
iamai2021@iamai2021:~/Desktop/scifair/image_classification_demo/jetson-inference/python/training/detection/ssd$
```
#### **== 實時攝像頭結果圖示 ==**

(看來畫的很逼真呀!!!看來Jetson Nano也認同呢!)

(哈哈!這也行!)

(看來好吃的波羅蜜 美洲沒有...)