本文主要是介绍调试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,因为不成功。
二、顺序调试
(1)打开train.py,在model_loss处设置断点,右击Debug 'train',开始调试,如图1所示。
图1
图2
图2中,①处是函数之间的调用关系,便于厘清关系,②处是各变量的具体信息。
(2)Step Into(F7) : 高亮行下移一行
(3)Step Into(F7) : 在MainThread处可以得知此时跳转到interfaces.py:29行的wrapper函数处。
wrapper, interfaces.py:29 if object_type == ‘class’:
(4)Step Out(Shift + F8): 跳转回model_loss处
(5)Step Into(F7) : 高亮行下移一行
(6)Step Into(F7) : 跳转到base_layer.py:808行的out()函数
(7)Step Out(Shift + F8): 跳转回model_loss处
(8)Step Into(F7) :跳转到base_layer.py:407行的__call__函数内
(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
(11)光标移动到 call, core.py:687 return self.function(inputs, **arguments),右击Run to Cursor
(12)Step Into(F7) :跳转到model.py:371行的yolo_loss函数内
(13)现在就进入到了yolo_loss()中了,接下来可以继续调试,理解yolo_loss代码及原理。
这篇关于调试yolov3代码如何进入 Lambda中的yolo_loss函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!