网站建设产品服务,网站seo分析案例,江阴外贸网站制作,网站制作开发教程1.bouding box regression总结#xff1a; rcnn使用l2-loss 首先明确l2-loss的计算规则#xff1a; L∗(f∗(P)−G∗)2#xff0c;∗代表x,y,w,h 整个loss : LLxLyLwLh 也就是说#xff0c;按照l2-loss的公式分别计算x,y,w,h的loss#xff0c;然后把4个loss相加就得到总的…1.bouding box regression总结 rcnn使用l2-loss 首先明确l2-loss的计算规则 L∗(f∗(P)−G∗)2∗代表x,y,w,h 整个loss : LLxLyLwLh 也就是说按照l2-loss的公式分别计算x,y,w,h的loss然后把4个loss相加就得到总的bouding box regression的loss。这样的loss是直接预测bbox的 绝对坐标与绝对长宽。 改进1: 问题如果直接使用上面的l2-lossloss的大小会收到图片的大小影响。 解决方案loss上进行规范化(normalization)处理。 Lx(fx(P)−Gx)W)2Ly(fy(P)−Gy)H)2Lw(fw(P)−Gw)W)2Lh(fh(P)−Gh)H)2其中, W,H分别为输入图片的宽与高 这种改进没有被采纳 改进2: rcnn直接使用的是下面这个公式也使用了规范化但除以的是proposal的wh并且wh的loss用的log函数 cascade论文说这个改进的目的是“To encourage a regression invariant to scale and location”也就是增加scale和location的不变性 位置不变性delta_x [(g_x a) - (b_x a)] / b_w。不管平移量a是多少delta_x都是一样的 尺寸不变性delta_w log((g_w * b) / (b_w * b))。不管图片缩放b是多少delta_w都是一样的 至于为什么用log有个博客说是是为了降低w,hw,h产生的loss的数量级, 让它在loss里占的比重小些。 这个解释还有待观察 改进3: 问题当预测值与目标值相差很大时, 梯度容易爆炸, 因为梯度里包含了x−t 解决方案smoothl1代替l2-loss当差值太大时, 原先L2梯度里的x−t被替换成了±1, 这样就避免了梯度爆炸 改进4: 问题由于bouding box regression经常只在proposal上做微小的改变导致bouding box regression的loss比较小所以bouding box regression的loss一般比classification 的loss小很多。整个loss是一个multi-task learning也就是分类和回归 解决方案标准化 延伸问题iou-loss与l2-losssmoothl1的优缺点 https://blog.csdn.net/weixin_35653315/article/details/54571681 2.性能上iou0.6大于iou0.5但iou0.7却小于0.5为什么 0.7的iou生成的正样本的框的质量更高应该性能更好但ap值却在下降。原因在于iou在0.5时正样本大多集中在0.5到0.6之间如果你阈值选在0.7正样本数量大大减少造成了过拟合。 3.iterative bbox多次做bouding box的回归但每次回归都使用的iou0.5没有考虑样本分布改变integral loss是根据不同iou分别算loss没有解决不同iou 正样本的数量不一样。cascade-rcnn与iterative bbox区别1.每个stage进行了重采样 2.训练和测试的分布是一样的 因此cascade的好处是1.不会出现过拟合。每一个stage都有足够的正样本 2.每个stage用了更高的iou进行优化proposal质量更高了 3.高iou过滤了一些outliers 4.对比实验中的stat就是为了解决分类loss大bouding box regression loss小将delta标准化的操作。 cascade rcnn中的stat是每一次回归都要做一次标准化应该是因为每一次回归生成的新分布的均值和方差发生变化 5.对比实验1: 越高ioucascade-rcnn提升越明显最常用的ap50的提升最小且提升性能有限 延伸问题1 为什么iou越低的检测性能会越低 延伸问题2: 怎么去解决 对比实验2: 前提这个实验是都用训练的时候用cascade rcnn测试的时候在不同层测试和联合测试做对比。 a.单独在stage1上测试性能比baseline要好这是cascade的方式带来的提升单独在stage2上测试性能提升最大单独stage3在ap70以下有略微下降以上有略微上升 b.在stage1、stage2上联合测试ap70以下都获得了最好的结果ap70以上会比stage3低一点在stage1、stage2、stage3上联合测试整体ap更高ap70以上都有很大提升 延伸问题1: 为什么出现这样的现象 延伸问题2: cascade-rcnn如何做联合测试的 对比实验3: 使用了iou性能在提升使用了stat性能也提升。同时使用iou和stat总ap在上升但是ap70以下的略微下降ap80以上的提升特别是ap90提升明显 延伸问题为什么在用iou的基础上加stat70以下反而下降 对比实验4: 联合预测的时候1-2联合提升最明显1-3比1-2也有提升主要在高质量框上整体ap提升了但是再多回归一次整体ap有略微下降ap90以下的都下降了 但是ap90上升了 延伸问题为什么多一个stage性能还下降了 cascade如何训练 第一个stage选512个roi训练之后把这些roi全给第二个stage的proposal_info_2nd(这个里面调用decodebbox层也就是对当前的框进一步精修给下一个stage)proposal_info_2nd中batchsize为-1proposaltarget源码增加了batchsize为-1的情况就是把所有的正负样本都考虑进来实际上数量应该是小于512的而不是原来默认的128.这个时候再跟gt进行assign重新分配roi和gt给下一个stage. 在decodebox层里面还会把精修后错误的roi去掉比如x1大于x2同时也会把和gt iou超过0.95的去掉就是觉得这个已经够精确不用再精修了 // screen out mal-boxesif (this-phase_ TRAIN) {for (int i 0; i num; i) {const int base_index i*bbox_dim4;if (bbox_pred_data[base_index] bbox_pred_data[base_index2] || bbox_pred_data[base_index1] bbox_pred_data[base_index3]) {valid_bbox_flags[i] false;}}} // screen out high IoU boxes, to remove redundant gt boxesif (bottom.size()3 this-phase_ TRAIN) {const Dtype* match_gt_boxes bottom[2]-cpu_data();const int gt_dim bottom[2]-channels();const float gt_iou_thr this-layer_param_.decode_bbox_param().gt_iou_thr();for (int i 0; i num; i) {const float overlap match_gt_boxes[i*gt_dimgt_dim-1];if (overlap gt_iou_thr) {valid_bbox_flags[i] false;}}} cascade如何测试 bouding box regression是直接从最后一个stage得到的结果即bbox_pre_3rd。 score的预测是把当前stage的score和之前层的score平均。stage2是把stage1的score*0.5 stage2的score*0.5stage3是把stage1的score*0.333 stage2的score*0.333 stage3的score*0.333。具体做法是比如stage2的预测roi-pooling出来的特征分别用两个分支得到两个score这两个分支就是两层fc一个用stage1的fc的参数一个用stage2的fc的参数这样就分别得到了两个stage的score再求平均。 注意test.prototxt里面有cls_prob、cls_prob_2nd_avg、cls_prob_3rd_avg 3个输出cls_prob是1的结果cls_prob_2nd_avg是12的结果cls_prob_3rd_avg是123的结果他这3个输出应该是为了考虑最终的实验比较最终的实际输出应该还是cls_prob_3rd_avg。 总的来说cls是3个stage求平均bouding box regression是直接从stage3获得 为什么从3个stage到4个stage性能还下降了 可能是overfitting造成的1.如果以faster来说的话每个stage会增加两个大的fc和两个小的fc这个参数量很大 2.cascade代码中每次回归之前会把前一个stage的roi与gt的iou大于0.9的消除掉stage越往高走roi的个数是越会下降的。 3.并且也会把一些负样本去掉因为cascade中每个stage会把roi不正常的框去掉回归可能导致负样本这样 还有一点就是可能模型本身做regression多次regression后好多框其实已经修正的比较好了再去修正可能就是扰动不能让性能很好提升甚至有可能反而下降。 主要是往后特征没办法更好了吧加更多也没有收益只要Inference设计好下降倒不太会 Cascade rcnn 3 4 也没下降只是轻微影响一点是饱和了