1. 磐创AI首页
  2. Medium

人工机器学习竞赛


你们好啊!最近,我参加了一个叫做Artifialis的不和谐社区举办的一场友谊赛(顺便说一句,对ML感兴趣的人来说,这是一个很棒的地方)。挑战是在一个月底之前上交一个完整的机器学习项目,全部部署完毕(有几个陷阱,我稍后会告诉你)。我在这方面的经历可以用一个词来定义-激动人心。在这篇博客中,我将写下我在这次比赛中的经历,以及我在完成这个项目时面临的问题。Artificialis

团队

这次比赛的参赛者在比赛开始时就把我们分成了小组。我被任命为我的团队的领导者,并对团队的进步负责。

项目构思

经过近两天的讨论,我们最终确定了这个项目的想法-一款应用程序,它将从网络摄像头中获取输入,并识别所显示的美国手语(American Sign Language)字母表。之所以选择这一主题,是因为它将有助于弥合懂手语和不懂手语的人之间的沟通鸿沟。ASL

建模

在确定了项目构思后,我们开始为它建立一个合适的模型。但是有一个问题–我们不能使用迁移学习。这将大大减慢训练过程,还会降低模型的准确性。transfer learning

尽管如此,我们还是决定在不使用ImageNet权重的情况下实现MobileNetV2架构(权重是模型在之前的培训中学习的模式)。经过几次不同的数据集和不同的超参数实验,我们得到了一个准确率在90%以上(不是过拟合的)的模型。我们决定继续使用此模型,并开始部署方面的工作。overfitting

部署

尽管建模看起来很难,但这一部分让我们的团队经历了一段艰难的时光。

在我们的团队中,我们以前都做过一些TensorFlow,但没有人做过太多的OpenCV(一个需要与网络摄像头交互的库)。在项目结束前,我们只剩下两周的时间(我的学校测试正在进行中),所以我们决定不“浪费”我们的时间看OpenCV教程,只是在我们需要的时候谷歌上代码。

我们的第一个任务是编写一个程序,它将读取网络摄像头的输入,将其提供给模型,然后在本地设备上打印出预测结果。这很容易,我们在几天内就成功完成了。

然后我们开始尝试在Streamlight上部署该模型,但是到目前为止运行良好的程序就像我们使用Streamlight一样崩溃了。我们意识到Streamlight不直接支持网络摄像头集成,于是尝试使用一个基于Streamlight构建的库,称为Streamlight-WebRTC,该库启用了网络摄像头。由于某些原因,我们从未设法正确编写代码,几乎花了整整一周的时间试图弄清楚如何使Streamlight-WebRTC工作。Streamlit

有了一周的时间,我决定我们需要尝试另一个替代方案,并找到了一个简单的脚本,允许我们将视频帧输出到Streamlight。但这也有一个缺点–由于程序依赖于OpenCV,项目无法按照我想要的方式进行部署(因为托管应用程序的虚拟机将没有网络摄像头)。

由于没有时间,我们不得不继续前进,我们将代码与我们的模型集成在一起。当我们运行几个测试时,我们意识到我们的模型没有正常预测-它只预测了一个字母表来表示你对相机显示的任何迹象!

我们有两天的时间,我们的代码有一个巨大的缺陷。

最后一天

今天是大部分行动发生的日子。在最后一天开始的时候,我们仍然有一个有问题的模型(或者说这是我认为的)。

为了查看提供给模型的内容,我们显示了网络摄像头输入。然后我们意识到,问题不在于模型,而在于它预测的图像。在将帧从BRG格式转换为RGB格式时,帧的配色方案会变得混乱,模型会对完全奇怪的数据进行预测。

我们解决了这个问题,并及时将文件上传到GitHub,并将其提交给服务器管理员亚历山德罗·兰贝蒂(Alessandro Lamberti)。

以下是该项目GitHub回购的链接:https://github.com/Chiraagkv/ASLhttps://github.com/Chiraagkv/ASL

结论

写这篇文章,我感觉就像在写一部动作片,但我不得不说,这一点也不逊色。一路走来,我学到了很多,并发现我所掌握的知识有实际的用处。这确实是一次绝佳的机会。

现在就到这里吧。再见!

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/08/10/%e4%ba%ba%e5%b7%a5%e6%9c%ba%e5%99%a8%e5%ad%a6%e4%b9%a0%e7%ab%9e%e8%b5%9b/

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息