王天彤,朱 毅,乔卓晓
(大连外国语大学 软件学院,辽宁 大连 116000)
体素网格(Voxel)就是用规则的有体积的小网格去表达3D模型,这种方式会损失一些细节,并且分辨率越高,小网格也就越多,而体素就是固定分辨率的三维栅格地图,体素网格是固定分辨率的,与之对应可变分辨率的网格叫八叉树地图(Octomap)。但相对的计算量较大,通过衡量分辨率和计算量,发现最优方式是选择固定分辨率的体素网格。体素网格的表达方式比较容易输入到卷积神经网络(CNN)中,也被称为粗略版点云。
多边形网格(Polygonal Mesh)是构成3D对象的顶点,边缘和面的集合。多边形网格能够清晰的将3D对象的形状和外部细节展示出来,因此,用其技术构造的模型被广泛用于动画电影、广告和视频游戏中。大型表单是由小体积且互相关联的平面(通常是三角形或矩形)所构建的,如同拼图一样相互拼凑结合在一起。多边形网格中的每个顶点都存储x,y和z坐标信息,同时,多边形的每个面也储存这表面信息,渲染引擎提取这些信息后将其用于计算闪电和阴影(以及其他信息)。由于多边形网格的建模自由度大,因此,几乎所有对象的模型都可使用多边形网格构建,多边形网格进行建模的基本构想是运用线和多边形等简易平面对复杂物体的3D表面进行近似构建,从而做到还原物体原本外表。但多边形网格因其使用方法也有其局限性,例如用曲面难以用直线做到极其相似,有些有机形状需要大量的顶点和线段构建而变得复杂,诸如头发和液体之类的能复杂形变的物体也很难通过多边形网络建模。
点云(Point Cloud)是某个坐标系下的点的数据集。点可以存储丰富的信息,例如点的三维坐标、点的颜色、点的分类值、强度值、甚至时间等等。点云可以通过其丰富的内容和自由的形式现实原子化,也就是通过高精度的点云数据将现实世界进行还原构建。点云分为稀疏点云和密集点云,使用三维坐标测量机所得到的点因为其数量少,点间距较大的特点,被称为稀疏点云;而使用三维激光扫描仪或照相式扫描仪得到的点云,点数量较大并且较密集,所以称之为密集点云。
点云相较于多边形网格和体素网格具有精度上的优越性,所以在实际项目中,我们采用三维激光扫描与基于深度学习的二维影像三维重建方法获取精度较高的三维模型点云数据,再将其处理为多边形网格模式以降低资源消耗。
三维激光扫描的原理是,通过数道激光照射到物体表面,之后物体所反射回来的激光则会携带位置、距离等可以用于构建模型的信息。若将激光束按照特定轨迹进行扫描,则能够做到同时进行扫描和记录激光所返回的信息,在极为精细的扫描后,即可得到大量的激光点,从而形成激光点云。采集后的三维激光点云的原始数据,可以利用专业软件对其分析整理。例如采用Trimble Real-Works三维点云数据进行自动化处理,主体流程包括各测站点云数据拼接配准,数据去噪,坐标转换等一系列操作。数据拼接通常有多种方法,无目标拼接,有目标拼接以及采集过程实时自动处理拼接。使用RECAP软件将去噪后的E57点云格式转换为CAD可读取的RCS/RCP格式。在CAD读取之后,设定坐标轴向,以满足绘制需求。
此方法使用的前提是,使用点云紧实的表达和传统的2D卷积,学习先验的形状信息,此方法主要分为3个模块。
1.3.1 3D结构生成器
如图1所示,该模块根据2D的RGB图和物体对应的二元掩模(binary mask)预测像素点的三维坐标(x,y,z)。
图1 通过2D图片预测三维点坐标
该步骤的输入输出为:
输入:Single RGB image
输出:2D projections at predetermined viewpoints
其中:2D projection==3D coordinates(x,y,z)+binary mask(m)
1.3.2 点云融合
融合点云成3D模型,如图2所示,这是可行的(因为每幅图像对应的3D外形都是固定的且之前已经知道的)。
图2 点云融合为3D模型
其输入输出如下:
输入:2D projections at predetermined viewpoints
输出:Point cloud
1.3.3 根据3D模型生成新的2D投影,与Ground Truth比对计算代价函数(loss)
其输入输出如下:
输入:Point cloud
输出:Depth images at novel viewpoints
如图3所示,如果生成的3D模型是接近真实数据的,那么新视角的投影应该也是接近真实的Ground Truth,然后根据代价函数重复上述步骤修正数据直到其不再收敛,此时我们就得到了几乎与实物完全相同的三维模型。
图3 计算代价函数
用户轮廓(User Profile)主要是用户(注册)信息,以及通过对用户的各种反馈信息处理整合。更好地描述并完善用户特征,是后续推荐和排序的基石。一般情况下会包含以下具体内容。
(1)用户兴趣数据。
(2)用户的基础注册信息、背景信息:例如用户出生地、年龄、性别、兴趣和职业等。这些信息一般从用户注册信息中提取,例如各种APP的注册用户,网站的注册用户等。
(3)用户行为反馈:包括显示(explicit)的反馈和隐藏(implicit)的反馈。显示的反馈包括用户的评价,态度等,例如微博上针对内容的点赞行为(正向显示反馈)和屏蔽,拉黑行为(负向显示反馈),淘宝上的评分;隐式反馈包括用户的浏览行为,例如在百度搜索搜过哪些词,淘宝上点击了那些商品页面,在微博上参与了哪些话题的讨论等。
(4)用户交互偏好:例如用户喜欢使用哪些快捷功能,常用哪些功能,以及从这些操作中分析出来的偏好,比如在淘宝上搜索那些商品反馈出用户的商品喜好从而精准推送。
(5)用户上下文信息:通过用户的各种数据综合分析,做到更好的为用户画像,例如通过GPS和行程信息判断其职业,通过支付宝等交易信息判断其收入水平。
在本系统中,根据商品模式和调研分析主要采取以下标签划分。
年龄段:主要分为儿童、青少年、中年、老年。研究显示,不同年龄段对家居风格的偏好以及消费水平差异较大。
其中儿童偏好色彩丰富,造型风格特别,且有交互功能的物件。但面向儿童的商品的安全性是最需谨慎的,必须考虑到材料的安全性,例如坚固性,形状是否有尖锐部分,是否含有对身体有害的物质、气味等。同时儿童的消费水平相对较高,对质量更加注重。
青少年偏好流行文化的物件,例如科技、体育、影视、明星、动漫等。注重物件的交互性,可玩性,但并不注重实用性,他们更愿意为华而不实的东西消费。对质量,安全性的需求较差,但青少年大多自费,消费水平极其有限。
中年人更偏重于品质与奢侈性,选择风格多为古典、奢华、现代等。他们会严谨地参考用料是否高级,做工是否精致,品牌是否高端,以及实用性。中年人的消费水平最高,需要最细致的分类。
老年人偏好色彩单调,造型风格传统的家居风格。他们更加注重实用性、安全性,但不愿在此做过多的消费。老年人具备最高的消费水平,他们愿意在与养生保健有关的物品上消费,可以考虑更多地推荐安眠枕、养生床及人体工学椅等物件。
性别:根据调查报告显示,性别也是用户挑选家具用品的重要参考因素。男性较女性更不在意品牌而是实用性,消费水平较女性更低,男性更偏好电子科技类产品,而女性购买无实用性装饰品较多。
除此之外,用户的浏览历史、职业、地区等也是比较有意义的因素,需要根据具体情况进行更细的划分与联合。
推荐对象建模模块是根据对象与用户的交互数据与对象的属性数据建立的物品特征,即商品的特征。一般可以对其进行以下的分类。
类型:指家居商品的一般类型、桌子、椅子、柜子等。
价格:根据商品类型的均价将其划分为低廉、平均、奢侈类商品。
风格:根据商品的颜色、外形等,将其以艺术风格划分,例如古典、科幻、童话等。
除此之外,商品的材质、品牌、实用性等也是有参考意义的因素,需要根据具体情况进行更细的划分与联合。
在获取用户轮廓(模型)与商品模型之后,我们需要在二者的属性之间建立映射关系,即某种用户模型对应哪些商品以及某种商品对应哪些用户模型。
协同过滤(Collaborative Filtering)作为推荐算法中最经典的类型,将是本系统中主要采用的过滤方式,包括在线的协同和离线的过滤两部分。通过在线过滤将用户的喜好内容快速精准推送给用户,通过离线过滤,将不值得推荐内容滤掉,大幅提升效率,比如推荐后却评分低的数据,或者虽然推荐值高但是用户因各种原因不再需要的数据。我们在获取的用户模型与商品模型以及它们的映射关系的基础上,采用基于模型(model based)的协同过滤,也是目前最主流的协同过滤类型。
协同过滤有很多种方式,用神经网络乃至深度学习做协同过滤将是一个大趋势。目前比较主流的是限制玻尔兹曼机(RBM)其用两层神经网络来做推荐算法。在目前的Netflix算法比赛中,RBM算法有着很不错的表现。用深层的神经网络来做协同过滤会更好,即目前火爆的基于卷积神经网络和循环神经网络的方法。
卷积神经网络的前部分就是由若干个卷积运算和采样操作组合而成,最后一层的尾部则是全连接的分类器,从图4中可以看出,可以采取逻辑回归、softmax回归或者是支持向量机,可以是包含隐含层的多层感知器也可以是简单的单层感知器,本文中采用的是单层感知器。在初始化尾部的单层感知机的时候,我们在这里将它看做是一种分类,每一类归结为一个商品属性,这里采用的都是同一种策略。从图4中可以看出,对于每一个输出节点,如果商品具有该属性,那么该节点的值便为1,否则为0。
图4 全连接层
前向传播训练过程如图5所示。
图5 前向训练流程
卷积层:使用权重矩阵W并做加权求和,此处的权重二维矩阵就是卷积核,卷积操作后再加上偏置并输入到激活函数sigmoid中。
池化层:本文所采用的是平均池化的计算方法,因此此处的池化可以看做是一种特殊的卷积操作,池化操作不需要偏置,经过池化后得到了下一层的输入特征。
尾部感知机:最后一层将一个训练块中的某个训练样本的所有输出连接起来,得到的输出向量乘上单层感知机的权重矩阵,并加上尾部感知机的偏置后做卷积操作,得到最终的输出结果。
先进行前向训练,再反向传播调整误差,如图6所示。可以对用户进行聚类,相似用户在训练和推荐阶段使用同一组训练模型参数。
图6 训练并调整误差图
其中用户信息和商品信息都可以提前获取后数字化。在离线训练模型阶段,可以利用数字化后的用户信息、商品信息和行为信息,对事先判定为同种的用户使用同一种模型对其进行训练,并保持对模型参数的定期更新;在实时推荐阶段,只需要将之前的数据与新采集到的行为数据进行融合,输入到模型之中,就可以实现实时推荐,算法的离线训练流程如图7所示。
图7 离线训练流程
根据系统需求,划分的系统结构主要包括点云获取模块,推荐系统模块,用户交互模块。
(1)点云获取模块是指通过实物与互联网上的物品预览图大数据获取用以构建三维模型点云数据的模块,其下包含3个子模块:一是实物扫描模块,主要用于难以通过CNN二维转三维方式构建的实物商品的数据录入;二是卷积绘制模块,将互联网上大量的电商产品的预览图通过带入2D卷积生成点云数据,通过先决经验的方式以合理的尺寸形状重构成三维模型;三是点云数据处理模块,点云相较于多边形网格和体素网格具有精度上的优越性,但在实际项目中,我们使用实物扫描模块与卷积绘制模块获取精度较高的三维模型点云数据消耗资源较大,而直接推荐给用户的也应该是资源更小的形式,所以需要再将其处理为多边形网格模式以降低资源消耗。
(2)推荐系统模块是指将用户与商品按一定标准划分,建立映射关系,产生推荐方案的模块。其包括两个子模块:一是用户与商品建模模块,主要是根据用户与商品的交互信息以及用户和商品的属性生成的用户模型与商品模型,用以进行基于模型的协同过滤;二是推荐方案产生模块,此模块下建立用户模型特征与商品模型特征的映射关系,并根据此映射关系,采用基于模型的协同过滤算法产生推荐方案,将推荐法案发送至用户交互模块。
(3)用户交互模块是用户使用的应用程序,应用程序采用3D引擎模拟仿真第一与第三人称室内环境,允许用户在虚拟空间中自定义家居用品与布局。在PC端可采用鼠标控制视角,键盘控制位置的方式,在移动端可采用虚拟摇杆的方式。交互界面如图8所示。
图8 交互界面示例
面前的房间就是用户进行自定义布局的3D虚拟空间,右侧UI上层是商品的类别,点击它们会进入到各自类别的更细致的分类。上一页与下一页按钮即实现在商品类别与具体商品翻页的功能。隐藏/显示按钮是隐藏或显示UI的按钮,用于预览整体布局效果,这个按钮不会被隐藏。左侧UI最上层是一个文字列表,这里会显示当前布局中用户所有选中使用的商品。锁定/接触按钮,当用户通过点击选中一个物品,点击此按钮会将该物品锁定或解锁,锁定状态下此物品不参与到射线碰撞检验中,该物品无法再被移动或删除。当用户提交方案时,会将左侧列表中显示的所有布局中采用的物件提交至推荐系统,由推荐系统返回推荐方案。
整个系统由点云获取模块、推荐系统模块、用户交互模块3大模块与数据库组成。
在系统运作时,点云获取模块最先运作,它搜集大量商品的点云数据,并将数据传入推荐系统模块。
推荐系统模块会将由点云获取模块传入的数据建立为商品模型,并将模型数据传入至数据库。
用户交互模块首先获取用户的信息,将信息传入至推荐系统。
推荐系统将由用户交互模块传入的用户信息建立为用户模型,将模型数据传入至数据库,并根据已获得的用户模型和商品模型建立映射关系。
用户交互模块获取用户的家居购置方案,将方案提交至推荐系统模块。
推荐系统将由用户交互模块获取的购置方案与映射关系综合,形成推荐方案,将数据库中符合推荐方案的商品返回给用户。
至此系统运行完毕。