CenterNet 代码阅读笔记二(Keras版本)

CenterNet 代码阅读笔记二(Keras版本)

    • 前言
    • 代码结构
    • hourglass.py
    • 总结

前言

大家好!上篇博文主要整理了一下代码架构以及运行方法,这篇文章将重点阐述该版本CenterNet所采用的backbone模型–Hourglass Network!主要分析Hourglass网络的代码实现,依据代码绘制功能模块图,希望能为大家理解代码提供帮助。目前已经有很多优秀的介绍Hourglass网络基本原理的博文,因此本篇博文将不进行重复介绍,请参看论文或者博文。

论文:HourglassNet论文

博文1:(https://blog.csdn.net/wangzi371312/article/details/81174452)
博文2:(https://blog.csdn.net/u013841196/article/details/81048237)
博文3:(https://blog.csdn.net/shenxiaolu1984/article/details/51428392)

代码结构

本系列博文主要以“ctdet_image.py”代码为核心,分析基于CenterNet实现图像目标检测过程。代码如下图所示:

CenterNet 代码阅读笔记二(Keras版本)_第1张图片
本篇博文将重点分析Hourglass Network的建立过程,即“HourglassNetwork()”函数。

hourglass.py

“HourglassNetwork()”函数的作用是为CenterNet建立一个完整的backbone模型,其具体实现在“hourglass.py”代码文件中,其主体函数为“HourglassNetwork()”:

CenterNet 代码阅读笔记二(Keras版本)_第2张图片
CenterNet的backbone采用两个Hourglass Network的级联结构,每个hourglass模型通过"hourglass_module()"子函数进行建立,并且,第一个hourglass的输入为"pre()"的输出,第二个hourglass的输入为第一个hourglass输出进行一些后处理后获得,其整体实现框图如图所示:

CenterNet 代码阅读笔记二(Keras版本)_第3张图片
其中包含了许多功能子函数:
"pre()"函数:
CenterNet 代码阅读笔记二(Keras版本)_第4张图片
该代码实现框图可表示为:
CenterNet 代码阅读笔记二(Keras版本)_第5张图片
以上框图包括2个基本函数模块"convolution()“和"residual()”,这两部分代码及其框图为:

CenterNet 代码阅读笔记二(Keras版本)_第6张图片
CenterNet 代码阅读笔记二(Keras版本)_第7张图片
CenterNet 代码阅读笔记二(Keras版本)_第8张图片
CenterNet 代码阅读笔记二(Keras版本)_第9张图片
其中除了已经介绍的基本模块外,还包含代码中两个重要的实现模块,即"left_features"和"right_features",这两部分的实现模块如下所示:
CenterNet 代码阅读笔记二(Keras版本)_第10张图片
CenterNet 代码阅读笔记二(Keras版本)_第11张图片
以上是backbone网络建立相关的所有实现框图,整个流程已结合程序调试反复检验,可保证正确性,请大家放心使用。另外,所有框图均为原创,使用请注明引用,谢谢。

总结

从代码中可以看出,该版本CenterNet只有测试程序,没有训练过程。因此,并没有loss function,optimization等函数,Hourglass Network的建立也只是为了建立一个与现有backbone结构一模一样的模型,从而可以直接载入现有模型weights进行使用。本篇博文所分析的代码实现了backbone模型的建立以及其weights载入,并且为每一段模块函数绘制了实现框图,希望为大家进行代码学习提供帮助,后续内容会尽快更新,敬请关注。

https://github.com/see--/keras-centernet

你可能感兴趣的:(CenterNet 代码阅读笔记二(Keras版本))