Starsholic's Blog


  • Home

  • About

  • Tags

  • Categories

  • Archives

  • Search

canny边缘检测

Posted on 2019-10-14

基础知识:

  • 图像的梯度算子,一般是两个子模板(x,y方向);2 * 2模板概念简单;3 * 3模板考虑了中心点对段数据的性质,携带了有关于边缘方向的更多信息(prewitt ☞ sobel);Sobel算子是在Prewitt算子的基础上改进的,在中心系数上使用一个权值2,相比较Prewitt算子,Sobel模板能够较好的抑制(平滑)噪声。
  • 方向微分算子Kirsch算子是一种非线性边缘检测器,可在几个预定方向上找到最大边缘强度,采用8个模板对图像上的每一个像素点进行卷积求导数,这8个模板代表8个方向,对图像上的8个特定边缘方向作出最大响应,运算中取最大值作为图像的边缘输出。
  • 二阶导数算子如果图像灰度变化剧烈,进行一阶微分则会形成一个局部的极值,由数学上的知识,对图像进行二阶微分则会形成一个过零点,并且在零点两边产生一个波峰和波谷,我们要设定一个阈值,检测到这个过零点;laplace算子 ☞ 马尔算子(即LOG算子):Marr和Hildreth提出将Laplace算子与高斯低通滤波相结合,提出了LOG(Laplace and Guassian)算子三步:a.用一个2D的高斯平滑模板与原图像卷积 b.计算卷积后图像的拉普拉斯值 c.检测拉普拉斯图像中的过零点作为边缘点;在r=±sigma 处有过零点

pytorch里的tricks

Posted on 2019-10-12
  • 该问题是指在默认情况下,网络在反向传播中不允许多个backward()。需要在第一个backward设置retain_graph=True。loss.backward()改为loss.backward(retain_graph=True)

10月记录

Posted on 2019-10-07
  • 10.7 可以用github来在respository里快速找想要的code关键词
  • 10.10 近期三个target: a.一周时间学完pytorchhandbook b.mmdetection所有模型入门 c.完整跑一个实验(resnet、fasterrcnn),着重看每一个epoch的loss,跑到预期精度

Dl基础拾遗

Posted on 2019-10-06
  • sigmoid缺点:1.gradient vanishing 2.not zero-centered(会导致梯度zigzag)3.exp复杂度高
    RELU简单效果好激活函数1、激活函数2、RELU的起源
  • batch_size:
  • 交叉熵(评估label和predicts的差距)、信息量、KL散度(衡量预测的概率分布与真实分布的接近程度)DKL是KL散度,后半部分是交叉熵(p是真实分布,q是预测分布)
  • 权重衰减(weight decay):就是在lossfunction J再加个W^2的L2正则项
  • 学习率衰减
  • 反向传播具体实例,注意前馈网络中,梯度下降是在BP过程中用到、常规的有显式导函数的正向GD与神经网络中隐层的反向GD不一样
  • 鞍点
  • Batch Norm

几个基本的CNN网络

Posted on 2019-10-05

基础特征提取网络 Alexnet、VGG、Resnet、Inception、Googlenet、梯度消散/爆炸、degradation、fine tuning、mmdetection论文里提到的所有网络(SSD)

  • VGG16
  • Resnet

COCO detection

Posted on 2019-10-03
  • COCO detection,detection最好的一篇综述
  • overview :
  1. 2 tasks(bounding box output(画框) , object/instance segementation output(描边)),only latter featured at COCO2019
  2. data : COCO,200000 images,80 categories
  3. RCNN☞Fast RCNN☞Faster RCNN
  4. selective search:RCNN/Fast RCNN,1k-2k个proposal时效果最好,把image分割成很多proposal,计算相邻proposal相似度,相似度大的合并,最后输出proposal框
  5. region proposal:RCNN和Fast RCNN里用ss提取 2k个;faster RCNN提出用RPN(region proposal network)提取 300个
  6. bounding box regression: 平移+尺度缩放,学习变形比例 输入:proposal框坐标,ground truth框坐标
    输出:坐标平移量
    只有当Proposal和Ground Truth比较接近时(线性问题),我们才能将其作为训练样本训练我们的线性回归模型,否则会导致训练的回归模型不work(当Proposal跟GT离得较远,就是复杂的非线性问题了,此时用线性回归建模显然不合理)。这个也是G-CNN: an Iterative Grid Based Object Detector多次迭代实现目标准确定位的关键。
  7. IOU(intersection over Union,重叠度,交并比):对象类别分割问题的标准性能度量,给定一组图像,Iou测量给出了该组图像中存在的对象的prediction region和ground truth region之间的相似性计算得是“预测的边框”和“真实的边框”的交集和并集的比值基于坐标的交并集计算
  8. anchor:RPN里面提出,anchor技术将问题转换为"这个固定参考框中有没有认识的目标,目标框偏离参考框多远",不再需要多尺度遍历滑窗,真正实现了又好又快,如在Faster R-CNN和SSD两大主流目标检测框架及扩展算法中anchor都是重要部分,anchor box综述
  9. feature map:在每个卷积层,数据都是以三维形式存在的。 你可以把它看成许多个二维图片叠在一起,其中每一个称为一个feature map。 在输入层,如果是灰度图片,那就只有一个feature map;如果是彩色图片,一般就是3个feature map(红绿蓝)
  10. ROIpooling:region of interest
  11. pretrained model:通常指的是在Imagenet上训练的CNN(用于视觉相关任务的架构),是在训练结束时结果比较好的一组权重值;迁移学习(transfer learning)
  12. 反向传播:卷积操作相当于特征提取,更新卷积核里的参数值
  13. VGG16

mmdetecion torchvision mmdet mmcv

非root用户服务器上安装vimplus

Posted on 2019-09-30

vimplus ☞ YCP不支持服务器上vim7.4 ☞ vim8.1源码编译 ☞ 编译器ncurses源码编译及编译前导入环境变量

  • 服务器上无权限用yum:下载源码安装,先.config 写入配置文件,配置好vim的各种配置和相应解释路径;再make && make install
  • 编译时makefile连接选项LDFLAGS:export LDFLAGS="-L$HOME/Applications/ncurses/lib",如果需要library,则在编译前一定要导入环境
  • 解决YouCompleteMe unavailable: requires Vim compiled with Python (2.6+ or 3.3+) support:--enable-pythoninterp=yes --with-python-config-dir=$HOME/soft/lib在vim写config时导入python3的config路径时,总编译不成功 ☞ 选项换成python3interp = dynamic,编译成功
  • 又出新问题YouCompleteMe unavailable: unable to load Python.:pip install neovim没用,google不到解决方法,放弃!最终YCM还是用不了,但是其他功能均可用

随机事件与样本空间

Posted on 2019-09-24

OUTLINE:

一、随机事件与样本空间

  1. 随机试验
  2. 随机事件:一次试验中可能出现,也可能不出现的结果,用大写字母A、B…表示;必然事件&不可能事件
  3. 样本空间:随机试验中最基本、最简单的结果成为基本事件;所有基本事件的全体集合称为样本空间

二、事件的关系与运算

关系
  1. 包含:事件A发生必导致事件B发生,称事件B包含事件A,记为 $$ A \subset B $$
  2. 相等:如果 $$ A \subset B 且 A \supset B 同时满足$$ 则称事件A与事件B相等
  3. “事件A与B同时发生”的事件为事件A与事件B的交,记为 $$ A\cap B 或 AB$$
  4. 若 $$ AB \neq \emptyset $$ 则称“事件A与B相容”;若 $$ AB = \emptyset $$ 则称“事件A与事件B互不相容”,也叫互斥
  5. “事件A与事件B至少有一个发生”的事件为事件A与事件B的并,记为 $$ A \cup B $$
  6. 称“事件A发生而事件B不发生”的事件为事件A与B的差,记为 $$ A - B $$ 称“事件A不发生”的事件为事件A的对立事件,记为 $$ \bar A $$ 由定义可知, $$ A - B = A - AB =A \bar B , B = \bar A \leftrightarrow AB = \emptyset 且 A \cup B= \Omega$$
  7. 称有限个事件 $$ A_1,A_2,A_3,…,A_n $$ 构成一个完备事件组
  8. 事件的关系可以用 Venn diagram 表示
运算

1.吸收律:若 $$ A \subset B ,则 A \cup B=B,A \cap B =A$$ 2.交换律: $$ A \cup B=B \cup A,A \cap B=B \cap A $$ 3.结合律 $$ (A \cup B) \cup C=A \cup (B \cup C),(A \cap B) \cap C=A \cap (B \cap C) $$ 4.分配率 $$ A \cap(B \cup C)=(A \cap B) \cup (A \cap B);A \cup (B \cap C)=(A \cup B) \cap (A \cup C)$$ 5.对偶律(de Morgan) “长杠变短杠,开口换方向” $$ \overline {A \cup B} = \bar A \cap \bar B ; \overline {A \cap B} = \bar A \cup \bar B$$ 5.运算顺序:逆运算☞交运算☞并或差运算

三、概率的概念和基本性质

概率的三种定义

1.描述性:将随机事件A发生的可能性大小的度量(非负值),称为事件A发生的概率,记为P(A) 2.统计性:在相同条件下做重复试验,事件A出现的次数k和总的试验次数n之比k/n,称为事件A在这n次试验中出现的频率。当试验次数n充分大时,频率将“稳定”于常数p的“附近”,n越大,频率偏离这个常数p的可能性越小,这个常数p称为事件A的概率 3.公理化:非负性;规范性;可列可加性

概率的基本性质

1.空集的概率是0 $$ P(\emptyset)=0 $$ 2.有限可加性: $$ 若 A_1,A_2,…,A_n是两两互不相容的事件,则有 P(A_1 \cup A_2 \cup …A_n)=P(A_1)+P(A_2)+…+P(A_n) $$ 3.单调性:设A,B是两个事件, $$ 若A \subset B,则有P(B-A) = P(B)-P(A),P(B) \ge P(A) $$ 4.有界性: $$ 对任意事件A,有 0 \le P(A) \le 1 $$ 5.逆事件的概率 $$ 对任意事件A,有P(\bar A)=1-P(A) $$ 6.加法公式 $$ 对两个任意事件A,B,有P(A \cup B)=P(A)+P(B)-P(AB) $$ 7.减法公式 $$ P(A-B)=P(A)-P(AB)=P(A \bar B) $$

四、古典型概率和几何型概率

古典概型

只有有限个基本事件点

几何概型

样本空间是一个几何区域 $$ P(A)=\frac{S_A 的几何度量}{\Omega的几何度量} $$

五、条件概率及公式:乘法公式、全概率公式

1.条件概率:设事件A,B为任意两个事件,若P(A)>0,我们称在已知事件A发生的条件下,事件B发生的概率为条件概率,记为P(B|A),并定义 $$ P(B|A)=\frac{P(AB)}{P(A)}$$ 2.乘法公式:如果P(A)>0,则P(AB)=P(A)P(B|A) 3.全概率公式: $$ 如果A_i全体集合是全集,且A_i与A_j两两互斥,则P(B)=\Sigma P(A_i)P(B|A_i),此处P(A_i)可以视作加权系数$$

六、事件的独立性和独立重复试验

1.事件的独立性: (1)直观:若A,B两个事件,如果其中任何一个事件发生的概率不受另外一个事件发生与否的影响,则称事件A与B相互独立 (2)数学(可分离):设A,B为事件,如果P(AB)=P(A)P(B),则称A与B独立 2.独立性的判定 $$ (1)A与B相互独立 \leftrightarrow A与\bar B相互独立 \leftrightarrow \bar A 与B独立 \leftrightarrow \bar A 与 \bar B相互独立 $$ $$ (2)若P(A)>0,则A与B相互独立 \leftrightarrow P(B|A)=P(B) $$ $$ (3)若P(A)=0或P(A)=1,则A与任意事件B相互独立 $$ 3.独立于互斥、包含的关系: 若0<P(A)<1,0<P(B)<1,A与B互斥或存在包含关系,则A与B一定不独立

###七、注意点

  • 符号化实际问题
  • 理解样本空间概念,会找完备事件组
  • 频率、概率 $$ A \cup B=? ; A-B=? $$

Latex+Markdown

Posted on 2019-09-22

三种方法实现

  • Atom插件
  • 本地markdown文件上加引擎脚本
    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>
  • hexo博客添加Mathjax及latex基本语法
  • 编辑带有latex公式的markdown文档并导出pdf
    1.用macdown编写,并在文档前加引擎脚本(第二条)
    2.上传到blog里,用网页导出pdf

DFT实现与python循环

Posted on 2019-09-22

二维数组(图像)DFT变换

  • f(x,y):图像二维数组(时域) ; F(u,v) 图像DFT变换生成的二维数组(频域)
  • 维度数N已知,时域里图像矩阵x(i,j)(对应f)已知,目标输出变换后的图像频域矩阵Z(m,n)(对应F)

code: <pre><code> dft.py(对应第一个公式)
from future import division from future import print_function

import numpy as np

def dft2(x): '''

:param x: 待分析数据,二数数组。
:return Z: 原始数据的DFT结果。
'''
N = 256
Z = np.zeros((N,N))
for m in range(N):
    for n in range(N):
        for i in range(N):
            for j in range(N):   #四层循环,先从最里层考虑,最开始先访问谁
                Z[m,n] = x[i,j]*np.exp((-2)*np.pi*1J*(m*i+n*j)/N)/N
return Z

</code></pre> main.py

<pre><code> from future import division from future import print_function

import numpy as np import matplotlib.pyplot as plt from dft import dft2

if name == 'main': N = 256 # 图片尺寸 x = np.arange(N, dtype=np.float32) y = np.arange(N, dtype=np.float32)

R = 10
theta = np.pi/6                                  # 角度可以自己修改

u = R * np.cos(theta)
v = R * np.sin(theta)
Z = np.zeros((x.size, y.size))
for i_x in range(x.size):
    for i_y in range(y.size):
        Z[i_x, i_y] = np.cos(np.pi / N * (u * x[i_x] + v * y[i_y]))

Z_dft = dft2(Z)                                  # 调用DFT

Z_dft_shift = abs(np.fft.fftshift(Z_dft))        # 将图像中的低频部分移动到图像的中心

plt.subplot(221)
plt.imshow(Z, cmap='gray')
plt.title('Original')
plt.axis('off')

plt.subplot(222)
plt.imshow(abs(Z_dft), cmap='gray')              # 展示DFT结果
plt.title('DFT2')
plt.axis('off')

plt.subplot(223)
plt.imshow(Z_dft_shift, cmap='gray')             # 展示移动低频到中心后的图像
plt.title('shift')
plt.axis('off')

plt.subplot(224)
plt.plot(Z_dft_shift[x.size//2, :])              # 取一行查看数值,位置可以自己定义
plt.title('x = {}'.format(x.size//2))

plt.show()

</code></pre>


TIPs:

  1. 循环层数 == 时间复杂度的幂数(可以相互做判据), 如dft.py里,先访问二维矩阵x的i、j(做256✖️256次操作),时间复杂度O(N^2),再访问并赋值给二维矩阵Z的m、n(再做256✖️256次操作),时间复杂度变成O(N^4),所以要写四层循环
  2. 循环顺序,先从最里层开始考虑哪个先迭代,先行后列
  3. 矩阵角度理解DFT 感觉不一定对,仅供思路提示
  4. numpy注意python和numpy里切片不一样,自带的list不能x[i,j],只能x[i][j],numpy里的array可以
  5. 调试时,如果图像数据过大,可以resize图像维度debug(见eigenface的code)
12

David Wu

一只小白

20 posts
8 tags
© 2019 David Wu
Powered by Hexo
|
Theme — NexT.Muse v5.1.4