调试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

相关文章

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

postgresql使用UUID函数的方法

《postgresql使用UUID函数的方法》本文给大家介绍postgresql使用UUID函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录PostgreSQL有两种生成uuid的方法。可以先通过sql查看是否已安装扩展函数,和可以安装的扩展函数

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串