В этой статье я собираюсь объяснить, как мы интегрируем некоторые модели глубокого обучения, чтобы создать систему рекомендаций по набору одежды. Мы хотим построить систему рекомендаций по одежде. Мы использовали четыре модели глубокого обучения, чтобы получить некоторые важные характеристики одежды, используемой пользователем.
Системы рекомендаций можно разделить на 4 группы:
- Рекомендация на основе характеристик продукта
- Рекомендации, основанные на поведении других пользователей с продуктом
- Рекомендация на основе общих характеристик пользователя
- Рекомендация, основанная на более чем одном из ранее упомянутых критериев
В нашем случае мы собираемся дать рекомендации, основанные на характеристиках пользователя и продукта. Пользовательские характеристики, которые мы учитывали, были пол, возраст и индекс массы тела (ИМТ). Характеристики продукта, которые мы учитывали, были типом одежды, которую носит пользователь. Таким образом, нам нужна фотография пользователя, чтобы сделать прогноз всех характеристик, которые нам нужны, чтобы дать рекомендацию об одежде.
Мы собираемся получить характеристики одежды от изображения тела пользователя.
Мы используем оценку позы AlphaPose, чтобы определить, завершен ли пользователь или нет. Альфа Поза обнаруживает 19 ключевых точек человека. Если он обнаружит, по крайней мере, 17 баллов, мы предполагаем, что человек завершен.
Изображение 1: оценка AlphaPose
Мы переучили один из самых известных классификаторов в сети, YOLO v3. YOLO также является одним из самых точных классификаторов изображений. Набор данных, используемый для обучения, представляет собой небольшой набор огромного набора данных MMLAB, DeepFashion.
Другой используемой моделью был Dlib, get_frontal_face_detector (). Эта модель построена из 5 фильтров HOG. Модель распознает грани переднего вида и грани бокового обзора. Эта модель была выбрана потому, что она обладает высокой точностью и очень быстра. Для определения возраста и пола мы следили за постом науки о данных, где они используют openCV и сверточную нейронную сеть для классификации возраста и пола.
Для оценки IMC мы использовали статью «Оценка индекса массы тела по изображениям лица с использованием Keras и трансферного обучения».
Рисунок 2: Архитектура системы рекомендаций
Интеграция моделей
Весь код был написан на Python3.5 с использованием некоторых библиотек компьютерного зрения, таких как OpenCV, и некоторых основ глубокого обучения, таких как Keras.
Джава
xxxxxxxxxx
1
detector = dlib.get_frontal_face_detector()
2
# Carga de modelos
3
# CNN
4
age_net, gender_net = load_caffe_models()
5
# Boddy Mass Index
6
model_bmi = get_trained_model()
7
### Face Detection
8
img_h, img_w, _ = np.shape(image)
9
detected = detector(image, 1)
10
faces
11
=
12
np.empty((1,
13
config.RESNET50_DEFAULT_IMG_WIDTH, 3))
14
config.RESNET50_DEFAULT_IMG_WIDTH,detection = {}
15
if len(detected) > 0:
16
for i, d in enumerate(detected):
17
x1, y1, x2, y2, w, h = d.left(), d.top(), d.right() + 1, d.bottom() + 1, d.width(),
18
d.height()
19
xw1 = max(int(x1 - margin * w), 0)
20
yw1 = max(int(y1 - margin * h), 0)
21
xw2 = min(int(x2 + margin * w), img_w - 1)
22
yw2 = min(int(y2 + margin * h), img_h - 1)
23
cv2.rectangle(image, (xw1, yw1), (xw2, yw2), (255, 0, 0), 2)
24
#Get Face
25
face_img = frame[yw1:yw2, xw1:xw2].copy()
26
# Estimación
27
age, gender = get_age_and_gender(face_img, age_net, gender_net)
28
# Boddy Mass Index
29
faces[0,:,:,:]=cv2.resize(face_img,(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}
В этих нескольких строках мы загружаем модель в ОЗУ и делаем оценку позы. Мы также вырезали область изображения, где находится лицо, чтобы оценить возраст, пол и ИМТ. Затем мы делаем классификацию одежды с помощью YOLO и получаем тип одежды, который мы рекомендуем.
Джава
x
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 base de 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ía requerida
14
df_test = df_test[df_test['categoria2'] == categoria_test]
15
# Se conservan sólo las tallas requeridas
16
cat_ns = ['tacones', 'chanclas', 'botas', 'bolsa', 'ropa_interior']
17
if not(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
return df_test
Эта последняя функция получает всю информацию о человеке и одежде. Характеристики одежды сравниваются с одеждой в нашей базе данных, а рекомендации составляются путем встраивания. Мы рекомендуем одежду, подобную той, которую носит пользователь.
И наконец, думая в UX, мы сделали фронт-энд.
Изображение 3: веб-представление, построенное для системы рекомендаций
Спасибо за прочтение! Дайте мне знать ваши мысли в комментариях.