为什么使用使用transform来代替top_如何使用深度学习模型构建推荐系统?(具体案例分析)...

全文共3095字,预计学习时长9分钟

10dced10fc19772004314261cc50fdd0.png

本文将解释如何整合深度学习模型,构建服装推荐系统。

我们想要建立一个服装推荐系统,可以使用四种深度学习模型来获取用户服装使用的重要特征。

推荐系统可分为4类:

  • 基于产品特性的推荐
  • 基于其他用户对产品的行为的推荐
  • 基于用户一般特征的推荐
  • 基于上述多项标准的推荐
ec45930a9aa37b3642c6bbe13f39f6e3.png

在案例中,我们将根据用户和产品特性提出建议。计入考虑的用户特征是性别、年龄和体重指数(BMI)。计入考虑的产品特征是用户所穿的衣服类型。因此,我们需要一张用户的照片,对所有特征进行预测,推荐相应的服装。

将从用户的全身图像中获得服装特征。

使用名为AlphaPose的人体姿态估计系统来确定用户是否完整。AlphaPose检测一个人的19个点。如果检测到至少17个点,就认定是完整人形。

d9f5195e45e2f13a6e39f69051a7fc70.png

图1: AlphaPose估计系统

我们重新训练了网上最知名的其中一种分类器——YOLO v3。YOLO同时也是最精确的图像分类器之一。用于训练的数据集是一组巨大的 MMLAB 数据集,DeepFashion。

使用的另一个模型是 Dlib,get_frontal_face_detector()函数。此模型由 5 个 HOG 筛选器构建。模型检测前视图面和侧视图面。之所以选择该模型是因为它速度快且精确。在检测年龄和性别时,我们根据数据科学的文章,使用 openCV 和卷积神经网络对年龄和性别进行分类。

基于一篇名为《利用Keras和转移学习从人脸图像中估计身体质量指数》(Estimating Body Mass Index from face images using Keras andtransfer learning)的文章对IMC进行估计。

0067cd04609faeef81a63ffe5070f54b.png

图2:推荐系统的体系结构

模型集成

所有代码都是使用一些计算机视觉库(如 OpenCV)和一些深度学习框架(如Keras)在 Python3.5 中编写的。

  1. detector =dlib.get_frontal_face_detector()# Carga de modelos
  2. # CNN
  3. age_net, gender_net =load_caffe_models()
  4. # Boddy Mass Index
  5. model_bmi = get_trained_model()
  6. ### Face Detection
  7. img_h, img_w, _ = np.shape(image)
  8. detected = detector(image, 1)
  9. faces
  10. =
  11. np.empty((1,
  12. config.RESNET50_DEFAULT_IMG_WIDTH, 3))
  13. config.RESNET50_DEFAULT_IMG_WIDTH,detection= {}
  14. if len(detected) > 0:
  15. for i,d in enumerate(detected):
  16. x1, y1, x2, y2, w, h = d.left(),d.top(), d.right() + 1, d.bottom() + 1, d.width(),
  17. d.height()
  18. xw1 = max(int(x1 - margin * w), 0)
  19. yw1 = max(int(y1 - margin * h), 0)
  20. xw2 = min(int(x2 + margin * w), img_w - 1)
  21. yw2 = min(int(y2 + margin * h), img_h - 1)
  22. cv2.rectangle(image, (xw1, yw1),(xw2, yw2), (255, 0, 0), 2)
  23. #Get Face
  24. face_img = frame[yw1:yw2,xw1:xw2].copy()
  25. # Estimación
  26. age, gender = get_age_and_gender(face_img,age_net, gender_net)
  27. # Boddy Mass Index
  28. faces[0,:,:,:]=cv2.resize(face_img,
  29. (config.RESNET50_DEFAULT_IMG_WIDTH,3 )) /255.00
  30. bmi = round(float(model_bmi.predict(faces)[0][0]),2)
  31. detection[i]={'gender':gender, 'age':age, 'bmi':bmi}

通过这些代码,将模型加载到RAM中进行姿态估计(poseestimation)。为了估测年龄、性别和BMI,我们还剪切了脸部所在的区域。然后,使用 YOLO 对衣服进行分类,显示推荐的衣服类型。

  1. def eval_cloth(img_test,categoria_test, size_test):
  2. filename = './ClothEmbedding/X_reduced2.sav'
  3. X_reduced, hasher, pca, df =joblib.load(filename)
  4. img = cv2.imread(img_test)
  5. img_c = cv2.resize(img, (80, 80), interpolation=cv2.INTER_CUBIC)
  6. img_data_test = img_c.reshape(-1).astype(np.float32)
  7. img_transformed =hasher.transform(img_data_test.reshape(1, -1))
  8. img_reduced =pca.transform(img_transformed)
  9. # Distancia entre la muestra y la basede datos
  10. dist = [np.linalg.norm(img_reduced-e) for e in X_reduced]
  11. df['distance'] =dist
  12. df_test = df.sort_values(['distance'])
  13. # Se conserva sólo la categiríarequerida
  14. df_test = df_test[df_test['categoria2'] == categoria_test]
  15. # Se conservan sólo las tallasrequeridas
  16. cat_ns = ['tacones', 'chanclas', 'botas', 'bolsa', 'ropa_interior']
  17. ifnot(categoria_test in cat_ns):
  18. if(len(size_test) == 2):
  19. true_table = [(size_test[0] in sizes_r or size_test[1] in sizes_r) for sizes_r in df_test['tallas']]
  20. else:
  21. true_table = [size_test[0] in sizes_r for sizes_r in df_test['tallas']]
  22. df_test = df_test[true_table]
  23. returndf_test

最后一个功能会接收人和衣服的所有信息。将服装特性与数据库中的服装进行比对。会推荐与用户身着相似的服装。

最后,考虑到用户体验,就做了一个前端。

7d3c348dfa071101bf4b858604a2f2cd.png

图3:为推荐系统构建Web试图

感谢阅读!记得踊跃发言哟~

9bfae84dbfdb5004bc96b17b75efcba5.png

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值