一、安裝測試:(官方github上很詳細)
測試:
show_result(img_path, result, model.classes)測試注意事項:
1. mmdetection目前不支援windos系統,我使用ubuntu16.04
如果跑通應該沒啥問題了。
二:mmdetection/utils/registry.py 文件解讀:
import inspect
import mmcv
class registry(object):
"""這裡主要實現乙個registry類,用來規範註冊網路的各個模組,比如backebone, neck,還有dataset,pipeline等等這些模組。
""" def __init__(self, name):
self._name = name
self._module_dict = dict()
def __repr__(self):
"""這個函式主要是給類乙個輸出,我的理解是就是輸出類相關資訊。
用下面的**自己測試看看。
#from mmdet.utils import registry
#print(registry('backbone'))
"""format_str = self.__class__.__name__ + '(name={}, items={})'.format(
self._name, list(self._module_dict.keys()))
return format_str
@property #負責修飾乙個物件函式,讓類生成成員變數對應的setter和getter函式
def name(self):
return self._name
@property
def module_dict(self):
return self._module_dict
def get(self, key):
return self._module_dict.get(key, none)
def _register_module(self, module_class):
"""register a module.
args:
module (:obj:`nn.module`): module to be registered.
"""if not inspect.isclass(module_class):
raise typeerror('module must be a class, but got {}'.format(
type(module_class)))
module_name = module_class.__name__
if module_name in self._module_dict:
raise keyerror('{} is already registered in {}'.format(
module_name, self.name))
self._module_dict[module_name] = module_class
def register_module(self, cls):
self._register_module(cls)
return cls
def build_from_cfg(cfg, registry, default_args=none):
"""這個函式大意就是從config檔案中cfg各個模組使用registry進行註冊。
build a module from config dict.
args:
cfg (dict): config dict. it should at least contain the key "type".
registry (:obj:`registry`): the registry to search the type from.
default_args (dict, optional): default initialization arguments.
returns:
obj: the constructed object.
"""assert isinstance(cfg, dict) and 'type' in cfg
assert isinstance(default_args, dict) or default_args is none
args = cfg.copy()
obj_type = args.pop('type')
if mmcv.is_str(obj_type):
obj_cls = registry.get(obj_type)
if obj_cls is none:
raise keyerror('{} is not in the {} registry'.format(
obj_type, registry.name))
elif inspect.isclass(obj_type):
obj_cls = obj_type
else:
raise typeerror('type must be a str or valid type, but got {}'.format(
type(obj_type)))
if default_args is not none:
for name, value in default_args.items():
args.setdefault(name, value)
return obj_cls(**args)
三:資料集介紹:
mmdetection現在支援coco和voc資料集格式,資料集的格式使用官方介紹的
mmdetection
----------------- data
-----coco
-----vocdevkit
主要巢狀關係是
以mmdetection/mmdet/datasets/cityscapes.py為例:
from .coco import cocodataset
from .registry import datasets
@datasets.register_module
class cityscapesdataset(cocodataset):
"""自定義coco格式資料類<------cocodataset <-----------customdataset <----------dataset(torch.utils.data.dataset)
vocdataset<-----------xmldataset<----------customdataset<--------dataset(同上)
其他一些函式主要是用來讀取分析coco的.json和voc的xml檔案的,具體細節先不談,先了解整體框架
"""classes = ('person', 'rider', 'car', 'truck', 'bus', 'train', 'motorcycle', 'bicycle')
azkaban web server原始碼解析
azkaban主要用於hadoop相關job任務的排程,但也可以應用任何需要排程管理的任務,可以完全代替crontab。azkaban主要分為web server 任務上傳,管理,排程 executor server 接受web server的排程指令,進行任務執行 1.資料表 projects 工...
JDK LinkedHashMap原始碼解析
今天來分析一下jdk linkedhashmap的源 public class linkedhashmapextends hashmapimplements map可以看到,linkedhashmap繼承自hashmap,並且也實現了map介面,所以linkedhashmap沿用了hashmap的大...
Redux原始碼createStore解讀常用方法
const store createstore reducer,preloadedstate enhancer 直接返回當前currentstate,獲取state值,return state 我覺得應該深轉殖乙個新的物件返回,不然有可能會被外部修改 function getstate consol...