一、MMDetection
下载:地址
环境:
- anaconda3
- cuda10.1 (10.0应该也可以)
- python3.6
- torch >= 1.3
- opencv 4.1
二、MMCV 安装
1)两种版本:
- mmcv&#xff1a;精简版&#xff0c;没有CUDA操作&#xff0c;但具有所有其他功能&#xff0c;类似于mmcv <1.0.0。当您不需要那些CUDA操作时&#xff0c;它很有用。
- mmcv-full&#xff1a;全面&#xff0c;具有完整功能和各种CUDA操作。构建需要更长的时间。
2&#xff09;版本选择&#xff1a;
3&#xff09;文档&#xff1a;地址
4&#xff09;安装&#xff08;我是torch 1.6、MMDetection 2.7 &#xff09;&#xff1a;
pip install mmcv-full&#61;&#61;&#61;1.1.5 -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html# pip install mmcv-full&#61;&#61;&#61;{mmcv_version} -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html# pip install mmcv-full&#61;&#61;latest&#43;torch1.6.0&#43;cu101 -f https://download.openmmlab.com/mmcv/dist/index.html#其他方式# pip install mmcv
# pip install mmcv-full
PS&#xff1a;mmcv 与 mmcv-full 不能同时存在
pip uninstall mmcv
5&#xff09;编译方式安装&#xff08;若上面方式都不行&#xff09;&#xff1a;
git clone https://github.com/open-mmlab/mmcv.git
cd mmcv
MMCV_WITH_OPS&#61;1 pip install -e . # package mmcv-full will be installed after this step
6&#xff09;针对 win10 用户&#xff1a;
C:\Users\yuki>cl
用于 x64 的 Microsoft (R) C/C&#43;&#43; 优化编译器 19.00.24245 版
版权所有(C) Microsoft Corporation。保留所有权利。用法: cl [ 选项... ] 文件名... [ /link 链接选项... ]
添加内容&#xff08;按实际版本&#xff09;&#xff1a;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.23.28105\bin\Hostx86\x64
三、安装 Cpython
pip install cython # conda install cython
四、安装 MMDetection
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetectionpip install -r requirements/build.txt
pip install -v -e . # python setup.py develop# pip install -v -e . -i https://mirrors.aliyun.com/pypi/simple
ps:按自己需要选择版本
ps:若win10的话&#xff0c;管理员 cmd 打开窗口进行操作
五、测试
from argparse import ArgumentParserfrom mmdet.apis import inference_detector, init_detector, show_result_pyplot
import mmcv
import cv2
from scipy import ndimage
import numpy as npdef show_result_ins(img,result,class_names,score_thr&#61;0.3,sort_by_density&#61;False,out_file&#61;None):assert isinstance(class_names, (tuple, list))img &#61; mmcv.imread(img)img_show &#61; img.copy()h, w, _ &#61; img.shapecur_result &#61; result[0]seg_label &#61; cur_result[0]seg_label &#61; seg_label.cpu().numpy().astype(np.uint8)cate_label &#61; cur_result[1]cate_label &#61; cate_label.cpu().numpy()score &#61; cur_result[2].cpu().numpy()vis_inds &#61; score > score_thrseg_label &#61; seg_label[vis_inds]num_mask &#61; seg_label.shape[0]cate_label &#61; cate_label[vis_inds]cate_score &#61; score[vis_inds]if sort_by_density:mask_density &#61; []for idx in range(num_mask):cur_mask &#61; seg_label[idx, :, :]cur_mask &#61; mmcv.imresize(cur_mask, (w, h))cur_mask &#61; (cur_mask > 0.5).astype(np.int32)mask_density.append(cur_mask.sum())orders &#61; np.argsort(mask_density)seg_label &#61; seg_label[orders]cate_label &#61; cate_label[orders]cate_score &#61; cate_score[orders]np.random.seed(42)color_masks &#61; [np.random.randint(0, 256, (1, 3), dtype&#61;np.uint8)for _ in range(num_mask)]for idx in range(num_mask):idx &#61; -(idx &#43; 1)cur_mask &#61; seg_label[idx, :, :]cur_mask &#61; mmcv.imresize(cur_mask, (w, h))cur_mask &#61; (cur_mask > 0.5).astype(np.uint8)if cur_mask.sum() &#61;&#61; 0:continuecolor_mask &#61; color_masks[idx]cur_mask_bool &#61; cur_mask.astype(np.bool)img_show[cur_mask_bool] &#61; img[cur_mask_bool] * 0.5 &#43; color_mask * 0.5cur_cate &#61; cate_label[idx]cur_score &#61; cate_score[idx]label_text &#61; class_names[cur_cate]# label_text &#43;&#61; &#39;|{:.02f}&#39;.format(cur_score)center_y, center_x &#61; ndimage.measurements.center_of_mass(cur_mask)vis_pos &#61; (max(int(center_x) - 10, 0), int(center_y))cv2.putText(img_show, label_text, vis_pos,cv2.FONT_HERSHEY_COMPLEX, 0.3, (255, 255, 255)) # greenif out_file is None:return imgelse:mmcv.imwrite(img_show, out_file)def main():parser &#61; ArgumentParser()parser.add_argument(&#39;--img&#39;, help&#61;&#39;Image file&#39;,default&#61;&#39;demo.jpg&#39;)parser.add_argument(&#39;--config&#39;, help&#61;&#39;Config file&#39;,default&#61;&#39;../configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py&#39;)parser.add_argument(&#39;--checkpoint&#39;, help&#61;&#39;Checkpoint file&#39;,default&#61;&#39;../checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth&#39;)parser.add_argument(&#39;--device&#39;, default&#61;&#39;cuda:0&#39;, help&#61;&#39;Device used for inference&#39;)parser.add_argument(&#39;--score-thr&#39;, type&#61;float, default&#61;0.3, help&#61;&#39;bbox score threshold&#39;)args &#61; parser.parse_args()# build the model from a config file and a checkpoint filemodel &#61; init_detector(args.config, args.checkpoint, device&#61;args.device)# test a single imageresult &#61; inference_detector(model, args.img)# show the resultsshow_result_pyplot(model, args.img, result, score_thr&#61;args.score_thr)# show_result_ins(args.img, result, model.CLASSES, score_thr&#61;0.25, out_file&#61;"demo_out.jpg")if __name__ &#61;&#61; &#39;__main__&#39;:main()
六、已测试系统
- win10
- ubuntu18.04
- Jetpack4.4