范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Python使用余弦相似度比对特征,numpy余弦相似度比对特征

  先介绍下背景:我们有个项目是基于深度神经网络的菜品识别类项目,简易流程可以理解为:通过深度学习模型,提取菜品图像的菜品特征。将特征存储到特征库中。获取摄像头下方的菜品图像,提取特征。拿到摄像头下发图像的特征,通过余弦相似度对比,得出相似度。
  先来一段特征注册的代码逻辑:import numpy as np import pickle  def featRegister(tag):     """     repo 为字典类型, 特征库     {         "包子": array([[2.9554849,..,0.45501372],[1.6043618,0.,...,0.]], dtype=float32),          "鱼头": array([[1.6043618,..., 0.]], dtype=float32),          "米饭": array([[0., 0., 2.9554849 , ..., 0., 0.,0.45501372]], dtype=float32)     }     """     # 1. 组建特征库     repo = {}     for dishFeaId, featureSrc in tag.items():         if not featureSrc:             continue         feat = pickle.loads(featureSrc.encode("latin1"))         repo[dishFeaId] = np.array([feat])              # 2. 计算 active_repo_feats all_repo_feats repo_count     repo_concat = np.concatenate([repo[key] for key in repo], 0)     all_repo_feats = np.array([x / np.linalg.norm(x) for x in repo_concat])     active_repo_ids = []     for id in repo:         active_repo_ids += [id] * len(repo[id])     repo_count = len(repo)          return all_repo_feats, active_repo_ids, repo_count
  组成了一个repo的dict,并使用了pickle进行序列化,通过numpy进行拼接。
  接下来,我们来模拟一个需要比对的特征值:feats = [] for dishFeaId, featureSrc in featsN.items(): 	feat_index = pickle.loads(featureSrc.encode("latin1")) 	feats.append(np.array(feat_index))
  然后就是通过与余弦的相似度进行特征比对的逻辑:import uuid import numpy as np  def featsCompare(feats, feat_boxes, all_repo_feats, active_repo_ids, repo_count):     if repo_count <= 0:         return None          dishId_feaIds_ids = []     dishId_feaId_scores = []     feats = [x / np.linalg.norm(x) for x in feats]     cos_distance = np.matmul(feats, all_repo_feats.transpose((1, 0)))     ids_score_sorted = np.sort(cos_distance)     ids_score_sorted = [x[::-1] for x in ids_score_sorted]     ids_indices_sorted = np.argsort(cos_distance)     ids_indices_sorted = [x[::-1] for x in ids_indices_sorted]     for i in range(len(ids_indices_sorted)):         food_ids, food_scores = [], []         all_repo_ids_sorted = np.array(active_repo_ids)[list(ids_indices_sorted[i])]         for j in range(len(all_repo_ids_sorted)):             if all_repo_ids_sorted[j] not in food_ids:                 food_ids.append(all_repo_ids_sorted[j])                 food_scores.append(ids_score_sorted[i][j])         for x in food_ids:             dishId_feaIds_ids.append(x)         for x in food_scores:             dishId_feaId_scores.append(round(float(100 * x), 2))                  resultCount = len(feat_boxes)     resultList = []      for i in range(resultCount):         resultN = feat_boxes[i]         resultN["dishes"] = []         idList, scoreList = [], []         for j in range(repo_count):             k = j + i * repo_count             idList.append(dishId_feaIds_ids[k])             scoreList.append(dishId_feaId_scores[k])          # 筛选dishId与feaId、score对应关系         dishId_feaId_score = {}         for m in range(len(idList)):             dishId_feaId = idList[m]             dishId_feaIds = dishId_feaId.split("_")             if len(dishId_feaIds) == 1:                 dishId = dishId_feaIds[0]                 feaId = dishId             elif len(dishId_feaIds) == 2:                 dishId = dishId_feaIds[0]                 feaId = dishId_feaIds[1]             else:                 uuId = str(uuid.uuid1())                 dishId = uuId.replace("-", "")                 uuId = str(uuid.uuid1())                 feaId = uuId.replace("-", "")             if dishId not in dishId_feaId_score:                 # 排名最高的dishIds,及其对应的feaId和score 的汇总                 dishId_feaId_score[dishId] = [feaId, scoreList[m]]             if len(dishId_feaId_score) >= 10:                 break                      dishes = []         for dishId in dishId_feaId_score:             feaId = dishId_feaId_score[dishId][0]             score = dishId_feaId_score[dishId][1]             topN = {                 "dishId": dishId,                 "score": score,             }             dishes.append(topN)         resultN["dishes"] = dishes         resultList.append(resultN)              return resultList
  以上有一些是为了测试的业务逻辑,但整体逻辑和主要代码是没什么问题的。
  以上,仅供参考。

再见罗杰,世间再无三巨头!用他们代言过的三瓶美酒送行一个时代北京时间924凌晨,体坛传奇巨星,瑞罗杰费德勒在团体赛事拉沃尔杯上完成了运动涯的最后场赛,全球数亿球迷眼含热泪共同守候这历史性的刻它将意味着球运动史上前所未有的个伟时代三巨头时代的奥尼尔体味熏人杜兰特一头白发,NBA这些错位图骗了太多人不要以为只有专业的摄影或者拍照,才能拍出错位的效果,在NBA一样可以。关键NBA这些错位图,那不是刻意摆拍出来的,而是一瞬间抓拍形成的。这样的照片,就是因为抓拍才显得更有话题性和关国家一级运动员穿衣引争议!阿爽运动服太暴露,业内人士很合规近日,一项赛事引起媒体的关注,在这项赛事中,国家一级运动员阿爽成为了争议的焦点,这位优质运动员如今陷入了矛盾与挣扎之中,虽然她已经对自己的服装进行了回应,但是部分网友依旧没有办法认30投26中!浙江神塔赴美特训初显成效,19岁2米23,未来值得期待随着CBA新赛季的开幕的日子越来越近,CBA各支球队目前都是开始为新赛季备战,都希望能够在新赛季取得好成绩,不过国内球员在征战CBA联赛之前,还有需要进行一场考试获得上岗证,那就是6年暴涨7400万!24岁巨星完成蜕变,未来或成队长,皇马拒1亿报价近日,德转更新了西甲球员的身价榜单,作为西甲和欧冠卫冕冠军的皇马队内多位球员的身价都有明显上涨,其中24岁的巴尔韦德身价上涨了1000万欧元,当下他的身价来到8000万欧元,队内仅ESPN球员排行榜前五揭晓字母哥第一库里第五北京时间9月24日,ESPN公布了新赛季球员榜单的前五名,接下来就让我们一起来看一下具体的排名情况。第五名斯蒂芬库里金州勇士(控球后卫)2021年排名第五名如果说总决赛MVP的荣誉马斯克的星链有啥用?会不会取代5G,未来会不会构成威胁?中国的5G事业发展走在了世界的前列,不仅在国内的民用领域进行大面积的铺开,更是走出了国门,覆盖到了欧洲中亚等地区国家。如今在这一领域,美国想要占据主导权已经来不及了。但依托马斯克的超拼网观察不远的未来,加油站可能会变身换电站随着新能源行业的蓬勃发展,这已经离我们很近很近。新能源很好,省钱,环保,但障碍是充电慢,耗费时间长,一辆电动车从零电到充满,一个小时是基本的,那怕是充电5分钟,续航200公里的小鹏525!辽宁女排惨遭江苏队小朋友羞辱,创下历史最低局分江苏女排31对辽宁最终B组第一。看完整场比赛,有如下几点感想一是,辽宁队基本功有点差,平时不知道在训练什么,没有技战术可言,就靠孙小轩石冰彤两个人偶尔发个闪光点。第一局255,几乎美国女篮主帅称中国队正处于一个非常好的时期新华社悉尼9月24日电(记者岳东兴王琪)24日在女篮世界杯小组赛负于美国队后,中国女篮主教练郑薇和队员王思雨表示,全队本场整体表现很好,打出了自身特点。美国队主帅谢丽尔里夫称赞中国世界杯夺冠热门悲喜夜巴西阿根廷高奏凯歌,德国英格兰悲惨出局北京时间9月24日凌晨,国际足坛进行了多场比赛,2022年卡塔尔世界杯夺冠热门中,巴西阿根廷均以30完胜对手,内马尔梅西表现出色德国和英格兰则双双失利,提前退出欧国联竞争。巴西30
比特币,区块链,去中心化,是代表未来金融,还是击鼓传花的骗局我认识几个玩(投资)虚拟货币的,比较狼狈,但是几个人的状况不足以证明一个行业的好坏。不知道你们身边有没有,是什么情况。虚拟货币(类比特币,以太坊)才出来时,很多人认为是一个骗局,没2022年建筑行业发展新趋势现代建筑市场竞争日益激烈,建筑企业都面临着巨大生存压力,要想可持续发展,必须及时掌握行业发展趋势,方便企业确定下一步的经营发展方向。市场瞬息万变,建筑行业发展进程进一步加快,短短几40岁倦鸟该回老家吗?沪漂顶着20倍房价差留上海,中年人已无法说走就走本文来源时代周报作者齐鑫刘婷北漂沪漂们的中年危机有解了?近日,全国政协委员上海市政府参事胡卫表示,建议40岁以上中年人才返乡建设倦鸟归巢。胡卫认为,三四线城市和乡村的节奏显著慢于一方大特钢荣获2021年白玉兰杯优质建筑用钢品牌人气企业称号3月4日获悉,经全国优质钢铁企业评审委员会严格认定,通过对企业生产能力工艺技术产品质量营销能力物流体系企业环保管理企业社会责任企业研发能力国际供应能力品牌商誉等多维度进行综合评定,甘肃一托育中心粗暴对待幼儿,网友看了愤怒必须严惩不贷近年来,各种托育中心遍地开花,这本来是解决年轻父母们照顾孩子的后顾之忧可以放心工作的一项便民服务,但由于从业者的素质参差不齐,托育中心虐待幼儿的事件时有发生。3月22日晚,一段关于它是羊膻味的克星,往锅里加点它,羊肉细腻无腥味,越吃越香它是羊膻味的克星,往锅里加点它,羊肉细腻无腥味,越吃越香羊肉我们都喜欢吃,吃起来鲜香嫩滑的,让人吃了就忘不了,羊肉不仅好吃还有营养,含有丰富的蛋白质维生素矿物质等营养物质,常吃可以早餐不知道吃什么,试试这五种早餐饼,让人一看就想吃大家都知道早餐很重要,但是早餐怎么做才能好吃,一直都是个令人头痛的问题,尤其是家里有小孩子的,说不吃就不吃了。今天就分享几种早餐饼的做法,好看还好吃,一看就有食欲,特别适合家里有孩你有哪些买了又买吃了又吃的零食推荐?作为一个动不动就容易嘴巴寂寞的人,零食那可是每天的精神氮泵!!烂大街的常见零食我不做推荐了。今天写的这些个零食都是小众的超市没有的,我个人超级心水并回购N次!不好吃不上瘾你来骂我,春天,无论贫富,女人多吃6红,补血养元气,滋润皮肤显年轻现代营养学证明,红色食物是优质蛋白维生素膳食纤维和无机盐的重要来源,且富含容易被人体吸收的铁质,所以对女性朋友是非常的友好的,既能补充人体所需营养素,又能改善女性的气色,补充精力。水蒸蛋用凉水还是热水?蒸几分钟?看酒店大厨如何做,比豆腐还嫩鸡蛋营养价值丰富,在众多的鸡蛋吃法中,煮鸡蛋和蒸鸡蛋,是两种最营养的吃法,能确保鸡蛋中的营养最大化。但是相比较于煮鸡蛋的时候,蒸鸡蛋会更适合大家去食用,因为煮鸡蛋口感太噎人,蒸鸡蛋西装里面穿什么?建议这9种内搭,百搭又经典,关键还时髦上档次早春是一个温暖又寒冷的季节,早晚相差十几度,让我们早早就把西装这样笔挺又有厚度的外套穿上身了。但是,西装是一款正式的外套,想让它日常和通勤都能穿得很好看,内搭一定要选好,这样风格才