CV基础1——R-CNN,SSD,YOLO介绍
区域卷积神经网络(R-CNN)特点:慢,但准确度高
使用启发式搜索算法选择锚框
使用预训练模型来对每个锚框抽取特征,如vgg
训练一个SVM来对类别分类
训练一个线性回归模型来预测边缘框偏移
问题:每个锚框大小不一,怎样作为一个batch输入呢?方法:兴趣区域(RoI)池化层
给定一个锚框,均匀分割成n*m块,输出每块里的最大值,不管锚框多大,总是输出nm个值
改进:Faster RCNN锚框太多,每次都提取特征,太慢了?
Fast RCNN:对整个图片抽特征,再对fature map进行锚框抽取
改进:Faster R-CNN用区域提议网络(RPN)来替代启发式搜索来获得高质量的锚框(相当于非常粗糙的目标检测)。
改进:Mask R-CNN
如果数据集有像素级别的标号(能把物体轮廓勾勒出来),使用FCN (全卷积网络)利用这些信息。
ROl进行改进,使适应像素级标号。
单发多框检测(SSD)与R-CNN区别:没有RPN网络,更快,但精度下降
对每个像素,生成多个 以他为中心的锚框
一个基础网络抽取特征,然后多个卷积层块来减半高宽
在每段都生成锚框
底部用来拟合小物体 ...
PyTorch基础学习
线性回归第一步:构建数据12345import torch# y_hat = w*x + bx_data = torch.Tensor([[1.0], [2.0], [3.0]]) # 3*1的矩阵y_data = torch.Tensor([[2.0], [4.0], [6.0]])
第二步:设计模型1234567891011class LinearModle(torch.nn.Module): # 定义为一个类。应该继承自nn.Module,它是所有nn模块的基类。 def __init__(self): # 构造函数 super(LinearModle, self).__init__() self.linear = torch.nn.Linear(1, 1) # 构造nn.Linear(in维度,out维度)对象,含有W和b。 def forwar(self, x): # 前馈计算,必须有这个 y_pred = self.linear(x) # linear 是可调用对象 return y_pred# ...
LeetCode & Python
函数enumerate()
123456>>> seq = ['one', 'two', 'three']>>> for i, element in enumerate(seq): print i, element0 one1 two2 three
容器dict() :字典,哈希表实现,相当于unored_map
只出现一次的数字题意V1:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。要求O(N),且不使用额外空间。
V2:除一个元素仅出现 一次 外,其余每个元素都恰出现 三次 。要求O(N),且不使用额外空间。
V3:除两个元素仅出现 一次 外,其余每个元素都恰出现 两次 。要求O(N),且不使用额外空间。
思路V1:全部异或起来就行了
V2:计算每位出现的次数,%3。拼接起来就是答案
V3:设答案为a,b。先全部异或起来,结果最低1的位数,表示a和b不同的一位,以此再遍历一遍数组得到答案。
代码V3:
1234567891 ...
python算法题技巧
基础语法函数设置递归深度:
sys.setrecursionlimit(3000)
sum() 函数 :求和计算
round() 函数: 四舍五入
pow(a,b) 函数 :计算任意N次方值
min() max()
bool() 函数 :将指定的参数转换成布尔类型
ord() 函数 :获取单个字符的ASCII数值
list() 函数: 将可迭代对象转换为列表。list(range(1,10))
sorted() 函数: 对可迭代对象进行排序
len()函数: 返回一个对象的元素或项目个数
map(fun, it) 函数:对it中所有元素依次作为fun函数的参数
向上取整 math.ceil(3.1)
向下取整 math.floor(3.1)
切片简单切片简单切片指的是这样的切片形式:a[start:stop],其行为是得到下标在这样一个前闭后开区间范围内的元素
扩展切片扩展切片指的是这样的切片形式:a[start:stop:step],其中step是一个非零整数,即比简单切片多了调整步长的功能,此时切片的行为可概括为:从start对应的位置出发,以step为步长索引序列,直至越过st ...
CF & AtCoder 杂题
CF810(div2) B题意一个聚会要从 个人中邀请一部分人,如果第 个人未被邀请,将会获得不高兴值 。这 个人中有 对朋友,每对朋友来了以后,都会吃一个蛋糕。要求吃的蛋糕的数量必须为偶数,求这种条件下的最小不高兴值。
思路n,m很大。应该考虑删哪些点,而不是选哪些!!
如果 为偶数,就可以邀请所有人;如果 为奇数,那么要么不邀请一个有奇数个朋友关系的人;要么不邀请一对彼此相连,且度数同奇偶的点。
代码123456789101112131415161718192021222324252627282930313233343536373839404142434445#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <queue>#include <map>#include <math.h>using namespace std;typedef long long LL;int d ...
博弈论
博弈论知识点公平组合游戏ICG若一个游戏满足:
由两名玩家交替行动;
在游戏进程的任意时刻,可以执行的合法行动与轮到哪名玩家无关;
不能行动的玩家判负;
则称该游戏为一个公平组合游戏。NIM博弈属于公平组合游戏,但城建的棋类游戏,比如围棋,就不是公平组合游戏。因为围棋交战双方分别只能落黑子和白子,胜负判定也比较复杂,不满足条件2和条件3。
有向图游戏给定一个有向无环图,图中有一个唯一的起点,在起点上放有一枚棋子。两名玩家交替地把这枚棋子沿有向边进行移动,每次可以移动一步,无法移动者判负。该游戏被称为有向图游戏。任何一个公平组合游戏都可以转化为有向图游戏。具体方法是,把每个局面看成图中的一个节点,并且从每个局面向沿着合法行动能够到达的下一个局面连有向边。
Mex运算设S表示一个非负整数集合。定义mex(S)为求出不属于集合S的最小非负整数的运算,即:mex(S) = min{x}, x属于自然数,且x不属于S
SG函数在有向图游戏中,对于每个节点x,设从x出发共有k条有向边,分别到达节点y1, y2, …, yk,定义SG(x)为x的后继节点y1, y2, …, yk 的SG函数值构 ...
概率论
绿豆蛙的归宿(概率)题意给出一个有向无环的连通图,起点为 1,终点为 N,每条边都有一个长度。
绿豆蛙从起点出发,走向终点。
到达每一个顶点,绿豆蛙等概率选择任意一条道路离开该点。
现在绿豆蛙想知道,从起点走到终点所经过的路径总长度的期望是多少?
思考概率能用 $D P$ 来做的理论基础:期望的线性性质: $E(a x+b y)=a E(X)+b E(Y)$
状态表示: $f[i]$ 表示从 $i$ 走到 $n$ 的期望状态转移方程 $: f[i]=\sum_{i=1}^{k} \frac{1}{k}(w[i]+f(S[i]))$
1234567891011121314151617181920212223242526272829303132333435363738#include <iostream>#include <vector>#include <cstring>#include <algorithm>#include <math.h>#include <queue>#include <deque> ...
容斥原理
能被整除的数题意给定一个整数 n 和 m 个不同的质数 p1,p2,…,pm。
请你求出 1∼n 中能被 p1,p2,…,pm 中的至少一个数整除的整数有多少个。
思路容斥原理
1234567891011121314151617181920212223242526272829303132333435#include<bits/stdc++.h>using namespace std;long long p[23],n,m;int main(){ cin>>n>>m; for(int i=0;i<m;i++) cin>>p[i]; long long res=0; for(int i=1;i<1<<m;i++){ long long t=1,cnt=0; for(int j=0;j<m;j++){ if(i>>j&1){ if(t*p ...
组合记数
牡牛和牝牛(递推法DP)题意长度为n的01序列,两个1之间至少要有K个0,问有多少满足条件的序列。
思路f[i]集合:考虑前i头牛,且第i头牛是1的方案f[i]属性:方案数状态计算:f[i] = f[i - k - 1] + f[i - k - 2] + ··· + f[0](↑集合划分的依据是题目的要求,即当前1与上一个1之间至少要间隔k个0)
此处设置一个边界f[0]表示只有0没有1的边界情况
如何计算最终答案
根据上述集合的含义我们最终的答案就是把所有的f[i](包括f[0],表示该方案全是0,没有1)累加起来即可。
res = f[0] + f[1] + ··· + f[n]
无论是状态计算,还是答案求和,都要用到求区间和的部分
因此本题还可以采用前缀和数组,优化掉上述的计算
代码1234567891011121314151617181920#include <iostream>using namespace std;const int N = 1e5 + 10, mod = 5000011;int n, k;int f[N], s[N];int main() ...
矩阵乘法
矩阵乘法1234567891011A = a*bB = b*cA x B = a*c for(int i=1;i<=a;i++){ for(int j=1;j<=c;j++){ for(int k=1;k<=b;k++){ C[i][j]+=A[i][k]*B[k][j]; } }}
矩阵快速幂 求斐波那契题意求斐波那契第i项
思路利用矩阵运算的性质将通项公式变成幂次形式,然后用平方倍增(快速幂)的方法求解第 n 项。
首先我们定义向量
X_{n}=\left[\begin{array}{ll}
a_{n} & a_{n-1}
\end{array}\right] \text {, 边界 : } X_{1}=\left[\begin{array}{ll}
a_{1} & a_{0}
\end{array}\right]然后我们可以找出矩阵:
A=\left[\begin{array}{ll}
1 & 1 \\
1 & 0
\end{array} ...