keras faster r-cnn源代码解析(一)——训练过程

引言:

    开始看faster r-cnn的过程是这样的,想看自然场景文本检测,然后查到了CTPN,CTPN是基于Fast R-CNN的RPN进行的改进,然后就开始看Faster r-cnn,大牛写的论文根本看不懂,看了一遍论文只能朦朦胧胧有点印象这东西大概是搞什么的,遇到没见过的名词就查,刚开始有以下几个,

Q1:Regin proposal中的proposal:即比较可能是物体的一个区域

Q2:R-CNN:Region based CNN Regions with CNN features

Q3:Faster R-CNN:CNN with RPN(Reigon Proposal Networks)使用CNN计算Proposal用于提取特征的卷积网络同样能用于查找proposal

Q4:感受野:特征能代表的原图的像素区域大小,例如说感受野是228,即映射之后的一个特征,代表原图的228*288像素大小的区域。

    看了第二遍论文,比第一遍好一些,但仍然有大量疑惑,特别是具体是如何做的。怎么办?查。先后看了以下几个链接:

https://zhuanlan.zhihu.com/p/31426458一文读懂Faster RCNN

我自己的实践表明,如果一点都不懂,仅凭这一文根本读不懂。如果源代码读完了,确实读这一文就能读懂了。但不是因为读这一文读懂了。

http://www.telesens.co/2018/03/11/object-detection-and-classification-using-r-cnns/Object Detection and Classification using R-CNNs,外国人写的,应该是最详细的一篇,比上面那个一文读懂还要详细,但问题主要有以下几点:英文的,名词用的不太一样,代码是pytorch的,

https://www.jianshu.com/p/71fbb3251cbfFaster R-CNN原理详解(基于keras代码)

这个涉及到代码的讲解了,但是没有写完,而且代码和原理一起讲,有点乱

http://geyao1995.com/archives/page/3/

这个博客里有对keras版本的详细讲解,相对来说比较详细了,但缺点是老子自己吭哧吭哧看了3天刚把代码看完了才发现这个博客,早发现的话估计1天就看完了。

    代码看完了再回过头来看上面那些原理讲解就很清晰了,看原论文也知道作者在讲什么了,因此如果有质量比较好的源代码应该先源代码,然后再结合着看详解。

   解析代码:https://github.com/yiqisetian/Keras-FasterRCNN,这个代码来源于https://github.com/you359/Keras-FasterRCNN

里面有一些韩语注释,难道说是棒子写的?

  完整的能运行的代码目录如下:

    其中config.pickle是运行脚本之后保存的配置文件,vgg16的权重文件需要自己下载,VOC2012也需要自己下载,test.py没有用,其他都是原始的代码。

    train_frcnn.py是用于训练的,keras_frcnn文件夹里面存放的是实现faster r-cnn所用到的各种类和方法。

   一、引入模块

from __future__ import division
import random
import pprint
import sys
import time
import numpy as np
from optparse import OptionParser#python命令解析模块,注意:从2.7版本后不再使用:optparse模块不推荐使用,python不再更新该模块,后续的发展将推荐使用argparse模块。
import pickle
import os

import tensorflow as tf
from keras import backend as K
from keras.optimizers import Adam, SGD, RMSprop
from keras.layers import Input
from keras.models import Model
from keras_frcnn import config, data_generators
from keras_frcnn import losses as losses
import keras_frcnn.roi_helpers as roi_helpers
from keras.utils import generic_utils
from keras.callbacks import TensorBoard

二、解析命令参数

# tensorboard 
def write_log(callback, names, logs, batch_no):
    for name, value in zip(names, logs):
        summary = tf.Summary()
        summary_value = summary.value.add()
        summary_value.simple_value = value
        summary_value.tag = name
        callback.writer.add_summary(summary, batch_no)
        callback.writer.flush()

sys.setrecursionlimit(40000)#设置python最大递归深度

parser = OptionParser()#声明一个OptionParser对象

parser.add_option("-p", "--path", dest="train_path", help="Path to training data.")#训练集路径
parser.add_option("-o", "--parser", dest="parser", help="Parser to use. One of simple or pascal_voc",
                  default="pascal_voc")#指定数据集,pascal_voc或者simple
parser.add_option("-n", "--num_rois", dest="num_rois", help="Number of RoIs to process at once.", default=300)
parser.add_option("--network", dest="network", help="Base network to use. Supports vgg or resnet50.", default='vgg')
parser.add_option("--hf", dest="horizontal_flips", help="Augment with horizontal flips in training. (Default=false).", action="store_true", default=False)
parser.add_option("--vf", dest="vertical_flips", help="Augment with vertical flips in training. (Default=false).", action="store_true", default=False)
parser.add_option("--rot", "--rot_90", dest="rot_90", help="Augment with 90 degree rotations in training. (Default=f
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值