潘的日记本


  • 首页

  • 关于

  • 标签

  • 归档

  • 搜索

c语言复习

发表于 2020-08-20

C/C++语言复习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
include<stdio.h>
基本头函数
include<string.h>
字符串处理函数
int main(void) {
int a[10];
int j=1;
for(int i = 0;i<10;++i){//第三个函数体最后循环结束时才运行,++i和i++一样

a[i]=++j;
printf("%d\n",a[i]);
printf("%d\n",i);
};

char c[4]={'a','b','\0','d'};//单个字符用‘’\0表示结束,“”超过一个字符

printf("%c",getchar());
char str[13];
scanf("%s",str);//c语言中如果输入是数据变量则不需要加&引用,数组本身就是引用地址
int a ;
scanf("%d",&a);
char c[]={"China\n12223"};//会在字符组后自动 添加\0
printf("%s",c);
puts(c);//输出已经定义得字符组

gets(c);//从键盘获取char数组字符+1位返回值时c得起始地址,puts和gets只能输出和输入一个字符串
puts(c);
char c[20]={"China\n12223"};//会在字符组后自动 添加\0
char str[]={"\nxxx"};
printf("%s",strcat(c,str));//strcat可以链接两个字符串,且第一个字符串要足够大可以容纳下1,2两个数组,不满得位置都是\0
char str1[10],str2[]="China";
printf("%s",strcpy(str1,str2));//将字符串2复制到1中也可以strcpy(str1,"China")
strcmp(str1,"China");//比较两个字符串相等=0左大为正数,右大为负数
strlen("asdasd");//统计字符串完整长度,不包括\0
//strlwr将字符串中大转小 strupr 小转大

函数写在main下面得时候,要在main函数里面声明,例如 viod test();调用test();

带返回值得函数都需加类型,没有返回值得用void 传递数组时,传递首地址,所以声明函数中数组可以不加大小
void test(int array[])但是类型要一致 ,多维要加最高维度大小 int test(int array[][10])

寄存器变量 register 减少去内存读取数量

全局变量定义域一般从定义处开始到文件末,使用extern可以把下面得全局变量扩展到此处。两个文件间使用扩展得话
就是一个文件定义全局变量,另一个文件使用extern进行扩展链接 ,如果一个文件中全局变量被static修饰,
则其他文件中不能用extern扩展

static 修饰函数时不能被其他文件调用 extern 修饰函数可以被其他文件声明使用 是默认,可省

阅读全文 »

基于SSD目标检测网络的树莓派控制系统(三)

发表于 2020-05-12

基于PyQt5的SSD目标检测软件(三)

续上节。。。。

2. 训练部分

2.1 真实框得处理

​ 预测部分实际上是没有计算loss的向前传播,主要是通过模型进行预测结果,而训练过程主要通过反向传播来修正权重减小整体的成本loss和精度loss从而使模型更加准确。

​ 在预测部分,每个特征层的预测结果,num_priors x 4 的卷积 用于预测 该特征层上 每一个网格点上 每一个先验框 的 微调 情况(bounding box regression(边界框回归 在训练中 微调边界框大小匹配真实框))。

​ 所以说,我们直接利用SSD网络预测到的结果只是直接匹配相同类别所得到的原来初始化先验框的结果,而我们需要的是进行bounding box regression 回归后 调整过的准确预测框的位置。

​ 而在训练的时候,我们需要计算loss(分类loss和边界框回归loss(IOU))函数,这个loss函数是相对于ssd网络的预测结果的。我们需要把图片输入到当前的ssd网络中,得到预测结果;同时还需要把真实框的信息,进行编码,这个编码是把真实框的位置信息格式转化为ssd预测结果的格式信息。

​ 我们需要找到 每一张用于训练的图片的每一个真实框对应的先验框,并通过 回归预测的方法 让模型学会如何调整预测生成的先验框才能得到真实框对应的先验框。

从预测结果获得真实框的过程被称作解码,而从真实框获得预测结果的过程就是编码的过程。

阅读全文 »

基于SSD目标检测网络的树莓派控制系统(二)

发表于 2020-05-11

基于PyQt5的SSD目标检测软件(二)

SSD 目标检测网络详解

一、前言

​ 这次SSD目标检测网络是基于pytorch版本的并且我的代码中去掉了cuda加速(部分代码残留没有删除),原因很简单,因为我得AMD不YES了,等有机会用intel的显卡再说吧,b站up主的原版代码有加速部分可以参考增加,不过仅使用cpu硬算这样效率确实降低了很多,有待以后更改。

二、SSD是什么?

​ 目标检测近年来已经取得了很多重要的发展,那么主流的算法也主要分为两个部分:

  • Two-stage方法,如R-CNN系列算法,其主要思路是先通过启发式方法( selective search ) 或者CNN网络(RPN)产生一系列稀疏的候选框,然后对这些候选框进行分类与回归,因为中间使用了一些图像分割方法判别特征后进行候选框的生成,所以two-stage方法的优势是准确度高;
  • One-stage方法,如Yolo 和SSD , YOLO在卷积层后接全连接层,即检测时只利用了最高层Feature maps(包括Faster RCNN也是如此),SSD主要思路是对图片进行均匀的分割如38*38而后对每一块区域进行抽样,抽样时可以采用不同尺度和长宽比, 然后利用CNN提取特征后同时进行分类与回归,整个过程只需要一步,所以其优势是速度快,但是均匀的密集采样的一个重要缺点是训练比较困难,这主要是因为正样本与负样本(背景)极其不均衡,导致模型准确度稍低。

​ SSD全称为 Single Shot MultiBox Detector,Single shot说明SSD算法属于one-stage方法,MultiBox说明SSD算法基于多框预测。 SSD是Wei Liu在ECCV 2016上提出的一种目标检测算法, 截至目前是主要的检测框架之一,相比Faster RCNN有明显的速度优势,相比YOLO又有明显的mAP优势(不过已经被CVPR 2017的YOLO9000超越)。

阅读全文 »

基于SSD目标检测网络的树莓派控制系统(一)

发表于 2020-05-09

基于PyQt5的SSD目标检测软件(一)

前言

​ 墨迹了这么久,终于把毕设做好了,这在一年前是我不敢想的事情,作为一个生物工程专业的学生做了一个关于计算机图像识别方面的毕设听起来也怪搞笑的。四年前进入大学的场景还历历在目,四年后戏剧性的在疫情中结束了我的大学生涯,今年注定是不平凡的一年,有太多的历史值得我们去铭记。回想这四年的时光还是参与了不少事情,大学也不算虚度,唯一的遗憾就是没有坚持锻炼身体,四年过去了依旧这么瘦,希望以后最近的锻炼能坚持下去,养成一些好习惯。

说一说做这个毕设的故事吧,大二的时候相当迷茫,并不明确的专业知识让我产生了编程学习也就是看看网课这么简单的想法,机缘巧合参加了创新工作室,当然也离不开王振海的忽悠,不过当时对编程依旧充满了喜爱,是目的也是动力,虽然没有目标,但是恰好工作室也有一些项目,反正都是知识,就跟着学,就这样跟着学会了3D建模,3D打印,单片机传感器的一些知识,等等,我不是想学编程吗?当老师知道了我得想法,也鼓励我去尝试,所以老师给了一个项目说想用树莓派做一个显微镜,直到这时,我才意识到如果实现这个功能,我所要补充的知识体系不是一点点编程的基础就可以解决的,当然它也确实打开了我学习计算机的大门,在拿到树莓派之前,我甚至不太清楚Linux是什么。就这样走着学着,得益于东风校区同学完成了硬件的建模、3D打印和电机控制,在临近比赛的前两天,我解决了用树莓派控制并图像展示的核心问题,虽然方法很简单笨拙,却实现了项目自动对焦opencv调包的简单需要。那是我第一次出省比赛,第一次走进上海交大的校园,也是后面一切的开始,但是实现目标检测功能的软件在那时已经种下了种子。

阅读全文 »

MNIST手写字体识别实例

发表于 2020-03-27

MNIST手写字体识别实例

1.步骤概要

  • 读取数据

  • 创建网络

  • 训练参数得到 [w1,b1,w2,b2,w3,b3](三层)

  • 准确度测试

阅读全文 »

数据增强

发表于 2020-03-25

图像增广

大规模数据集是成功应用深度神经网络的前提。图像增广(image augmentation)技术通过对训练图像做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模。图像增广的另一种解释是,随机改变训练样本可以降低模型对某些属性的依赖,从而提高模型的泛化能力。例如,我们可以对图像进行不同方式的裁剪,使感兴趣的物体出现在不同位置,从而减轻模型对物体出现位置的依赖性。我们也可以调整亮度、色彩等因素来降低模型对色彩的敏感度。可以说,在当年AlexNet的成功中,图像增广技术功不可没。

阅读全文 »

Task06-pytorch实现简易神经网络

发表于 2020-03-23

PyTorch是美国互联网巨头Facebook在深度学习框架Torch的基础上使用Python重写的一个全新的深度学习框架,它更像NumPy的替代产物,不仅继承了NumPy的众多优点,还支持GPUs计算,在计算效率上要比NumPy有更明显的优势;不仅如此,PyTorch还有许多高级功能,比如拥有丰富的API,可以快速完成深度神经网络模型的搭建和训练。所以 PyTorch一经发布,便受到了众多开发人员和科研人员的追捧和喜爱,成为AI从业者的重要工具之一。

知识储备——深度学习中的常见概念

张量Tensor

Tensorflow中数据的核心单元就是Tensor。张量包含了一个数据集合,这个数据集合就是原始值变形而来的,它可以是一个任何维度的数据。tensor的rank就是其维度。

Rank本意是矩阵的秩,不过Tensor Rank和Matrix Rank的意义不太一样,这里就还叫Rank。Tensor Rank的意义看起来更像是维度,比如Rank =1就是向量,Rank=2 就是矩阵了,Rank = 0 就是一个值。

阅读全文 »

Task05:多种卷积网络模型

发表于 2020-03-21

深度卷积神经网络(AlexNet)

LeNet: 在大的真实数据集上的表现并不尽如⼈意。

1.神经网络计算复杂。
2.还没有⼤量深⼊研究参数初始化和⾮凸优化算法等诸多领域。

机器学习的特征提取:手工定义的特征提取函数
神经网络的特征提取:通过学习得到数据的多级表征,并逐级表⽰越来越抽象的概念或模式。

神经网络发展的限制:数据、硬件

AlexNet

首次证明了学习到的特征可以超越⼿⼯设计的特征,从而⼀举打破计算机视觉研究的前状。
特征:

  1. 8层变换,其中有5层卷积(1/3/5/6/7)和2层全连接隐藏层(9/10),以及1个全连接输出层(11)。
  2. 将sigmoid激活函数改成了更加简单的ReLU激活函数。
  3. 用Dropout来控制全连接层的模型复杂度。
  4. 引入数据增强,如翻转、裁剪和颜色变化,从而进一步扩大数据集来缓解过拟合。

Image Name

阅读全文 »

Task04:卷积神经网络

发表于 2020-03-18

卷积神经网络

二维互相关运算

二维互相关(cross-correlation)运算的输入是一个二维输入数组和一个二维核(kernel)数组,输出也是一个二维数组,其中核数组通常称为卷积核或过滤器(filter)。卷积核的尺寸通常小于输入数组,卷积核在输入数组上滑动,在每个位置上,卷积核与该位置处的输入子数组按元素相乘并求和,得到输出数组中相应位置的元素。图1展示了一个互相关运算的例子,阴影部分分别是输入的第一个计算区域、核数组以及对应的输出。

Image Name

图1 二维互相关运算

互相关运算与卷积运算

卷积层得名于卷积运算,但卷积层中用到的并非卷积运算而是互相关运算。我们将核数组上下翻转、左右翻转,再与输入数组做互相关运算,这一过程就是卷积运算。由于卷积层的核数组是可学习的,所以使用互相关运算与使用卷积运算并无本质区别。

阅读全文 »

Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸

发表于 2020-02-18

过拟合、欠拟合及其解决方案

  1. 过拟合、欠拟合的概念
  2. 权重衰减
  3. 丢弃法

模型选择、过拟合和欠拟合

训练误差和泛化误差

在解释上述现象之前,我们需要区分训练误差(training error)和泛化误差(generalization error)。通俗来讲,前者指模型在训练数据集上表现出的误差,后者指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。计算训练误差和泛化误差可以使用之前介绍过的损失函数,例如线性回归用到的平方损失函数和softmax回归用到的交叉熵损失函数。

机器学习模型应关注降低泛化误差。

阅读全文 »
1234
paniford

paniford

35 日志
10 标签
© 2021 paniford
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4