助力养殖行业数字化转型,基于深度学习模型开发构建羊脸识别系统

news2024/12/24 18:19:26

养殖行业的数字化进程在国内还是比较缓慢的,一些大厂在前面的一些探索时期做过一些相关的工作,但是受限于各种因素并没有能够广泛地铺展开来,数字化不应该被理解为非常高大上的遥不可及的东西,数字化也不应该成为中低产的一道鸿沟难以跨越,未来的数字化一定是低门槛的,能够切实带来收益的东西,在我们前面的文章中已经基于奶牛相关的养殖场景做了很多探索性的工作,感兴趣的话可以自行移步阅读即可。

《助力养殖行业数字化转型,基于深度学习模型开发构建牛脸识别系统》

这里我们简单对一些经典的人脸识别模型做一下总结和回顾,人脸识别是计算机视觉中的一个重要任务,有多种常用的模型用于人脸识别。以下是一些常见的人脸识别模型:

1、VGGFace:VGGFace是基于VGGNet架构,并在大规模人脸数据库上进行了训练的模型。它可以用于人脸识别和验证,并具有较好的性能。VGGFace模型是基于VGGNet架构的人脸识别模型,构建原理如下:

架构设计:VGGFace模型的主体结构遵循了VGGNet架构设计的思想。它由一系列卷积层和全连接层组成。卷积层用于提取图像的特征表示,而全连接层用于进行分类或验证。
卷积层组:VGGFace模型采用了多个大小为3x3的卷积核进行卷积操作,并通过非线性激活函数(如ReLU)引入非线性特征。为了增加网络的深度和非线性能力,它采用了多个相同大小的卷积层堆叠在一起。
池化层:在卷积层之后,VGGFace模型使用最大池化层,以减小特征图的尺寸,并在空间上进行下采样。最大池化操作有助于保留重要的特征并减少冗余信息。
全连接层:在卷积和池化操作之后,VGGFace模型使用全连接层将提取出的特征映射到对应的类别或验证结果。通常,最后的全连接层会经过softmax激活函数进行分类。
 
优点:
构建简单,易于理解和实现。
VGGFace模型具备较强的特征表达能力和模式识别能力,适合用于人脸识别和验证任务。
缺点:
模型参数量较大,导致计算复杂度较高,需要更多的计算资源。
该模型在训练和部署时可能遇到困难,由于模型结构庞大,需要更多的存储和内存。

2、FaceNet:FaceNet是一个基于卷积神经网络和三元组损失函数的人脸识别模型。它能够将人脸图像嵌入到高维特征空间中,并通过欧氏距离进行人脸识别和验证。FaceNet模型是一种基于卷积神经网络和三元组损失函数的人脸识别模型,其构建原理如下:

网络架构:FaceNet模型采用了一种深度卷积神经网络架构。它通过多层卷积和池化操作,逐步提取和学习输入图像的特征表示。最后经过全连接层将特征映射到一个高维特征空间中。
三元组损失函数:FaceNet模型使用三元组损失函数来优化特征表示。对于每个训练样本,从训练集中选择三个样本:锚样本(anchor)、正样本(positive)和负样本(negative)。锚样本和正样本属于同一个人,而负样本属于不同的人。三元组损失函数的目标是使得同一人的特征距离尽量小,不同人的特征距离尽量大。
特征嵌入空间:FaceNet模型学习到的特征向量被映射到一个高维特征空间中。通过欧氏距离或余弦距离,可以衡量不同人之间的距离,以进行人脸识别和验证。
优点:
通过三元组损失函数学习到的特征具有较好的表达能力,适合用于人脸识别和验证任务。
使用三元组损失函数能够直接优化特征向量的距离度量,使得相同人的特征更加接近,不同人的特征更加分散。
缺点:
模型相对复杂,训练过程可能较为耗时。
需要大规模的训练数据和计算资源。模型的性能高度依赖于训练数据的质量和数量。
需要注意的是,FaceNet模型中还可以应用其他技术进行改进,如加权三元组损失函数、在线硬负采样和样本挖掘等。这些改进技术可以进一步提升模型性能和鲁棒性。

3、DeepFace:DeepFace是Facebook提出的人脸识别模型,基于卷积神经网络和多层感知器。它可以进行人脸识别、验证和属性预测,具有较好的性能。DeepFace模型是Facebook提出的人脸识别模型,其构建原理如下:

网络架构:DeepFace模型是一个深度卷积神经网络的模型。它由多个卷积层和全连接层构成。卷积层用于提取人脸图像的特征表示,全连接层用于进行人脸识别。
人脸对齐:在DeepFace模型中,首先进行人脸对齐。通过检测人脸关键点,对输入图像进行变换,使得人脸在图像中对齐,减少变化因素的干扰。
特征提取:DeepFace模型使用多个卷积层提取输入图像的特征。通过多层卷积和池化操作,有效地捕捉不同尺度和抽象级别的特征信息。
全连接层和分类:在特征提取后,DeepFace模型通过全连接层将特征映射到人脸类别或特征向量表示。对于人脸识别,该模型可以通过训练识别出不同的人脸。
优点:
DeepFace模型具有较强的特征表达能力和模式识别能力,适合用于人脸识别任务。
通过人脸对齐技术,可以减少人脸间的姿态和尺度差异带来的影响,提高了模型的鲁棒性和准确性。
缺点:
DeepFace模型的训练和调参可能需要大量的计算资源和时间。
由于模型结构庞大,部署和推理的复杂性可能增加。
需要注意的是,DeepFace模型在提出时在LFW(Labeled Faces in the Wild)数据集上取得了很好的性能。然而,它也面临一些限制,如对于遮挡和光照变化的敏感性。为了获得更好的性能,可以结合其他的预处理方法和技术,如数据增强、特征融合等。

4、ArcFace:ArcFace是一种基于角度余弦间隔的人脸识别模型,通过缩小同一人的特征向量之间的角度余弦距离,扩大不同人之间的距离,来实现更好的人脸识别性能。ArcFace模型是一种基于角度余弦间隔的人脸识别模型,其构建原理如下:

构建特征提取网络:ArcFace模型通常使用卷积神经网络(CNN)作为特征提取器。通过多层卷积和池化操作,提取人脸图像的特征表示,并通过非线性激活函数引入非线性特征。
嵌入特征映射:ArcFace模型将经过特征提取的人脸特征映射到一个高维特征空间。该特征空间的设计目的是使得同一人的特征之间的角度余弦距离尽量小,而不同人的特征之间的距离尽量大。通过引入角度余弦间隔,使得特征在嵌入特征空间上进行了偏移。
添加ArcMargin Loss:为了优化特征空间的判别性,ArcFace模型引入了ArcMargin Loss。该损失函数通过在特征空间中计算特征向量和标签向量之间的角度余弦距离,并最小化同一人的特征距离,放大不同人的特征间距。通过调整ArcMargin Loss的超参数,可以控制同一人的特征向量之间的边界。
优点:
ArcFace模型在人脸识别任务中具备较高的准确性和鲁棒性。通过引入角度余弦间隔,提高了特征的可分性。
可以通过调整ArcMargin Loss的超参数来灵活控制特征向量的边界,使得模型适应各种复杂性和类别之间的差异。
缺点:
ArcFace模型在训练过程中需要大规模和均衡的数据集,对数据质量和数量有一定的要求。
模型相对复杂,需要更多的计算资源和时间来进行训练和推理。
需要注意的是,ArcFace模型的性能还受到超参数设置的影响,如角度余弦间隔的大小和ArcMargin Loss的权重。合适的超参数设置对于获得最佳性能非常关键。

5、OpenFace:OpenFace是一个用于人脸识别和验证的开源人脸识别模型。它使用深度神经网络进行人脸图像的特征提取和距离计算,具有较好的性能。OpenFace模型是一种用于人脸识别和验证的开源人脸识别模型,其构建原理如下:

人脸检测:首先,OpenFace模型使用人脸检测算法(如基于Haar级联分类器或深度学习的检测器)来在输入图像中定位和提取出人脸区域。
人脸对齐:为了减少姿态和尺度的影响,OpenFace模型通过人脸对齐操作将检测到的人脸区域进行几何变换。通常采用基于关键点(如眼睛、鼻子和嘴巴)的人脸对齐方法,使得不同人脸在特征位置上对齐。
特征提取:在人脸对齐后,OpenFace模型使用卷积神经网络(CNN)来提取人脸图像的特征表示。通过多层卷积和池化操作,高级特征被提取出来,形成一个固定大小的特征向量。
特征分类和识别:OpenFace模型通过全连接层将特征向量映射到对应的人脸类别或验证结果。可以使用softmax激活函数进行多类别分类,或使用阈值判定进行人脸验证。
优点:
OpenFace模型是开源的,提供了开源的实现代码和预训练模型,方便使用和定制。
通过人脸对齐操作,可以有效处理姿态和尺度变化带来的影响,提高了模型的准确性和鲁棒性。
模型具备一定的通用性,适用于不同的人脸识别和验证任务。
缺点:
OpenFace模型在大规模和复杂数据集上的性能可能有所限制。
模型在性能和速度方面可能不如某些专门优化的商业人脸识别模型。
模型的准确性受人脸检测和对齐算法的质量和稳定性影响。

6、SphereFace:SphereFace是一种基于球面几何的人脸识别模型,通过在特征空间中引入球面约束来提高人脸识别的性能。SphereFace模型是一种基于球面几何的人脸识别模型,其构建原理如下:

特征提取:SphereFace模型使用卷积神经网络(CNN)架构作为特征提取器。通过多层卷积和池化操作,提取人脸图像的特征表示。
特征映射:SphereFace模型将特征向量映射到球面上。这是通过在特征向量上进行归一化和投影操作实现的。归一化可以使特征向量落在单位球面上,然后通过投影操作将球面上的特征映射到一个限定范围内。
余弦角度分类器:在特征映射之后,SphereFace模型使用余弦角度分类器来进行人脸识别。该分类器通过计算特征向量与类别标签之间的角度余弦值,并将其作为分类的依据。具体而言,该模型将分类问题转化为特征向量与类别标签之间的二分类问题,通过优化角度余弦的Margin来学习特征表示。
优点:
SphereFace模型的特征映射到球面上,这利用了球面几何的特点,使特征向量具有更好的可分性。
通过优化角度余弦的Margin,该模型通过强制不同类别的特征向量之间的分离度,提高了人脸识别的准确性和稳定性。
缺点:
SphereFace模型对于面部姿态和遮挡等复杂情况的鲁棒性可能稍弱,对输入图像的质量和预处理要求较高。
由于特征映射到球面上的操作,模型的复杂度增加,可能导致训练和推理的计算开销加大。

与前文的整体技术路线是相同的,这里的核心目的就是想要将人脸识别技术搬到羊脸数据识别中,整体技术流程示意图如下所示:

 整体项目主要分为三大部分:

1、数据采集

这部分主要是要跟合作养殖厂进行对接,安装设备实地采集数据,我们的数据是对接到阿里云端oss的存储平台中了,这块因人而异,可以根据自己的实际需求进行处理即可,你存储在本地也都是可以的。

2、模型开发

这部分是整个项目最为核心的内容,在模型上,我前面总结对比了多款目前为止经典的人脸识别网络模型,这里最终决定选择arcFace模型来实现,在模型层面并没有去过多改造,主要是偏向数据集相关的开发适配,如果本身原生模型就能够有不错的表现那么后面的思路就拓宽了。

3、应用构建

在所有的实际项目中,模型的开发训练评估测试工作仅仅是项目的一部分而已,真正要让模型发挥出来作用的话,是需要开发构建应用也就是实现业务逻辑部分才行的,在这里主要是能要对外部输入图像进行响应处理返回正确结果。

首先看下数据集:

每个目录ID下存放的是单只羊的羊脸数据集。

本文依旧选用的是arcFace模型,可以参考前文说明,这里就不再赘述了。

整体训练过程loss数据如下所示:
 

28.49554878234863 28.36122703552246
26.448251190185548 30.44441795349121
22.917339782714844 28.14263343811035
19.10800880432129 28.265657424926758
16.56169502258301 28.006635665893555
13.722219200134278 25.89620590209961
11.93085578918457 20.021202087402344
10.174094924926758 20.273380279541016
9.257895278930665 15.120355129241943
8.078882255554198 15.526759147644043
7.367256584167481 12.761467933654785
6.78815788269043 9.665631294250488
6.172802677154541 7.019716501235962
5.745314445495605 7.525074243545532
5.494876651763916 7.099688529968262
5.396396732330322 6.39738130569458
5.2423255729675295 6.338007211685181
5.130193157196045 6.198169708251953
5.07472505569458 5.850244760513306
5.0294198799133305 6.410634994506836
4.994203395843506 5.985965967178345
4.966535930633545 5.553969860076904
4.940446796417237 5.938147068023682
4.917659816741943 5.585787057876587
4.895496597290039 5.407972097396851
4.874711971282959 5.763866901397705
4.853940620422363 5.4627299308776855
4.83395866394043 5.320657253265381
4.814438667297363 5.692613124847412
4.795453205108642 5.381541967391968
4.776773281097412 5.2457475662231445
4.758707256317138 5.6171555519104
4.7409313201904295 5.311766147613525
4.723709411621094 5.181070327758789
4.7071023941040036 5.552199125289917
4.690928859710693 5.245966911315918
4.6751644325256345 5.121516942977905
4.659910850524902 5.489439964294434
4.645095729827881 5.181874752044678
4.630678901672363 5.067218780517578
4.616962566375732 5.433080673217773
4.6036177825927735 5.127049922943115
4.590720138549805 5.019947052001953
4.5783258819580075 5.387711048126221
4.566368465423584 5.081918716430664
4.554848136901856 4.979071617126465
4.543887023925781 5.349139213562012
4.533280830383301 5.040514707565308
4.52316743850708 4.942654371261597
4.513592491149902 5.311756610870361
4.504299716949463 5.004668951034546
4.495562362670898 4.913930892944336
4.487207355499268 5.284327745437622
4.479306697845459 4.977153778076172
4.4717269706726075 4.890130519866943
4.46464916229248 5.258784770965576
4.457883949279785 4.953750371932983
4.451617317199707 4.869576930999756
4.445729465484619 5.241544008255005
4.440151042938233 4.934422016143799
4.4350037765502925 4.852663040161133
4.430132427215576 5.224523544311523
4.4256170463562015 4.917298793792725
4.421499710083008 4.839732885360718
4.417640247344971 5.212682247161865
4.414067325592041 4.906010389328003
4.410848846435547 4.829944372177124
4.4079525184631345 5.203676700592041
4.405214042663574 4.896440029144287
4.402802867889404 4.823580265045166
4.400668125152588 5.197094917297363
4.39873815536499 4.890859603881836
4.397003974914551 4.8192033767700195
4.3954691696167 5.194169282913208
4.394099445343017 4.887556791305542
4.393009090423584 4.817701101303101
4.392023506164551 5.191941261291504
4.391167526245117 4.887598752975464
4.390453968048096 4.817023515701294
4.389844932556152 5.190695762634277
4.389398975372314 4.886103630065918
4.3889604187011715 4.816188097000122
4.388584194183349 5.190183639526367
4.388340282440185 4.884408235549927
4.388122501373291 4.815371990203857
4.387853298187256 5.188681125640869
4.387586517333984 4.884839057922363
4.387446060180664 4.815969944000244
4.387167377471924 5.191036701202393
4.386994647979736 4.88573145866394
4.386748600006103 4.814674615859985
4.38659257888794 5.1875269412994385
4.386337928771972 4.884407997131348
4.386108531951904 4.816586256027222
4.38583589553833 5.187043905258179
4.385676670074463 4.884454965591431
4.385481796264648 4.815013408660889
4.385194244384766 5.187936305999756
4.384989185333252 4.883215427398682
4.384740600585937 4.81392765045166

可视化如下所示:

可以看到:相对还是比较平稳的。

接下来就是需要借助于faiss来进行向量化特征数据库创建处理了。简单对faiss总结回顾一下:

faiss是Facebook AI Research开源的一款用于高效相似性搜索和聚类的库。它特别擅长处理大规模向量数据,并提供了一系列高性能的算法和数据结构。下面是对faiss的详细介绍及其对应的优点和缺点:
算法支持:faiss提供多种高效的相似性搜索算法,包括基于倒排索引(inverted file)的算法、基于k-means的聚类算法、局部敏感哈希(LSH)算法等。这些算法具有广泛的适用性,能够满足不同的搜索和聚类需求。
高性能:faiss在设计上针对性能进行了优化,具备高度并行化和高效利用硬件的特点。它支持使用GPU进行计算加速,能够快速处理大规模向量数据,实现高速的相似性搜索和聚类。
易于使用:faiss提供了简单易用的API接口,方便用户进行向量索引、查询和聚类操作。它具备友好的Python和C++接口,还支持主流的机器学习框架,如PyTorch和TensorFlow。
可扩展性:faiss支持在线学习和增量索引的功能。它允许用户动态添加和删除向量数据,而无需重新构建索引结构,从而提供了较强的可扩展性和灵活性。
内存优化:faiss针对大规模向量数据的特点,提供了各种内存优化的技术。例如,faiss可以将数据划分为多个索引分片,以减少内存使用量;还可以对索引结构进行精细的参数调优,以平衡性能和内存占用。
优点:
faiss具备高性能和高效率的特点,能够快速处理大规模向量数据的相似性搜索和聚类任务。
提供了多种高性能的相似性搜索算法和数据结构,满足不同的搜索需求。
具有较好的可扩展性,支持在线学习和增量索引的功能。
提供了友好的API接口和多语言支持,使得使用和集成相对简单。
缺点:
faiss的主要应用场景是相似性搜索和聚类,不适用于其他更复杂的数据分析任务。
部署和使用faiss可能需要一定的技术背景和理解。

在我之前的一些博文里面已经比较详细地介绍过faiss这一向量化检索工具了,感兴趣的话可以自行移步阅读即可,这里就不再展开了:
《人脸识别场景下Faiss大规模向量检测性能测试评估分析》

《基于arcFace+faiss开发构建人脸识别系统》

《基于facenet+faiss开发构建人脸识别系统》

《大规模向量检索库Faiss学习总结记录》

《基于text2vec和faiss开发实现文档查询系统初体验》

还算是比较详细的了,感兴趣的话可以回过头去看下即可。这部分的检索应用实现跟前面的逻辑是完全一致的,就不再再次阐述了。

特征数据库创建核心代码实现如下所示:

def batch2Vec(picDir="datasets/", saveDir="DB/", save_path="DB.json"):
    """
    批量数据向量化处理
    """
    if not os.path.exists(saveDir):
        os.makedirs(saveDir)
    feature=[]
    cows={}
    count=0
    for one_cow in os.listdir(picDir):
        oneDir=picDir+one_cow+"/"
        print("one_cow: ", one_cow, ", one_num: ", len(os.listdir(oneDir)), ", count: ", count)
        for one_pic in os.listdir(oneDir):
            one_path=oneDir+one_pic
            one_vec=sinleImg2Vec(pic_path=one_path)
            if one_cow in cows:
                cows[one_cow].append([one_pic, one_vec])
            else:
                cows[one_cow]=[[one_pic, one_vec]]
            feature.append([one_path, one_vec])
        count+=1
    print("feature_length: ", len(feature))
    with open(saveDir+save_path, "w") as f:
        f.write(json.dumps(feature))

 到这里特征数据库就构建完成了,接下来就可以检索了,相关的实现在前文中都有这里就不再赘述了,直接看下实例:
【图像输入】

【结果输出】

Top5:
 

Top15:

【图像输入】

【结果输出】

Top5:

Top15:

 为了整体集成整套计算流程这里开发了专用的可视化系统界面,来帮助操作者便捷地使用整套项目,实例效果如下所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1038748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++标准模板库STL——list的使用及其模拟实现

1.list的介绍 list的文档介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个…

【Kubernetes】Kubernetes的污点和容忍度

Kubernetes的污点和容忍度 在K8S中,如果Pod能容忍某个节点上的污点,那么Pod就可以调度到该节点。如果不能容忍,那就无法调度到该节点。污点和容忍度就像谈恋爱的小情侣,你情我愿,女生知道男生的缺点,却依然…

【EI会议征稿】第八届能源系统、电气与电力国际学术会议(ESEP 2023)

第八届能源系统、电气与电力国际学术会议(ESEP 2023) 2023 8th International Conference on Energy System, Electricity and Power 第八届能源系统、电气与电力国际学术会议(ESEP 2023)定于2023年11月24-26日在中国武汉隆重举…

nacos配置中心的核心概念

书接上一篇https://blog.csdn.net/qq_45451226/article/details/133250390 1.命名空间(用于配置隔离) 默认:public(保留空间);默认新增的所有配置都在public空间。 开发,测试,生产:利用命名空间来做环境隔离。 在de…

AVL树的模拟实现(c++)

目录 搜索二叉树对于搜索查询来说是非常快的,但是它有着致命的缺陷,如果插入的数据是有序的,那么它的结构就会变成单链表,这对于搜索查询来说是非常不利的,因此为了解决搜索树的缺陷,弥补它的不足&#xff…

opencv实现仿射变换和透射变换

##1, 什么是仿射变换? 代码实现 import numpy as np import cv2 as cv import matplotlib.pyplot as plt#设置字体 from pylab import mpl mpl.rcParams[font.sans-serif] [SimHei]#图像的读取 img cv.imread("lena.png")#仿射变换 row…

loadEnv是vite的工具函数

loadEnv()函数返回一个对象,这个对象就是根据开发模式还是生产环境加载的.env.development文件里的环境变量,有系统自带的也有自己手写的 loadEnv(第1个参数,第2个参数,第3个参数) 注意:第3个参数如果是“”空字符…

一百八十六、大数据离线数仓完整流程——步骤五、在Hive的DWS层建动态分区表并动态加载数据

一、目的 经过6个月的奋斗,项目的离线数仓部分终于可以上线了,因此整理一下离线数仓的整个流程,既是大家提供一个案例经验,也是对自己近半年的工作进行一个总结。 二、数仓实施步骤 (五)步骤五、在Hive的…

华为孟晚舟:从最惨千金 到最强战士

作者:积溪 简评:华为25号开发布会,有何深意?从最惨千金到最强战士,孟晚舟和华为都回来了 #华为发布会 #孟晚舟 #任正非 #华为 华为发布会 在打谁的脸? 苹果只是前菜 今天才是正餐 两年前的今天 华为…

Vue3最佳实践 第五章 Vue 组件应用 2 ( Emit )

本章带领大家理解组件、props、emits、slots、providers/injects,Vue 插件 等Vue组件使用的基础知识。 第一章 Vue3项目创建 1 Vue CLI 创建vue项目 第一章 Vue3项目创建 2 使用 Webpack 5 搭建 vue项目 第一章 Vue3项目创建 3 Vite 创建 vue项目 第二章 Vue3 基础语…

Latex math equation中如何不斜体

math equation的字母会斜体,只需给不想斜体的字母加上 \text{NPSB}

C/C++鸡尾酒疗法 2023年5月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C鸡尾酒疗法 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 C/C鸡尾酒疗法 2020年6月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 鸡尾酒疗法,原指“高效抗…

分治算法求解:逆序对,Max Sum,棋盘覆盖,a-Good String——中山大学软件工程学院算法第四次实验课 必做+选做题

写英文注释不是要“秀英文”&#xff0c;而是因为鄙人正在准备雅思&#xff0c;顺手练习 逆序对 题目描述 完整代码 #include<iostream> using namespace std; int num[500010]; // input numbers int tmp[500010]; // sequence after merging left and right part lon…

【李沐深度学习笔记】线性回归

课程地址和说明 线性回归p1 本系列文章是我学习李沐老师深度学习系列课程的学习笔记&#xff0c;可能会对李沐老师上课没讲到的进行补充。 线性回归 如何在美国买房&#xff08;经典买房预测问题&#xff09; 一个简化的模型 线性模型 其中&#xff0c; x → [ x 1 , x 2 ,…

如何精细化管理APP用户生命周期,寻找业绩增长点?

在APP精细化运营中&#xff0c;经常会提到用户生命周期&#xff0c;在对APP进行运营的时候&#xff0c;需要明确&#xff0c;自己的APP是处于产品生命周期的哪一个&#xff0c;然后根据这个生命周期的特点&#xff0c;使用最准确的运营方法。 01、为什么要提升用户生命周期价值…

杭州亚运会吉祥物制作,能给城市3D虚拟数字人定制带来什么启发?

继冬奥顶流“冰墩墩”后&#xff0c;吉祥物“江南忆”作为杭州亚运会吉祥物也火爆出圈&#xff01;从北京亚运会的熊猫“盼盼”、到广州亚运会“五羊”再到如今的杭州亚运会吉祥物“宸宸、琮琮、莲莲”&#xff0c;这些吉祥物凭借其形象火爆出圈&#xff0c;能给城市3D虚拟数字…

腾讯mini项目-【指标监控服务重构】2023-08-25

今日已办 traefik proxy jaeger Prometheus prometheus | Prometheus 配置完依然无法实现 web-url的前缀访问【待解决】 Set span storage type : elasticsearch services:elasticsearch:image: elasticsearch:7.17.12container_name: elasticsearchnetworks:- backend # …

String的增删查【C++】

String的增删查【C】 前言string的增删查改构造与析构构造string(const char* str "")赋值构造string(const string& s1) 赋值重载析构函数增reservepush_backappendinsert 删erase 查迭代器流插入流提取流插入流提取 前言 从这里开始可以算是进入了STL的学习中…

火山引擎DataLeap推出两款大模型应用: 对话式检索与开发 打破代码语言屏障

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 自上世50年代&#xff0c;以“计算机”作为代表性象征的信息革命开始&#xff0c;社会对于先进生产力的认知便开始逐步更迭——从信息化&#xff08;通常认为是把企…

kafka latest 模式消费偏移丢数据

Flink消费kafka&#xff0c;这种情况会丢数据