一、环境配置
前言
因为需要安装Bboxtoolkit需要编译的cuda版本为11.0,如果你本机的显卡只支持高版本的cuda,没法降低cuda版本,这种情况下,建议使用anaconda 创建的虚拟环境,在创建虚拟环境的时候可以指定python版本,在虚拟环境里可以指定安装对应的cuda版本。
1.创建虚拟环境
conda create -n py37_YOLOX_OBB python=3.7
2.激活虚拟环境
source activate py37_YOLOX_OBB
3.安装cuda,torch,torchvision,toraudio
我的环境conda 安装后,导入torch会报错,所以我使用的是pip安装
conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=11.0 -c pytorch
我自己是pip 安装的
pip install torch==1.7.0+cu110 torchvision==0.8.1+cu110 torchaudio==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html
4.检查是否安装OK
import torch
print(torch.cuda.is_available())#打印cuda是否可用
print(torch.cuda.device_count())#打印可用的GPU数量
print(torch.version.cuda)#查看虚拟环境cuda版本
5.安装相关依赖
cd YOLOX_OBB
pip3 install -U pip #升级pip 是为了后面安装依赖库的顺利
pip3 install -r requirements.txt #安装依赖库
pip3 install -v -e.
6.安装数据处理工具包
(PS:这个工具在上面git clone --recursive中作为子模块导入了)
cd BboxToolkit
python setup.py develop
二、数据标注和转换
1.使用rolabelImg标注斜框数据
rolabelImg的安装软件包,可以参考资源rolabelImg安装软件包
rolabelImg的安装教程参考:rolabelImg安装教程
2.数据准备
按照下面的格式组织文件
(可以直接执行python ./datasets/make_dir.py
生成img20220920以及子文件夹)
test:存放测试集文件
trainval_images:存放原图片
trainval_xmlFiles:存放rolabelImg标注生成的xml文件
trainval_DotaTxt:存放rolabelImg格式文件转换成的Dota格式的文件
train_images和val_images:分别存放训练和验证的原图片文件
train_labelTxt和val_labelTxt:分别存放训练和验证的Dota格式文件
3.rolabelImg格式转dota格式
修改YOLOX_OBB/datasets/rolabelImg2dota.py
下面代码后,在主文件夹下执行python ./datasets/rolabelImg2dota.py
xml_path:rolabelImg标注后生成的标注文件所在文件夹
target_dir:转换后的dota格式数据存放文件夹
4.划分训练集和验证集
YOLOX_OBB 下执行 python ./datasets/train_val_split.py
,可以打乱数据,然后自动拷贝图片和标注文件到
train_images和val_images:分别存放训练和验证的原图片文件
train_labelTxt和val_labelTxt:分别存放训练和验证的Dota格式文件
自己可以修改数据划分比例,默认train:val=9:1
5.dota格式 转 BboxToolkit格式
(1)在BboxToolkit中,导入自己数据的类别名称
cd BboxToolkit/BboxToolkit/datasets
打开 misc.py
(2)修改配置文件
cd BboxToolkit/tools/split_configs && cp -a dota1_0 mydata
cd mydata (根据自己需要改相关配置,我们这里修改ss_train.json, ss代表单尺度,ms代表多尺度)
vim ss_train.json/ss_val.json
修改ss_train.json
修改ss_val.json
img_dirs是dota格式的图片文件夹
ann_dirs是dota格式标注文件夹,
save_dir是BboxToolkit生成的数据集的文件夹。
sizes为切图后图片大小,如果图片不需要切图,将sizes设置为自己数据大小max(w,h)
gaps为切图时图片的之间,如果你的图片不需要切图,设置为0.
gaps示意图如下:
在主文件夹下执行bash my_exps/split_img.sh
将config_train与config_val改为自己相应文件路径
会在dataset/My_classes下生成如下文件夹,
dataset/My_classes/train存放我们训练集的数据
dataset/My_classes/val 存放我们验证集的数据
之后把生成的train,val,test都放进都My_classes文件夹里,最终文件夹结构如下
├── test
│ ├── annfiles
│ │ ├── ori_annfile.pkl
│ │ ├── patch_annfile.pkl
│ │ └── split_config.json
│ └── images
│ ├── 1_0000.png
│ ├── 1_0001.png
│ ├── 2_0000.png
│ └── 2_0001.png
| ...
├── train
│ ├── annfiles
│ │ ├── ori_annfile.pkl
│ │ ├── patch_annfile.pkl
│ │ └── split_config.json
│ └── images
│ ├── 3_0000.png
│ ├── 3_0001.png
│ ├── 4_0000.png
│ └── 4_0001.png
| ...
└── val
├── annfiles
│ ├── ori_annfile.pkl
│ ├── patch_annfile.pkl
│ └── split_config.json
└── images
├── 5_0000.png
├── 5_0001.png
├── 6_0000.png
└── 6_0001.png
...
三、训练验证
1.训练
(1).修改配置文件My_classes.yaml
cd configs/datasets && cp dota10.yaml My_classes.yaml(自己数据集)
vim My_classes.yaml
data_dir:我们上一步生成的数据
num_classes:分类的类别数
class_names:识别的类别名称
(2).修改 yolox_s_My_classes.py
添加刚才配置路径,OK,配置工作完成(另外上图中有一个aug_ignore选项,这是用来忽略那些水平标注的旋转增强,里面是类别的名称,如果你也有目标是水平标注的,你可以把里面的类别变为水平标注的类别,如果没有就删掉)
cd exps/example/yolox_obb && cp -a yolox_s_dota1_0.py yolox_s_My_classes.py
vim yolox_s_My_classes.py
(3).在tool/train.py 中修改训练参数
修改相关配置文件,batch_size等参数,后再YOLOX_OBB 目录下执行
bash my_exps/train.sh
2.预测
bash my_exps/demo.sh