代码:https://github.com/xingyizhou/ExtremeNet
1、 创建虚拟环境
在当前工程中:
$ conda create -- name ExtremeNet -- file conda_packagelist.txt
讯享网
过程中下载了 file conda_packagelist.txt中的所有库包,都下载完全后,激活环境。
讯享网$ source activate ExtremeNet
这时命令行最前面会出现一个(CornerNet),代表在当前的虚拟环境中。
2、编译 NMS(来自于 Faster RCNN 和soft_NMS)
$ cd external $ make
报错:

讯享网
安装上Cython即可。pip install Cython
3、安装 MS COCO APIs
讯享网$ cd data $ git clone https://github.com/cocodataset/cocoapi/git coco $ cd data/coco/PythonAPI $ make $ python setup.py install --user
4、准备数据集
用的制作的数据集,如下格式:
| annotations | instances_train2014.json | |||
|---|---|---|---|---|
| ExtremeNet | data | coco | instances_val2014.json | |
| images | train2014 | |||
| val2014 |
5.1修改tools中的gen_coco_extrem_points.py
①原来为2017改为2014
ANN_PATH = '../data/coco/annotations/instances_{}2014.json' OUT_PATH = '../data/coco/annotations/instances_extreme_{}2014.json' IMG_DIR = '../data/coco/{}2014/'
②修改种类
讯享网if __name__ == '__main__': for split in SPLITS: data = json.load(open(ANN_PATH.format(split), 'r')) coco = cocoapi.COCO(ANN_PATH.format(split)) img_ids = coco.getImgIds() num_images = len(img_ids) num_classes = 1 #修改称自己的种类
5.2修改db/coco_extreme.py
①
class MSCOCOExtreme(DETECTION): def __init__(self, db_config, split): super(MSCOCOExtreme, self).__init__(db_config) data_dir = system_configs.data_dir cache_dir = system_configs.cache_dir self._split = split self._dataset = {
"train": "train2014", "val": "val2014", #"testdev": "test2017" }[self._split]
5.3修改模型文件ExtremeNet.py 输出的类别数
讯享网class model(exkp): def __init__(self, db): n = 5 dims = [256, 256, 384, 384, 384, 512] modules = [2, 2, 2, 2, 2, 4] out_dim = 1 #改为自己的类别数
5.4修改db/detection.py文件中的类别数
5.5(不修改也没有影响)修改sample/coco_extreme.py文件中的类别数
if debug: debugger = Debugger(num_classes=1) 5.6修改models/py_utils/exkp.py def _debug(image, t_heat, l_heat, b_heat, r_heat, ct_heat): debugger = Debuger(num_classes=1)
6、修改ExtremeNet.json配送文件
我只有一个GPU因此要修改batchsize和chunk_sizes,修改max_iter ,stepsize等
6.1 修改ExtremeNet.json:
讯享网{
"system": {
"dataset": "MSCOCOExtreme", "batch_size": 1, "sampling_function": "kp_detection", "train_split": "train", "val_split": "val", "learning_rate": 0.00025, "decay_rate": 10, "val_iter": 100, "opt_algo": "adam", "prefetch_size": 10, "max_iter": 5000, "stepsize": 3500, "snapshot": 500, "chunk_sizes": [1], "data_dir": "./data", "pretrain": "./cache/ExtremeNet_.pkl" }, "db": {
"rand_scale_min": 0.6, "rand_scale_max": 1.4, "rand_scale_step": 0.1, "rand_scales": null, "rand_crop": true, "rand_color": true, "border": 128, "gaussian_bump": true, "input_size": [511, 511], "output_sizes": [[128, 128]], "test_scales": [1], "top_k": 40, "categories": 1, "aggr_weight": 0.1, "scores_thresh": 0.1, "center_thresh": 0.1, "nms_threshold": 0.5, "suppres_ghost": true, "max_per_image": 100 } }
6.2 在train.py中添加一句指定GPU语句。
https://blog.csdn.net/LLyj_/article/details/

torch.backends.cudnn.enabled = True torch.backends.cudnn.benchmark = True os.environ["CUDA_VISIBLE_DEVICES"] = "0" #加上这句
7、下载预训练模型:
pre-trained model 下载到cache文件夹下
8、从分割中产生生成极点的标签文件:
讯享网$ cd tools $ python gen_coco_extreme_points.py
在data/coco/annotations/生成了 instances_extreme_train2014.json 和instances_extreme_val2014.json

9、训练
运行命令:
$ python train.py ExtremeNet
报错:(OpenCV安装的有问题)https://blog.csdn.net/_/article/details/
Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you
are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then
re-run cmake or configure script
重新安装opencv-python:
讯享网$ pip install opencv-python
之后重新运行命令.
1)报错:

这是因为加载的预训练权重是训练好的80类,我的是1类,于是我直接把加载预训练权重部分的程序去掉,不加载了。
2)训练过程

训练过程中产生的文件都存放在cache/nnet/EtremeNet中。

10、测试
运行命令:
$ python test.py EtremeNet
1)不加载预训练权重的测试结果:

2)加载预训练权重的测试结果(加载预训练权重时要把5.1②gen_coco_extrem_points.py中的num_classes改为80;5.3ExtremeNet.py中的out_dim改为80; 5.4和5.5以及5.6都改为80; ExtremeNet.json 6.1中 “categories”: 80 在测试的时候才改为1):

11、运行demo验证
修改demo.py
讯享网class_name = ['__background__','apple'] 修改加载的权重:改成自己训练好的权重 def parse_args(): parser = argparse.ArgumentParser(description="Demo CornerNet") parser.add_argument("--cfg_file", help="config file", default='ExtremeNet', type=str) parser.add_argument("--demo", help="demo image path or folders", default="", type=str) parser.add_argument("--model_path", default='cache/ExtremeNet_5000.pkl')#改成自己训练好的权重路径
运行命令:
$ python demo.py --demo timg8.jpg --show_mask
报错找不到 dextr_pacal-sbd.pth文件
下载 PASCAL + SBD pertained model 放到cache文件夹中
重新运行命令,得到结果:

原图:

center
不加载权重:

加载权重:

extreme:
不加载权重:

加载权重:

mask:
不加载权重:

加载权重:

out:
不加载权重:

加载权重:

参考博客:
https://blog.csdn.net/_/article/details/
https://blog.csdn.net/LLyj_/article/details/
https://blog.csdn.net/_/article/details/
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/118909.html