CornerNet讲解和tensorflow复现

CornerNet讲解和tensorflow复现

Corner Net简介

cornernet是2018ECCV的oral,是检测领域内的一个新的分支,打破了传统的由faster-rcnn和yolo两大派系的壁垒,另辟蹊径。论文
我已经用tensorflow复现了CornerNet ,记得star哦,复现不易。
先看效果图
不再检测x,y,w,h,只需要检测两个点就可以了
下面是cornernet的结构
corner的结构图,其中corner pooling是本文的一个创新点,也是这篇论文能中oral的一个重大原因

Hourglass

cornernet的backbone是使用hourglass架构,这种架构的优点就是考虑到了多尺度问题,下面就是hourglass的结构图:Stacked Hourglass Networks for Human Pose Estimation
hourglass的网络结构
上面就是hourglass的整体的网络结构。就是几个沙漏进行级联。
其中每个沙漏如下:
每个hourglass的内部结构详细的请看原文,上面提供了连接,这里只是顺带提一下,因为这篇博客的主角不是hourglass。

Corner Pooling

corner pooling的top-left的运算过程这个运算过程大致为:计算top-left时,1.计算top:对feature map从下往上看,最后一行不变,倒数第二行的数值跟最后一行比较,如果大于最后一行,就保留当前数值,否则就更新成最后一行的数值,以此类推。2.计算left:对feature map从右往左看,最后一列保存不变,倒数第二列的数值跟最后一列比较,如果大于最后一列,就保留当前数值,否则就更新成最后一列的数值,以此类推。然后两者相加,就是top-left的数值。
作用:作者在论文里面说,由于预测的那两个点,并不是在‘’内容‘’上面,而是在‘’内容‘’旁边,例如下图,橘色的点并不是打在人物身上,而是打在了人物旁边,但是这个地方所提供的信息并没有作用,而真正有作用的是人物,所以需要通过corner pool的方式将人物上的信息,转移到旁边来,以便模型在预测点的时候能更准确。
预测的点
corner pooling的反向传播:你没看错,这部分作者是自己写了反向传播部分(用c语言),因为是新的方法,所以常见的框架都没有提供这种操作的反向传播。我在这部分用tensorflow实现了前向和反向传播的部分,详情请看代码

def TopPool(inputs):
    #forward
    def forward(inputs):
        out=tf.expand_dims(tf.reduce_max(inputs,1),1)
        i=tf.constant(1)
        batch,h,w,c=inputs.get_shape().as_list()
        def cond(i,out):
            return i < h
        def body(i,out):
            d=tf.expand_dims(tf.reduce_max(inputs[:,i:,:,:],1),1)
            out=tf.concat((out,d),1)
            i = i + 1
            return i,out
        _,out = tf.while_loop(cond, body, [i,out],shape_invariants= [i.get_shape(), tf.TensorShape([batch,None,w,c])])
        return out
    #backward
    def backward(inputs,dy):
        zeros=tf.expand_dims(tf.zeros_like(inputs[:,-1,:,:])
### 近两年目标检测领域顶刊顶会论文及其代码实现 近年来,目标检测领域的研究取得了显著进展,尤其是在顶级期刊会议上发布的高质量研究成果。以下是几个具有代表性的方向以及对应的论文代码资源。 #### ECCV 2018 CVPR 2019 的重要贡献 CornerNet 是一种无锚框 (anchor-free) 类别的目标检测算法,在 ECCV 2018 上获得了广泛关注并位列最具影响力的前二十名之一[^1]。尽管 CornerNet 并未完全主导市场,但它开创了 anchor-free 方法的新思路,启发了许多后续的研究工作。此外,CVPR 2019 中出现了两篇关于 3D 目标的检测算法,这表明三维视觉技术正在成为新的热点领域[^1]。 #### OCR 领域的目标检测创新 在光学字符识别 (OCR) 方面,《TextSnake》是一篇重要的文章,它提出了用于任意形状文本定位的端到端可训练神经网络 Mask TextSpotter[^2]。另一项由华中科技大学团队完成的工作则进一步探索了如何通过近似二值化的操作来优化性能,从而实现了更快更精确的效果。这类方法不仅提升了效率还简化了流程,因此值得深入学习与实践。 #### DETR 及其变体 Focus-DETR 《Focus-DETR: Fast Online Object Detection via Dual Attention Transformers》探讨了解决传统 Transformer 编码器计算成本过高问题的有效途径,并提出了一种双注意机制以提高速度而不牺牲精度[^3]。具体来说,该方案利用稀疏表示减少了不必要的冗余运算量,最终验证了这种方法确实能够带来更好的实际表现。对于希望尝试最新框架的人来说,这是一个很好的起点。 --- ### 复现建议及工具链准备 为了顺利复现上述提到的各项成果,请按照以下指南搭建开发环境: 1. **Python 版本**: 推荐使用 Python >= 3.7, 因为大多数现代机器学习库都支持这一版本及以上。 2. **依赖管理**: 使用 `conda` 或者虚拟环境隔离不同项目的依赖关系可以有效避免冲突情况发生。例如创建一个新的 conda environment: ```bash conda create -n det_env python=3.8 conda activate det_env ``` 3. **核心库安装**: - PyTorch / TensorFlow 等深度学习框架是最基本的要求; - Albumentations 提供丰富的图像增强功能; - COCO API 对于处理标注数据集非常方便实用。 4. **硬件需求评估**: 如果计划运行大规模实验,则需考虑 GPU 资源分配状况;NVIDIA CUDA Toolkit 应当匹配所选显卡驱动程序版本号。 5. **调试技巧分享** 当遇到难以解决的技术难题时,查阅官方文档或者社区论坛往往能找到答案。另外记得保存每次修改后的最佳权重文件以便回溯历史记录。 ```python import torch print(torch.__version__) if not torch.cuda.is_available(): raise Exception('CUDA is required to run this code.') else: device = 'cuda' if torch.cuda.device_count() > 0 else 'cpu' ``` --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值