『科学计算』图像检测微型demo
这里是课上老师给出的一个示例程序,演示图像检测的过程,本来以为是传统的滑窗检测,但实际上引入了selectivesearch来选择候选窗,所以看思路应该是RCNN的范畴,蛮有意思的,由于老师的注释写的蛮好的,我基本就不画蛇添足了,这里记录下来,为加深理解cs231n的课程做个铺垫。,所以做个储备,实在不行还有开学不是么233
# coding: utf-8
#copyRight by heibanke
#如需转载请注明出处
#<<用Python做深度学习1-数学基础>>
#http://study.163.com/course/courseMain.htm?courseId=1050010 import numpy as np
# 这里nnet是课程作业里实现的一个模块,参考资料里也会附上我的版本。大家也可以用自己做的版本。
from nnet.layers import FCLayer,Activation,SoftMaxCostLayer
from nnet.neuralnetwork import neuralnetwork
from nnet.helpers import one_hot
# MNIST数据不再上传了,相信大家学到这里,这个数据应该都有一份,复制到文件夹内即可
import load_MNIST # 需要安装selectivesearch,pip install selectivesearch
import selectivesearch
from matplotlib import pyplot as plt
import matplotlib.patches as mpatches # 需要安装opencv2
import cv2
%matplotlib inline
1. 用MNIST数据库训练分类器模型
这一步是我们之前课程里的重点,这里选用两层全连接神经网络模型进行训练。数据库的数据预测率能达到97%,大家可以根据自己喜好选择不同的模型试一下。
def get_model():
train_X,train_y,test_X,test_y = load_MNIST.get_data()
n_classes = np.unique(train_y).size w_decay = 0.0001 nn = neuralnetwork(
layers=[
FCLayer(
n_out=128,
weight_decay = w_decay,
),
Activation('sigmoid'),
FCLayer(
n_out=n_classes,
weight_decay = w_decay,
),
Activation('softmax'),
],
cost = SoftMaxCostLayer(), ) X = train_X.reshape(train_X.shape[0],28*28)
Y_one_hot = one_hot(train_y)
nn._setup(X, Y_one_hot) # Train neural network
print('Training neural network')
nn.train(X, train_y, learning_rate=1.0, max_epochs=8, batch_size=128) # Evaluate on training data
error = nn.error(test_X.reshape(test_X.shape[0],28*28), test_y)
print('Test error rate: %.4f' % error) return nn nn=get_model()
2.读入待测图片,并在待测试图片上用selective search算法获得物体窗口
待测图片是我自己在Photoshop上手写的数字,几个数字在一张图片上,不同大小,不同位置。
img = cv2.imread("test1.jpg")
img_lbl, regions = selectivesearch.selective_search(
img, scale=500, sigma=0.9, min_size=20)
print regions[0]
print len(regions)
{'labels': [0.0], 'rect': (0, 0, 511, 511), 'size': 243048} 49
# 接下来我们把窗口和图像打印出来,对它有个直观认识
fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6))
ax.imshow(img) for reg in regions:
x, y, w, h = reg['rect']
rect = mpatches.Rectangle(
(x, y), w, h, fill=False, edgecolor='red', linewidth=1)
ax.add_patch(rect) plt.show()

3.定义规则来筛选窗口
candidates = []
for r in regions:
# 重复的不要
if r['rect'] in candidates:
continue
# 太小和太大的不要
if r['size'] < 200 or r['size']>20000:
continue x, y, w, h = r['rect']
# 太不方的不要
if w / h > 1.2 or h / w > 1.2:
continue
candidates.append((x,y,w,h)) print len(candidates)
# 这一步的序号是事先设定好的,真正实现时不这样做,肯定会有多的窗口需要你以后来筛选。
candidates_re = [candidates[i] for i in [0,4,7,9,11]] print u"最终筛选后的窗口是:",candidates_re fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6))
ax.imshow(img)
for x, y, w, h in candidates_re:
rect = mpatches.Rectangle(
(x, y), w, h, fill=False, edgecolor='red', linewidth=1)
ax.add_patch(rect) plt.show()
最终筛选后的窗口是: [(47, 31, 65, 89), (335, 124, 84, 116), (127, 230, 65, 90), (343, 375, 41, 50), (183, 399, 73, 81)]

4.对窗口内图片进行处理,大小resize,转换灰度图,最终转换成为784的输入向量
img_sample = np.zeros((len(candidates_re),784))
i=0 for rect in candidates_re:
x,y,w,h = rect
if w>h:
largewh = w
else:
largewh = h
bord_size = int(largewh*0.2)
img_cut = img[y-bord_size:y+largewh+bord_size,x-bord_size:x+largewh+bord_size,:]
img_resize = cv2.resize(img_cut,(28,28),interpolation=cv2.INTER_NEAREST)
gray=cv2.cvtColor(img_resize, cv2.COLOR_BGR2GRAY)
img_sample[i,:]=gray.ravel()
i+=1 # 把转换后的数据用图来显示
img_s=np.zeros((28,28*img_sample.shape[0]))
for i in xrange(img_sample.shape[0]):
img_s[:,i*28:28*(i+1)]=img_sample[i,:].reshape(28,28) fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6))
ax.imshow(img_s,cmap='gray')
plt.show()

5.用训练好的模型对处理后的图片进行预测
label = nn.predict(img_sample/255)
print u"每个窗口的预测值为:",label
每个窗口的预测值为: [8 5 3 5 0]
[注],检测失败了一个。
『科学计算』图像检测微型demo的更多相关文章
- 『科学计算』可视化二元正态分布&3D科学可视化实战
二元正态分布可视化本体 由于近来一直再看kaggle的入门书(sklearn入门手册的感觉233),感觉对机器学习的理解加深了不少(实际上就只是调包能力加强了),联想到假期在python科学计算上也算 ...
- 『科学计算』L0、L1与L2范数_理解
『教程』L0.L1与L2范数 一.L0范数.L1范数.参数稀疏 L0范数是指向量中非0的元素的个数.如果我们用L0范数来规则化一个参数矩阵W的话,就是希望W的大部分元素都是0,换句话说,让参数W是稀 ...
- 『科学计算』通过代码理解SoftMax多分类
SoftMax实际上是Logistic的推广,当分类数为2的时候会退化为Logistic分类 其计算公式和损失函数如下, 梯度如下, 1{条件} 表示True为1,False为0,在下图中亦即对于每个 ...
- 『科学计算』通过代码理解线性回归&Logistic回归模型
sklearn线性回归模型 import numpy as np import matplotlib.pyplot as plt from sklearn import linear_model de ...
- 『科学计算』科学绘图库matplotlib学习之绘制动画
基础 1.matplotlib绘图函数接收两个等长list,第一个作为集合x坐标,第二个作为集合y坐标 2.基本函数: animation.FuncAnimation(fig, update_poin ...
- 『科学计算』科学绘图库matplotlib练习
思想:万物皆对象 作业 第一题: import numpy as np import matplotlib.pyplot as plt x = [1, 2, 3, 1] y = [1, 3, 0, 1 ...
- 『科学计算_理论』优化算法:梯度下降法&牛顿法
梯度下降法 梯度下降法用来求解目标函数的极值.这个极值是给定模型给定数据之后在参数空间中搜索找到的.迭代过程为: 可以看出,梯度下降法更新参数的方式为目标函数在当前参数取值下的梯度值,前面再加上一个步 ...
- 『科学计算_理论』PCA主成分分析
数据降维 为了说明什么是数据的主成分,先从数据降维说起.数据降维是怎么回事儿?假设三维空间中有一系列点,这些点分布在一个过原点的斜面上,如果你用自然坐标系x,y,z这三个轴来表示这组数据的话,需要使用 ...
- 『科学计算_理论』SVD奇异值分解
转载请声明出处 SVD奇异值分解概述 SVD不仅是一个数学问题,在工程应用中的很多地方都有它的身影,比如前面讲的PCA,掌握了SVD原理后再去看PCA那是相当简单的,在推荐系统方面,SVD更是名声大噪 ...
随机推荐
- hue, saturation, and brightness:色调、饱和度和亮度
色调.饱和度和亮度(hue, saturation, and brightness)以人对红.绿.蓝(RGB)三色组合的感觉为基础.在描述阴极射线管显示器参数时,经常提到这三个专有名词.所有的颜色可以 ...
- ORA-01507: database not mounted
今天启动数据库时报错了! SQL> startup mount ORACLE instance started. Total System Global Area 608174080 byte ...
- 程序猿职场心理学,教你三进三出“斩”HR拿offer(跳槽必看)
摘要: 今天主要涉及到的是 HR 在面试时有哪些套路,这样可以见招拆招,斩获 offer! 今天主要涉及到的是 HR 在面试时有哪些套路,这样可以见招拆招,斩获 offer! 主要包括以下内容: 一. ...
- C++ 电路布线/最短路径问题
问题描述 用二维数组表示地图,若值为 1 则表示有障碍物,若值为 0 则表示可以通行. 输入: m*n 的二维数组,布线起点坐标,布线终点坐标. 输出: 最短布线距离以及对应的布线路径. 问题分析 从 ...
- Jquery 数组与字符串之间的转换
var auth_list = []; $("input[name='auth_list']:checkbox").each(function () { if ($(this).a ...
- UVA302 John's trip(欧拉回路)
UVA302 John's trip 欧拉回路 attention: 如果有多组解,按字典序输出. 起点为每组数据所给的第一条边的编号较小的路口 每次输出完额外换一行 保证连通性 每次输入数据结束后, ...
- 20145101《Java程序设计》第9周学习总结
20145101<Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增 ...
- 20165310java_blog_week6
2165310 <Java程序设计>第6周学习总结 教材学习内容总结 String 构造 String str=new String() String (char a[]) String ...
- Duilib 控件类html富文本绘制
转载:http://blog.csdn.net/wyansai/article/details/51088896 转载:http://blog.csdn.net/lixiang987654321/ar ...
- STM32定时器的预装载寄存器与影子寄存器之间的关系【转】
首先转载: STM32定时器的预装载寄存器与影子寄存器之间的关系 本文的说明依据STM32参考手册(RM0008)第10版:英文:http://www.st.com/stonline/produc ...