Classifying Images with ImageNet

一、ImageNet

有關ImageNet,以下是維基百科的說明

ImageNet项目是一个大型视觉数据库,用于视觉目标识别软件研究。该项目已手动注释了1400多万张图像[1][2],以指出图片中的对象,并在至少100万张图像中提供了边框[3]。ImageNet包含2万多个典型类别[2],例如“气球”或“草莓”,每一类包含数百张图像[4]。尽管实际图像不归ImageNet所有,但可以直接从ImageNet免费获得标注的第三方图像URL[5]。2010年以来,ImageNet项目每年举办一次软件竞赛,即ImageNet大规模视觉识别挑战赛(ILSVRC)。挑战赛使用1000个“整理”后的非重叠类[6],软件程序比赛正确分类和检测目标及场景。 

資料來源:https://zh.wikipedia.org/wiki/ImageNet

將Nvidia網站圖像分類使用ImageNet所分享的模型實作

學習資料來源 https://github.com/dusty-nv/jetson-inference/blob/master/docs/imagenet-console-2.md

目前有很多深度學的神經網路是可以取的被使用的,包括辨識,檢測/定位和語義分析,目前最常被拿來學習的是影像辨識,尤其是 ImageNet已經有許多被訓練完非常精確的模型,也就是為什麼Nvidia直接在入門體驗上使用這個模型。

Nvidia提供了兩個範例程式碼來作為啟動ImageNet模型辨識的方式

分別是C++與Python兩種

這兩個範例可以做適度的修改,有趣的是可以提供多種影像的來源方式(包含介面與通訊協定)達7種之多,輸出也有5種,其實已經包山包海了。

請參閱Camera Streaming and Multimedia

 https://github.com/dusty-nv/jetson-inference/blob/master/docs/aux-streaming.md

二、開始吧

 $ cd jetson-inference

   切換到jetson-inference目錄

$ docker/run.sh

   執行docker container

$ cd build/aarch64/bin/

   切換到這個目錄喔,可以翻閱前面的其他文章

   不然會出現 bash: ./imagenet.py: No such file or directory

預設提供了兩隻程式,我選擇python的

# C++

$ ./imagenet images/orange_0.jpg images/test/output_0.jpg     # (default network is googlenet)

# Python

$ ./imagenet.py images/orange_0.jpg images/test/output_0.jpg  # (default network is googlenet)

執行完畢

請到指定目錄檢視

有96.68%像橘子喔

來測試車子的影像辨識吧!

下載影片網址 https://drive.google.com/file/d/1Pu8J-2ZJLdJzV4rT_PVnYqaDH1CJMTKp/view?usp=sharing

將下載的影片搬到 jetson-inference/data/images

處理影片

如果是在本機端執行阿,就可以馬上看到辨識的結果喔,而且是即時的,不過...好像我下載的影片有點長啦...要耐心等待

# Python

$ ./imagenet.py images/car.mp4 images/test/output_car.mp4  

635540062.565734.mp4

辨識完成的影像

範例影片辨識

一樣需要先下載影片,然後做模型的辨識喔

# Download test video (thanks to jell.yfish.us) 這個是您下載影片

  建議先切換到 jetson-inference/data/images資料夾,再執行這段下載程式碼

$ wget https://nvidia.box.com/shared/static/tlswont1jnyu3ix2tbf7utaekpzcx4rc.mkv -O jellyfish.mkv

# C++

$ ./imagenet --network=resnet-18 images/jellyfish.mkv images/test/jellyfish_resnet18.mkv

# Python  我選擇這個

$ ./imagenet.py --network=resnet-18 images/jellyfish.mkv images/test/jellyfish_resnet18.mkv


635541580.392996.mp4

辨識中

635541580.392996.mp4

辨識完成

三、使用不同的模型

接下來測試其他的模型(--network=resnet-18),我一樣是選用python程式

當選之前沒用過的辨識模型,第一次載入需要比較久的時間喔

# C++

$ ./imagenet --network=resnet-18 images/jellyfish.jpg images/test/output_jellyfish3.jpg

# Python

$ ./imagenet.py --network=resnet-18 images/jellyfish.jpg images/test/output_jellyfish3.jpg

使用resnet18模型辨識

使用Imagenet模型辨識

四、其他模型

我們下載的模型是detectnet的,所以就不是使用 imagenet.py,要改用 detectnet-console.py

# Python

$  ./detectnet-console.py  images/a01.jpeg images/test/output_a01.jpg


$  ./detectnet-console.py  images/a02.jpg images/test/output_a02.jpg

a01.jpeg

a02.jpg

辨識結果

辨識結果

使用imagenet的辨識結果

使用imagenet的辨識結果