zoukankan      html  css  js  c++  java
  • C5-fasterrcnn-小象cv-code

    1、# Path to Shapes trained weights
    SHAPES_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_shapes.h5")

    https://blog.csdn.net/u011574296/article/details/79903232    -- 训练自己的数据集
    # Save weights,Typically not needed because callbacks save after every epoch,Uncomment to save manually
    # model_path = os.path.join(MODEL_DIR, "mask_rcnn_shapes.h5")
    # model.keras_model.save_weights(model_path)

    2、cv2.copyMakeBorder(image, top=0, bottom=h-height, left=0, right=w-width,
                                   borderType= cv2.BORDER_REFLECT101, value=[0,0,0] )
    https://jingyan.baidu.com/article/e73e26c096074e24adb6a736.html
    扩充图像的边界

    3、去文本中句子开头与结尾的符号的。因为在文本中每行开头都有个"/n",代表换行。
    for line in file:
    line.strip().split()
    这样就把每行的每个字符一个个分开,变成一个list。

    4、
    x = FixedBatchNormalization(axis=bn_axis, name='bn_conv1')(x)
    https://blog.csdn.net/qq_34564612/article/details/79089482
    公式如下:
    y=γ(x-μ)/σ+β
    其中x是输入,y是输出,μ是均值,σ是方差,γ和β是缩放(scale)、偏移(offset)系数。
    一般来讲,这些参数都是基于channel来做的,比如输入x是一个16*32*32*128(NWHC格式)的feature map,那么上述参数都是128维的向量。其中γ和β是可有可无的,有的话,就是一个可以学习的参数(参与前向后向),没有的话,就简化成y=(x-μ)/σ。而μ和σ,在训练的时候,使用的是batch内的统计值,测试/预测的时候,采用的是训练时计算出的滑动平均值。
    https://www.cnblogs.com/hrlnw/p/7227447.html

    5、
    python中的super( test, self).__init__()
    首先找到test的父类(比如是类A),然后把类test的对象self转换为类A的对象,然后“被转换”的类A对象调用自己的__init__函数

    6、
    from __future__ import print_function
    from __future__ import absolute_import
    Python提供了__future__模块,把下一个新版本的特性导入到当前版本,于是我们就可以在当前版本中测试一些新版本的特性。

    7、
    考虑一批32个样本,其中每个样本是一个由16个维度组成的10个向量的序列。该层的批输入形状然后(32, 10, 16)。
    可以这么理解,输入数据是一个特征方程,X1+X2+...+X10=Y,从矩阵的角度看,拿出未知数,就是10个向量,每个向量有16个维度,这16个维度是评价Y的16个特征方向。
    TimeDistributed层的作用就是把Dense层应用到这10个具体的向量上,对每一个向量进行了一个Dense操作,假设是下面这段代码:
    model = Sequential()model.add(TimeDistributed(Dense(8), input_shape=(10, 16)))
    输出还是10个向量,但是输出的维度由16变成了8,也就是(32,10,8)。
    事实上,TimeDistributed层给予了模型一种一对多,多对多的能力,增加了模型的维度。
    https://blog.csdn.net/u012193416/article/details/79477220

    8、

    手工设置递归调用深度,方式为 import sys sys.setrecursionlimit(1000000) #例如这里设置为一百万

    9、

    https://yq.aliyun.com/articles/44851

    from optparse import OptionParser
    parser = OptionParser()
    Python  有两个内建的模块用于处理命令行参数:一个是  getopt,另一个是  optparse,它功能强大,而且易于使用,可以方便地生成标准的、符合Unix/Posix 规范的命令行说明。

    10、

    https://blog.csdn.net/sxingming/article/details/52164249

    pickle.dump(obj, file[, protocol])
    序列化对象,并将结果数据流写入到文件对象中。参数protocol是序列化模式,默认值为0,表示以文本的形式序列化。protocol的值还可以是1或2,表示以二进制的形式序列化。
    pickle.load(file)
    反序列化对象。将文件中的数据解析为一个Python对象。
    其中要注意的是,在load(file)的时候,要让python能够找到类的定义,否则会报错

    11、

    numpy.random.randint(low, high=None, size=None, dtype='l')
    size : int or tuple of ints, optional
    Output shape. If the given shape is, e.g., (m, n, k), then m * n * k samples are drawn. Default is None, in which case a single value is returned.

    12、

    from keras import backend
    backend.set_image_dim_ordering('th')
    检查 ~/.keras/keras.json文件
    if "image_dim_ordering": is "th" and "backend": "theano", your input_shape must be (channels, height, width)
    if "image_dim_ordering": is "tf" and "backend": "tensorflow", your input_shape must be (height

    13、
    https://blog.csdn.net/qq_16949707/article/details/53418912
    python numpy.expand_dims的用法

     14、

    https://blog.csdn.net/qq_34564612/article/details/78881689
    RPN
    https://blog.csdn.net/sloanqin/article/details/51545125
    首先,输入图片大小是 224*224*3(这个3是三个通道,也就是RGB三种)然后第一层的卷积核维度是 7*7*3*96 (所以大家要认识到卷积核都是4维的,在caffe的矩阵计算中都是这么实现的);
    -->注意图片的第三个维度与卷积核第三个维度的关系
    https://zhuanlan.zhihu.com/p/28585873
    把bbox中的x1,x2,y1,y2分别通过缩放匹配到resize以后的图像。这里记做gta,尺寸为(num_of_bbox,4)。
    -》对应resize后的bbox/bbox = resize之后的图/原图

    for ix in range(output_width):     
       # x-coordinates of the current anchor box 
       x1_anc = downscale * (ix + 0.5) - anchor_x / 2
    -》ix对应特征图上的每一个像素点,x1—anc对应到resize后的图的像素点

    gt是预测出来的原图上的bbox在resize后图片上的bbox  -- 原图与resize后图片的比例
    anchor是特征图上的anchor在resize后图片上的anchor  -- 特征图与resize后图片的比例

    生成了num_anchors数量的channel,每个channel包含特征图(w*h)个sigmoid激活值,表明该anchor是否可用,与我们刚刚计算的y_rpn_cls对应。同样的方法,得到x_regr与刚刚计算的y_rpn_regr对应。

    if len(neg_locs[0]) + num_pos > num_regions:
     val_locs = random.sample(range(len(neg_locs[0])), len(neg_locs[0]) - num_pos)
     y_is_box_valid[0, neg_locs[0][val_locs], neg_locs[1][val_locs], neg_locs[2][val_locs]]
    -》neg远大于pos,所以将随机抽样到的neg-pos个的bbox设置为0

    https://blog.csdn.net/JNingWei/article/details/78847696
    RPN之后,proposal 成为 RoI (感兴趣区域) ,被输入 RoIPooling 或 RoIAlign 中进行 size上的归一化。当然,这些都是 RPN网络 之后 的操作了,严格来说并 不属于 RPN 的范围 了。

    .k个proposal即k个reference boxes,每一个reference box又可以用一个scale,一个aspect_ratio和sliding window中的锚点唯一确定.所以,我们在后面说一个anchor,你就理解成一个anchor box 或一个reference box.作者在论文中定义k=9,即3种scales和3种aspect_ratio确定出当前sliding window位置处对应的9个reference boxes, 4*k个reg-layer的输出和2*k个cls-layer的score输出.对于一幅W*H的feature map,对应W*H*k个锚点.

    y_rpn_cls = np.concatenate([y_is_box_valid, y_rpn_overlap], axis=1)
    y_rpn_regr = np.concatenate([np.repeat(y_rpn_overlap, 4, axis=1), y_rpn_regr], axis=1)
    

    这里是因为region proposal过程针对每一个锚点的每一个anchor都是有输出的,其实有很多anchor是不可用的,在y_is_box_valid那个array里面有记录。那么我们在计算loss时,也是不计算这些anchor的。因此我们在输出时,将与输出等形状的y_is_box_valid array拼接起来,计算loss时做一个对应元素的乘法,就可以舍去这些anchor产生的loss了。所以regr那里要将y_is_box_valid repeat 4倍,再与输出concatenate起来。

    15、

    https://blog.csdn.net/Seven_year_Promise/article/details/69360488  Resnet图片加参数

    16、

     ap = average_precision_score(T[key], P[key])
            print('{} AP: {}'.format(key, ap))
            all_aps.append(ap)
        print('mAP = {}'.format(np.mean(np.array(all_aps))))
    --https://blog.csdn.net/u011501388/article/details/77962401  mAP的概念~序列

    17、

    problems:
    padding的深度
    from keras.models import Model

  • 相关阅读:
    Java程序,猜大小游戏
    Java程序,取随机数的两种实现方法
    用Java程序判断是否是闰年
    Python学习-基础篇17 Django-进阶
    Python学习-基础篇16 Django-Ajax、Cookie
    Python学习-基础篇15 Django-MTV
    Python学习-基础篇14 Web框架本质及第一个Django实例
    Python学习-基础篇13 前端知识之Bootstrap框架
    Python学习-基础篇12 前端知识之Javascript知识
    Python学习-基础篇11 前端知识之HTML内容
  • 原文地址:https://www.cnblogs.com/rosyYY/p/8887974.html
Copyright © 2011-2022 走看看