夏令营面试准备
- 英文的自我介绍
- 个人基本情况
- Family
- 兴趣爱好梦想
- ai 的探索– future plan
- yolo + ncnn 的技能展示
- java 实习相关 + ai方向的探索
Here’s an English self-introduction based on the base information of my:
Self-Introduction
Hello everyone,
My name is [贾浩轩], and I am from Taiyuan Technology University. I come from an ordinary, well-off family. Both of my parents are regular workers, but they placed a strong emphasis on my education from a young age. They encouraged me to read books related to education, which taught me how to manage myself and explore knowledge independently.
I have a strong passion for basketball and coding. Playing basketball brings me great joy, and writing code gives me a sense of accomplishment. These hobbies not only help me relax but also improve my problem-solving skills and teamwork.
Recently, I developed an image recognition model based on YOLO (You Only Look Once) and NCNN (a high-performance neural network inference framework). I successfully deployed this model on a mobile phone, enabling real-time image recognition. This project was a significant achievement for me and further fueled my interest in artificial intelligence.
In terms of future plans, I am deeply fascinated by the wonders of artificial intelligence. I aspire to combine my knowledge of Java and AI to create a personal open-source project that can achieve 1000 stars on GitHub. I believe that through continuous exploration and learning, I can contribute something valuable to the tech community.
Thank you for listening!
开场白展示项目:
how to use ncnn ?
- 准备caffe 网络和模型
- 转换ncnn 网络和模型
- 去除可见字符串
- 加载模型
- 输入和输出
1 准备caffe 网络和模型
一般训练完会有:
1 | train.prototxt |
2 转换ncnn网络和模型
caffe 自带了工具可以把老版本的 caffe 网络和模型转换为新版(ncnn的工具只认识新版
1 | upgrade_net_proto_text [老prototxt] [新prototxt] |
输入层改用 Input,因为每次只需要做一个图片,所以第一个 dim 设为 1
1 | layer { |
使用 caffe2ncnn 工具转换为 ncnn 的网络描述和模型
1 | caffe2ncnn deploy.prototxt bvlc_alexnet.caffemodel alexnet.param alexnet.bin |
3 去除可见字符串
1 | ncnn2mem alexnet.param alexnet.bin alexnet.param.bin alexnet.id.h alexnet.mem.h |
• 这条命令会生成以下文件:
• alexnet.param.bin:二进制描述文件。
• alexnet.id.h:包含层ID的头文件。
• alexnet.mem.h:包含模型权重的头文件。
生成文件的作用
• alexnet.param.bin:这个文件是.param文件的二进制版本,包含网络结构的描述信息,但不是明文格式,因此难以直接阅读和理解。
• alexnet.id.h:这个文件定义了网络中每一层的ID,用于在代码中引用。
• alexnet.mem.h:这个文件包含了网络权重的二进制数据,可以直接加载到内存中使用。
4 加载模型
优缺点比较
方式 | 优点 | 缺点 |
---|---|---|
直接加载 .param 和 .bin 文件 |
简单直接,适合开发调试 | 不安全,容易被反向工程 |
加载二进制的 .param.bin 和 .bin 文件 |
增加安全性,保护模型结构 | 需要转换步骤 |
从内存引用加载网络和模型 | 高安全性,无外部文件,零拷贝性能高 | 复杂度高,模型数据占用内存 |
5 输入和输出
1. 将输入图像数据转换为 ncnn::Mat 格式。
2. 对图像数据进行减均值和归一化处理。
3. 使用 ncnn 网络执行前向计算,提取结果。
4. 对于使用二进制参数文件的情况,使用枚举代替 blob 名字。
5. 将输出数据转换为一维数组以获取分类结果。
Mat 内部的数据通常是三维的,c / h / w
减去均值可以将图像数据的像素值集中到一个相对较小的范围,减少不同图像间的亮度差异,从而加快模型收敛速度。
乘系数(归一化)的目的是将像素值缩放到一个标准范围(通常是 [0, 1] 或 [-1, 1]),这有助于减少不同特征的数量级差异,使得网络对各个特征的敏感度更加均衡。
how to use yolo?
卷积层和池化层
• 第一层卷积:7x7卷积核,步长为2,输出特征图尺寸为224x224x64。
• 第一层最大池化:2x2池化核,步长为2,输出特征图尺寸为112x112x64。
• 第二层卷积:3x3卷积核,步长为1,输出特征图尺寸为112x112x192。
• 第二层最大池化:2x2池化核,步长为2,输出特征图尺寸为56x56x192。
• 第三层卷积:1x1卷积核,步长为1,输出特征图尺寸为56x56x128。
• 第四层卷积:3x3卷积核,步长为1,输出特征图尺寸为56x56x256。
• 第五层卷积:1x1卷积核,步长为1,输出特征图尺寸为56x56x256。
• 第六层卷积:3x3卷积核,步长为1,输出特征图尺寸为56x56x512。
• 第三层最大池化:2x2池化核,步长为2,输出特征图尺寸为28x28x512。
• 第七至十层卷积:1x1和3x3卷积核交替,输出特征图尺寸逐渐减小。
• 第四层最大池化:2x2池化核,步长为2,输出特征图尺寸为14x14x1024。
• 十一至十四层卷积:1x1和3x3卷积核交替,输出特征图尺寸为7x7x1024。
• 第五层最大池化:2x2池化核,步长为2,输出特征图尺寸为7x7x1024。
3. 全连接层
• 全连接层1:4096个神经元。
• 全连接层2:1470个输出单元。
维度减少:使用1x1卷积层紧跟在3x3卷积层之后,减少通道数,从而降低计算量。
网络结构借鉴了 GoogLeNet 。24个卷积层,2个全链接层。(用1×1 reduction layers 紧跟 3×3 convolutional layers 取代Goolenet的 inception modules )
1. Bounding boxes + confidence:在每个网格中预测多个边界框及其置信度。
2. Class probability map:输出一个类概率图,显示每个网格中不同类别的概率。
3. **Final detections**:根据预测的边界框和类概率进行最终的目标检测,输出图像中的目标及其位置。
• 输入图像大小:448x448。
• 网格划分:S=7,因此图像被划分成7x7个网格。
• 每个网格预测B=2个边界框。
• 数据集有20个类别(C=20)。
因此,输出维度为: 7 \times 7 \times (5 \times 2 + 20) = 7 \times 7 \times 30 。
针对简历的补充
实习经历:
云杰
背景介绍:
山西省纷飞集团–智慧物业的项目:方便保安进行巡检+ 资产管理
- 技术选型?
springboot vs 微服务 springcloud 做一个业务拆分
Spring Boot
优点:
1. 简单易用:Spring Boot提供了快速开发的能力,配置简单,可以很快上手并构建应用。
2. 单体架构:适用于小型到中型应用,结构简单,部署和维护相对容易。
3. 开发效率高:提供了大量的默认配置和自动化配置,减少了开发人员的工作量。
4. 低资源消耗:单体应用的资源消耗通常较低,适合用户量不大的项目。
5. 易于测试和调试:因为是单体应用,测试和调试相对容易。
缺点:
1. 扩展性有限:单体架构的扩展性不如微服务架构,在用户量和请求量增加时可能遇到性能瓶颈。
2. 部署频率受限:每次修改代码都需要重新部署整个应用,无法进行模块化部署。
Spring Cloud
优点:
1. 高可扩展性:微服务架构可以根据不同模块的需求进行独立扩展,更容易应对高并发和大流量。
2. 模块化部署:每个微服务可以独立开发、测试和部署,不同模块之间的依赖性降低。
3. 灵活性高:每个服务可以使用不同的技术栈,适应不同的业务需求。
缺点:
复杂度高:微服务架构的复杂度较高,需要考虑服务之间的通信、数据一致性等问题。
开发和运维成本高:需要更多的运维工具和技术,如服务注册与发现、配置管理、日志追踪等。
资源消耗高:微服务的资源消耗较大,每个服务都需要单独的运行环境。
适用性分析
对于一个用户体量大约在一万人以内的项目,考虑到以下因素:
• 项目规模和复杂度:如果项目相对简单且功能模块较少,Spring Boot更为适合,能够快速上线并且维护成本较低。
• 资源和成本:Spring Boot的资源消耗和开发成本较低,适合小团队或资源有限的项目。
• 可扩展性需求:如果预计未来用户量会显著增长或功能模块会大幅增加,Spring Cloud的微服务架构可以提供更好的扩展性和灵活性。
• 运维能力:如果团队具备较强的运维能力,能够管理微服务架构的复杂性,那么可以考虑Spring Cloud;否则,Spring Boot可能是一个更好的选择。
- 二维码- 功能实现流程?
二维码生成方案
编码 园区- 楼层- 位置- 设备id
生成二维码 利用工具类 Google的 ZXing (Zebra Crossing)
定时任务的改进:
定时任务mysql batch (糟糕)
定时任务优化 结合redis
- 优势:
- 过期时间得天独厚
- 增加一层缓存, 减轻数据库压力
mysql vs mysql + redis (公告栏)
竞赛
“正大杯” 市调赛的数据分析– 基于bert Topic的情感分析任务
BERT Topic 的主要步骤
1. 文本嵌入:首先使用BERT对文本进行编码,生成高维度的文本嵌入向量。每个文本嵌入向量都包含丰富的语义信息。
2. 降维:由于BERT生成的嵌入向量维度很高,通常需要使用降维技术(如UMAP或t-SNE)将嵌入向量降至更低的维度,以便后续的聚类处理。
3. 聚类:使用聚类算法(如HDBSCAN或KMeans)对降维后的嵌入向量进行聚类,将相似的文本归为同一类。每个聚类结果可以看作是一个主题。
4. 主题表示:通过分析每个聚类中的文本,提取出能够代表该主题的关键词或关键句,以便更好地理解和解释每个主题。
为什么在BERT Topic中使用UMAP而不是PCA?
1. 非线性数据处理能力:BERT生成的文本嵌入是高维且包含复杂的非线性语义关系。UMAP能够更好地处理这种非线性数据,保留更多的语义信息。
2. 保持数据结构:UMAP在降维过程中能够更好地保持数据的全局和局部结构,有助于聚类算法更准确地识别主题。
3. 可视化效果:UMAP的降维效果在可视化方面通常更好,可以更清晰地展示高维数据的聚类情况和主题分布。
项目- 个人探索
1 三元情感抽取 - nlp
!
从百分之70 - 百分之79
2 学生答疑平台
如何进行图片上传功能?
- MultipartFile做接口参数
- 存储到 本地+ mysql数据库中的html格式
- 存储到云服务器 ,防止css注入
- 直接存储到mysql数据库中(pass, 服务器压力过高)
3 餐馆聊天机器人
流程图总结
1. 输入数据处理
• 从 dataset.json 中读取消息。
• 使用 sentence_normalizer.py 将消息转换为小写,移除标点符号、停用词并进行词形还原(lemmatize)。
• 通过 data_embedder.py 将消息转换为FastText向量,使用的是预训练的FastText英文模型。
• 生成嵌入的 dataset.json,作为 intent_classifier.py 的输入。
2. 消息处理和响应生成
• 前端发送消息到 app.py。
• app.py 将消息发送到 response_generator.py。
• response_generator.py 根据消息的意图生成响应。
• 使用 sentence_normalizer.py 对消息进行标准化处理。
• 使用 data_embedder.py 将标准化后的消息转换为FastText向量。
• 通过 intent_classifier.py 根据消息向量返回意图标签,使用的是嵌入的 dataset.json。
• response_generator.py 根据意图生成适当的响应,意图包括餐桌预订、菜单查询、询问蔬菜、询问素食、优惠信息、建议、食谱询问、正面反馈、负面反馈等。
• 系统从餐厅数据库中获取相关信息,数据库中有菜单、预订、反馈等集合。
3. 意图分类
• intent_classifier.py 根据最大余弦相似度找到意图标签。
• 不同的意图标签对应不同的响应类型,如问候、告别、身份验证、营业时间、联系方式、地址、卫生情况、一般信息等。
- 基于视频的异常检测 slow fast
1. Slow路径(顶部路径):
• 处理低帧率的视频输入,时间分辨率低。
• 使用全通道数(C)。
• 通过三个卷积层处理,最终生成预测结果。
2. Fast路径(底部路径):
• 处理高帧率的视频输入,时间分辨率高。
• 使用较少的通道数(βC,通常为1/8的通道)。
• 与Slow路径同步,时间分辨率是Slow路径的α倍。
• 最终输出通过横向连接融合到Slow路径中。
3. 横向连接:
• 连接Slow路径和Fast路径,将Fast路径的信息融合到Slow路径中,增强特征表示。
思考:
Flink 的 CEP 库实现对小卫星实时位置信息的复杂事件检测
1 | Pattern<SatellitePosition, ?> pattern = Pattern.<SatellitePosition>begin("start") |
1 | StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); |
进一步扩展
1. 复杂模式:可以定义更复杂的模式,如检测轨迹偏离或速度异常等。
2. 状态管理:利用 Flink 的状态管理功能,保持更多上下文信息,进行更复杂的分析。
3. 多种事件类型:可以处理多种事件类型,结合多源数据进行综合分析。