mmdetetcion 使用经验

mmdetection 使用经验记录
github repository: https://github.com/open-mmlab/mmdetection

1、环境配置

 一定要按照pytorch官网指令安装pytorch以及其对应的库,比如我的是:
 conda install pytorch torchvision torchaudio cudatoolkit=10.1 -c pytorch ,这里要注意的是 -c pytorch 表示走pytorch的官方资源下载,如果要从自己配的国内源,如清华源、阿里源瞎下载则要把这个去掉。那么问题来了,我装的时候国内源没有torchaudio,我一位这个没啥用就删了torchaudio不装,结果安装速度是快了,但是却出现no model named torch, 最后不得不按原始指令安装。成功!

2、数据集准备

图片格式修改:简单训练教材含图片格式修改位置

更改数据集相关文件

  • 修改config中的数据集路径:(用coco作检测该coco_detection.py,做实例则改coco_instance.py,如果使用的是VOC数据集则改voc0712.py)

      ../mmdetection/configs/_base_/datasets/coco_detection.py
    
  • 需要修改一下文件中的CLASSES类别名称,如使用coco数据集时:

       ../mmdetection/mmdet/datasets/coco.py  
      ../mmdetection/mmdet/core/evaluation/class_names.py
    
  • 修改模型配置文件中的num_classes=类别数+1 (可采用全局搜索修改)

3、遇到的问题

问题1:

原因:我制作的数据集标签id是从1开始的,如

{1: "car", 2:"truck"}

这样导致label 0,1,2. length=3, 但是标签id——self.cat_ids=[ 1,2],length=2

for label in range(len(result)):  # 0,1,2 
		……
       data['category_id'] = self.cat_ids[label]
       IndexError: list index out of range

解决方法:将coco.py文件中的
for label in range(len(result): 改为:for label in range(len(result)-1): # 0,1
注意:如果标注id从0开始的则不会出现这个问题

问题2:

state_dict_cpu[key] = val.cpu()
 KeyboardInterrupt

链接: 解决方法
mmdetetcion 使用经验_第1张图片

4、可调参数

训练时查看gpu使用情况,如果内存和gpu算力使用都不高,则可以更改mmdetection/configs/base/datasets 下训练时使用的数据集配置文件,如我使用coco数据集作检测,则使用的数据集配置文件为:coco_detection.py

   data = dict(
    samples_per_gpu=2,  # 更改数值以充分利用gpu,太大内存会爆掉
    workers_per_gpu=2, # 更改数值以充分利用gpu,太大内存会爆掉

需要依照自己的 GPU 情况,修改 lr 学习速率参数,说明如下:

  • lr=0.005 for 2 GPUs * 2 imgs/gpu
  • lr=0.01 for 4 GPUs * 2 imgs/gpu
  • lr=0.02 for 8 GPUs and 2 img/gpu (batch size = 8*2 = 16), DEFAULT
  • lr=0.08 for 16 GPUs * 4 imgs/gpu

这里,我们只使用单 gpu,且 samples_per_gpu = 2,则设置 lr = 0.00125。

这里说一下 epoch 的选择,默认 total_epoch = 12,learning_policy 中,step = [8,11]。total_peoch 可以自行修改,若 total_epoch = 50,则 learning_policy 中,step 也相应修改,例如 step = [38,48]。

  • 参考公式:

    lr = (base_lr / 8) x num_gpus x (img_per_gpu/2)

输出设置

  • 如果想要输出各类别的AP,可作
    找到 "mmdetection/mmdet/datasets/coco.py"第353行
def evaluate(self,
                 results,
                 metric='bbox',
                 logger=None,
                 jsonfile_prefix=None,
                 classwise=True,     ## 输出个类别ap
                 proposal_nums=(100, 300, 1000),
                 iou_thrs=[0.5,0.75],  ##设置iou阈值
                 metric_items=None):

你可能感兴趣的:(学习经验,深度学习,python)