内容简介:作者 |
原标题 | Object Recognition, simplified !
作者 | Ulysse-pacome koudou
译者 | Aitechnology(旷视算法研究员)、汪鹏(重庆邮电大学)、Dylan的琴(重庆邮电大学)
注:本文的相关链接请访问文末【阅读原文】
阿尔伯特·爱因斯坦曾经说过这么一句话“如果你不能简单地解释它,你就不能很好地理解它”,我深以为然!
尤其是在计算机视觉领在业务中,阻止AI发展的主要障碍之一是深度学习解决方案是需要完全掌握和理解这些 工具 的工作方式,这是极其复杂的。
除此之外,还有为业务案例开发和实施正确的解决方案的时效性。显然,该列表并非详尽无遗,因此企业在实施此类工具时会慢慢采取行动。我还要补充说,与一个更简单且可能更旧的解决方案相比,评估实现特定案例的AI解决方案的价值是非常好的,但如果工具本身并没有得到很好的理解,有时可能会遇到挑战。“AI”,“机器学习”,“深度学习”是当下的流行语,每个人都希望发展自己的AI点,增强客户体验和理解,探索更多并扩展他们的专业范围,这是很好的!#GoA.I。
这是一个帮助我们实现对象检测算法作为解决方案工具的解决方案。非常感谢John Olafenwa及其团队构建ImageAI软件包,这使得 程序员 的生活变得更加轻松,不仅可以使用,还可以了解对象检测的工作原理。//深入了解DeepQuestAI。使用ImageAI实现测试只能在几行中完成,快速而强大。
现在让我们实操一下!
要求:
-
Jupyter 笔记本安装了Tensorflow和Keras。
-
你可以使用Anaconda Navigator在JN上安装Tensorflow和Keras,只需选择您的环境并在搜索栏中写入包名称(注意:确保选择未安装)
从Anaconda 安装Tensorflow
-
从原文下载ImageAI软件包,虽然Anaconda尚未提供,但谁知道明天会发生什么?
-
下载H5Py存储Numpy矩阵的图像,更多信息可以参看H5py_website。
-
最后但同样重要的是,激情。请喜欢和享受你正在做的事情,如果你对你正在编码的内容不感兴趣,编码会变得非常无聊,即使这只是一行代码。成功=时间+激情。
-
要安装的库:Scipy,Numpy,OpenCV,Tensorflow,Pillow,Matplotlib和Keras。
注意:确保将H5py和ImageAI保留在工作目录中!
现在我们已经完成所有设置,我们将通过几行代码来识别图像文档中的大多数基本对象。在我们使用Jupiter Notebook之前设置,确保所有下载都在工作目录中。
作为输入,我们将在2015年夏天在蒙特利尔某处拍摄一张非常漂亮的照片,目标最终将是检测照片上的内容,是否有汽车,人物?更多?多少。
2015年夏季
首先要安装ImageAI
!{sys.executable} -m pip install imageai-2.0.2-py3-none-any.whl
Processing ./imageai-2.0.2-py3-none-any.whl
Installing collected packages: imageai
Successfully installed imageai-2.0.2
这是命令行应该返回的结果。然后加载所有必要的包。
from imageai.Detection import ObjectDetection
import tensorflow as ft
from tensorflow import keras
import matplotlib as plt
import numpy as np
import os
execution_path = ~/Users/pacome/Desktop/photo
对于实际的检测我们使用的是著名的开源库OpenCV,然后基于Tensorflow的Keras预训练模型我们搭建神经网络。实际上永远不要忘记,Matplotlib可以清晰的对检测到的方形区域进行判别,np框架能够用来存储数据(再一次发挥巨大作用!)最后我们将工作目录声明为可执行路径,方面后面使用H5py。
detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel() #inputImgReference #MightWantToUseDiffPath #OutputImgReference
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "IMG_2444.JPG"), output_image_path=os.path.join(execution_path , "IMG_2444New.JPG"))
现在John的团队通过创建很长的、痛苦的和复杂的代码来实现这一目标。通过简单的调用神经网络的额模型并将图片作为输入可以使你的编码 变得更容易。最终,你可以在工作目录下得到输出结果。
for eachObject in detections:
print(eachObject["name"] , " : " , eachObject["percentage_probability"] )
所有这一切都很不错,但是我们依然希望得到结果。。。这有一个简单的函数可以打印出名字和通过网络预测得到的概率。
在这种情况下,我们引用了三个输出项,输出图像,检测到的对象的名称及其概率百分比。我们有图像,这里是proba的百分比。名字看起来像这样:
person : 50.60696005821228
person : 82.12159872055054
car : 57.09388256072998
car : 61.47252321243286
car : 94.41726803779602
car : 69.8748528957367
car : 66.24709963798523
car : 52.94407606124878
bicycle : 91.05990529060364
person : 86.73182129859924
不一定按顺序给出,我们的模型已成功检测到我作为前景中的人,自行车,即使完整的自行车不在图片上,另一方面,后面至少有四辆车和几个人。由于特征提取,背景和形状,我身后的绿色汽车被检测到三次。我们可以深入研究这个问题,但这是一个全新的主题,我建议你阅读这篇文章以获取更多信息。
对这个结果感到满意,我又尝试了另一张图片,看看模型可以做到什么程度吧。
person : 53.09268236160278
person : 55.46619892120361
person : 58.33745002746582
person : 66.67189002037048
backpack : 66.93229079246521
person : 77.44560241699219
person : 67.44030117988586
person : 86.0813319683075
person : 72.71167635917664
truck : 58.262014389038086
car : 86.41530871391296
而且它再次令人印象深刻,能够以66%的概率检测到背包。并且能够区分汽车和卡车,但在第二个例子中有几个人没检测到。这仍然是由于特征提取和形状的问题,希望模型会变得更好点!
完整代码:
from imageai.Detection import ObjectDetection
import tensorflow as ft
from tensorflow import keras
import matplotlib as plt
import numpy as np
import os
#Make sure to download the imageAI package and to have it on your working directory
#Use this commande to install it
#!{sys.executable} -m pip install imageai-2.0.2-py3-none-any.whl
execution_path = ~/Users/pacome/Desktop/photo
detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "MartyStaycation.jpg"), output_image_path=os.path.join(execution_path , "matryNew.jpg"))
for eachObject in detections:
print(eachObject["name"] , " : " , eachObject["percentage_probability"] )
我们最后一件事没有涉及的是何时使用物体检测?如果你还没有对此做出响应,可以阅读这篇文章,它提供了有关如何使用对象检测的七个有趣想法。记住,不要局限于这些想法!
通过Twitter,LinkedIn或电子邮件与我联系:up.koudou@gmail.com
想要继续查看该篇文章相关链接和参考文献?
点击底部 【阅读原文】 即可访问:
https://ai.yanxishe.com/page/TextTranslation/1552
本篇编辑 | 王立鱼
英语原文:
https://medium.com/data-science-demystified/object-recognition-made-easier-61eb8b5fa3fa
你可能还想看
点击 阅读原文 ,查看本文更多内容
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 旷视发布通用物体检测数据集 Objects365,开启 CVPR 物体检测挑战赛
- c++ 投掷活动物体
- WebGL之物体选择
- 精准快速的物体分割算法
- 半透明物体如何实现阴影效果?
- 深度有趣 | 11 TensorFlow物体检测
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
机器学习实战:基于Scikit-Learn和TensorFlow
Aurélien Géron / 王静源、贾玮、边蕤、邱俊涛 / 机械工业出版社 / 2018-8 / 119.00
本书主要分为两个部分。第一部分为第1章到第8章,涵盖机器学习的基础理论知识和基本算法——从线性回归到随机森林等,帮助读者掌握Scikit-Learn的常用方法;第二部分为第9章到第16章,探讨深度学习和常用框架TensorFlow,一步一个脚印地带领读者使用TensorFlow搭建和训练深度神经网络,以及卷积神经网络。一起来看看 《机器学习实战:基于Scikit-Learn和TensorFlow》 这本书的介绍吧!