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
|
请发表评论