基于yolov5的遥感图像目标检测(NWPU VHR-10)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

最近在做毕设感觉网上信息不是很全把自己的训练过程写下来供做这个方向的友友学习。只有简单的复现其余的还没探索到。

一、数据集以及数据预处理

首先就是数据集我用的数据集是西工大发布的数据集NWPU VHR-10

链接https://pan.baidu.com/s/1vfhDU2ORWUpL-aGM1PllGw 
提取码d5au

西工大数据集有十个类别有三个文件夹分别是positive image set650张图片negative image set150张图片和ground truth650个txt文件。

negative image set中的影像无对应的地物目标
positive image set中的影像包括1个及以上对应的地物目标
ground truth中的txt对应positive image set中地物目标的外接矩形
影像信息

  • image size: 500~1100 * 500~1100 * 3
  • image number: 800
  • object number: 3,651

标注信息
10类共3,651个目标

  • airplane,飞机
  • ship,船
  • storage tank,储罐
  • baseball diamond,棒球场
  • tennis court,网球场
  • basketball court,篮球场
  • ground track field,地面轨道场
  • harbor,港口
  • bridge,桥
  • vehicle,交通工具

 首先就是要把NWPU VHR-10转换成类似于voc数据集的形式然后再转化为yolo格式。

voc文件格式包含文件annotations存放图片信息、images存放训练图片、ImageSets存放图片训练信息。

将negative image set、positive image set内图片重新进行顺序编号为000001.jpg-000800.jpgpositive image set内图片为000001.jpg-000650.jpgnegative image set内图片为000651.jpg-000800.jpg然后存放在image文件夹内。

数据集的annotations文件夹内的标注信息xml文件格式相同的xml文件。因为negative image set内图片无对应标注信息所以只生成包含图片大小的xml文件。

ImageSets文件夹内划分为train.txt、val.txt、trainval.txt、test.txt四个文件,train代表训练集信息val代表验证集信息trainval代表训练集和验证集合并的数据信息test代表测试集信息。

然后将voc格式转换为yolo格式在目录下生成新的labels文件夹把数据集路径导入txt文件将每个xml标注信息提取转换为了txt格式每个图像对应一个txt文件。

附上我的程序其中main.py,1.py2.py3.py按顺序运行因为后一个可能会用到前一个生成出来的东西的地址把地址改成自己的地址就行。

链接https://pan.baidu.com/s/1C04y16LIdyby5vhNEzsYSA 
提取码iz0r

有个地方出错了3.py里面这一行改成底下那一句少了一个bridge的类harbor和vehicle之间少了一个然后tennis拼错了

classes = ['airplane','ship','storage tank','baseball diamond','tennis court','basketball court','ground track field','harbor','bridge','vehicle']  # class names

地址很多而且一定要按照顺序来运行如果不确定能不能生成文件夹可以自己提前创建然后直接运行就行除了地址其余什么都不需要改

 

二、环境搭建

首先附上yolov5官方源码可以自己在Github上面下载直接在Github上面搜yolov5下载点赞最多的那个就行。我已经下载到我的网盘了这里附上我的网盘链接。

链接https://pan.baidu.com/s/1BENXIeyKgjwyAhnXA_n9Uw 
提取码3r9o

yolov5运行需要pytorch和cuda因为我以前运行过一些神经网络深度学习的算法所以我的环境都是已经搭建好的另外如果想提高运行速度是需要下载GPU的只用cpu运行速度太慢但是也能运行。python版本最好是3.7或者3.8太高好像会报错可以在运行前提前降一下python版本。我用的是3.8的conda版本。

如果是纯纯小白看这篇博客安装环境

记录使用Anaconda、Pycharm配置Yolov5环境全过程

环境搭建好下一步就是安装所需要的库

pip install -r requirements.txt

yolov5自带一个requirements.txt文件就是运行时能用到的所有库按照上面的语句在终端也就是terminal运行一下就行虽然一般情况下不会顺利完成安装不了的就自己手动pip可以win+r输入cmd进入命令提示符窗口输入pip list就可以看到所有的库和版本对照requirements.txt给定的版本该install的install该uninstall的uninstall。

三、运行程序

首先需要在data文件夹下创建一个mydata.yaml,像这样mydata.yaml是data的子文件。

 mydata.yaml的程序yaml格式非常严格除地址外的冒号后面都要有一个空格不然会报错因为这个空格我改了两个小时还有

valtraintest的地址是我们数据预处理最后一步生成的地址。

在这里的哦和文件夹是同级文件至于两个.cache文件没有不用管这是在训练的时候生成的现在没有是正常的别整错了哦。

 

 这是程序建议大家直接复制改个地址就行。简单介绍一下前面三行是地址后面是类别最后一个是类别的数目也可以根据自己数据集进行修改。

val: G:/csdn/yolov5/nwpu vhr-10/val.txt
train: G:/csdn/yolov5/nwpu vhr-10/train.txt
test: G:/csdn/yolov5/nwpu vhr-10/test.txt
names:
- airplane
- ship
- storage tank
- baseball diamond
- tennis court
- basketball court
- ground track field
- harbor
- bridge
- vehicle
nc: 10

然后就是修改主程序train.py,在utils文件下

 主要需要修改的部分就是这五个如果使用的是源码只需要把第三行的yaml文件改成Mydata就行。第一行的.pt文件是权重文件是可以换的后面会提到。

接下来就是修改yaml文件第二行我们使用的是yolo5s.yaml,所以在model/yolov5s.yaml中修改。

 把nc数改成上面一样的就行因为西工大数据集只有十个类别所以我的nc是10。

接下来就可以运行了。

如果出现了连接不到网络或者对方无响应什么的问题那就是在运行中它会自己下载权重文件也就是上面第一行的yolov5s.pt  的pt文件出现问题也没多大关系可以自己下载权重文件然后放到文件夹里就行啦。

链接https://pan.baidu.com/s/1p7_v_Wlicw_7oBUv-QNv_w 
提取码uarf

这是权重文件链接放到根目录下也就是说和model是同级文件并行的

权重文件长这样内存越大权重越大训练效果越好并不绝对小心过拟合而且运行速度zun的很慢我用5s运行的西工大数据集100个epochs跑了十个小时换了个权重文件5x的一个小时都跑不完一个epoch。

这样就没问题啦运行出来的结果会保存到runs\train\exp里面

 四、detect

同样也是在utils文件夹下修改这三个文件第一个是我们使用的权重文件第二个是我们需要检测的图片地址一定要换成自己的图片 第三个就是老规矩。然后就可以运行了生成的结果在runs\test\exp里面我忘了截图了。

 五、换权重文件

第一步修改train里面的五个框把5s改成别的建议如果用大的权重文件就把epoch和batch-size改小一点要不然会超时的哦第二不改相应的pt文件里的nc数有印象吧然后就可以运行了如果报错可以直接用一行代码在终端也就是terminal里运行。因为我自己运行的时候报了个莫名其妙的错误所以用了这种方法比较简单不用改源码什么都不需要改。

python train.py --batch-size 2 --epochs 100 --data G:\bishe\bishe1\yolov5-master\data\mydata.yaml --weights D:\BaiduNetdiskDownload\yolov5-weights\yolov5x.pt

四个要素batchsizeepochsmydata.yaml的地址还有权重文件.pt的地址。这个方法不用改代码什么都不需要动无论你把我刚刚圈的几个框改成什么样了都没关系直接这一行就行了

同样detect也可以用这个方法。

python .\detect.py --source C:\Users\Administrator\PycharmProjects\yolov5\imgs\valid\images --weights C:\Users\Administrator\PycharmProjects\yolov5\runs\train\exp8\weights\best.pt

两个要素一个是你需要测试的图片的地址另一个是pt文件这个文件就是我们训练出来的了在runs\train\exp\weights\best.pt

这个也一样不需要改源码也不用管你把源码框框改成什么样了都可以用这个方法。

 放一张detect的图片。

这是我使用yolov5训练西工大数据集的全过程我一点点摸索出来的如果有不对的地方欢迎各位大佬留言指正如果有什么问题也可以私信我会的我会回答不会的我只能深感抱歉后续有改进我也会发出来的。谢谢大家

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6