调试yolov3代码如何进入 Lambda中的yolo_loss函数

标题调试yolov3代码如何进入 Lambda中的yolo_loss函数

参考文献:https://www.jianshu.com/p/6f8c86ac1fef
所用的yolov3代码: https://github.com/qqwweee/keras-yolo3 ,解压之后用pycharm打开。
理解代码一个很好的方法是调试程序,看看函数之间的调用关系以及各变量的变化。
在调试train.py代码时,在model_loss = Lambda(yolo_loss, output_shape=(1,), name=‘yolo_loss’,
arguments={‘anchors’: anchors, ‘num_classes’: num_classes, ‘ignore_thresh’: 0.5})(
[*model_body.output, *y_true])处,无法进入到Lambda函数内的yolo_loss函数内继续进行调试,经过一番探索,成功进入到yolo_loss函数内,步骤如下:
(1)打开train.py,在model_loss处设置断点,右击Debug ‘train’,开始调试,如图1所示。
调试yolov3代码如何进入 Lambda中的yolo_loss函数
图1
调试yolov3代码如何进入 Lambda中的yolo_loss函数
图2
图2中,①处是函数之间的调用关系,便于厘清关系,②处是各变量的具体信息。

(2)Step Into(F7) : 高亮行下移一行
调试yolov3代码如何进入 Lambda中的yolo_loss函数
(3)Step Into(F7) : 在MainThread处可以得知此时跳转到interfaces.py:29行的wrapper函数处。
wrapper, interfaces.py:29 if object_type == ‘class’:
调试yolov3代码如何进入 Lambda中的yolo_loss函数
(4)Step Out(Shift + F8): 跳转回model_loss处
调试yolov3代码如何进入 Lambda中的yolo_loss函数
(5)Step Into(F7) : 高亮行下移一行
调试yolov3代码如何进入 Lambda中的yolo_loss函数
(6)Step Into(F7) : 跳转到base_layer.py:808行的out()函数
调试yolov3代码如何进入 Lambda中的yolo_loss函数
(7)Step Out(Shift + F8): 跳转回model_loss处
(8)Step Into(F7) :跳转到base_layer.py:407行的__call__函数内
调试yolov3代码如何进入 Lambda中的yolo_loss函数
(9)光标移动到__call__, base_layer.py:457 output = self.call(inputs, **kwargs) ,右击Run to Cursor
(10) Step Into(F7) :跳转到core.py:684行的call函数内 arguments = self.arguments
调试yolov3代码如何进入 Lambda中的yolo_loss函数
(11)光标移动到 call, core.py:687 return self.function(inputs, **arguments),右击Run to Cursor
(12)Step Into(F7) :跳转到model.py:371行的yolo_loss函数内
调试yolov3代码如何进入 Lambda中的yolo_loss函数
(13)现在就进入到了yolo_loss()中了,接下来可以继续调试,理解yolo_loss代码及原理。