“华为云杯”2020深圳开放数据应用创新大赛·生活垃圾图片分类(目标检测)

代码和思路分享来自Github:github.com/selous123/yo
调ultralytics/yolov3这个炉子,目前b榜在0.74左右,一阶段准确率很高的网络了。前排大佬可能大部分都是基于MMdet的二阶段网络,Faster-RCNN,Cascade-RCNN等。

MMdetection安装配置:

初识CV:mmdetection源码笔记汇总zhuanlan.zhihu.com图标

目标检测比赛的简单tricks:

初识CV:目标检测比赛中的tricks(已更新更多代码解析)zhuanlan.zhihu.com图标


华为云比赛链接:

华为云大赛平台competition.huaweicloud.com

【赛题背景】

2016年12月,深圳市城市管理和综合执法局发布了《深圳市打造“全国最干净城市”三年行动计划(2017-2019)》。按照行动计划的战略目标,市、区、街各级城管部门随即开展行动,逐项认真部署落实。市城市管理和综合执法局领导直奔基层一线,在全市范围内开展以查找内街小巷市容环境管理问题和督促问题整改落实为主要内容的“行走深圳”活动。同时,深入推进“源头充分减量,前端分流分类,中段干湿分离,末端综合利用”的垃圾治理深圳模式,积极开展以打造深圳公厕成为“干净卫生、功能完善、美观雅致、群众满意”的靓丽城市名片的“公厕革命”。通过建立环境卫生专项整治、指数测评、责任落实等相关个工作机制,并开展城中村、集贸市场、垃圾收运和城市家具等相关洁净行动,越来越多的居民享受到打造全国最干净城市带来的环境福利。

本赛题以垃圾分类为主题,利用人工智能技术,对居民生活垃圾图片进行检测,找出图片中有哪些类别的垃圾,并指示出垃圾在图片中的位置

思路分享:yolov3-pytorch-custom

1. 比赛总结

1.0. Baseline

Network Architecture: yolo-v3 = (darknet53 + FPN + yolo-head)
Training strategy: warm-up, cosine learning rate decay, Multi-scale training, SGD optimizer
Loss: GIOU, iou_net (obj损失以GIOU值为标记)
Data Argumentation: mosica, flip, hsv_augmentation, random_affine
NMS: Merge-NMS

1.1. 在该数据上 work 的调参技巧

a. spp (spatial pyramid pooling)

b. kmeans algorithm for clustering anchors.

c. stitcher augmentation

d. multi scale testing.

1.2. 该 work 却不 work 的技巧 —没尽力调

a. 常用正则化方法,通过分析网络有很严重的过拟合, 但常用的解决过拟合方法并没有效果如:dropblock, L1&L2 regulization, label smoothing.

b. 小物体检测mAP的值要明显低于其他尺度的mAP. 在计算损失时,通过损失加权,增大小物体的损失 (2 - w * h) 没效果。

c. 某些类的mAP值要普遍比其他类低很多,我们通过mAP的值对样本采样进行重加权, 没效果。通过增加每个类的数据,提升较少。

d. focal loss, 没提升,网络很难收敛。

1.3. 目前模型存在的问题

a. 在训练集上过拟合

b. 某些类 mAP 比较差

c. 小物体 mAP 普遍比较差

d. 数据集中存在遮挡的问题

1.4. 未来想尝试的技巧

a. 将损失使用传统 YOLO-v3 的形式实现。在其中添加 IOU-Net 分支

b. TSD (SenseTime 1st place) 在网络中将框预测和类别预测进行解耦

c. 改进 NMS 和 Testing

2. 代码说明

2.1. Training

command: 默认模型使用 spatial pyramid pooling 结构和 stitcher 数据增广。训练集验证集分为9:1的比例。模型以及训练参数会保存在文件夹 baseline-stitcher (save) 参数下。

python3 train.py cfg cfg/yolov3-spp-44.cfg data data/rubbish.data weights weights/yolov3-sppu.pt batch-size 16 epochs 120 save baseline-stitcher

其他训练参数可以参考train.py文件中的参数设置部分:

parser.add_argument(’–reg-ratio’, type=float, default=0.0, help=‘reg_ratio for L1&L2 regulization to weights’)
parser.add_argument(’–ssd-aug’, action=‘store_true’, help=‘use ssd augmentation or not’)
parser.add_argument(’–image-weights’, action=‘store_true’, help=‘use image_weights or not’)
parser.add_argument(’–smooth-ratio’, type=float, default=0.0, help=‘label smooth ratio for cls bceloss’)
parser.add_argument(’–lbox-weight’, action=‘store_true’, help=‘weight box loss by size of gt-box or not’)

2.2. Testing

command:

python3 test.py cfg trained_models/baseline-stitcher/yolov3-spp-44.cfg data data/rubbish.data weights trained_models/baseline-stitcher/best.pt batch-size 8

2.3. Submit

command:

python gen_submit_dir.py -m trained_models/baseline-stitcher -s submit/baseline-stitcher

然后将submit/baseline-stitcher下生成的model文件夹上传到 华为云的obs云储存中

cd submit/baseline-stitcher
obsutil cp -r -f model/ obs://hellopytorch/baseline-stithcer

最后部署到modelart中,提交即可。

Reference

Crowdhuman人体检测比赛第一名经验总结

CVPR 2020丨​商汤TSD目标检测算法获得Open Images冠军

目标检测比赛中的tricks(已更新更多代码解析)

Stithcer Augmentation

Imbalance Problems in Object Detection: A Review

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章