yolo-tensorflow复现解析(代码片段)

the-home-of-123 the-home-of-123     2023-01-04     158

关键词:

看到有人使用tensorflow复现了yoloV3,来此记录下代码阅读。感觉复现的代码写的不是很好,会加一部分其他人用keras复现的代码。

tensorflow代码地址:https://blog.csdn.net/IronMastiff/article/details/79940118

源代码分为以下几部分:

Train.py为主程序train.py部分为训练自己的数据集,eval.py为利用训练好的权重来进行预测。Reader为读取数据标签等,config.yml为训练过程中的一些参数设置,eval_config.yml为预测过程中的一些参数设置。Utils包为其中的一些网络结构,IOU等中间步骤。下面先介绍utils的中的程序

 

技术分享图片

Net.py: 设置网络结构,提取图片信息。Darknet-53网络结构如下。1x,2x等分别表示该结构重复了1次两次等,Residual表示和前面方框外的结构进行按维度叠加,类似于残差网络。

feature_extractor 函数该提取三个尺度的信息scale1,scale2,scale3,分别为倒数第1,2,3个方框中网络结构的输出。之后,scales函数通过1x1,3x3卷积分别对三个尺度的特征单元进行特征交互。返回交互后的三个尺度信息。
最后输出的三个不同尺度分别为 13X13X75,26X26X75,52X52X75具体交互信息可参考代码结构。最后训练时会选取不同scale参与计算loss,select_things就是选取不同scale的特征。
不太理解如何使用?是需要手动更改配置文件的scale选择?如何选择?

 

技术分享图片

IOU.py 为NMS筛选anchor,用来参与最后的loss计算get_loss.py.先来解释IOU

 1 def IOU_calculator( x, y, width, height, l_x, l_y, l_width, l_height ):
 2     ‘‘‘
 3     x,y,width,height分别为预测框的中心坐标及宽,高,l_x, l_y, l_width, l_height分别为真实框的中心坐标及宽,高
 4     ‘‘‘
 5     ##x_min=x-w/2,y_min=y-h/2,x_max=x+w/2,y_max=y+h/2 此段意义为分别求出四个角坐标
 6     x_max = calculate_max( x , width / 2 )
 7     y_max = calculate_max( y, height / 2 )
 8     x_min = calculate_min( x, width / 2 )
 9     y_min = calculate_min( y, height / 2 )
10 
11     l_x_max = calculate_max( l_x, width / 2 )
12     l_y_max = calculate_max( l_y, height / 2 )
13     l_x_min = calculate_min( l_x, width / 2 )
14     l_y_min = calculate_min( l_y, height / 2 )
15 
16     ‘‘‘求相交部分的面积‘‘‘
17     xend = tf.minimum( x_max, l_x_max )
18     xstart = tf.maximum( x_min, l_x_min )
19 
20     yend = tf.minimum( y_max, l_y_max )
21     ystart = tf.maximum( y_min, l_y_min )
22 
23     area_width = xend - xstart
24     area_height = yend - ystart
25 
26     ‘‘‘IOU=A & B/(A+B-A & B)若A与B交集为0,则返回1e-8‘‘‘
27     area = area_width * area_height
28 
29     all_area = tf.cond( ( width * height + l_width * l_height - area ) <= 0, lambda : tf.cast( 1e-8, tf.float32 ), lambda : ( width * height + l_width * l_height - area ) )
30 
31     IOU = area / all_area
32 
33     IOU = tf.cond( area_width < 0, lambda : tf.cast( 1e-8, tf.float32 ), lambda : IOU )
34     IOU = tf.cond( area_height < 0, lambda : tf.cast( 1e-8, tf.float32 ), lambda : IOU )
35 
36     return IOU

get_loss.py为计算损失函数,他的损失函数计算是按照yolov1来计算的,有点问题。

技术分享图片

 

 1 def objectness_loss( input, switch, l_switch, alpha = 0.5 ):
 2     ‘‘‘
 3     input为IOU,switch为若预测该框内有object则为1,否则为0,l_switch为实际该框有object则为1,否则为0
 4     ‘‘‘
 5 
 6     IOU_loss = tf.square( l_switch - input * switch )  ##input * switch类别置信度C
 7     loss_max = tf.square( l_switch * 0.5 - input * switch )
 8 
 9     IOU_loss = tf.cond( IOU_loss < loss_max, lambda : tf.cast( 1e-8, tf.float32 ), lambda : IOU_loss )
10 
11     IOU_loss = tf.cond( l_switch < 1, lambda : IOU_loss * alpha, lambda : IOU_loss )
12 
13     return IOU_loss
14 
15 def location_loss( x, y, width, height, l_x, l_y, l_width, l_height, alpha = 5 ):
16     point_loss = ( tf.square( l_x - x ) + tf.square( l_y - y ) ) * alpha
17     size_loss = ( tf.square( tf.sqrt( l_width ) - tf.sqrt( width ) ) + tf.square( tf.sqrt( l_height ) - tf.sqrt( height ) ) ) * alpha
18 
19     location_loss = point_loss + size_loss
20 
21     return location_loss
22 
23 def class_loss( inputs, labels ):
24     classloss = tf.square( labels - inputs )
25     loss_sum = tf.reduce_sum( classloss )
26 
27     return loss_sum

接下来是提取训练数据的程序extract_labels.py 可下载pascal voc数据集,对照数据的格式来读数据。比较麻烦,但是这个也是训练程序与预测程序最大的不同点,这份代码最大的亮点也在此,其他部分实现个人感觉并不是很好。数据既可以读取类别标签,也可读取物体框的信息。

粗略的写了一份程序解读,因为只能找到一个tensorflow代码实现,个人认为不是很好,希望有人有比较好的复现可以说一下。同时学好C++很重要呀,就可以直接读取源码了。

 







安全-apachehttpd换行解析漏洞复现(cve-2017-15715)(代码片段)

文章目录前言影响版本漏洞复现前言复现环境docker、docker-compose、vulhub,请勿用于违法用途ApacheHTTPD换行解析漏洞复现(CVE-2017-15715)影响版本2.4.0~2.4.29漏洞复现启动docker服务如果你使用docker-composeup-d启动时出现下面的... 查看详情

漏洞复现之apache解析漏洞(代码片段)

文章目录文件上传-apache解析漏洞原理实验内容漏洞防御免责声明文件上传-apache解析漏洞原理Apache是从右到左开始判断解析,如果为不可识别解析,就再往左判断。比如xxx.php.rar对apache来说rar是不可解析的,所以就会解析成xxx.php... 查看详情

漏洞复现之apache解析漏洞(代码片段)

文章目录文件上传-apache解析漏洞原理实验内容漏洞防御免责声明文件上传-apache解析漏洞原理Apache是从右到左开始判断解析,如果为不可识别解析,就再往左判断。比如xxx.php.rar对apache来说rar是不可解析的,所以就会解析成xxx.php... 查看详情

phpstudynginx解析漏洞复现(代码片段)

0x01漏洞简介自从2019年phpStudy爆出后门事件后,2020年9月再次爆出存在nginx解析漏洞。该漏洞是phpStudy默认使用的nginx版本是Nginx1.15.11。nginx在解析文件时,由于错误的配置造成文件以错误的格式执行。影响版本:phpStudy&l... 查看详情

nginx解析漏洞漏洞复现(代码片段)

前言该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。环境搭建漏洞环境使用vulhub搭建,漏洞目录为vulhub/nginx/nginx_parsing_vulnerability在漏洞目录中执行以下命令即可构建漏洞环境。docker-composeup-d原理分析首... 查看详情

漏洞复现apachehttpd换行解析漏洞(cve-2017-15715)(代码片段)

...洞(CVE-2017-15715)0x01漏洞背景0x02漏洞环境0x03漏洞复现0x01漏洞背景ApacheHTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个 查看详情

web中间件漏洞复现合集---iis篇(代码片段)

...前言一、Win2003_IIS6.0环境搭建二、PUT漏洞1.漏洞介绍2.漏洞复现3.报错问题解决4.漏洞修复方案三、短文件名猜解1.漏洞介绍2.复现过程3.漏洞修复三、Win2008R2_IIS环境搭建四、远程代码执行(一)Cve-2017-7269(0day漏洞)... 查看详情

漏洞复现——httpd换行解析漏洞(代码片段)

...以绕过一些服务器的安全策略。漏洞版本:2.4.0~2.4.29漏洞复现:复现该漏洞是利用docker复现的,搭建好环境后,会发现页面一片空白查看该漏洞源码后,发现并没有前段,需要自己写一个: <html><head><metacharset="utf-... 查看详情

网络安全漏洞复现与分析(代码片段)

漏洞介绍Weblogic的WLSSecurity组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。攻击者发送精心构造的xml数据甚至能通过反弹shell拿到权... 查看详情

apache中间件漏洞学习(代码片段)

...ApacheHTTPD换行解析漏洞(CVE-2017-15715)原理:复现:ApacheHTTPD多后缀解析漏洞原理:复现:ApacheSSI远程命令执行漏洞原理:复现:Apachejobmanager/log目录穿越漏洞以及任意文件上传漏洞原理:复现... 查看详情

nginx文件名逻辑漏洞(cve-2013-4547)复现(代码片段)

目录0x01漏洞介绍0x02环境部署:0x03漏洞复现1.成功访问主页2.上传php文件3.上传gif文件4.修改后缀,增加截断5.访问成功6.上传木马文件7.修改后缀8.命令执行成功0x01漏洞介绍漏洞描述这个漏洞其实和代码执行没有太大的关系... 查看详情

nginx解析漏洞复现(代码片段)

学习积累:存在该漏洞的原因:是一种用户配置不当造成的漏洞这里我是部署了vulhub靶场直接执行docker-composeup-d启动容器,无需编译。造成该漏洞的配置条件:(不受php、nginx的版本限制)(1)php... 查看详情

信息收集:域传送漏洞复现(代码片段)

域名查询工具whois使用方法:whois+域名比如whoisgithub.com只能解析域名,不能附加主机名站长工具:https://whois.chinaz.com/子域名查询:推荐:https://searchdns.netcraft.com/域传送漏洞dns-zone-transfer参考网站(英文 查看详情

xxe漏洞复现步骤(代码片段)

XXE漏洞复现步骤0X00XXE注入定义XXE注入,即XMLExternalEntity,XML外部实体注入。通过 XML 实体,”SYSTEM”关键词导致 XML 解析器可以从本地文件或者远程 URI 中读取数据。所以攻击者可以通过 XML 实... 查看详情

nginx解析漏洞(代码片段)

Nginx漏洞复现与总结–FreeBuf网络安全行业门户1、文件解析漏洞描述:对于任意文件名,在后面添加/xxx.php后,即可作为php解析影响范围:该漏洞是nginx配置所导致,与版本无关。按照:phpStudy默认配置Nginx解析漏洞-漏洞复现/渗透... 查看详情

winrar代码执行漏洞复现(代码片段)

...h函数过滤不严导致 修复方案:升级到winrar5.7.1、漏洞复现环境准备:吾爱破解上找的winrar5.60版本靶机:192.168.41.129简体中文64位:http://www.win-rar.com/fileadmin/winrar-versions/sc20180711/wrr/winrar-x64-560sc.exe简体中文32位:http://www.win-rar.com/fil... 查看详情

02c3d行为识别复现训练过程(代码片段)

【C3D行为识别】总目录实战复现+代码解析+自定义数据集上一篇:01【C3D行为识别】项目下载环境配置数据集转化视频帧UCF101数据集处理目录一,训练一,训练进入目录:/home/mmaction2/pythontools/train.pyconfigs/recog... 查看详情

gitlab无需认证rce漏洞复现(cve-2021-22205)(代码片段)

...影响版本FOFA查询环境搭建(vulhub环境搭建)漏洞复现第一步漏洞检测第二步dnslog解析第三步服务器写入文件第三步反弹shell修复建议免责声明摘抄gitlab介绍GitLab是美国GitLab公司的一款使用RubyonRails开发的、自托管的、Git&#x... 查看详情