调试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函数内。主要有两种方法:

一、手动找到yolo_loss函数,然后右击Run to Cursor

(1)打开train.py,在model_loss处设置断点,右击Debug ‘train’,开始调试
(2)按住Ctrl键,鼠标点击yolo_loss函数名,跳转到yolo_loss函数定义的地方,鼠标放置在函数体的第一行,即num_layers = len(anchors)//3 # default setting,然后右击Run to Cursor,即可进入到yolo_loss函数内继续进行调试,需要注意的是鼠标不要放置在def yolo_loss(args, anchors, num_classes, ignore_thresh=.5, print_loss=False):处右击Run to Cursor,因为不成功。
调试yolov3代码如何进入 Lambda中的yolo_loss函数_第1张图片

二、顺序调试

(1)打开train.py,在model_loss处设置断点,右击Debug 'train',开始调试,如图1所示。

调试yolov3代码如何进入 Lambda中的yolo_loss函数_第2张图片
图1
调试yolov3代码如何进入 Lambda中的yolo_loss函数_第3张图片
图2
图2中,①处是函数之间的调用关系,便于厘清关系,②处是各变量的具体信息。

(2)Step Into(F7) : 高亮行下移一行
调试yolov3代码如何进入 Lambda中的yolo_loss函数_第4张图片
(3)Step Into(F7) : 在MainThread处可以得知此时跳转到interfaces.py:29行的wrapper函数处。
wrapper, interfaces.py:29 if object_type == ‘class’:
调试yolov3代码如何进入 Lambda中的yolo_loss函数_第5张图片
(4)Step Out(Shift + F8): 跳转回model_loss处
调试yolov3代码如何进入 Lambda中的yolo_loss函数_第6张图片
(5)Step Into(F7) : 高亮行下移一行
调试yolov3代码如何进入 Lambda中的yolo_loss函数_第7张图片
(6)Step Into(F7) : 跳转到base_layer.py:808行的out()函数
调试yolov3代码如何进入 Lambda中的yolo_loss函数_第8张图片
(7)Step Out(Shift + F8): 跳转回model_loss处
(8)Step Into(F7) :跳转到base_layer.py:407行的__call__函数内
调试yolov3代码如何进入 Lambda中的yolo_loss函数_第9张图片
(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函数_第10张图片
(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函数_第11张图片
(13)现在就进入到了yolo_loss()中了,接下来可以继续调试,理解yolo_loss代码及原理。

你可能感兴趣的:(重要)