点击上方“码农的后花园”,选择“星标” 公众号
精选文章,第一时间送达
Faster Rcnn是何凯明等大神在2015年提出目标检测算法,该算法在2015年的ILSVRV和COCO竞赛中获得多项第一。该算法在Fast Rcnn基础上提出了RPN候选框生成算法,使得目标检测速度大大提高。
ILSVRC比赛 是2010~2017年关于计算机视觉目标检测的一个比赛,即我们所说的 ImageNet比赛 ,全称是ImageNet Large-Scale Visual Recognition Challenge,平常说的ImageNet比赛指的是这个比赛,这个比赛中提出了AlexNet、VGG、Inception、RseNet、DenseNet、SENet等经典神经网络。
ILSVRC 2017是ImageNet比赛的最后一届,2018年起由WebVision竞赛(Challenge on Visual Understanding by Learning from Web Data)来接棒。WebVision所使用的数据集dataset抓取自浩瀚的网络,不经过人工处理与label,难度大大提高,但也会更加贴近实际运用场景。
而我们通常提到的ImageNet是一个超过15million的图像数据库,大约有22000个目标类别,是由美国国家工程院院士李飞飞的团队2007年,耗费大量人力通过网络抓取、人工标注、亚马逊众包平台收集制作而成,还作为论文在CVPR-2009中发布,ILSVRC比赛用到的数据就是ImageNet图像数据库中的。
本次就将使用基于Faster RCNN算法对医学图像中血细胞进行检测,使用到的数据集是BCCD。
BCCD数据集
BCCD全称Blood Cell Classification Datasets ,该数据集是医学影像中一个比较古老的数据集,该数据集总共364张图像,包括白细胞WBC(White Blood Cell)、红细胞RBC(Red Blood Cell)、血小板Platelets总共3个类别的图像。
细胞类别图如上所示,黄色框代表红细胞,紫色框代表白细胞、粉色框代表白小板,总共的目标标签数为4888个,分布图如下,其中红细胞标签个数最多,白细胞和血小板标签个数差不多相同。
数据集格式文件如下所示,Annotations文件夹下存储以.xml文件格式的标签文件、ImageSets存储划分的训练、验证、测试数据集图片名字的.txt索引文件、JPEGImages存储原图图片。
预训练模型下载
这里Faster Rcnn的特征提取网络使用VGG16,也可以使用ResNet50或者ResNet101,下载对应的预训练权重即可,VGG16预训练权重下载地址:https://github.com/fchollet/deep-learning- models/releases/download/v0.1/vgg16_weights_tf_dim_ordering_tf_kernels.h5
修改Train.py文件,选择VGG16作为我们主干特征提取网络,导入数据集、Vgg16预训练权重。
修改训练路径
# 训练路径,如果是voc格式,就给个目录,目录下有Annotations等,如果是简单的解析,就给解析文件,我这里改成了细胞检测的目录parser.add_option("-p", "--path", dest="train_path", help="Path to training data.", default="D:\keras-faster-rcnn-master\Dataset")
用voc格式解析数据:
# 解析数据方式,就是VOC或者简单的解析,对应后面的keras_frcnn.pascal_voc_parser或者keras_frcnn.simple_parserparser.add_option("-o", "--parser", dest="parser", help="Parser to use. One of simple or pascal_voc", default="pascal_voc")
主干特征网络改VGG:
# 主干网络的选择,可以是vgg也可以是resnet50,resnet101,有对应的代码parser.add_option("--network", dest="network", help="Base network to use. Supports vgg or resnet50.", default='vgg')
预训练网络模型权重
# 输入的预训练模型参数parser.add_option("--input_weight_path", dest="input_weight_path", help="Input path for weights. If not specified, will try to load default weights provided by keras.", default='vgg16_weights_tf_dim_ordering_tf_kernels.h5')
修改pascal_voc_parser.py
文件
解析voc数据的py文件,因为Faster Rcnn 是基于VOC数据集格式训练的,即Annotations+ImageSets+JPEGImages,这个py文件就是利用这三个文件下的内容进行读取解析,从而分别获取训练、验证和测试数据集图像的标签信息(目标c+位置xywh)以及对应的图像等信息,再送入模型中进行训练。
原来data_paths = [os.path.join(input_path,s) for s in ['VOC2007','VOC2012']],
是指
将voc2007,和voc2012文件夹下数据一起训练:
这里只用细胞检测的数据集,所以将其改成data_paths = [os.path.join(input_path,s) for s in ['']]
,也就是不用加任何路径了,因为数据集文件夹下没有其它子数据集文件。
修改config.py
模型配置文件
#修改主干特征提取网络: VGG或者Restnet50或者Resnet101self.network = 'vgg'#原图缩放时固定短边的大小,源码是600,这里根据自己的GPU内存进行修改# size to resize the smallest side of the imageself.im_size = 400
#模型训练后权重文件self.model_path = 'model_frcnn.vgg.hdf5'
然后我们就可以运行train_frcnn.py开始训练模型了,这里还可以根据自己的需要修改模型迭代的epochs,学习率等,最终将训练的模型权重保存为model_frcnn.hdf5,全部模型保存到config.pickle文件。
修改并运行test_frcnn.py
测试文件
修改测试时的主干特征提取网络、测试使用的模型权重、以及模型为自己训练时使用的主干预训练特征提取网络,模型以及权重保存文件。
#测试图片文件路径parser.add_option("-p", "--path", dest="test_path", help="Path to test data.", default=r'D:\keras-faster-rcnn-master\Dataset\test')parser.add_option("-n", "--num_rois", type="int", 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.pickle")#加载模型训练权重文件parser.add_option("--network", dest="network", help="Base network to use. Supports vgg or resnet50.", default='vgg')
测试结果:
代码下载和环境设置
完整论文以及代码下载,后台回复关键字:项目实战,即可获取数据集和源代码。
参考:
https://arxiv.org/abs/1506.01497
https://github.com/moyiliyi/keras-faster-rcnn
https://blog.csdn.net/wangwei19871103/article/details/100923206
更多优质内容?等你点在看