2017-06-22 22:08 207人阅读 评论(0) 收藏 举报
 分类:
机器学习(22)  深度学习(12) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

目录(?)[+]

 

2. 使用Caffe完成图像目标检测

本节将以一个快速的图像目标检测网络SSD作为例子,通过Python Caffe来进行图像目标检测。

必须安装windows-ssd版本的Caffe,或者自行在caffe项目中添加SSD的新增相关源代码.

图像目标检测网络同图像分类网络的大体原理及结构很相似,不过原始图像再经过深度网络后,并不是得到一组反映不同分类种类下概率的向量,而得到若干组位置信息,其反映不同目标在图像中的位置及相应分类等信息。但与分类网络的总体实施结构是一致的。

关于SSD的原理,可以参见其论文:Liu W, Anguelov D, Erhan D, et al. SSD : Single shot multibox detector[C]. In Proc. European Conference on Computer Vision (ECCV). 2016: 21-37.

2.1 准备文件

  • deploy.prototxt: 网络结构配置文件
  • VGG_VOC0712_SSD_300x300_iter_60000.caffemodel: 网络权重文件
  • labelmap_voc.prototxt: 数据集分类名称
  • 测试图像

本文的SSD是在VOC0712数据集下进行训练的,labelmap_voc.prototxt也是该数据库下的各目标的名称,该文件对于目标检测网络的训练任务是必须的,在下节中,我们将重点介绍如何生成LMDB数据库及Labelmap文件。

2.2 加载网络

加载网络的方法,目标检测网络同目标分类网络都是一致的。

    caffe_root = '../../'
# 网络参数(权重)文件
caffemodel = caffe_root + 'models/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_60000.caffemodel'
# 网络实施结构配置文件
deploy = caffe_root + 'models/SSD_300x300/deploy.prototxt'
labels_file = caffe_root + 'data/VOC0712/labelmap_voc.prototxt' # 网络实施分类
net = caffe.Net(deploy, # 定义模型结构
caffemodel, # 包含了模型的训练权值
caffe.TEST) # 使用测试模式(不执行dropout)

2.3 测试图像预处理

预处理主要包含两个部分:

  1. 减去均值
  2. 调整大小
    # 加载ImageNet图像均值 (随着Caffe一起发布的)
mu = np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy')
mu = mu.mean(1).mean(1) # 对所有像素值取平均以此获取BGR的均值像素值 # 图像预处理
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))
transformer.set_mean('data', mu)
transformer.set_raw_scale('data', 255)
transformer.set_channel_swap('data', (2,1,0))

2.4 运行网络

  1. 导入输入数据
  2. 通过forward()运行结果

# 加载图像
im = caffe.io.load_image(img)
# 导入输入图像
net.blobs['data'].data[...] = transformer.preprocess('data', im) start = time.clock()
# 执行测试
net.forward()
end = time.clock()
print('detection time: %f s' % (end - start))

2.5 查看目标检测结果

SSD网络的最后一层名为'detection_out',该层输出Blob结构'detection_out'中包含了多组元组结构,每个元组结构包含7个参数,其中第2参数表示分类类别序号,第3个参数表示概率置信度,第4~7个参数分别表示目标区域左上及右下的坐标,而元组的个数表明该图像中可能的目标个数。

当然可能不同网络模型的结构不一样,可能会有不同的设置,但至少对于SSD是这样设置的。

    # 查看目标检测结果
# 打开labelmap_voc.prototxt文件
file = open(labels_file, 'r')
labelmap = caffe_pb2.LabelMap()
text_format.Merge(str(file.read()), labelmap)
# 得到网络的最终输出结果
loc = net.blobs['detection_out'].data[0][0]
confidence_threshold = 0.5
for l in range(len(loc)):
if loc[l][2] >= confidence_threshold:
# 目标区域位置信息
xmin = int(loc[l][3] * im.shape[1])
ymin = int(loc[l][4] * im.shape[0])
xmax = int(loc[l][5] * im.shape[1])
ymax = int(loc[l][6] * im.shape[0])
# 画出目标区域
cv2.rectangle(im, (xmin, ymin), (xmax, ymax), (55 / 255.0, 255 / 255.0, 155 / 255.0), 2)
# 确定分类类别
class_name = labelmap.item[int(loc[l][1])].display_name
cv2.putText(im, class_name, (xmin, ymax), cv2.cv.CV_FONT_HERSHEY_SIMPLEX, 1, (55, 255, 155), 2)

2.6 目标检测结果展示

2.7 具体代码下载

GitHub仓库Caffe-Python-Tutorial中的detection.py

项目地址:https://github.com/tostq/Caffe-Python-Tutorial

二、caffe 全卷积网络

2017-05-20 17:03 158人阅读 评论(0) 收藏 举报
 分类:
caffe(4) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

目录(?)[+]

 

论文:Long_Fully_Convolutional_Networks

简介

  • 全卷积网络相对于之前的cnn,是对图像中的每个像素点进行分类
  • 常用于图像的语义分割中

参考

测试

  • 需要下载pascalVoc的数据集
  • 下载代码之后,在其根目录下新建py文件如下

    import numpy as np
    from PIL import Image
    import matplotlib.pyplot as plt
    caffe_root = '/home/gry/libs/caffe/'
    import sys
    sys.path.insert(0,caffe_root + 'python/')
    import caffe fn = 'data/pascal/VOCdevkit/VOC2012/JPEGImages/2007_000129.jpg'
    im = Image.open( fn )
    # im = im.resize([500,500],Image.ANTIALIAS)
    # im.save("1.jpg","JPEG") npimg = np.array( im, dtype=np.float32 )
    print( 'max val of the npimg is : %f'%(npimg.max()) )
    npimg -= np.array((104.00698793,116.66876762,122.67891434))
    npimg.shape npimg = npimg.transpose( (2,0,1) ) # load net
    # net = caffe.Net( 'voc-fcn8s/deploy.prototxt','voc-fcn8s/fcn8s-heavy-pascal.caffemodel', caffe.TEST )
    net = caffe.Net( 'voc-fcn16s/deploy.prototxt','voc-fcn16s/fcn16s-heavy-pascal.caffemodel', caffe.TEST )
    # shape for input (data blob is N x C x H x W), set data
    # note : the H X W is not necessary to be equal with the network H X W
    # but the channel must be equal
    net.blobs['data'].reshape(1, *npimg.shape)
    net.blobs['data'].data[...] = npimg
    # net.blobs['data'].data.shape
    # run net and take argmax for prediction
    net.forward()
    out = net.blobs['score'].data[0].argmax(axis=0) plt.imshow(out,cmap='autumn');plt.axis('off')
    plt.savefig('test.png')
    plt.show()
    print('end now')
  • 用不同的caffemodel得到的结果如下

    • 原图 
    • voc-fcn8s 
    • voc-fcn16s 
    • voc-fcn32s 

SegNet

简介

  • 基于caffe

参考链接

测试

  • 下载基于cudnn5的segnet代码与segnet-tutorial的代码,按照参考链接里的教程组织文件结构
  • 修改trian.txttest.txt,并3进行训练
  • 如果显存超过限制,则需要减小训练的batchsize
  • 转换caffemodel并按照教程里的方式进行测试,可以实时显示原图、groudtruth与网络输出图像
  • 原代码中使用的是plt.show(),需要关闭之后才能继续运行,为更方便的显示,可以结合opencvimshowwaitKey

使用Caffe完成图像目标检测 和 caffe 全卷积网络的更多相关文章

  1. caffe框架下目标检测——faster-rcnn实战篇操作

    原有模型 1.下载fasrer-rcnn源代码并安装 git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git 1) ...

  2. YOLT:将YOLO用于卫星图像目标检测

    之前作者用滑动窗口和HOG来进行船体监测,在开放水域和港湾取得了不错的成绩,但是对于不一致的复杂背景,这个方法的性能会下降.为了解决这个缺点,作者使用YOLO作为物体检测的流水线,这个方法相比于HOG ...

  3. 大尺寸卫星图像目标检测:yoloT

    大尺寸卫星图像目标检测:yoloT 1. 前言 YOLT论文全称「You Only Look Twice: Rapid Multi-Scale Object Detection In Satellit ...

  4. R-FCN:基于区域的全卷积网络来检测物体

    http://blog.csdn.net/shadow_guo/article/details/51767036 原文标题为“R-FCN: Object Detection via Region-ba ...

  5. [DeeplearningAI笔记]卷积神经网络3.1-3.5目标定位/特征点检测/目标检测/滑动窗口的卷积神经网络实现/YOLO算法

    4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1目标定位 对象定位localization和目标检测detection 判断图像中的对象是不是汽车--Image clas ...

  6. 小白也能弄得懂的目标检测YOLO系列之YOLOv1网络训练

    上期给大家介绍了YOLO模型的检测系统和具体实现,YOLO是如何进行目标定位和目标分类的,这期主要给大家介绍YOLO是如何进行网络训练的,话不多说,马上开始! 前言: 输入图片首先被分成S*S个网格c ...

  7. caffe框架下目标检测——faster-rcnn实战篇问题集锦

    1.问题 解决方案:没编译好,需要在lib下编译make 需要在caffe-fast-rcnn下编译make或者make all -j16  ,还需要make pycaffe 2.问题 解决方案:/p ...

  8. 在opencv3中利用SVM进行图像目标检测和分类

    采用鼠标事件,手动选择样本点,包括目标样本和背景样本.组成训练数据进行训练 1.主函数 #include "stdafx.h" #include "opencv2/ope ...

  9. FAIR开源Detectron:整合全部顶尖目标检测算法

    昨天,Facebook AI 研究院(FAIR)开源了 Detectron,业内最佳水平的目标检测平台. 昨天,Facebook AI 研究院(FAIR)开源了 Detectron,业内最佳水平的目标 ...

随机推荐

  1. 【bzoj4310】跳蚤 后缀数组+二分

    题目描述 很久很久以前,森林里住着一群跳蚤.一天,跳蚤国王得到了一个神秘的字符串,它想进行研究. 首先,他会把串分成不超过 k 个子串,然后对于每个子串 S,他会从S的所有子串中选择字典序最大的那一个 ...

  2. NOI2017 [NOI2017]游戏 【2-sat】

    题目 题目背景 狂野飙车是小 L 最喜欢的游戏.与其他业余玩家不同的是,小 L 在玩游戏之余,还精于研究游戏的设计,因此他有着与众不同的游戏策略. 题目描述 小 L 计划进行nn 场游戏,每场游戏使用 ...

  3. TCP面试题之为什么需要三次握手才能建立连接/四次挥手才能断开连接

    为什么需要三次握手才能建立连接? 答:为了初始化Sequence Number(序列号)的初始值,要通知双方数据包的序号,作为以后通讯的序号,以保证在网络传输过程,不会因为网络原因而导致乱序: 为什么 ...

  4. mysql explain字段意思解释

    mysql explain字段意思解释 explain包含id.select_type.table.type.possible_keys.key.key_len.ref.rows.extra字段 id ...

  5. hdu 4301 dp

    Divide Chocolate Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. 洛谷 [P2480] 古代猪文

    卢卡斯定理 注意特判底数和模数相等的情况 http://www.cnblogs.com/poorpool/p/8532809.html #include <iostream> #inclu ...

  7. 视频流传输协议RTP/RTCP/RTSP/HTTP的区别 (转)

    用一句简单的话总结:RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.之所以以前对这几个有点分不清,是因为CTC标准里没有对RTCP进行要求,因此在标准RTSP的代码中 ...

  8. Firmware 加载原理分析【转】

    转自:http://blog.csdn.net/dxdxsmy/article/details/8669840 [-] 原理分析 实现机制 总结   前言 前段时间移植 wifi 驱动到 Androi ...

  9. Perl语言入门--5--散列、hash

    hash 一.关联数组的形式 %h=('a',1,'b',2);         a是key 1是value    b是key  2是value 以%开头,()为空散列 %h=('a'=>1,' ...

  10. linux命令——ll详解

    一.ll命令 ll并不是linux下一个基本的命令,它实际上是ls -l的一个别名. Ubuntu默认不支持命令ll,必须用 ls -l,这样使用起来不是很方便. 如果要使用此命令,可以作如下修改:打 ...