用户
 找回密码
 立即注册
发表于 2018-3-5 17:04:53
107080
Classifying Images with ImageNet
本文是从https://github.com/dusty-nv/jetson-inference翻译的,您可以在这里下载源码

这里有多种类型的深度学习网络可以利用,包括识别,检测/定位,和分割。第一个在本教程中重点出现的是利用’imageNet’来实现的图像识别功能,它是被训练来识别相似物体的。
imageNet会输入一个图片,然后输出这张图片中的物体是各个类别的概率。上面step2中下载的模型,是利用ImageNet数据库(1000种类别)训练的AlexNet和GoogleNet的网络模型。作为样例,它提供了一个命令行的接口(imagenet-console)和一个实时的摄像头程序(imagenet-camera)。
Using the Console Program on Jetson
首先,尝试使用imagenet-console程序在测试图片上试验一下图像识别功能。它会加载一张图片,使用TensorRT和imageNet的类别来进行推演。推演完成后,他会把推演的结果(类别信息或者编号)加载到图片上(类似水印的方式),并且将输出结果保存。
在编译好jetson-inference之后,进入aarch64/bin这个文件夹:
$ cd jetson-inference/build/aarch64/bin
然后用imagenet-console来识别样例图片。imagenet-console允许两个命令行参数:输入图片的路径和输出图片(会加盖类别信息的水印)的路径
$ ./imagenet-console orange_0.jpg output_0.jpg
$ ./imagenet-console granny_smith_1.jpg output_1.jpg
接下来,我们将会利用imageNet来识别一个基于Jetson板载摄像头的实时视频
Running the Live Camera Recognition Demo
就像上面最后一个例子,实时图像识别Demo是在/aarch64/bin的下面的一个叫做imagenet-camera的程序。通过设置参数,可以利用googleNet/Alexnet和TensorRT来对实时视频流进行识别。
$ ./imagenet-camera googlenet           # to run using googlenet
$ ./imagenet-camera alexnet             # to run using alexnet
在OpenGL的窗口最上面的TitleBar里面,会打印出当前视频识别的FPS(frames per second),识别类别的名字和识别类别的置信值(是某种类别的可能性或者概率)。系统默认这个程序可以识别最多1000种不同种类的物体。具体原因是这里面用的GoogleNet和AlexNet都是基于ILSVRC12 ImageNet的数据库训练的,这个数据库包含了1000种不同的物体。您可以在这里找到每一张图片对应的1000种不同物体的名字

注:系统默认中Jetson的板载CSI摄像头将会作为输入视频。如果你想用usb 摄像头来代替它,你可以在imagenet-camera.cpp中改变DEFAULT_CAMERA的值。当前的测试是利用罗技 C920来做的。
Re-training the Network with DIGITS
我们刚才用过的下载好的GoogleNet和AlexNet的模型,是基于已经标记好的ImageNet ILSVRC12训练好的。
.
如果来识别新的目标类别,您可以使用DIGITS来基于新的数据重新训练一个网络模型。您还可以以不同的方式组织现有的类,包括将多个子类组合成一个。例如在本教程中,我们将采用1000个类别中的230个,将这些类别分为12个班级,并重新训练网络。
接下来我们来下载ILSVRC12的图片来训练,或者你可以把自己的数据库放到ImageFolder中来替代
Downloading Image Recognition Dataset
一个图像数据集包含了大量的图片,他们会根据不同的类别存放在不同的文件夹中。ILSVRC12数据集被用于训练默认的GoogleNet和AlexNet模型。它大概有100GB的大小,包含1000种不同类别的1百万张图片。您可以利用imagenet-download.py这个脚本来下载数据集到您的DIGITS中。如果想下载这个数据集,首先要确认您的DIGITS服务器有足够的空间(120GB以上的预留空间),然后再您想要下载的服务器上运行以下命令:
$ wget --no-check-certificate https://nvidia.box.com/shared/st ... p3higw6lzhcysj.gz-O ilsvrc12_urls.tar.gz
$ tar -xzvf ilsvrc12_urls.tar.gz
$ python imagenet-download.py ilsvrc12_urls.txt . --jobs 100 --retry 3 --sleep0
上面的命令会下载图片的URLs地址的列表。
注:运行这个下载图像数据集的脚本时间可能很长(100GB的文件,下载也许会过夜),所以请确保网络的通畅
下载脚本会在对应的子文件夹里面存储这些图片。每一类图片将会存在对应的名字的文件夹下面,一共1000个文件夹对应ILSVRC12的每一个类。文件夹会以下面的形式组织起来:
n01440764/
n01443537/
n01484850/
n01491361/
n01494475/
...
这些8个数字的id用n作为前缀,每个类代表了相近类别的代号。每一类的名字你可以在ilsvrc12_synset_words.txt查看。举个例子:n01484850 great white shark
Customizing the Object Classes
我们上一步下载的数据库会用来训练默认的AlexNet和GoogleNet,它会分为1000个类,包括鸟类,水果,植物,鱼类,狗,猫科动物和交通工具等等。出于实践的目的,让我们考虑一下Google网模型的一个同类,该模型识别由最初的1000个类组成的十几个核心组(举个例子:把所有的不同的狗类,都算成狗一个类)。这12个核心组可能比1000个单独的同步集更实用,并且跨类组合可以获得更多的培训数据和更强的性能。
DIGITS中的数据要求存储在分层次的文件夹中,因此我们为每个核心组创建一个文件夹,并且对应每一个文件夹到之前下载的ILSVRC12的同步集中。DIGITS会自动组合来自顶层组下所有文件夹的图像。文件夹结构就像下面展示的,类名字后面括号里的数值代表包含的类的数量,括号里面箭头后面的数值代表同步集合每一个类对应的编号,
‣ ball/  (7)
        • baseball     (→n02799071)
        • basketball   (→n02802426)
        • soccer ball  (→n04254680)
        • tennis ball  (→n04409515)
        • ...
‣ bear/  (4)
        • brown bear   (→n02132136)
        • black bear   (→n02133161)
        • polar bear   (→n02134084)
        • sloth bear   (→n02134418)
• bike/  (3)
• bird/  (17)
• bottle/ (7)
• cat/  (13)
• dog/  (122)
• fish/   (5)
• fruit/  (12)
• turtle/  (5)
• vehicle/ (14)
• sign/  (2)
因为ILSVRC12中有太多了类别,为了方便大家生成目录结构和数据集路径链接,我们提供了一个脚本imagenet-subset.sh在DIGITS服务器上执行以下命令:
$ chmod +x imagenet-subset.sh
$ mkdir 12_classes
$ ./imagenet-subset.sh /opt/datasets/imagenet/ilsvrc1212_classes
在这个例子中,会生成一个12个类的链接,第一个参数代表着之前步骤中下载的ILSVRC12的文件夹的路径。
Importing Classification Dataset into DIGITS
通过浏览器登陆上DIGITS,选择Dataset中右上角的New Dataset中的Classification。
将图片路径设置为之前的12类数据集的文件夹路径,然后:
·       将for validation 设置为10
·       Group Name设置为:ImageNet

  • Dataset Name 设置为:ImageNet-ILSVRC12-subset
然后点击最下面的Create按钮开始创建数据库。数据集大小是20GB左右,根据电脑的IO性能,大概需要处理10~15分钟。接下来我们会创建模型并训练模型。
Creating Image Classification Model withDIGITS
当创建数据集完成,返回到DIGITS的主页中。选择Models,然后选择右上角的New Model,然后选择Classification来创建一个新的模型。
在后面的页面中,按照下面来设置:

  • Select     Dataset: ImageNet-ILSVRC12-subset
  • Subtract     Mean: Pixel
  • Standard     Networks: GoogleNet
  • Group     Name: ImageNet
  • Model     Name: GoogleNet-ILSVRC12-subset

选择一个GPU来训练,点击Create按钮开始训练


使用道具 举报 回复
发新帖
您需要登录后才可以回帖 登录 | 立即注册