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

2024-04-20 20:18

本文主要是介绍调试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函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/921227

相关文章

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案