hukaixuan19970627 / yolov5_obb

yolov5 + csl_label.(Oriented Object Detection)(Rotation Detection)(Rotated BBox)基于yolov5的旋转目标检测
GNU General Public License v3.0
1.83k stars 427 forks source link

自定义数据集训练效果不好 #198

Closed BruceLeonHeart closed 2 years ago

BruceLeonHeart commented 2 years ago

使用自定义的数据集效果不好

自己的数据集大概60多张,720*480分辨率,不涉及到裁剪

数据集目录存放格式:

python train.py --weights weights/yolov5s.pt \ --data data/yolov5obb_jyz.yaml \ --hyp data/hyps/obb/hyp.finetune_dota_CloseAug.yaml \ --batch-size 4 \ --epochs 20 \ --imgsz 640 \ --device 0 \

数据集分布如下:

2022-02-14 20-17-05 的屏幕截图

数据配置为【实际仅有单类别】:

path: ./dataset # dataset root dir
train: jyz_dataset/images # train images (relative to 'path') 
val: jyz_dataset/images   # val images (relative to 'path') 
test: jyz_dataset/images  # test images (optional)

nc: 2  # number of classes
names: ['jyz','unknown']  # class names

训练过程中有损失,但是结果,recall和acc均为0

2022-02-14 20-22-49 的屏幕截图

labels_xyls

results

如果需要排查问题从哪里着手? 数据需要转换为yolo格式吗,如果需要,目录结构怎么弄? 除了epoch提升还可以从哪里修改?

hukaixuan19970627 commented 2 years ago

COCO、DOTA这个规模的数据集都训300epoch,你这点数据还只训20epoch,都还没开始收敛怎么可能有精度

hukaixuan19970627 commented 2 years ago

另外可以仔细阅读一下readme中的getstart.md,你问的这些问题里面都有

BruceLeonHeart commented 2 years ago

是按照getStarted来做的

epoch之前也有训练300epoch的,因为我怀疑是除epoch之外的问题

这里贴出300epoch的结果 results

训练参数有可以修整的地方吗

这个工程其实基于你给的这个路线,我已经做出TX2的tensorrt部署,现在就差自定义数据集了训练和验证了,希望得到你的帮助。

hukaixuan19970627 commented 2 years ago

trainbatch0/1/2 发一下,另外再发一下detect可视化图

BruceLeonHeart commented 2 years ago

我调整了学习率,虽说metric并不总为0,但是效果也不算好。

weights: weights/yolov5m.pt
cfg: ''
data: data/yolov5obb_jyz.yaml
hyp: data/hyps/obb/hyp.yaml
epochs: 300
batch_size: 8
imgsz: 640
rect: false
resume: false
nosave: false
noval: false
noautoanchor: false
evolve: null
bucket: ''
cache: null
image_weights: false
device: 0,1
multi_scale: false
single_cls: false
adam: false
sync_bn: false
workers: 8
project: runs/train
name: exp
exist_ok: false
quad: false
linear_lr: false
label_smoothing: 0.0
patience: 100
freeze:
- 0
save_period: -1
local_rank: -1
entity: null
upload_dataset: false
bbox_interval: -1
artifact_alias: latest
save_dir: runs/train/exp7

confusion_matrix

目标较少,防止被截断效果不好,这里关闭了aug,微调了学习率

lr0: 0.002
lrf: 0.15
momentum: 0.779
weight_decay: 0.00058
warmup_epochs: 1.33
warmup_momentum: 0.86
warmup_bias_lr: 0.0711
box: 0.0539
cls: 0.299
cls_pw: 0.825
theta: 0.299
theta_pw: 0.825
obj: 0.632
obj_pw: 1.0
iou_t: 0.2
anchor_t: 3.44
anchors: 3.2
fl_gamma: 0.0
hsv_h: 0.0188
hsv_s: 0.704
hsv_v: 0.36
degrees: 180.0
translate: 0.0902
scale: 0.25
shear: 0.0
perspective: 0.0
flipud: 0.5
fliplr: 0.5
mosaic: 0.0
mixup: 0.0
copy_paste: 0.0
cls_theta: 180
csl_radius: 2.0

results

P_curve

PR_curve

R_curve

执行detect.py 没有box可以plot。。。

hukaixuan19970627 commented 2 years ago

https://github.com/hukaixuan19970627/yolov5_obb/issues/186#issuecomment-1022950472

hukaixuan19970627 commented 2 years ago

按上面的改改看,mosaic最好还是用,不然一张图就一个目标对yolov5这种类型的网络而言不大友好。 还有网络参数文件最好是不要改,我提供的DOTAv1.5权重文件里包含了所有训练配置,再使用yolov5原版官方权重作为预训练模型直接训你的数据集比较好

BruceLeonHeart commented 2 years ago

好的好的,非常感谢你!