由火箭科学团队撰写:亚历山德拉·巴兰 _(领英 和GitHub),达留斯·巴尔策 (领英 和GitHub),格雷戈日·戈姆扎 (领英 和GitHub),由Mateusz Maj_监督[(领英)]
一个项目假设前提这个项目是作为infoShare Academy数据科学训练营的一部分开发的,专注于世界上最著名的玩具之一——乐高积木。作为团队,我们运用数据分析、机器学习和计算机视觉等技能迎接了这个难题。
该项目的代码可以在GitHub上查看,网址是GitHub。
该项目的动机来源于一个虚构的角色提出的情景:一家初创公司的创始人,该公司正在开发一个App,通过用户上传的照片来识别乐高积木。这样的系统可以帮助乐高爱好者们快速地识别单个积木。
我们的目标是创建一个模型,让您能够从照片中识别出单个乐高积木。
为了做到这一点,我们采用了深度学习,一种利用大量数据训练计算机的高级的训练方法。具体来说,我们使用了卷积神经网络(Convolutional Neural Network,简称CNN),这种网络非常适合处理图像,因为它能识别形状和纹理等模式。这使得CNN非常适合完成如识别乐高积木这样的任务。
对于这个项目,我们在 Kaggle 平台上使用了一个数据集,该数据集包括各种形状和大小的乐高积木的大量图片。
乐高的历史乐高积木的原始设计理念是由希拉里·费舍·佩奇创造的。这家公司在1947年以“自动锁定积木”的名称推出了这些积木。然而,这项发明并未获得显著的商业成功。
乐高公司后来改用了这一想法,在1949年推出了名为自动绑定砖。虽然希拉里·费舍尔·佩奇为这项发明申请了专利,但因有限的成功,也没有因此采取法律行动来保护自己的权利。
1981年,LEGO正式收购了积木和Kiddicraft商标的权利。
乐高创意挑战:模型搭建整个乐高积木的历史中,乐高公司已经生产了近84,000种独特的积木。开发一个系统来识别和分类所有这些物品证明是重大挑战,需要大量的资源和时间来训练和实施最终解决方案。这一挑战更加复杂,因为尽管乐高积木保持了向下兼容性,多年来仍然经历了许多修改。例如,以基本的4×2积木(零件编号3001)为例,它至今已经出现了十二种不同的变体。
来源:你可以从这里查看原文 https://snakeandboris.blogspot.com/
对于一个用来识别乐高的系统而言,这给它带来了额外的挑战。
一方面,我们希望系统能够识别在建筑中使用相同类型的积木。另一方面,系统也需要识别每块积木的具体变种,这些变种可能因生产时期而不同。对于收藏家来说,这个功能可能是关键的。
为了管理这个情况,我们决定将模型限制在一个由“仅仅只有”20个独特模块组成的子集中。
对于每种类型,我们分配了4,000张图片用于训练。我们之所以这样做是因为我们的计算资源和GPU访问权限有限。
项目中使用的乐高积木的图形表示以及它们的序列号。
让我们深入话题,聊聊卷积神经网络模型。为了完成这个任务,我们决定用前面提到的卷积神经网络(CNN)。作为火箭科学团队(Rocket Science团队),我们开发了名为“RocketNet”的架构,该架构接受64px x 64px的彩色图像作为输入。
我们的架构包括了三个卷积层,分别拥有32、64和128个滤波器。
我们在这几层之间加了标准化和池化层(Pooling Layer)。
从卷积层转换到全连接层需要加一个展平层。
网络中还有个包含512个神经元的全连接层,后面跟着一个50%的丢弃率的 dropout 层,以防止过拟合。
ReLU激活函数被广泛应用于整个网络模型。
输出层包含20个神经元,对应于类别的数量(20个独特的类别)。
我们的网络架构与AlexNet相似。AlexNet是由Alex Krizhevsky在2012年为识别224px x 224px图像中的1000个对象的比赛而开发的卷积网络。因此,AlexNet的设计和结构是深度学习历史上的一个里程碑。
可以这么说,我们的RocketNet相当于将AlexNet简化了。
如果 AlexNet 被适配到分辨率为 64x64x3,并且是一个涉及 20 幅图像的分类任务,那么得到的架构将类似于我们所开发的。
在RocketNet中,我们比AlexNet减少了两层卷积层,还去掉了第二个全连接层。
另一个关键的不同之处在于步幅参数:AlexNet 使用 5px 的步幅在初始几层,而 RocketNet 使用 3px 步幅。
因为这些相似点,我们打算将这两个网络进行比较。
左边是AlexNet图,右边是RocketNet图。矩形表示这两个卷积网络模型之间的结构区别。
模型训练:它指的是什么,我们在项目中是如何进行模型训练的?训练卷积神经网络涉及让模型学会通过调整网络中的权重来识别图像中的模式,根据训练数据进行,一直重复到网络在预先准备好的测试数据集上产生准确的结果。这一过程依赖于一种称为误差反向传播的技术,该技术允许网络在多次迭代(称为轮次)中提升性能。这一步非常关键,因为它使机器能够有效地理解和处理视觉数据。
在我们的项目中,我们对这两个模型各进行了两次训练。
首次训练进行了50个周期的训练,以观察模型何时开始过拟合。
我们使用了在第一轮中确定的训练的epoch数量来进行第二次训练。
作为团队,我们决定在AlexNet经历了40个周期的训练后,它已经足够训练。尽管性能仍在缓慢提升,最有可能是因为其滤波器数量更多,模型学习较慢;然而,这并没有让它免于过拟合。
AlexNet:图表显示了根据不同epoch数量,损失(Loss)和验证损失(Validation Loss)、AUC以及分类准确率(Categorical Accuracy)的变化情况。每条线代表训练数据集,另一条代表验证数据集。
RocketNet停了下来,在经过10轮次后,因为它在验证集上的表现每经过一轮次都在下降。
RocketNet:图表展示了损失和验证损失、ROC曲线下的面积(AUC)以及分类准确率,随着epoch数的变化而变化。其中一条线表示训练数据集,另一条线表示验证数据集。
网络评测由于某些积木形状相似,预计会在三个特定的积木组之间产生混淆。
显示结果为RocketNet网络的。
与此同时,大多数人在以下几对中感到困惑。
下面显示的是RocketNet网络的结果。
结果发现RocketNet难以识别几个零件,主要问题在于零件15070,它常常被误认成零件15712。其他零件则没有那么经常被误分类。
RocketNet在验证数据集上的准确率为88.9%。
相比之下,AlexNet 犯了更多的错误,同样在之前提到的图片上。然而,在其他图片(比如 18651 和 11214)上出现了更大的失误。
在验证集上,AlexNet 的准确率为 90.9%。
大致可以说,因为它太复杂了,AlexNet 并没有像RocketNet那么好。这表明,复杂的网络并不总是比简单网络表现得更好。
总之,我们的RocketNet只比其他方法低2%的效果,其错误在各类中分布得更加均匀,而AlexNet的错误则集中在少数特定类别。
比较了AlexNet和RocketNet的混淆矩阵。主要的错误用圆圈标出。
根据对RocketNet和AlexNet模型的测试结果,我们对结果感到满意。虽然RocketNet的效率稍微低一些,但它在处理类别多样性方面做得更好,并且减少了集中的错误,这使我们有信心进一步改进。这表明,更简单的网络在实际应用中同样有效,甚至更稳定,从而为探索不同网络架构提供了新的可能。
神经网络“看到”的究竟是什么?为了更深入地理解卷积网络中的图像识别过程,我们团队决定使用Grad-CAM技术来观察网络内部。该方法分析了图像的哪些区域影响了模型的决策,以及模型如何解释各种视觉特征。通过这样做,我们可以更好地理解卷积网络如何分类对象,从而帮助提升其性能。
该过程涉及生成一张图像通过连续卷积层后的矩阵。然后将“热力图”尺度应用于生成的图像。接下来,将这个热力图叠加到原图上,然后再由神经网络进行处理。卷积网络的层次越深,热力图产生的视觉信息就越少。
最后,输出通过了全连接层(密集层),这个层在分类中扮演着关键角色。重要的是要知道,生成的热力图仅仅是神经网络数学运算的可视化展示。
在网络的图中,网络从底部开始,所以应该自下而上来看这些图。
这些图片展示了AlexNet是如何试图准确地识别图像中的物体的。RocketNet则从分析和概括整个图像开始,但最终生成了一张不再像原始图像的热度图。最后一层卷积层仅向密集网络提供了一个信号,后者将其解释为一类物体。
AlexNet: Grad-CAM 可视化:突出显示影响模型决策的部分。图像应自下而上解读。
RocketNet: Grad-CAM可视化效果:突出影响决策的区域。图像应自下而上理解。
这该怎么用?使用示例 乐高积木建造应用总之,我们开发了一个能够识别乐高积木的人工智能模型,开启了新的建筑创作可能性。通过这款应用,用户可以充分发挥他们自己积木的所有可能。
应用特色:
- 积木堆分析 — 这款应用扫描可用的积木并识别所有元素,让你能准确掌握你手上的积木。
- 模型建议 — 根据选定的主题(如车辆、建筑物或角色),应用会为你推荐可以构建的各种模型。
- 所需元素列表 — 选好模型后,应用会告诉你哪些积木可以用来搭,并将模型与你已拥有的积木匹配,帮助你无需购买额外的积木就能搭建。
- 自动生成说明 — 选好模型后,应用会自动生成详细的分步指南,简化搭建过程。
应用程序操作的示意图。例如,乐高图片来源: https://www.lego.com/
这是一款专为乐高迷设计的现代工具,它让乐高迷们在建造过程中玩得更创意,也更容易,体验更上一层楼!
帮助盲人和视障人士搭建乐高模型的应用该应用程序旨在帮助盲人和视力不好的朋友搭建乐高,通过提供不仅能提升技能,还能带来有趣且互动体验的工具,创造出更自然流畅的体验。
乐高之前曾推出过盲文学习套件,以支持盲童的教育,而这款应用利用神经网络模型识别积木,进一步拓展了这些功能,使建造变得更容易访问并完全适应不同需求。
应用特点:
- 项目选择 — 应用程序首先以一个简单且用户友好的项目描述来鼓励用户进一步互动。
- 乐高积木识别 — 通过摄像头,应用程序自动识别积木并用语音提示标识它们,使用户可以轻松快速地找到正确的零件。
- 盲文学习 — 与盲文学习套件集成,支持通过有趣的互动游戏和任务来发展盲文技能,使学习过程轻松有趣。
- 语音指导 — 应用程序提供详细、分步骤的语音指导,指导用户选择正确的积木并将其放置在正确的位置。
- 互动讲故事 — 为了丰富构建过程,应用程序包括关于模型的故事,例如关于真实建筑或车辆的趣闻,使构建过程更加有趣。
- 错误检测 — 应用程序监控构建进度,检测错误并通知用户进行必要的纠正。
- 祝贺和建议 — 在构建完成后,应用程序祝贺用户的成就并根据用户的技能水平提出进一步的建议。
这款应用程序不仅让乐高世界对盲人和视力障碍者可见,而且还通过有趣且富有教育意义的体验来帮助他们提高创造力并提升技能。
一款帮助整理和管理乐高积木收藏的应用程序这是一款创新的应用,能让用户以简单直观的方式整理分类和管理乐高。
通过扫描功能,用户可以自动识别并记录砖块的详细信息,比如砖块的类型和数量,这有助于更好地组织。
应用特色功能:
- 积木自动识别 — 用户扫描积木,应用会自动识别积木的形状、颜色等特征,并将这些信息保存到数字收藏中。
- 按类别分类 — 应用允许用户轻松按形状、颜色及其他特性对零件进行分类,使整理和快速找到特定零件变得更容易。
- 商务支持 — 对于需要购买大量混合积木的商家来说,这款应用也非常有用。它能快速分类乐高积木并筛选出非乐高的零件,提高工作效率。
这款应用非常适合乐高爱好者和专业人士及业余爱好者,提供简单且高效的管理,即使是最大的乐高积木收藏也能轻松管理。
乐高购换应用这款应用可以帮助乐高迷们高效地管理他们的收藏,让完成套装变得更简单,替换或购买缺失的零件更轻松。
凭借现代功能,用户可以轻松地充分利用他们的收藏。
应用特色:
- 扫描并识别积木 — 用户可以使用智能手机的摄像头扫描积木,应用程序会自动识别和分类这些物品,简化收藏管理。
- 查找丢失的积木 — 应用程序分析用户的收藏,识别套装中缺少的积木,帮助更快完成。
- 购物建议 — 应用程序比较不同在线商店中缺少积木的价格,提供最佳购买选项,让用户找到最划算的购买选项。
- 积木交换站 — 用户可以与其他收藏家交换乐高积木。你可以提供多余的积木,也可以寻找你需要的积木以完成你的套装。
- 购买推荐 — 根据用户的收藏情况和偏好,应用程序会推荐可能感兴趣的全新乐高套装。
通过这款应用,乐高迷可以轻松管理他们的收藏,找到缺失的零件,并与其他乐高迷交流,一起建立一个更丰富、更完整的收藏。
概要参与这个项目对我们团队来说是一次很好的学习和合作机会。我们每个人都有自己不同的贡献,这帮助我们从不同的角度解决问题。我们能够分享想法,坦诚地讨论,并一起找到了许多创新的解决方案。
乐高项目很快就不仅仅是一项任务那么简单了。乐高多年来一直是乐趣和创意的源泉,和这么受欢迎的东西一起工作真是太酷了,真是太令人兴奋了。
我们确实遇到了一些挑战,特别是在硬件限制方面,这限制了我们无法在更多种类的乐高积木上测试模型。不过,我们还是建立了一个初步的功能性模型,未来还有改进的空间。我们的工作激发了我们的兴趣,让我们对未来有更多的期待。我们希望能有更多的资源来继续这个项目。
我们为在这个项目中取得的成绩和结交的朋友感到骄傲。我们之前都没有编程背景,而且我们来自不同的行业,也没有相关的数据科学或IT经验。
共同学习,写下你的评论
评论加载中...
作者其他优质文章