Classifying Images with ImageNet
这里有多种类型的深度学习网络可以利用,包括识别,检测/定位,和分割。第一个在本教程中重点出现的是利用’imageNet’来实现的图像识别功能,它是被训练来识别相似物体的。 Using the Console Program on Jetson 首先,尝试使用imagenet-console程序在测试图片上试验一下图像识别功能。它会加载一张图片,使用TensorRT和imageNet的类别来进行推演。推演完成后,他会把推演的结果(类别信息或者编号)加载到图片上(类似水印的方式),并且将输出结果保存。 在编译好jetson-inference之后,进入aarch64/bin这个文件夹: $ cd jetson-inference/build/aarch64/bin $ ./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个班级,并重新训练网络。 Downloading Image Recognition Dataset 一个图像数据集包含了大量的图片,他们会根据不同的类别存放在不同的文件夹中。ILSVRC12数据集被用于训练默认的GoogleNet和AlexNet模型。它大概有100GB的大小,包含1000种不同类别的1百万张图片。您可以利用imagenet-download.py这个脚本来下载数据集到您的DIGITS中。如果想下载这个数据集,首先要确认您的DIGITS服务器有足够的空间(120GB以上的预留空间),然后再您想要下载的服务器上运行以下命令: $ 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/ ... 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) $ 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按钮开始训练
|