mmdetection 使用经验记录
github repository: https://github.com/open-mmlab/mmdetection
一定要按照pytorch官网指令安装pytorch以及其对应的库,比如我的是:
conda install pytorch torchvision torchaudio cudatoolkit=10.1 -c pytorch ,这里要注意的是 -c pytorch 表示走pytorch的官方资源下载,如果要从自己配的国内源,如清华源、阿里源瞎下载则要把这个去掉。那么问题来了,我装的时候国内源没有torchaudio,我一位这个没啥用就删了torchaudio不装,结果安装速度是快了,但是却出现no model named torch, 最后不得不按原始指令安装。成功!
图片格式修改:简单训练教材含图片格式修改位置
更改数据集相关文件
修改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 (可采用全局搜索修改)
原因:我制作的数据集标签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开始的则不会出现这个问题
state_dict_cpu[key] = val.cpu()
KeyboardInterrupt
训练时查看gpu使用情况,如果内存和gpu算力使用都不高,则可以更改mmdetection/configs/base/datasets 下训练时使用的数据集配置文件,如我使用coco数据集作检测,则使用的数据集配置文件为:coco_detection.py
data = dict(
samples_per_gpu=2, # 更改数值以充分利用gpu,太大内存会爆掉
workers_per_gpu=2, # 更改数值以充分利用gpu,太大内存会爆掉
需要依照自己的 GPU 情况,修改 lr 学习速率参数,说明如下:
这里,我们只使用单 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)
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):