旋转目标检测-环境配置-数据集制作
创始人
2025-05-28 10:08:52
0

一、环境配置

  • Ubuntu 22.04
  • Torch 1.10
  • CUDA 11.3
  • python 3.9

      环境配置参考下面链接(建议Linux系统)yolov5_obb/install.md at master · hukaixuan19970627/yolov5_obb (github.com)https://github.com/hukaixuan19970627/yolov5_obb/blob/master/docs/install.md

  •  创建虚拟环境
conda create -n Py39_Torch1.10_cu11.3 python=3.9 -y 
source activate Py39_Torch1.10_cu11.3
  •  查看CUDA版本(确保CUDA runtime api version ≤ CUDA driver version)
nvcc -V
nvidia-smi

  •  安装PyTorch和torchvision
pip3 install torch==1.10.1+cu113 torchvision==0.11.2+cu113 torchaudio==0.10.1+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
nvcc -V
python
>>> import torch
>>> torch.version.cuda
>>> exit()

  •  克隆yolov7-obb项目(也可直接在GitHub上下载)
git clone https://github.com/Egrt/yolov7-obb.git

  •  配置yolov7-obb所需环境
cd yolov7-obb
pip install -r requirements.txt
cd utils/nms_rotated
python setup.py develop #安装非极大值抑制库

运行 python setup.py develop时报错

可以看出时gcc版本问题,检测已有版本发现gcc 12 > gcc 11

故安装低版本的gcc,并创建软链接(此处要对应改为自己的位置)

sudo apt-get install gcc-10
sudo apt-get install g++-10sudo ln -s /usr/bin/gcc-10 /usr/local/cuda-11.6/bin/gcc #创建软链接

再次运行 python setup.py develop

至此,环境配置完成!!!

二、数据集制作

  • 下载官方源码
https://github.com/cgvict/roLabelImg
  •  进入下载好的roLabellmg-master文件夹内 ,在终端打开
pyrcc5 -oresources.py resources.qrc
python roLabelImg.py

  •  快捷键
w创建矩形框
e创建旋转矩形框

d

下一张

a上一张
zxcv旋转矩形框
Ctrl + s保存

  •  标注的XML格式
hsrc100000001/Users/haoyou/Library/Mobile Documents/com~apple~CloudDocs/OneDrive/hsrc/100000001.bmpUnknown116675330bndboxshipUnspecified00178246974504
  •  数据集格式转换(把旋转框 cx,cy,w,h,angle,转换成四点坐标x1,y1,x2,y2,x3,y3,x4,y4)
import os
import xml.etree.ElementTree as ET
import mathdef edit_xml(xml_file, dotaxml_file):"""修改xml文件:param xml_file:xml文件的路径:return:"""tree = ET.parse(xml_file)objs = tree.findall('object')for ix, obj in enumerate(objs):x0 = ET.Element("x0")  # 创建节点y0 = ET.Element("y0")x1 = ET.Element("x1")y1 = ET.Element("y1")x2 = ET.Element("x2")y2 = ET.Element("y2")x3 = ET.Element("x3")y3 = ET.Element("y3")# obj_type = obj.find('bndbox')# type = obj_type.text# print(xml_file)if (obj.find('robndbox') == None):obj_bnd = obj.find('bndbox')obj_xmin = obj_bnd.find('xmin')obj_ymin = obj_bnd.find('ymin')obj_xmax = obj_bnd.find('xmax')obj_ymax = obj_bnd.find('ymax')xmin = float(obj_xmin.text)ymin = float(obj_ymin.text)xmax = float(obj_xmax.text)ymax = float(obj_ymax.text)obj_bnd.remove(obj_xmin)  # 删除节点obj_bnd.remove(obj_ymin)obj_bnd.remove(obj_xmax)obj_bnd.remove(obj_ymax)x0.text = str(xmin)y0.text = str(ymax)x1.text = str(xmax)y1.text = str(ymax)x2.text = str(xmax)y2.text = str(ymin)x3.text = str(xmin)y3.text = str(ymin)else:obj_bnd = obj.find('robndbox')obj_bnd.tag = 'bndbox'  # 修改节点名obj_cx = obj_bnd.find('cx')obj_cy = obj_bnd.find('cy')obj_w = obj_bnd.find('w')obj_h = obj_bnd.find('h')obj_angle = obj_bnd.find('angle')cx = float(obj_cx.text)cy = float(obj_cy.text)w = float(obj_w.text)h = float(obj_h.text)angle = float(obj_angle.text)obj_bnd.remove(obj_cx)  # 删除节点obj_bnd.remove(obj_cy)obj_bnd.remove(obj_w)obj_bnd.remove(obj_h)obj_bnd.remove(obj_angle)x0.text, y0.text = rotatePoint(cx, cy, cx - w / 2, cy - h / 2, -angle)x1.text, y1.text = rotatePoint(cx, cy, cx + w / 2, cy - h / 2, -angle)x2.text, y2.text = rotatePoint(cx, cy, cx + w / 2, cy + h / 2, -angle)x3.text, y3.text = rotatePoint(cx, cy, cx - w / 2, cy + h / 2, -angle)# obj.remove(obj_type)  # 删除节点obj_bnd.append(x0)  # 新增节点obj_bnd.append(y0)obj_bnd.append(x1)obj_bnd.append(y1)obj_bnd.append(x2)obj_bnd.append(y2)obj_bnd.append(x3)obj_bnd.append(y3)tree.write(dotaxml_file, method='xml', encoding='utf-8')  # 更新xml文件# 转换成四点坐标
def rotatePoint(xc, yc, xp, yp, theta):xoff = xp - xc;yoff = yp - yc;cosTheta = math.cos(theta)sinTheta = math.sin(theta)pResx = cosTheta * xoff + sinTheta * yoffpResy = - sinTheta * xoff + cosTheta * yoffreturn str(int(xc + pResx)), str(int(yc + pResy))def totxt(xml_path, out_path):# 想要生成的txt文件保存的路径,这里可以自己修改files = os.listdir(xml_path)for file in files:tree = ET.parse(xml_path + os.sep + file)root = tree.getroot()name = file.strip('.xml')output = out_path + name + '.txt'file = open(output, 'w')objs = tree.findall('object')for obj in objs:cls = obj.find('name').textbox = obj.find('bndbox')x0 = int(float(box.find('x0').text))y0 = int(float(box.find('y0').text))x1 = int(float(box.find('x1').text))y1 = int(float(box.find('y1').text))x2 = int(float(box.find('x2').text))y2 = int(float(box.find('y2').text))x3 = int(float(box.find('x3').text))y3 = int(float(box.find('y3').text))file.write("{} {} {} {} {} {} {} {} {} 0\n".format(x0, y0, x1, y1, x2, y2, x3, y3, cls))file.close()print(output)if __name__ == '__main__':# -----**** 第一步:把xml文件统一转换成旋转框的xml文件 ****-----roxml_path = "./datasets/Annotations"  # 目录下保存的是需要转换的xml文件dotaxml_path = './datasets/dotaxml'filelist = os.listdir(roxml_path)for file in filelist:edit_xml(os.path.join(roxml_path, file), os.path.join(dotaxml_path, file))

三、训练自己的数据集

      本文参考yolov7-obb项目如下Egrt/yolov7-obb: 在YOLOv7的基础上使用KLD损失修改为旋转目标检测yolov7-obb (github.com)https://github.com/Egrt/yolov7-obb

  • 数据集格式 (其中Annotations为上面格式转换过的xml文件)
VOCdevkit/VOC2007├── Annotations├── 0001.xml├── 0002.xml..├── ImageSets├── Main├── JPEGImages├── 0001.xml├── 0002.xml..
  •  运行voc_annotation.py文件,生成2007_train.txt和2007_val.txt文件

  •  开始训练

 

相关内容

热门资讯

安卓点歌系统连电脑,打造个性化... 你有没有想过,你的安卓手机里的点歌系统竟然可以和电脑无缝连接呢?这听起来是不是很神奇?没错,今天就要...
那个电视搭载安卓系统,智能娱乐... 你有没有想过,家里的电视竟然也能搭载安卓系统?没错,就是那个曾经只存在于手机和平板电脑上的操作系统,...
安卓系统反黄软件,净化网络环境 你有没有发现,随着智能手机的普及,我们每天的生活越来越离不开这个小小的屏幕了。但是,你知道吗?在这个...
安卓怎么测试系统好坏,安卓系统... 你有没有想过,你的安卓手机是不是真的像你想象中那么强大呢?别急,今天就来给你揭秘,怎么测试安卓系统的...
安卓8.0软件系统精简,极致体... 你知道吗?最近安卓系统更新换代的速度可真是让人眼花缭乱。这不,安卓8.0系统已经悄悄地来到了我们身边...
安卓脱敏系统是什么,隐私保护与... 你有没有想过,你的手机里那些看似普通的信息,其实可能藏着大大的秘密呢?今天,就让我来给你揭秘一个神秘...
64位系统安卓手机,畅享智能生... 你有没有发现,最近市面上那些64位系统安卓手机真是越来越火了?这不,我就买了一部,简直让我爱不释手!...
苹果系统用不惯安卓系统,跨越系... 你有没有发现,身边总有些人,他们用着苹果手机,却对安卓系统情有独钟?这究竟是怎么回事呢?今天,我们就...
安卓系统更新删软件,你准备好了... 亲爱的手机控们,你们有没有发现,最近你的安卓手机是不是总在默默更新呢?没错,就是那个让你又爱又恨的系...
安卓系统怎么安装winxp,安... 你有没有想过,在安卓系统上安装Windows XP这样的经典操作系统呢?想象在手机上就能体验到XP的...
安卓系统u3,新一代智能体验的... 你知道吗?在手机操作系统的大千世界里,安卓系统U3可是个隐藏的宝藏呢!它不仅拥有强大的功能,还能让你...
安卓系统装显卡教程,安卓系统轻... 你有没有想过,你的安卓手机或者平板,竟然也能装上显卡?是的,你没听错,就是显卡!这可不是什么天方夜谭...
崩坏3安卓换装系统,展现独特魅... 你有没有发现,最近玩《崩坏3》的小伙伴们都在热议一个新玩意儿——安卓换装系统!这可是个大新闻,让我来...
安卓系统访问用户中心,用户中心... 你有没有发现,每次打开安卓手机,总有一个神秘的地方隐藏在角落里,那就是用户中心。今天,就让我带你一起...
psv用安卓系统更新,轻松实现... 你有没有发现,你的PSV(PlayStation Vita)最近有点儿“懒洋洋”的?别急,别急,我来...
钉钉越狱 安卓系统,安卓系统下... 你知道吗?在科技圈里,最近可是掀起了一股“越狱”热潮。这不,钉钉这款办公软件在安卓系统上的越狱方法,...
安卓系统耳机定位功能,畅享智能... 你有没有发现,现在手机里的安卓系统越来越聪明了?它不仅能帮你找到失落的手机,还能帮你精准地找到耳机!...
安卓系统怎么玩4399,439... 你有没有想过,在安卓系统上玩4399游戏,竟然能这么有趣呢?没错,就是那个我们小时候就爱不释手的43...
系统克隆能用吗安卓,系统克隆助... 你有没有想过,如果你的手机突然“复活”了,那会是怎样一番景象呢?没错,我要说的就是那个神奇的系统克隆...
小电脑装安卓系统,小电脑搭载安... 你有没有想过,一台小小的电脑也能装上安卓系统?听起来是不是有点不可思议?别急,让我带你一探究竟,看看...