調試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所示。
在這裏插入圖片描述
圖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代碼及原理。