# rotate-yolo3 **Repository Path**: wangyuyan10/rotate-yolo3 ## Basic Information - **Project Name**: rotate-yolo3 - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-02-02 - **Last Updated**: 2023-01-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # **rotate-yolo3** # 这是一个可以检测旋转物体的YOLO3算法 (虽然我也不知道能不能完成) 可能现在的能力不够复现不了这篇文章但是在毕业之前会一点一点完善这个仓库 # 在YOLO3 keras版本下需要的改进点 简单介绍一下流程和整体结构 因为之前用来跑训练的代码是基于keras的版本的 代码地址为 : [https://gitee.com/wangyuyan10/yolo3-keras](http://) ### 首先要先已经了解了YOLO3的一个简单流程 在这里我简单的介绍一下YOLO的一个简单流程 #### 1.标记数据以及转化数据格式 首先从标记数据开始,标记数据的软件有很多在github上面有labelimg,在网络上也有一些简便的标记软件比如精灵标记助手这类的标记软件。 这些都可以标记VOC格式的数据 在标记矩形框的时候,标记得到的xml位置信息为 (x1,y1,x2,y2),也就是矩形框的左上角坐标和右下角坐标。 后面会用脚本将这些xml转换为txt,然后再用voc2yolo3.py这个脚本将txt转为适应于yolo3格式的txt。 #### 2.数据的读取 在得到训练所用的txt过后,就可以将其读入,使用到的是utils路径下的utils.py文件,这个文件中包含了数据增强的操作和图像变换的操作, 然后就是读入txt中的数据了。 #### 3.训练真值的制作 读入数据过后,这些数据的用途就是用来做真值,也就是让真实框找到对应特征层对应的预测网格点。 #### 4.darknet的搭建 在nets/darknet53.py中利用keras的框架来构造一个darknet的网络 #### 5.yolo3网络的搭建 在nets/yolo3.py中实现对yolo3网络的搭建,实现网络的预测预测输出 #### 6.loss的构成 在上面构建了yolo3网络,得到了输出和之前的真值,就可以进行loss的计算 #### 7.位置框的预测 在使用训练得到的权重进行预测时,会经过nms的筛选,将不必要的框删除 ### 需要改进的点的对比 #### 1.标记数据以及转化数据格式以及读取数据的改变 将标注软件换成rolalbelimg,标注倾斜框的目标,标注的xml文件是x,y,w,h,a这五个参数,读入的时候可以仿照原始版本的读入方式,将读入的5个参数换成6个参数,也就是在 utils.py中进行变形。标注出来的形式就像data_samples文件夹中的格式一样。 #### 2.训练真值的改变 训练真值的改变是整个流程中比较核心的一个地方,因为这个地方会用到RIOU的一个操作,在这个地方主要改动的也就是RIOU,函数名称为process_true_boxes,在这里面完成真值的制 作。 ##### RIOU的用途 RIOU的用途主要是计算目标框和anchor的一个交并比,找出与目标框最大的IOU,目的是确定目标框属于哪一个特征层,然后再将真值的信息赋值给对应的特征层的对应的点。 #### 3.yolo3网络的改动 原来的yolo3的预测是(batch_size,13,13,3*(num_classes+5:[x,y,w,h,classes_id]))要转化为(batch_size,13,13,3*(num_classes+6:[x,y,w,h,angle,classes_id])) #### 4.loss的改动 和之前一样读入了真值和预测值,就可以计算lossle,但是需要注意的点是在计算loss的时候会寻找负样本,也会涉及两个目标框计算iou的,所以在这里也需要将原来的计算iou的方法 换成riou的计算方法。 #### 4.预测框的改动 在预测的时候,会有一个nms的筛选,在这个地方因为预测出来的框是倾斜的,所以这个地方也要转换成倾斜的nms,也就是换成rnms再将不必要的框给删除。