在本文中,我将解释我们如何整合一些深度学习模型,以便建立一个装备推荐系统。我们要建立一个装备推荐系统。我们使用了四种深度学习模型来获取用户使用的服装的一些重要特征。
推荐系统可分为4组:
- 基于产品特性的建议
- 基于其他用户对产品的行为的建议
- 基于用户一般特征的建议
- 基于上述多项标准的建议
在我们的例子中,我们将根据用户和产品的特点提出建议。我们考虑的用户特征是性别、年龄和体重指数 (BMI)。我们考虑的产品特征是用户所穿的衣服类型。因此,我们需要一张用户的照片,以便预测我们需要做出服装推荐的所有特征。
我们将从用户的全身图像中获得服装特征。
我们使用名为 AlphaPose 的姿势估计器来确定用户是否完整。阿尔法姿势检测一个人的19个关键点。如果它检测到至少 17 点,我们假设此人已完成。
图 1:阿尔法姿势估计
我们重新训练了网上最知名的分类器之一,YOLO v3。YOLO 也是最精确的图像分类器之一。用于培训的数据集是一组巨大的 MMLAB 数据集”DeepFashion”。
使用的另一个模型是 Dlib,获取正面_面_探测器()。此模型由 5 个 HOG 筛选器构建。模型检测前视图面和侧视图面。之所以选择这个模型,是因为它具有极大的精度和非常快。对于年龄和性别检测,我们遵循数据科学帖子,他们使用 openCV 和卷积神经网络进行年龄和性别分类。
对于 IMC 的估计,我们基于文章”使用 Keras 和转移学习从面部图像估计身体质量指数”
图2:推荐系统的体系结构
模型集成
所有代码都是使用一些计算机视觉库(如 OpenCV)和一些深度学习框架(如 Keras)在 Python3.5 中编写的。
detector = dlib.get_frontal_face_detector()
# Carga de modelos
# CNN
age_net, gender_net = load_caffe_models()
# Boddy Mass Index
model_bmi = get_trained_model()
### Face Detection
img_h, img_w, _ = np.shape(image)
detected = detector(image, 1)
faces
=
np.empty((1,
config.RESNET50_DEFAULT_IMG_WIDTH, 3))
config.RESNET50_DEFAULT_IMG_WIDTH,detection = {}
if len(detected) > 0:
for i, d in enumerate(detected):
x1, y1, x2, y2, w, h = d.left(), d.top(), d.right() + 1, d.bottom() + 1, d.width(),
d.height()
xw1 = max(int(x1 - margin * w), 0)
yw1 = max(int(y1 - margin * h), 0)
xw2 = min(int(x2 + margin * w), img_w - 1)
yw2 = min(int(y2 + margin * h), img_h - 1)
cv2.rectangle(image, (xw1, yw1), (xw2, yw2), (255, 0, 0), 2)
#Get Face
face_img = frame[yw1:yw2, xw1:xw2].copy()
# Estimación
age, gender = get_age_and_gender(face_img, age_net, gender_net)
# Boddy Mass Index
faces[0,:,:,:]=cv2.resize(face_img,(config.RESNET50_DEFAULT_IMG_WIDTH, 3 )) /255.00
bmi = round(float(model_bmi
我们还剪切了图像中面部所在的区域,以便估计年龄、性别和 BMI。然后,我们使用 YOLO 对衣服进行分类,并得到我们推荐的衣服类型。
def eval_cloth(img_test, categoria_test, size_test):
filename = './ClothEmbedding/X_reduced2.sav'
X_reduced, hasher, pca, df = joblib.load(filename)
img = cv2.imread(img_test)
img_c = cv2.resize(img, (80, 80), interpolation=cv2.INTER_CUBIC)
img_data_test = img_c.reshape(-1).astype(np.float32)
img_transformed = hasher.transform(img_data_test.reshape(1, -1))
img_reduced = pca.transform(img_transformed)
# Distancia entre la muestra y la base de datos
dist = [np.linalg.norm(img_reduced-e) for e in X_reduced]
df['distance'] = dist
df_test = df.sort_values(['distance'])
# Se conserva sólo la categiría requerida
df_test = df_test[df_test['categoria2'] == categoria_test]
# Se conservan sólo las tallas requeridas
cat_ns = ['tacones', 'chanclas', 'botas', 'bolsa', 'ropa_interior']
if not(categoria_test in cat_ns):
if (len(size_test) == 2):
true_table = [(size_test[0] in sizes_r or size_test[1] in sizes_r) for sizes_r in df_test['tallas']]
else:
true_table = [size_test[0] in sizes_r for sizes_r in df_test['tallas']]
df_test = df_test[true_table]
return df_test
最后一个功能接收人和衣服的所有信息。将服装特性与数据库中的服装进行比较,并通过嵌入提出建议。我们建议与用户所穿的衣服相似。
最后,在UX中思考,我们做了一个前端。
图 3:为推荐系统构建的 Web 视图
感谢您的阅读!让我知道你的想法在评论。