首页IT科技遥感影像目标检测(基于yolov5的遥感图像目标检测(NWPU VHR-10))

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

时间2025-09-18 14:45:48分类IT科技浏览8626
导读:最近在做毕设,感觉网上信息不是很全,把自己的训练过程写下来供做这个方向的友友学习。只有简单的复现,其余的还没探索到。...

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

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

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

链接:https://pan.baidu.com/s/1vfhDU2ORWUpL-aGM1PllGw 

提取码:d5au

西工大数据集有十个类别                         ,有三个文件夹              ,分别是positive image set(650张图片)          ,negative image set(150张图片)和ground truth(650个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.jpg                           ,positive image set内图片为000001.jpg-000650.jpg                      ,negative 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.py          ,2.py                          ,3.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格式非常严格,除地址外的冒号后面都要有一个空格                       ,不然会报错                          ,(因为这个空格我改了两个小时)     ,还有!!!

val                   ,train                         ,test的地址是我们数据预处理最后一步生成的地址          。

在这里的哦          ,和文件夹是同级文件               ,至于两个.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

四个要素                      ,batchsize,epochs                       ,mydata.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训练西工大数据集的全过程     ,我一点点摸索出来的                           ,如果有不对的地方欢迎各位大佬留言指正                      ,如果有什么问题也可以私信我,会的我会回答                       ,不会的我只能深感抱歉                          ,后续有改进我也会发出来的              。谢谢大家!!!

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
element修改按钮大小与颜色(vue3 Element Plus按钮点击之后颜色不会还原的解决方案) vuecli配置代理(vue3中的配置代理)