mmdector 使用dectors 训练自己的数据集

###########################################################################
环境搭建
torch=1.6.0
cuda=10.1
python=3.7

1.mmcv安装 https://download.openmmlab.com/mmcv/dist/index.html
1)pip install mmcv             (fail)
2) pip install mmcv_full ***   (fail)
3)wget https://download.openmmlab.com/mmcv/dist/latest/torch1.6.0/cu101/mmcv_full-latest%2Btorch1.6.0%2Bcu101-cp37-cp37m-manylinux1_x86_64.whl
 pip install *.whl


##########################################################################
模型训练

1. 文件修改
1)修改mmdet/datasets/voc.py
    # CLASSES = ('aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car',
    #            'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse',
    #            'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train',
    #            'tvmonitor')

    CLASSES = ('smog','background')

2)mmdet/core/evaluation/class_names.py
    return [
        # modefied by zwx
        # 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat',
        # 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person',
        # 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor'
        'smog','background'
    ]
3) configs/_base_/datasets/voc0712.py
注释掉voc2012   
#data_root + 'VOC2012/ImageSets/Main/trainval.txt'
修改batch_size和numworks
samples_per_gpu=4,  #batch_size
workers_per_gpu=4,  #num_works

(可选)
################################################################################################
3) configs/_base_/models/cascade_rcnn_r50_fpn.py
存在3处,可能不需要全部修改,建议全部修改(类别数包含背景,否则loss为nan)
#num_classes=80,    #modified by zwx
num_classes=1,

4)configs/_base_/datasets/voc0712.py
-修改图像大小:img_scale=704*576
-屏蔽VOC2012的路径,和VOC2012变量 保存文件

5)修改 configs/detectors/detectors_cascade_rcnn_r50_1x_coco.py
_base_ = [
    '../_base_/models/cascade_rcnn_r50_fpn.py',
    #'../_base_/datasets/coco_detection.py',    
    '../_base_/datasets/voc0712.py',        #modified by zwx
    '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
]

2.数据集修改
目录:
./data
--VOC2007
----Annotations
----ImageSets
------Main
----JEPGImages
val.txt 修改为 test.txt

3.tensorboard配置(可选)
1)configs/_base_/default_runtime.py 去掉#dict(type='TensorboardLoggerHook')的注释
2)tensorboard --logdir=work_dirs/detectors_cascade_rcnn_r50_1x_coco --host=服务器内部ip (ifconfig获取)--port=8888(根据自己开放的端口设定) #host和port根据自己的配置更改(注意:服务器的ip会动态变化)
3)本地浏览器中输入:http://服务器外部ip(ssh访问ip):10023/(与8888对应的映射端口)

4.执行命令
1)train 
python3 ./tools/train.py configs/detectors/detectors_cascade_rcnn_r50_1x_coco.py
2)demo
#单张图片
python demo/image_demo.py demo/smog.jpg configs/detectors/detectors_cascade_rcnn_r50_1x_coco.py  work_dirs/detectors_cascade_rcnn_r50_1x_coco/latest.pth
#图片文件夹(需要自己修改)
python demo/image_demo.py demo/smog configs/detectors/detectors_cascade_rcnn_r50_1x_coco.py  work_dirs/detectors_cascade_rcnn_r50_1x_coco/latest.pth
3)test
python tools/test.py configs/detectors/detectors_cascade_rcnn_r50_1x_coco.py work_dirs/detectors_cascade_rcnn_r50_1x_coco/latest.pth --eval mAP


###############################################################
错误记录
1. no moudle named 'mmcv.exit'
解决:根据环境版本,本地安装mmcv,见上诉mcv安装操作

2. KeyError: 'smog'
解决:将一个类('smog')修改为('smog','background')
如果只有一个类别
mmdet/datasets/xml_style.py 文件中 103~105行的self.CLASSES类型为'str',正确的类型应为'tuple'

3. name 'difficult' is not defined
mmdet/datasets/xml_style.py中115~116行新增变量 difficult=False

4. 在运行1300~1900的时候,出现rcnn的loss为nan
解决:
1)调整学习率,configs/_base_/schedules/schedule_1x.py : lr 0.02 -> 0.002 (未解决)
2)梯度裁剪,configs/_base_/schedules/schedule_1x.py: grad_clip =none -> grad_clip=dict(max_norm=35, norm_type=2) (未解决)
3)使用更小的数据集(train.txt前1000行),正常运行(recall:0.765 ,ap:0.652)
原因:
    trainval.txt对应的xml文件中bbox存在面积为0的情况。如:

    364
    102
    364
    103

具体为:
005334.xml
012710.xml
小提示:
    在测试的时候,batch_size和trainval中的数据集最好为偶数,否则可能存在不能整除的情况(余数=1),程序会报错。
    

5.locale.Error: unsupported locale setting
$locale 查看配置
$export LC_ALL=C #使用系统默认 locale并覆盖其它值

##############################################################
其它技巧
1. gdb调试
1)设置断点
import pdb
pdb.set_trace()
2)执行命令
python -m pdb ...
3)操作
c   执行到断点
n   单步执行
s   跳入
pp  打印变量,如:pp background
!   动态更改变量的值
l   查看代码段
...

2. pycallgraph可视化函数调用,需要安装相关包
mmdet/apis/train.py :
from pycallgraph import PyCallGraph
from pycallgraph import Config
from pycallgraph.output import GraphvizOutput

config = Config(max_depth=5)
graphviz = GraphvizOutput(output_file=r'trace_detail.png')

with PyCallGraph(output=graphviz):  #不同位置执行,会有不同的结果
    runner.run

3.

你可能感兴趣的:(跑代码)