当前位置: 首页 > news >正文

南京网站建设一条龙提高网站性能

南京网站建设一条龙,提高网站性能,学互联网技术哪个学校好,东莞短视频推广是哪个接着上一节《 faster rcnn学习之rpn训练全过程》#xff0c;假定我们已经训好了rpn网络#xff0c;下面我们看看如何利用训练好的rpn网络生成proposal. 其网络为rpn_test.pt # Enter your network definition here. # Use ShiftEnter to update the visualization. name: 假定我们已经训好了rpn网络下面我们看看如何利用训练好的rpn网络生成proposal. 其网络为rpn_test.pt # Enter your network definition here. # Use ShiftEnter to update the visualization. name: VGG_CNN_M_1024 input: data input_shape {dim: 1dim: 3dim: 224dim: 224 } input: im_info input_shape {dim: 1dim: 3 } layer {name: conv1type: Convolutionbottom: datatop: conv1convolution_param {num_output: 96kernel_size: 7stride: 2} } layer {name: relu1type: ReLUbottom: conv1top: conv1 } layer {name: norm1type: LRNbottom: conv1top: norm1lrn_param {local_size: 5alpha: 0.0005beta: 0.75k: 2} } layer {name: pool1type: Poolingbottom: norm1top: pool1pooling_param {pool: MAXkernel_size: 3stride: 2} } layer {name: conv2type: Convolutionbottom: pool1top: conv2convolution_param {num_output: 256pad: 1kernel_size: 5stride: 2} } layer {name: relu2type: ReLUbottom: conv2top: conv2 } layer {name: norm2type: LRNbottom: conv2top: norm2lrn_param {local_size: 5alpha: 0.0005beta: 0.75k: 2} } layer {name: pool2type: Poolingbottom: norm2top: pool2pooling_param {pool: MAXkernel_size: 3stride: 2} } layer {name: conv3type: Convolutionbottom: pool2top: conv3convolution_param {num_output: 512pad: 1kernel_size: 3} } layer {name: relu3type: ReLUbottom: conv3top: conv3 } layer {name: conv4type: Convolutionbottom: conv3top: conv4convolution_param {num_output: 512pad: 1kernel_size: 3} } layer {name: relu4type: ReLUbottom: conv4top: conv4 } layer {name: conv5type: Convolutionbottom: conv4top: conv5convolution_param {num_output: 512pad: 1kernel_size: 3} } layer {name: relu5type: ReLUbottom: conv5top: conv5 }# RPN layer {name: rpn_conv/3x3type: Convolutionbottom: conv5top: rpn/outputconvolution_param {num_output: 256kernel_size: 3 pad: 1 stride: 1} } layer {name: rpn_relu/3x3type: ReLUbottom: rpn/outputtop: rpn/output } layer {name: rpn_cls_scoretype: Convolutionbottom: rpn/outputtop: rpn_cls_scoreconvolution_param {num_output: 18 # 2(bg/fg) * 9(anchors)kernel_size: 1 pad: 0 stride: 1} } layer {name: rpn_bbox_predtype: Convolutionbottom: rpn/outputtop: rpn_bbox_predconvolution_param {num_output: 36 # 4 * 9(anchors)kernel_size: 1 pad: 0 stride: 1} } layer {bottom: rpn_cls_scoretop: rpn_cls_score_reshapename: rpn_cls_score_reshapetype: Reshapereshape_param { shape { dim: 0 dim: 2 dim: -1 dim: 0 } } }# RoI Proposal layer {name: rpn_cls_probtype: Softmaxbottom: rpn_cls_score_reshapetop: rpn_cls_prob } layer {name: rpn_cls_prob_reshapetype: Reshapebottom: rpn_cls_probtop: rpn_cls_prob_reshapereshape_param { shape { dim: 0 dim: 18 dim: -1 dim: 0 } } } layer {name: proposaltype: Pythonbottom: rpn_cls_prob_reshapebottom: rpn_bbox_predbottom: im_infotop: roistop: scorespython_param {module: rpn.proposal_layerlayer: ProposalLayerparam_str: feat_stride: 16} }同样借用文献[1]的图 网络绘制出来如下我们发现与rpn基本相同。 如上一张大小为224*224的图片经过前面的5个卷积层输出256张大小为13*13的 特征图你也可以理解为一张13*13*256大小的特征图256表示通道数然后使用1*1的卷积输出13*13*18的rpn_cls_score和13*13*36的rpn_bbox_pred。rpn_cls_score经过了reshape准备进行softmax输出。 接着rpn_cls_score_reshape使用softmax输出了rpn_cls_prob再reshape回去输出rpn_cls_prob_reshape。 最后rpn_cls_prob_reshape1*18*13*13rpn_bbox_pred1*36*13*13im_info 1*3输入到proposal层中输出了rois与scores。 layer {name: proposaltype: Pythonbottom: rpn_cls_prob_reshapebottom: rpn_bbox_predbottom: im_infotop: roistop: scorespython_param {module: rpn.proposal_layerlayer: ProposalLayerparam_str: feat_stride: 16} }我们来看看proposal_layer def setup(self, bottom, top):# parse the layer parameter string, which must be valid YAMLlayer_params yaml.load(self.param_str_)self._feat_stride layer_params[feat_stride]anchor_scales layer_params.get(scales, (8, 16, 32))self._anchors generate_anchors(scalesnp.array(anchor_scales))self._num_anchors self._anchors.shape[0]if DEBUG:print feat_stride: {}.format(self._feat_stride)print anchors:print self._anchors# rois blob: holds R regions of interest, each is a 5-tuple# (n, x1, y1, x2, y2) specifying an image batch index n and a# rectangle (x1, y1, x2, y2)top[0].reshape(1, 5)# scores blob: holds scores for R regions of interestif len(top) 1:top[1].reshape(1, 1, 1, 1)同 anchor_target_layer.py 的setup类似设置了top的shape,并且生成了左上角顶点的anchors。 def forward(self, bottom, top):# Algorithm:## for each (H, W) location i# generate A anchor boxes centered on cell i# apply predicted bbox deltas at cell i to each of the A anchors# clip predicted boxes to image# remove predicted boxes with either height or width threshold# sort all (proposal, score) pairs by score from highest to lowest# take top pre_nms_topN proposals before NMS# apply NMS with threshold 0.7 to remaining proposals# take after_nms_topN proposals after NMS# return the top proposals (- RoIs top, scores top)assert bottom[0].data.shape[0] 1, \Only single item batches are supportedcfg_key str(self.phase) # either TRAIN or TESTpre_nms_topN cfg[cfg_key].RPN_PRE_NMS_TOP_Npost_nms_topN cfg[cfg_key].RPN_POST_NMS_TOP_Nnms_thresh cfg[cfg_key].RPN_NMS_THRESHmin_size cfg[cfg_key].RPN_MIN_SIZE# the first set of _num_anchors channels are bg probs 前9个是背景后面的是前景预测# the second set are the fg probs, which we wantscores bottom[0].data[:, self._num_anchors:, :, :]bbox_deltas bottom[1].dataim_info bottom[2].data[0, :]if DEBUG:print im_size: ({}, {}).format(im_info[0], im_info[1])print scale: {}.format(im_info[2])# 1. Generate proposals from bbox deltas and shifted anchorsheight, width scores.shape[-2:]if DEBUG:print score map size: {}.format(scores.shape)# Enumerate all shiftsshift_x np.arange(0, width) * self._feat_strideshift_y np.arange(0, height) * self._feat_strideshift_x, shift_y np.meshgrid(shift_x, shift_y)shifts np.vstack((shift_x.ravel(), shift_y.ravel(),shift_x.ravel(), shift_y.ravel())).transpose()# Enumerate all shifted anchors:## add A anchors (1, A, 4) to# cell K shifts (K, 1, 4) to get# shift anchors (K, A, 4)# reshape to (K*A, 4) shifted anchorsA self._num_anchorsK shifts.shape[0]anchors self._anchors.reshape((1, A, 4)) \shifts.reshape((1, K, 4)).transpose((1, 0, 2))anchors anchors.reshape((K * A, 4))# Transpose and reshape predicted bbox transformations to get them# into the same order as the anchors:## bbox deltas will be (1, 4 * A, H, W) format# transpose to (1, H, W, 4 * A)# reshape to (1 * H * W * A, 4) where rows are ordered by (h, w, a)# in slowest to fastest order# 为了与anchors的shape对应故做了此变换bbox_deltas bbox_deltas.transpose((0, 2, 3, 1)).reshape((-1, 4))# Same story for the scores:## scores are (1, A, H, W) format# transpose to (1, H, W, A)# reshape to (1 * H * W * A, 1) where rows are ordered by (h, w, a)# 为了与anchors的shape对应故做了此变换scores scores.transpose((0, 2, 3, 1)).reshape((-1, 1))# Convert anchors into proposals via bbox transformations,生成预测x1,y1,x2,y2proposals bbox_transform_inv(anchors, bbox_deltas)# 2. clip predicted boxes to imageproposals clip_boxes(proposals, im_info[:2])# 3. remove predicted boxes with either height or width threshold# (NOTE: convert min_size to input image scale stored in im_info[2])keep _filter_boxes(proposals, min_size * im_info[2])proposals proposals[keep, :]scores scores[keep]# 4. sort all (proposal, score) pairs by score from highest to lowest# 5. take top pre_nms_topN (e.g. 6000)order scores.ravel().argsort()[::-1]if pre_nms_topN 0:order order[:pre_nms_topN]proposals proposals[order, :]scores scores[order]# 6. apply nms (e.g. threshold 0.7)# 7. take after_nms_topN (e.g. 300)# 8. return the top proposals (- RoIs top)keep nms(np.hstack((proposals, scores)), nms_thresh)if post_nms_topN 0:keep keep[:post_nms_topN]proposals proposals[keep, :]scores scores[keep]# Output rois blob# Our RPN implementation only supports a single input image, so all# batch inds are 0# rois 的shape为1*5(n,x1,y1,x2,y2) 这里生成的box的尺度是缩放后的。batch_inds np.zeros((proposals.shape[0], 1), dtypenp.float32)blob np.hstack((batch_inds, proposals.astype(np.float32, copyFalse)))top[0].reshape(*(blob.shape))top[0].data[...] blob# [Optional] output scores blobif len(top) 1:top[1].reshape(*(scores.shape))top[1].data[...] scores而forward中先是生成了所有的anchor然后利用预测地偏移量与生成的anchor一起生成proposal. 再接着进行了一些删减操作以及nms去重。返回前景分数最高的一些proposals及对应的scores.注意生成的proposal是相对于 输入尺度的也就是缩放后的尺度。 我们再回到train_faster_rcnn_alt_opt中。看Stage 1 RPN, generate proposals mp_kwargs dict(queuemp_queue,imdb_nameargs.imdb_name,rpn_model_pathstr(rpn_stage1_out[model_path]),cfgcfg,rpn_test_prototxtrpn_test_prototxt)p mp.Process(targetrpn_generate, kwargsmp_kwargs)p.start()rpn_stage1_out[proposal_path] mp_queue.get()[proposal_path]p.join()在rpn_generate中载入了网络且使用了生成的rpn网络接下来imdb_proposals根据网络与imdb生成了rpn_proposals。 imdb_proposals在generate.py中。  def im_proposals(net, im):Generate RPN proposals on a single image.blobs {}blobs[data], blobs[im_info] _get_image_blob(im)net.blobs[data].reshape(*(blobs[data].shape))net.blobs[im_info].reshape(*(blobs[im_info].shape))blobs_out net.forward(datablobs[data].astype(np.float32, copyFalse),im_infoblobs[im_info].astype(np.float32, copyFalse))scale blobs[im_info][0, 2]boxes blobs_out[rois][:, 1:].copy() / scalescores blobs_out[scores].copy()return boxes, scoresdef imdb_proposals(net, imdb):Generate RPN proposals on all images in an imdb._t Timer()imdb_boxes [[] for _ in xrange(imdb.num_images)]for i in xrange(imdb.num_images):im cv2.imread(imdb.image_path_at(i))_t.tic()imdb_boxes[i], scores im_proposals(net, im)_t.toc()print im_proposals: {:d}/{:d} {:.3f}s \.format(i 1, imdb.num_images, _t.average_time)if 0:dets np.hstack((imdb_boxes[i], scores))# from IPython import embed; embed()_vis_proposals(im, dets[:3, :], thresh0.9)plt.show()return imdb_boxes可以看到在im_proposals中有boxes blobs_out[rois][:, 1:].copy() / scale所以rpn生成的proposal经过了缩放又回到了原始图片的尺度。 imdb_boxes的shape是N*5.N为盒子的序号。 参考 1. http://blog.csdn.net/zy1034092330/article/details/62044941 2. https://www.zhihu.com/question/35887527/answer/140239982
http://www.pierceye.com/news/214191/

相关文章:

  • 中国商城网站建设h5响应式网站模板下载
  • 建设个商城网站需要多少钱网上商城系统平台官网
  • 软件开发与网站开发的区别最新源码
  • 电子商务网站建设策划中国网站建设公司排行
  • 网站的推广方式组合经验丰富的网站制作公司
  • 北京企业网站建设php制作公司网站首页
  • 保险网站建设网站 为何要 备案
  • 南宁网站设计可以找我wordpress 主题
  • 池州家居网站建设怎么样h5链接是什么意思
  • 网站添加站长统计代码凡科建站登录入口官方正版
  • 淮北做网站的公司有哪些手机网站设计只选亿企邦
  • 网站服务器打不开爱站工具网
  • php网站接口开发wordpress添加作者
  • 网站建设漂亮的模板创新网站建设工作
  • 国内做服装的网站有哪些方面wordpress邮件订阅
  • 建立个人网站主题安徽省建设厅网站打不开
  • 做互联网小程序 和网站有没有前景广州网站制作教程
  • 新网网站内部优化wordpress菜单图标
  • 深圳市龙华区住房和建设局网站网站开发连接数据库
  • 做张家界旅游网站多少钱做网站的步骤 优帮云
  • 怎么建立一个好公司网站网站模版参考
  • 成都大型网站设计公司怎么快速建设小型外贸网站
  • 建设工程规范在哪个网站发布河南网络推广培训
  • 深圳宝安上市公司网站建设报价石家庄教育学会网站建设
  • 上海 专业网站建设网络推广公司收费标准
  • 网站建设维护的知识wordpress调用多张产品图片
  • 网站的静态资源服务器怎么做上海加盟网站建设
  • 网站数据库如何做小游戏网页版入口
  • 做php网站教程视频国产长尾关键词拘挖掘
  • 网站首页置顶是怎么做网站运营专员做什么