AI算法工程师-非leetcode题目总结
AI算法工程师-非leetcode题目总结
- 除了Leetcode你还需要这些
- 实现nms
- 旋转矩形IOU
- 手动实现BN
- 手动实现CONV
- 实现CrossEntropyLoss
除了Leetcode你还需要这些
希望大家留言,我可以进行补充。持续更新~~~
实现nms
import numpy as np
def nms(dets, threshold):x1 = dets[:, 0]y1 = dets[:, 1]x2 = dets[:, 2]y2 = dets[:, 3]score = dets[:, 4]area = (x2 - x1 +1)* (y2-y1+1)keep = []order = score.argsort()[::-1]while len(order) >= 1:i = order[0]keep.append(i)xx1 = np.maximum(x1[i], x1[order[1:]])yy1 = np.maximum(y1[i], y1[order[1:]])xx2 = np.minimum(x2[i], x2[order[1:]])yy2 = np.minimum(y2[i], y2[order[1:]])w = np.maximum(xx2-xx1 +1, 0)h = np.maximum(yy2-yy1+1, 0)inter = w * hiou = inter / (area[i] + area[order[1:]] - inter)idx = np.where(iou <= threshold)[0]order = order[idx+1]return keepdets = np.array([[10, 10, 50, 50, 0.9] , [20, 20, 50, 50, 0.8] ,[50, 50, 100, 100, 0.7] ])
print(nms(dets, 0.5))
旋转矩形IOU
import numpy as np
import cv2# 中心点 矩形的w h, 旋转的theta(角度,不是弧度)
def iou_rotate_calculate(boxes1, boxes2):area1 = boxes1[:, 2] * boxes1[:, 3]area2 = boxes2[:, 2] * boxes2[:, 3]ious = []for i, box1 in enumerate(boxes1):temp_ious = []r1 = ((box1[0], box1[1]), (box1[2], box1[3]), box1[4])for j, box2 in enumerate(boxes2):r2 = ((box2[0], box2[1]), (box2[2], box2[3]), box2[4])int_pts = cv2.rotatedRectangleIntersection(r1, r2)[1]if int_pts is not None:order_pts = cv2.convexHull(int_pts, returnPoints=True)int_area = cv2.contourArea(order_pts)inter = int_area * 1.0 / (area1[i] + area2[j] - int_area)temp_ious.append(inter)else:temp_ious.append(0.0)ious.append(temp_ious)return np.array(ious, dtype=np.float32)
手动实现BN
y = x − m e a n / v a r + e − 6 , . y = x - mean /var+e^-6,. y=x−mean/var+e−6,.
BN在训练的过程中和测试的过程中应该如何设置:
训练时的数据量大,分布更加稳定;eval数据量有限不建议大规模更改mean和var;
eval: trainning=False, track_running_stats=True。这个是期望中的测试阶段的设置,此时BN会用之前训练好的模型中的(假设已经保存下了)running_mean和running_var并且不会对其进行更新。一般来说,只需要设置model.eval()其中model中含有BN层,即可实现这个功能。
train: trainning=True, track_running_stats=True。这个是期望中的训练阶段的设置,此时BN将会跟踪整个训练过程中batch的统计特性。
import numpy as np
class BN:def __init__(self, momentum, eps, num_features):"""初始化参数值:param momentum: 追踪样本整体均值和方差的动量:param eps: 防止数值计算错误:param num_features: 特征数量"""# 对每个batch的mean和var进行追踪统计self._running_mean = 0self._running_var = 1# 更新self._running_xxx时的动量self._momentum = momentum# 防止分母计算为0self._eps = eps# 对应论文中需要更新的beta和gamma,采用pytorch文档中的初始化值self._beta = np.zeros(shape=(num_features, ))self._gamma = np.ones(shape=(num_features, ))def batch_norm(self, x):"""BN向传播:param x: 数据:return: BN输出"""x_mean = x.mean(axis=0)x_var = x.var(axis=0)# 对应running_mean的更新公式self._running_mean = (1-self._momentum)*x_mean + self._momentum*self._running_meanself._running_var = (1-self._momentum)*x_var + self._momentum*self._running_var# 对应论文中计算BN的公式x_hat = (x-x_mean)/np.sqrt(x_var+self._eps)y = self._gamma*x_hat + self._betareturn y
手动实现CONV
使用了简化版本,类实现的太多了,背不上;
import numpy as npdef conv2d_numpy(input_data, kernel, stride=1, padding=0):# 获取输入数据的尺寸input_height, input_width = input_data.shape# 获取卷积核的尺寸kernel_height, kernel_width = kernel.shape# 计算输出图像的尺寸output_height = (input_height - kernel_height + 2 * padding) // stride + 1output_width = (input_width - kernel_width + 2 * padding) // stride + 1# 初始化输出图像output_data = np.zeros((output_height, output_width))# 填充输入数据(根据填充数量添加额外的行和列)if padding > 0:input_data = np.pad(input_data, ((padding, padding), (padding, padding)), mode='constant')# 执行卷积操作for i in range(0, input_height - kernel_height + 1, stride):for j in range(0, input_width - kernel_width + 1, stride):output_data[i // stride, j // stride] = np.sum(input_data[i:i + kernel_height, j:j + kernel_width] * kernel)return output_data# 创建一个示例的二维图片数据(4x4 像素)
image = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]], dtype=np.float32)# 定义一个卷积核(滤波器)
kernel = np.array([[1, 1],[0, -1]], dtype=np.float32)# 执行自定义的卷积操作
result = conv2d_numpy(image, kernel, stride=1, padding=0)# 打印卷积结果
print(result)
实现CrossEntropyLoss
import torchdef my_cross_entropy(input, target, reduction="mean"):# input.shape: torch.size([-1, class])# target.shape: torch.size([-1])# reduction = "mean" or "sum"# input是模型输出的结果,与target求loss# target的长度和input第一维的长度一致# target的元素值为目标class# reduction默认为mean,即对loss求均值# 还有另一种为sum,对loss求和# 这里对input所有元素求expexp = torch.exp(input)# 根据target的索引,在exp第一维取出元素值,这是softmax的分子tmp1 = exp.gather(1, target.unsqueeze(-1)).squeeze()# 在exp第一维求和,这是softmax的分母tmp2 = exp.sum(1)# softmax公式:ei / sum(ej)softmax = tmp1 / tmp2# cross-entropy公式: -yi * log(pi)# 因为target的yi为1,其余为0,所以在tmp1直接把目标拿出来,# 公式中的pi就是softmax的结果log = -torch.log(softmax)# 官方实现中,reduction有mean/sum及none# 只是对交叉熵后处理的差别if reduction == "mean": return log.mean()else: return log.sum()my_cross_entropy([1, 0], [1,1])
相关文章:
AI算法工程师-非leetcode题目总结
AI算法工程师-非leetcode题目总结 除了Leetcode你还需要这些实现nms旋转矩形IOU手动实现BN手动实现CONV实现CrossEntropyLoss 除了Leetcode你还需要这些 希望大家留言,我可以进行补充。持续更新~~~ 实现nms import numpy as np def nms(dets, threshold):x1 dets…...

2.6:冒泡、简选、直插、快排,递归,宏
1.冒泡排序、简单选择排序、直接插入排序、快速排序(升序) 程序代码: 1 #include<stdio.h>2 #include<string.h>3 #include<stdlib.h>4 void Bubble(int arr[],int len);5 void simple_sort(int arr[],int len);6 void insert_sort(int arr[],in…...

FastDFS安装并整合Openresty
FastDFS安装并整合Openresty 一、安装环境准备【CentOS7.9】二、FastDFS--tracker安装2.1.下载fastdfs2.2.FastDFS安装环境2.3.安装FastDFS依赖libevent库2.4.安装libfastcommon2.5.安装 libserverframe 网络框架2.6.tracker编译安装2.7.安装之后文件目录介绍2.8.错误处理2.9.配…...

93 log4j-slf4j-impl 搭配上 log4j-to-slf4j 导致的 StackOverflow
前言 呵呵 最近想要 做一个 mongo 低版本的客户端读取高版本的服务端传递过来的数据造成的一个错误的时候, 出现了这样的问题 引入了 mongo-java-driver 之后, 使用相关 api 的时候会触发 com.mongo.internal.connection.BaseCluser 的初始化, 其依赖的 Loggers 间接的依赖…...

客户端会话技术-Cookie
一、会话技术 1.1 概述 会话:一次会话中包含多次**请求和响应** 一次会话:浏览器第一次给服务器资源发送请求,此时会话建立,直到有一方断开为止 会话的功能:在一次会话的范围内的多次请求间,共享数据 …...
rsa加密登录解决方案
1.问题 账密登录方式中用户输入密码后,把账号、密码通过http传输到后端进行校验,然而密码属于敏感信息,不能以明文传输,否则容易被拦截窃取,因此需要考虑如何安全传输密码 2.解决方案 使用rsa加密方式,r…...
速盾:海外服务器用了cdn还是卡怎么办
海外服务器使用CDN卡顿问题的解决办法 在如今互联网高速发展的时代,海外服务器成为了许多企业和个人用户的首选,因为它能够提供更高的带宽和更稳定的网络连接。然而,尽管海外服务器在网络性能方面表现出色,但在使用过程中仍然可能…...
[python-opencv] PNG 裁切物体
拿到一组图PNG的图,边缘有点太宽了,需要裁切一下,为了这个需求,简单复习一下基本语法。 1. 读取PNG的4个通道 image cv.imread(image_path, cv.IMREAD_UNCHANGED) 附参数说明: IMREAD_UNCHANGED -1 返…...

机器学习——有监督学习和无监督学习
有监督学习 简单来说,就是人教会计算机学会做一件事。 给算法一个数据集,其中数据集中包含了正确答案,根据这个数据集,可以对额外的数据希望得到一个正确判断(详见下面的例子) 回归问题 例如现在有一个…...
MySQL单主模式部署组复制集群
前言 本篇文章介绍MySQL8.0.27版本的组复制详细搭建过程,教你如何快速搭建一个三节点的单主模式组复制集群。 实际上,MySQL组复制是MySQL的一个插件 group_replication.so,组中的每个成员都需要配置并安装该插件,配置和安装过程…...

【大厂AI课学习笔记】【1.5 AI技术领域】(10)对话系统
对话系统,Dialogue System,也称为会话代理。是一种模拟人类与人交谈的计算机系统,旨在可以与人类形成连贯通顺的对话,通信方式主要有语音/文本/图片,当然也可以手势/触觉等其他方式 一般我们将对话系统,分…...

【ARM 嵌入式 编译系列 2.7 -- GCC 编译优化参数详细介绍】
请阅读【嵌入式开发学习必备专栏 】 文章目录 GCC 编译优化概述常用优化等级-O1 打开的优化选项-O2 打开的优化选项-O3 打开的优化选项-Os 打开的优化选项优化技术使用优化选项的注意事项GCC 编译优化概述 GCC(GNU Compiler Collection)包含了用于C、C++、Objective-C、Fort…...

《剑指 Offer》专项突破版 - 面试题 38、39 和 40 : 通过三道面试题详解单调栈(C++ 实现)
目录 面试题 38 : 每日温度 面试题 39 : 直方图最大矩形面积 方法一、暴力求解 方法二、递归求解 方法三、单调栈法 面试题 40 : 矩阵中的最大矩形 面试题 38 : 每日温度 题目: 输入一个数组,它的每个数字是某天的温度。请计算每天需要等几天才会…...
动态规划C语言
#include <stdio.h> #include <stdlib.h> //0-1背包问题是一种经典的组合优化问题, //问题描述为:有一个给定容量的背包和一组具有不同价值和重量的物品,如何选择物品放入背包中,以使得背包中物品的总价值最大化&…...

基于微信小程序的校园二手交易平台
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

K8S系列文章之 [使用 Alpine 搭建 k3s]
官方文档:K3s - 轻量级 Kubernetes | K3s 官方描述,可运行在 systemd 或者 openrc 环境上,那就往精简方向走,使用 alpine 做系统。与 RHEL、Debian 的区别,主要在防火墙侧;其他基础配置需求类似࿰…...

计算机视觉 | OpenCV 实现手势虚拟控制亮度和音量
Hi,大家好,我是半亩花海。在当今科技飞速发展的时代,我们身边充斥着各种智能设备,然而,如何更便捷地与这些设备进行交互却是一个不断被探索的课题。本文将主要介绍一个基于 OpenCV 的手势识别项目,通过手势…...

python28-Python的运算符之三目运算符
Python可通过if语句来实现三目运算符的功能,因此可以近似地把这种if语句当成三目运算符。作为三目运算符的f语句的语法格式如下 True_statements if expression else False_statements 三目运算符的规则是:先对逻辑表达式expression求值,如果逻辑表达式…...

高德 API 10009
问题 笔者使用高德地图所提供的API接口,访问接口报错 {"info":"USERKEY_PLAT_NOMATCH","infocode":"10009","status":"0","sec_code_debug":"d41d8cd98f00b204e9800998ecf8427e"…...

Go 语言中如何大小端字节序?int 转 byte 是如何进行的?
嗨,大家好!我是波罗学。 本文是系列文章 Go 技巧第十五篇,系列文章查看:Go 语言技巧。 我们先看这样一个问题:“Go 语言中,将 byte 转换为 int 时是否涉及字节序(endianness)&#x…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...