介绍影像辨识的处理流程 - Day 10

介绍影像辨识的处理流程 - Day 10

所有影像辨识的问题都会面临以下几个问题:图片中有几个要辨识的物件 (影像切割,Image Segmentation),他们的位置在哪里 (物件定位,Object Localization),要如何辨识(影像分类,Image Classification)。而物件侦测 (Object detection) 的技术,就算是物件定位与影像分类的完整解决方案。

从这个概念开始就可以清楚理解,为何近年来物件侦测的算法,有所谓的二阶式 (two-stage),也就是先找到定位的区域 (Region-based Proposal),再来进行影像分类的动作,常见的模型为:Region-CNN,Fast R-CNN, Faster R-CNN;以及一阶式 (one-stage) 高效算法,简单来说就是把定位跟分类一次处理,常见的有:YOLO (You Only Look Once) , SSD (Single Shot Detector),这之中以 YOLO 系列最受大家喜爱。

最初版本的 YOLO 论文公布於 2015 年,主要的作者是 Joseph Redmon,而後续的版本 V2, V3 中他持续改善了效率,图型大小以及定锚 (anchor) 等功能,但是接着的 YOLOV4,V5 作者就不再是他本人,YOLOV4,V5 主要贡献者中还是台湾中央研究院资讯科学研究所的两位学者。

本专案的主要目的是整合一个全端的辨识系统,所以针对 YOLO 的部份只是将实作部属上去,当然也会分析评估辨识的效果,采用的是 YOLOV3 这个版本,整个过程分成:

  • 取得数据集:取得的影片资料。
  • 将影片转换成图片,并调成 YOLO 可以处理的大小。
  • 资料增量。
  • 影像分割与标注。
  • 分成训练、验证与测试数据集
  • 分析测试结果
  • 进行优化
  • 布署到後端服务器

可以到个人的github下载需要的影片,如下图所示,分别是帝王鲷、黄金珍珠虎与麒麟鹦鹉这三种观赏鱼,样本有点少,有需要的人可以自己在 Google 上在找些照片放进行也可以。

https://ithelp.ithome.com.tw/upload/images/20210910/20129510pOpBhYpsGL.png
图 1、 从 github 下载需要的资料集影片

接下来的操作可以在自己的电脑里完成,所以需要在自己的电脑也安装需要的环境,资料前处理的部份都可以在自己的电脑完成,只要训练模型才需要用到 GPU 的 EC2,当然这些操作也可以在 EC2 中进行,只是需要按时收费。首先,到 Python 的官网下载直译器,不需要安装最新的,因为最新的直译器会导致很多套件都还只有原始码,还得自己编译,所以建议下载 3.7 或 3.8 版即可,如下图所示。

https://ithelp.ithome.com.tw/upload/images/20210910/201295102qypeJJX9x.png
图 2、 下载 Python 直译器

安装 VS Code
透过浏览器连到 VS Code 官方网站 https://code.visualstudio.com/ ,下载并安装即可

https://ithelp.ithome.com.tw/upload/images/20210910/20129510qtgISlV1mz.jpg
图 3、 VS Code 下载

VS Code 的 Python 插件

安装完 VS Code ,1. 啓动後在画面左下角有一个积木形状的图形,这是 VS Code 用来安装插件 (Extensions) 的图示,进入插件安装区後,2. 在上方的文字块输入 Python 就会出现相关的插件 ,3. 选择第一个插件,4. 就会出现这个插件的详细介绍,如插件名称、开发厂商、下载次数以及插件的使用说明等信息,如下图所示。按下安装 (install) 後,就会自动安装该插件,记得要致能 (Enable) 该插件,不然只是安装并不表示就可以使用该插件。

https://ithelp.ithome.com.tw/upload/images/20210910/20129510xyTSVMHRmg.jpg
图 4、 Python for VS Code 插件下载

安装完插件後重新开啓 VS Code,请选择创建工作区 (Add wordspace folder…),所谓工作区指的是可以把这次工作所需要的目录和档案都放在一起,因为本次的需求为撰写技术手册,所以同时需要代码以及说明文件,所以开一个工作区,一个目录放说明文件,一个目录放代码脚本,如下图所示

https://ithelp.ithome.com.tw/upload/images/20210910/20129510Mdfjt4nUX3.jpg
图 5. 创建 VS Code 工作区

建立完工作区,记得点选右边工具栏的第一个图示-文件管理区 (Explorer),1. 在工作区中建立第一个目录 py,用来存放 python 脚本,2. 因为工作区尚未取储存,所以显示 Untitled,如下图所示 。

https://ithelp.ithome.com.tw/upload/images/20210910/201295109agDZwFqZz.jpg
图 6. 设定工作区目录

在文件管理区中按下滑鼠右键,将另一个目录 PythonMD 加入工作区中,这个目录是用来撰写文件的,如下图所示。

https://ithelp.ithome.com.tw/upload/images/20210910/20129510KR6oL2d8mZ.jpg
图 7. 将目录加入工作区中

最後将目前的工作区的状态储存起来,如下图所示。

https://ithelp.ithome.com.tw/upload/images/20210910/20129510eu014OWxyn.jpg
图 8. 储存目前的工作区的状态

开始第一个 Python 脚本

步骤 1 选择 Python 直译器
Python 是一种解释语言,为了运行 Python 代码,得到 Python 智能感知 (IntelliSense) 的功能,必须告诉 VS Code 编辑器使用哪个版本的直译器。在 VS 代码中,通过打开命令面板 (Command Palette) Ctrl+Shift+P ,1. 开始键入 Python: Select Interpreter 命令进行搜索,2. 然後选择该命令,如下图所示。您也可以使用选择 Python 环境状态栏上的选项(如果可用,它可能已经显示了选定的直译器):

https://ithelp.ithome.com.tw/upload/images/20210910/20129510eeUbf8xZZM.jpg
图 9. 打开命令面板,并输入指令

接着会询问直译器要套用到工作区的那一个目录,因为目前有两个目录,而 py 目录是用来存放代码的,所以就指定到哪个目录,如下图所示

https://ithelp.ithome.com.tw/upload/images/20210910/201295102YfXdfoUrg.jpg
图 10. 询问直译器要套用到那一个目录

指定直译器版本或是运行的虚拟环境,虚拟环境这部份会在後面有更清楚地描述,本课程指定 Python 3.9 直译器,如下图所示

https://ithelp.ithome.com.tw/upload/images/20210910/20129510RWBoy9FBg3.jpg
图 11. 指定直译器版本

步骤 2 创建一个 Hello World 原始码文件
从文件资源管理器工具栏中,1. 在 py 文件夹,选择 2. 新文件按钮,通过使用 .py 文件扩展名,告诉 VS Code 把这个文件解释为 Python 程序,这样它就用 Python 扩展名和选择的直译器来评估内容。如下图所示

https://ithelp.ithome.com.tw/upload/images/20210910/20129510JDYcKIYLbC.jpg
图 12. 创建一个原始码文件

现在工作区中有了一个代码文件,请在中输入以下原始码,

Hello.py

Msg = “Hello World”
Print(msg)

在文件中打完原始码後,1. 可以看到在文件的页签上,除了有文件名称外,还会出现一个小白点,这是表示文件有更新,尚未存档,2. 是原始码本文, 3. 表示在目前编辑的文档中,尚未存档的文件数量,可以按下 ctrl + s 去存储档案,如下图所示

https://ithelp.ithome.com.tw/upload/images/20210910/201295108edvkyYvEe.jpg
图 13. 原始码文件编辑状况

步骤 3 运行原始码
点击在 Python 文件编辑器 1. 右上角的播放按钮,该按钮打开 2. 一个终端面板,在其中 Python 直译器被自动激活,然後 3. 运行 python hello.py,并可以看到运行结果,如下图所示

https://ithelp.ithome.com.tw/upload/images/20210910/20129510pjkVa81Von.jpg
图 14. 运行原始码

最後补充,接下来的所有 Python 语法的介绍,都是针对如何撰写原始码,默认情况下,Python 源码文件以 UTF-8 编码方式处理。在这种编码方式中,世界上大多数语言的字符都可以同时用於字符串字面值、变量或函数名称以及注释中——尽管标准库中只用常规的 ASCII 字符作为变量或函数名,而且任何可移植的代码都应该遵守此约定。要正确显示这些字符,你的编辑器必须能识别 UTF-8 编码,而且必须使用能支持打开的文件中所有字符的字体。

参考资料


<<:  [想试试看JavaScript ] 函式

>>:  Day 10 Blog and Posts

JavaScript 语言和你 SAY HELLO!!

第十三天 各位点进来的朋友,你们好阿 小的不才只能做这个系列的文章,但还是希望分享给点进来的朋友,知...

[Day7] 报酬率绘图与MDD试算

首先先安装python绘图用的matplotlib,安装指令从以下网址撷取的 https://mat...

[DAY12] 在 Azure Machine Learning 里 Label data(上)

DAY12 在 Azure Machine Learning 里 Label data(上) Azu...

初探 OpenTelemetry

为什麽会接触到 OpenTelemetry,算是因为 Log 的追踪关系,在後台上有两三个 Spri...

资安扫描常见种类_几款免费白箱扫描工具推荐(Sonarqube,Puma Scan)

本篇已同步发表至个人部落格 https://coolmandiary.blogspot.com/20...