深度学习图像处理目标检测图像分割计算机视觉 08--目标检测
摘要
本周计划学习目标检测四种网络类型,从原始的R-CNN、到SPP-NET到Fast R-CNN、Faster R-CNN,网络之间的进化史以及改进 的部分。运行一个目标检测的代码。学习甲状腺评分的论文,了解甲状腺评分规则以及现有的评分类论文。毕设目前完成了开题报告和ppt。
一、目标检测
目标检测就是检测出图片中所有物体的类别标签和位置,就是可以在物体的周围画出一个框,下面从原始的目标检测模型开始讲起。
1.1 区域卷积神经网络R-CNN
这一步是在一副图中选出大约2000个可能有物体存在的框,选择的标准按照以下步骤进行。
在我们选出候选框之后,这些候选框大小不一,而我们的cnn网络要求输入的都是统一尺寸大小的,,那么就要经过warp这一个步骤将候选框变成尺寸统一。
那么R-CNN是怎么训练的呢?
还是按照之前讲过的fine tuning的算法,训练后面的全连接层。
1.2 SPP-NET
1.3 Fast R-CNN
1.4 Faster R-CNN
Faster R-CNN的想法是既然其他的模块全部都是卷积神经网络,那么不如把SS模块也变成卷积神经网络。
二、代码
这是目标检测的测试代码,代码的功能是输入一张图片,会自己框住一些物体并且输出对物体的判断以及概率。
import os
import cv2
import numpy as np
import sys
import pickle
from optparse import OptionParser
import time
import keras
from keras_frcnn import config
import keras_frcnn.resnet as nn
from keras import backend as K
from keras.layers import Input
from keras.models import Model
from keras_frcnn import roi_helpers
sys.setrecursionlimit(40000)
parser = OptionParser()
parser.add_option("-p", "--path", dest="test_path", help="Path to test data.", default='data/test/')
parser.add_option("-n", "--num_rois", dest="num_rois", help="Number of ROIs per iteration. Higher means more memory use.", default=32)
parser.add_option("--config_filename", dest="config_filename", help= "Location to read the metadata related to the training (generated when training).", default="config/config.pickle")
(options, args) = parser.parse_args()
if not options.test_path: # if filename is not given
parser.error('Error: path to test data must be specified. Pass --path to command line')
config_output_filename = options.config_filename
with open(config_output_filename, 'rb') as f_in:
C = pickle.load(f_in)
# turn off any data augmentation at test time
C.use_horizontal_flips = False
C.use_vertical_flips = False
C.rot_90 = False
img_path = options.test_path
def format_img(img, C):
img_min_side = float(C.im_size)
(height,width,_) = img.shape
if width <= height:
f = img_min_side/width
new_height = int(f * height)
new_width = int(img_min_side)
else:
f = img_min_side