使用LuoJiaNET进行遥感场景分类(VGGNet)
文章目录
下载数据集
本文使用由武汉大学于2012年发布的WHU-RS19数据集(提取自Google Earth)
该数据集包含19种土地利用类型的遥感影像
修改配置文件
from easydict import EasyDict as ed
'''
You can forward the following directory structure from your dataset files and read by LuoJiaNet's API.
.. code-block::
.
└── image_folder_dataset_directory
├── class1
│ ├── 000000000001.jpg
│ ├── 000000000002.jpg
│ ├── ...
├── class2
│ ├── 000000000001.jpg
│ ├── 000000000002.jpg
│ ├── ...
├── class3
│ ├── 000000000001.jpg
│ ├── 000000000002.jpg
│ ├── ...
├── classN
├── ...
'''
config = ed({
"device_target":"GPU", #GPU或CPU
"dataset_path": "/lvdongrui/WHU-RS19/RSDataset", #数据存放位置
"save_checkpoint_path": "./checkpoint", #保存的参数存放位置
"resume":False, #是否载入模型训练
"class_num": 19, #数据集中包含的种类
"batch_size": 8,
"loss_scale": 1024,
"momentum": 0.9,
"weight_decay": 1e-5,
"epoch_size": 100, #训练次数
"save_checkpoint": True, #是否保存模型
"save_checkpoint_epochs": 1, #多少次迭代保存一次模型
"keep_checkpoint_max": 5, #文件内保存模型的最大个数,超过则删掉最开始的
"opt": 'rmsprop', #优化器:rmsprop或sgd
"opt_eps": 0.001,
"warmup_epochs": 50, #warmup训练策略
"lr_decay_mode": "warmup", #学习率衰减方式:steps、poly、cosine以及warmup
"use_label_smooth": True,
"label_smooth_factor": 0.1,
"lr_init": 0.0001, #初始学习率
"lr_max": 0.1, #最大学习率
"lr_end": 0.00001 #最小学习率
})
发起训练
python /luojianet-master/model_zoo/rs_scene_classification/VGG/train.py
报错1
缺失库报错
Traceback (most recent call last):
File "train.py", line 15, in <module>
from config import config
File "/lvdongrui/luojianet-master/model_zoo/rs_scene_classification/VGG/config.py", line 1, in <module>
from easydict import EasyDict as ed
ModuleNotFoundError: No module named 'easydict'
安装对应库
pip install easydict
报错2
mindir 文件未存在报错
[ERROR] OPTIMIZER(750,7f2076abb740,python):2023-04-27-04:16:43.534.680 [luojianet_ms/ccsrc/frontend/optimizer/ad/kprim.cc:172] CheckBpropHash] The bprop mindir files are not up to date. Please run the /root/anaconda3/envs/luojia_py375/lib/python3.7/site-packages/luojianet_ms/ops/_grad/../bprop_mindir/generate_mindir.py to generate new mindir files.
按照提示生成文件
python /root/anaconda3/envs/luojia_py375/lib/python3.7/site-packages/luojianet_ms/ops/_grad/../bprop_mindir/generate_mindir.py
报错3
冗余文件报错
[ERROR] MD(750,7f1e0cff5700,python):2023-04-27-04:16:42.185.794 [luojianet_ms/ccsrc/minddata/dataset/util/task_manager.cc:218] InterruptMaster] Task is terminated with err msg(more detail in info level log):Unexpected error. map operation: [RandomCropDecodeResize] failed. The corresponding data files: /lvdongrui/WHU-RS19/RSDataset/Beach/Thumbs.db. Decode: image decode failed.
Line of code : 510
File : /home/xx/LuoJiaNET_INSTALL/luojianet/luojianet_ms/ccsrc/minddata/dataset/kernels/image/image_utils.cc
原数据文件夹内并没有Thumbs.db这个文件,但将数据传送到服务器后便产生了这个文件,删除所有类别文件夹(有的并不存在冗余文件)下的Thumbs.db即可
报错4
冗余文件报错
[ERROR] MD(2021,7f610f7fe700,python):2023-04-28-07:43:03.771.801 [luojianet_ms/ccsrc/minddata/dataset/util/task_manager.cc:218] InterruptMaster] Task is terminated with err msg(more detail in info level log):Unexpected error. Invalid file found: /lvdongrui/WHU-RS19/RSDataset/Beach/.ipynb_checkpoints, should be file, but got directory.
Line of code : 276
File : /home/xx/LuoJiaNET_INSTALL/luojianet/luojianet_ms/ccsrc/minddata/dataset/core/tensor.cc
原数据文件夹内并没有.ipynb_checkpoints这个文件夹,但运行训练脚本时会产生这个隐藏文件夹,删除所有类别文件夹(有的并不存在冗余文件)下的.ipynb_checkpoints即可
模型开始训练
测试
python eval.py --dataset_path /lvdongrui/WHU-RS19/RSDataset_test1 --checkpoint_path ./checkpoint/model/net-100_101.ckpt --device_target GPU
- 测试集数据格式应当和训练集相同
└── image_folder_dataset_directory
├── class1
│ ├── 000000000001.jpg
│ ├── 000000000002.jpg
│ ├── ...
├── class2
│ ├── 000000000001.jpg
│ ├── 000000000002.jpg
│ ├── ...
├── class3
│ ├── 000000000001.jpg
│ ├── 000000000002.jpg
│ ├── ...
├── classN
├── ...
- 模型路径精确到ckpt文件
测试结果
输出为验证集的top-1和top-5精度指标
result: {'Loss': 2.9474989849588145, 'Top_1_Acc': 0.05434782608695652, 'Top_5_Acc': 0.266304347826087} ckpt= ./checkpoint/model/net-100_101.ckpt
预测
python test.py --input_file /lvdongrui/WHU-RS19/industrial_10.jpg --output_folder ./output --checkpoint_path ./checkpoint/model/net-100_101.ckpt --classes_file ./classes.txt --device_target GPU
-
–classes_file 为场景类别文件,classes.txt文本文件中是所包含的类别名称
-
在output_folder目录先输出与输入图像名一致的json文件
预测结果
输出结果为该影像对应top-5的类别、对应ID以及概率,我们预测的图像类型为Industrial,可见预测正确
{'title': 'Top-1', 'class_num': 8, 'class_name': 'Industrial', 'class_prob': 0.06119900196790695}
{'title': 'Top-2', 'class_num': 16, 'class_name': 'Residential', 'class_prob': 0.061108022928237915}
{'title': 'Top-3', 'class_num': 15, 'class_name': 'railwaystation', 'class_prob': 0.05867236852645874}
{'title': 'Top-4', 'class_num': 7, 'class_name': 'Forest', 'class_prob': 0.05529048293828964}
{'title': 'Top-5', 'class_num': 6, 'class_name': 'footballfield', 'class_prob': 0.05503586307168007}