当前位置: 江南文明网 > 科技 >

如何使用深度学习模型构建推荐系统?

条评论

如何使用深度学习模型构建推荐系统?

如何使用深度学习模型构建推荐系统?(具体案例分析)

来源:Pexels

 

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

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

 

推荐系统可分为4类:

 

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

 

如何使用深度学习模型构建推荐系统?(具体案例分析)

来源:Pexels

 

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

 

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

 

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

 

如何使用深度学习模型构建推荐系统?(具体案例分析)

图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进行估计。

 

如何使用深度学习模型构建推荐系统?(具体案例分析)

图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

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

 

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

如何使用深度学习模型构建推荐系统?(具体案例分析)