Faster R-CNN Keras版源码史上最详细解读系列之结束部分

Faster R-CNN Keras版源码史上最详细解读系列之结束部分

训练的结尾部分

还有最后一些损失信息的统计什么的,就在train_frcnn.py中:



            # rpn_loss_cls  rpn_loss_regr
            losses[iter_num, 0] = loss_rpn[1]
            losses[iter_num, 1] = loss_rpn[2]
             # dense_class_4_loss dense_regress_4_loss dense_class_4_acc
            losses[iter_num, 2] = loss_class[1]
            losses[iter_num, 3] = loss_class[2]
            losses[iter_num, 4] = loss_class[3]

            iter_num += 1

            # 输出各个指标累计loss的平均
            progbar.update(iter_num,
                           [('rpn_cls', np.mean(losses[:iter_num, 0])), ('rpn_regr', np.mean(losses[:iter_num, 1])),
                            ('detector_cls', np.mean(losses[:iter_num, 2])),
                            ('detector_regr', np.mean(losses[:iter_num, 3]))])

            if iter_num == epoch_length:
                loss_rpn_cls = np.mean(losses[:, 0])
                loss_rpn_regr = np.mean(losses[:, 1])
                loss_class_cls = np.mean(losses[:, 2])
                loss_class_regr = np.mean(losses[:, 3])
                class_acc = np.mean(losses[:, 4])

                # 计算正样本的比例
                mean_overlapping_bboxes = float(sum(rpn_accuracy_for_epoch)) / len(rpn_accuracy_for_epoch)
                rpn_accuracy_for_epoch = []

                if C.verbose:
                    print('Mean number of bounding boxes from RPN overlapping ground truth boxes: {}'.format(
                        mean_overlapping_bboxes))
                    print('Classifier accuracy for bounding boxes from RPN: {}'.format(class_acc))
                    print('Loss RPN classifier: {}'.format(loss_rpn_cls))
                    print('Loss RPN regression: {}'.format(loss_rpn_regr))
                    print('Loss Detector classifier: {}'.format(loss_class_cls))
                    print('Loss Detector regression: {}'.format(loss_class_regr))
                    print('Elapsed time: {}'.format(time.time() - start_time))

                # 当前总损失
                curr_loss = loss_rpn_cls + loss_rpn_regr + loss_class_cls + loss_class_regr
                iter_num = 0
                start_time = time.time()

                # 损失变小了就保存参数
                if curr_loss < best_loss:
                    if C.verbose:
                        print('Total loss decreased from {} to {}, saving weights'.format(best_loss, curr_loss))
                    best_loss = curr_loss
                    model_all.save_weights(C.model_path)

                break

其实没什么绕的逻辑,都注释了,应该可以看明白的。好了基本的训练流程就讲完了,主要还是一些输入输出的形状比较绕,这个还真的多看看,多调试才能明白,测试那块我就不讲了,大同小异的。我就用比较好理解的方式做个总结吧,简单来说RPN用IOU来先筛选一次,然后做一次回归,然后再用非极大抑制进行筛选,最后再进行分类和回归网络的筛选和样本均衡,最后留下的才真正的进行分类和回归训练。其实我觉得思路不明白的时候可以看看论文,查查百度,多看几篇文章,多点理解。

我也看了很多文章参考,感谢他们提供的理解思路:
http://geyao1995.com/Faster_rcnn%E4%BB%A3%E7%A0%81%E7%AC%94%E8%AE%B0_test_2_roi_helpers/
https://blog.csdn.net/u011311291/article/details/81004067
https://yq.aliyun.com/articles/679245
https://blog.csdn.net/dta0502/article/details/79654931
https://blog.csdn.net/zijin0802034/article/details/77685438
https://zhuanlan.zhihu.com/p/31646362
https://www.cnblogs.com/wangyong/p/8513563.html
https://blog.csdn.net/g11d111/article/details/78829996
https://juejin.im/post/5d53f5da6fb9a06ad5471636

感悟

稀里糊涂的写了几篇文章,不知道要怎么写好,只能乱写,希望对大家理解有所帮助吧,其实我觉得更多的还是在这个过程中能更好的去理解这个算法,虽然只是一个几年前的算法,但是我觉得思想还是很经典的,而且也学到了目标检测的一些知识,也更加了解keras框架和numpy的一些操作,还是挺有意思的,后面有机会还会讲yolo和ssd,大家一起加油吧。本人只是个菜鸟,大神手下留情啊。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值