Day 34 - 实作 S3 驱动 Lambda 函数进行 YOLO 物件辨识

Day 34 - 实作 S3 驱动 Lambda 函数进行 YOLO 物件辨识

根据 Day 33 - 实作 S3 驱动 Lambda 函数进行镜像,这是一个微服务的架构,只需将 AWS Lambda 函数改变成 YOLO 物件辨识的模型,就可以达成 YOLO 物件辨识的功能。

https://ithelp.ithome.com.tw/upload/images/20211106/20129510M9pHR2QktV.png
图 1、S3 驱动 Lambda 函数进行 YOLO 辨识架构图

在 github 找到一个这样的专案 YOLO-on-Lambda,使用上非常简单,只要上传事先压缩好的 darknetmin.zip 到 Lambda 函数中就可以运行,这个专案事实上是将事先在LInux环境编译好的 YOLOv3 执行档 darknet,以及一些相关的参数档压缩在 darknetmin.zip 中,流程如下所示,我们实际操作一遍。

  1. 下载程序码。
  2. 上传相关档案到 S3。
  3. 建立 IAM 角色,允许执行 AWS Lambda,并有存取 S3 的许可。
  4. 建立 AWS Lambda 函数。
  5. 修改布署程序并完成测试。

步骤一、下载程序码

YOLO-on-Lambda 网站中下载 darknetmin.zip,如下图所示。

https://ithelp.ithome.com.tw/upload/images/20211106/20129510tYSzGK4y6G.png
图 2、下载 darknetmin.zip

步骤二、上传 YOLO 相关档案到 S3

因为 AWS Lambda 函数的大小限制为 256 MB,所以需要把 YOLO 的权重档存到 S3 中,在 Day 16 - 进行影像辨识训练已经根据自己给定的数据集,完成的权重的训练,所以可以将这个档案上传到 S3,以及先前下载的 Lambda 程序码和图片,如下图所示。

https://ithelp.ithome.com.tw/upload/images/20211106/20129510bDiNiEBIkR.png
图 3、上传 YOLO 相关档案到 S3

步骤三、建立 IAM 角色

建立一个 IAM 角色,允许执行 AWS Lambda,并有存取 S3 的许可。进入 IAM 管理控制台,选择新增角色,接下来如下图所示,选择 Lambda 的使用案例後点击 下一个:许可 按钮。

https://ithelp.ithome.com.tw/upload/images/20211106/20129510fEpUyCY8BQ.png
图 4、建立一个角色选择 Lambda 的使用案例

在搜寻文字框中输入 basic 找到 AWSLambdaBasicExecutionRole 进行连接,这将允许这个角色有写入 CloudWatch 记录档的全县,方便程序除错之用,如下图所示。

https://ithelp.ithome.com.tw/upload/images/20211106/20129510scJpPGSUNo.png
图 5、连接基础的 CloudWatch 除错用的许可政策

最後确定先前的设定後并输入角色名称後,就可以建立角色,如下图所示。

https://ithelp.ithome.com.tw/upload/images/20211106/20129510dyUeJxgHxV.png
图 6、检阅设定并建立角色

编辑一个新的政策,内容如下图所示,给定读取 (GetObject) 储存贮体 A 与写入物件 (PutObject) 与权限 (PutObjectAcl) 到储存贮体 B。

https://ithelp.ithome.com.tw/upload/images/20211106/201295109BY3loOE9L.png
图 7、新增政策

接着到角色设定画面,将新建政策连接到角色上,如下图所示。

https://ithelp.ithome.com.tw/upload/images/20211106/201295107W4qzR2ZRt.png
图 8、将新增的政策连接到先前的角色

步骤四、建立 AWS Lambda 函数

进入 AWS Lambda 管理控制台,选择建立 Lambda 函数,设定内容如下图所示。比较需要注意的是执行时间务必选择Python 3.8,这是那个 github 专案的要求;而执行角色要也要记得选择上一个步骤设定的角色。

https://ithelp.ithome.com.tw/upload/images/20211106/20129510wSRPxHwakY.png
图 9、建立 Lambda 函数设定画面

建立 Lambda 函数可以自行撰写,也可以上传压缩档,在第二个步骤中,我们已经把 Lambda 函数代码上传到 S3 ,只需在函数设定主画面的右边,可以找到一个 上传於 按钮,点击後选择 Amazon S3 位置,就可以指定位置,如 https://[BUCKETNAME].s3.ap-southeast-1.amazonaws.com/darknetmin.zip,画面如下所示。

https://ithelp.ithome.com.tw/upload/images/20211106/20129510m0Mof4ylfh.png
图 10、建立 Lambda 函数设定画面

步骤五、修改、布署程序并进行测试

需要修改的地方有:

  1. 自建资料集相关档案:物件档(obj.data, obj.names),用来说明辨识後的物件名称的;组态档 (yolov3.cfg),需将原来的组态档改名,放入新的组态档。
  2. Lambda 函数执行环境:需要进行必要调整。
  3. Lambda 函数本身:需要根据需求进行调整。

自建资料集相关档案
相关的三个档案都是纯文件档,所以只需在 AWS Lambda 操作画面中进行新增档案的操作就可以,档案内容请参照 Day 15 - 说明 YOLO 相关设定,完成後画面如下。

https://ithelp.ithome.com.tw/upload/images/20211106/20129510t5I0asOcEd.png
图 11、在 Lambda 函数中新增自建资料集相关档案

Lambda 函数执行环境

程序码 页签中,下方有一个 执行时间设定 的选项需要进行设定,从上图中可以知道整个 Lambda 函数的主要函数进入点是 service.py,所以需要在 执行时间设定 中,设定处理常式为 service.handler,完成後画面如下。

https://ithelp.ithome.com.tw/upload/images/20211106/20129510yzPqg3QaDE.png
图 12、在执行时间设定中,设定处理常式

接着在 组态 页签中,选择 一般组态,将 记忆体 (MB) 设定为 2048 ~ 5120 M,逾时 设定为 2 分钟,完成後画面如下。

https://ithelp.ithome.com.tw/upload/images/20211106/20129510qNdSCmApER.png
图 13、在组态页签中,设定一般组态

Lambda 函数本身

需要修改的是要指定权重档与待测试图片的所在位置,并将原本的执行命令改成./darknet detector test cfg/obj.data cfg/yolov3.cfg {} {},这样才不会使用到预设的 coco.data 的标签。

https://ithelp.ithome.com.tw/upload/images/20211106/20129510lscsU7YUYR.png
图 14、修改 service.py 的内容

修改完毕後,进行布署(Deploy)後,可以设定一个测试(test)计画,不需要内容,直接测试即可。确认後会需要约 60 几秒才会完成影像的辨识,如下图所示。

https://ithelp.ithome.com.tw/upload/images/20211106/201295106vr2qqDfvZ.png
图 15、执行 YOLO Lambda 辨识功能

因为输出是一整行,所以把这个输出复制到一般编辑器中,比较方便看到辨识结果,如下图所示。

https://ithelp.ithome.com.tw/upload/images/20211106/20129510K01lGjxr8M.png
图 16、YOLO 辨识结果

而这样的反应速度,如果是批次处理还可以,但是即时处理的话,反应速度太慢,可能需要再找其他工具来满足这个需求。

参考资料


<<:  Java学习之路02---Eclipse开发工具

>>:  更新网格交易机器人

Day05 - 开始、结束与有限状态机

昨天习得 事件 、 转移 的概念後,让我们来思考实作这个 transition,还需要什麽东西? t...

如何自己设计一套ERP程序 前传-写ERP之前要决定的20件事 决定ERP後台资料库

第3个决定 决定ERP後台资料库 在所有资料库里笔者用过Oracle 和MS SQL,这2者使用时间...

[Day6]-基础for回圈

基本for回圈 基本格式如下: for 变数 in sequences: 要执行的程序码 for回...

第46天-fd-find 代替 find

使用 fd-find 代替 find,效率更好 下载方式 : sudo apt-get instal...

[DAY 18] _UART传输

这是算是大家最常见串列通讯,他原理较简单方便,现在韧体工程师在除错或为简单验证资料,大家知道TX、R...