Darknet框架复现Yolo v3 & coco API评估 & coco 官网提交评估

Darknet框架复现Yolo v3 & coco API评估 & coco 官网提交评估
 

    【写在前面】
    本博客详述率darknet训练yolo v3的全过程并采用cocoAPI对结果进行评估。
    满满干货,不容错过~

文章目录

    一、前期准备
        1 安装Darknet环境
            1.1 下载源码
            1.2 编译源码
            1.3 测试是否安装成功
        2 下载COCO数据集
            2.1 使用官方shell脚本下载
            2.2 使用一步一步命令下载
                2.2.1 创建images文件夹
                2.2.2 开始下载并解压
                2.2.3 创建 Image Lists
        3 文件夹布局
            3.1 images文件夹布局
            3.2 数据集部署Darknet
    二、开始训练
        1 确认配置路径
            1.1 检查文件:cfg/coco.data
            1.2 检查文件:cfg/yolo.cfg
            1.2 下载darknet53预训练权重
        2 开始训练
    三、评估
        1.1 安装COCO API
        1.2 进行评估
            1.2.1 修改配置文件cfg/yolo.cfg
            1.2.2 运行评估代码
        1.2 创建评估文件:val.py一、前期准备
1 安装Darknet环境
1.1 下载源码


git clone https://github.com/pjreddie/darknet.git
cd darknet

 

需要注意的地方:
【1】Compiling With CUDA: 使用 GPU,需要在Makefile文件中将GPU设置为1,如下修改:

GPU=1

【2】 Compiling With OpenCV:使用OpenCV,需要在Makefile文件中将OPENCV设置为1,如下修改:

OPENCV=1

 

1.2 编译源码

make

 

此时将会看到一系列编译信息如:

mkdir -p obj
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....
.....
gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast -lm....

 

!需要注意的地方:
如果报错一般是环境变量的问题,可以检查cuda、nvcc等路径。(欢迎留言交流)
1.3 测试是否安装成功

./darknet

    1

此时将会看到信息如:

usage: ./darknet <function>

 

2 下载COCO数据集

论文使用的是COCO2014_train、COCO2014_validation。
2.1 使用官方shell脚本下载

在darknet目录下执行:bash ./scripts/get_coco_dataset.sh;就会自动下载。
但是这个数据集太大,如果中途中断或者特殊原因没有全部下载完成的盆友们请看 2.2 使用一步一步命令下载,如果顺利完成请跳过。
2.2 使用一步一步命令下载
2.2.1 创建images文件夹

mkdir images
cd images

 

2.2.2 开始下载并解压

# Download Images
wget -c https://pjreddie.com/media/files/train2014.zip
wget -c https://pjreddie.com/media/files/val2014.zip

# Download COCO Metadata
wget -c https://pjreddie.com/media/files/instances_train-val2014.zip
wget -c https://pjreddie.com/media/files/coco/5k.part
wget -c https://pjreddie.com/media/files/coco/trainvalno5k.part
wget -c https://pjreddie.com/media/files/coco/labels.tgz

#Unzip
unzip -q train2014.zip
unzip -q val2014.zip
tar xzf labels.tgz
unzip -q instances_train-val2014.zip

 

2.2.3 创建 Image Lists

在images路径下运行命令:

paste <(awk "{print \"$PWD\"}" <5k.part) 5k.part | tr -d '\t' > 5k.txt
paste <(awk "{print \"$PWD\"}" <trainvalno5k.part) trainvalno5k.part | tr -d '\t' > trainvalno5k.txt

 

此时会在该路径下生成两个文件:5k.txt 和 trainvalno5k.txt。
!需要注意的地方:
生成完这两个文件后请务必检查一下文件内容,每一行表示的是图片的路径。(欢迎留言交流)
3 文件夹布局
3.1 images文件夹布局

各位盆友参照如下保存路径设置存放。
在这里插入图片描述
!需要注意的地方:
【1】细心的盆友应该发现了我路径有COCO_train2014_000000167126.jpg这样子的两张图片,由于有我在训练的时候报错 “Syncing… Cannot load image xxxxxxxxxx…STB Reason: expected marker”. 这张图片损坏了(你可以下载下来打开看看的确是损坏的图片),如果有需要的可以到这里下载:https://msvocds.blob.core.windows.net/images/262993_z.jpg。对应的github的issue是:https://github.com/pjreddie/darknet/issues/312。
==============>所以,报错之前请各位忽略上图那两张“COCO_train”的图片信息。
3.2 数据集部署Darknet上一步后数据就整理好了,现在需要制作软连接或者将数据移动到该有的地方啦!!
制作软连接:


ln -s /path/images /path/darknet-master/data/coco

 

二、开始训练
1 确认配置路径
1.1 检查文件:cfg/coco.data

在这里插入图片描述
需要检查 train和valid的路径。
1.2 检查文件:cfg/yolo.cfg在这里插入图片描述
红框上面的配置是测试时候用的,确认已经注释。
1.2 下载darknet53预训练权重


wget https://pjreddie.com/darknet/imagenet/#darknet53

 

2 开始训练

【1】 创建**_log**文件夹用来保存日志文件
【2】运行命令:

./darknet detector train cfg/coco.data cfg/yolov3.cfg model/darknet53.conv.74 -gpus 0,1,2,3 2>&1 | tee _log/train_yolov3_201910242151.log

可选参数:-clear 1(默认0)进行ft时不考虑模型原本的迭代次数。
在这里插入图片描述
一大堆日志,这里就不说明了,有不清楚的也欢迎各位留言交流。

训练结束后:
在这里插入图片描述
 82,94,106为一组,一共有16(subdivision)组,每组又包含了4(batch/subdivision)张图片;
 Region Avg IOU: 表示在当前subdivision内的图片的平均IOU,代表预测的矩形框和真实目标的交集与并集之比;
 Class: 标注物体分类的正确率,期望该值趋近于1;
 Obj: 越接近1越好,与No Obj相对;
 count:所有的当前subdivision图片中包含正样本的图片的数量;
 1:第1个batch;
 578.041992:总损失;
 578.041992 avg:平均损失;
 0.000000 rate:当前学习率;
 1.394934 seconds:当前batch训练所花的时间;
 256 images:目前为止参与训练的图片总数;
在这里插入图片描述
三、评估
1.1 安装COCO API

git clone https://github.com/cocodataset/cocoapi.git
cd coco/PythonAPI
make

 

!需要注意的地方:
添加环境变量:

export PYTHONPATH=/home/tencent/Documents/cocoapi/PythonAPI:$PYTHONPATH

测试一下:
在这里插入图片描述
1.2 进行评估
1.2.1 修改配置文件cfg/yolo.cfg

在这里插入图片描述
这个Testing的配置要是未注释的,下面的Training的配置注释一下哈。
1.2.2 运行评估代码【0】运行需要检查一下该目录下是否有results文件夹,如果没有需要创建一下。
测试集一共有20288张图片,在官网下载的测试集包含了test-dev和test- challenge两部分,根据官网下载页面的Testing Image info 文件进行选择。


./darknet detector valid cfg/coco.data cfg/yolov3.cfg backup/yolov3_final.weights

运行之后,在results文件夹会生成coco_results.json文件。
可选参数:-out a/b(结果默认保存在results文件夹里coco_results.json)此例修改为结果保存在a文件夹里b.json。

提交官网在线测试
test-dev 2015 – 至今的测试集均一致,只是官网每年更新入口,如今年的是2019-test。
将json文件重新命名,命名规则为:[type][testset][alg]_results.json

[type]challenge type: "detections", "person_keypoints", or "stuff"
[testset]test split: "val2017", "test-dev2017", or "test-challenge2017"
[alg]your algorithm name

 

直接将结果json文件压缩为zip文件,提交官网测试即可。

以下为本地采用coco api对val数据集进行评估:
1.2 创建评估文件:val.py

import matplotlib.pyplot as plt
from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval
import numpy as np
import skimage.io as io
import pylab,json
pylab.rcParams['figure.figsize'] = (10.0, 8.0)
def get_img_id(file_name):
    ls = []
    myset = []
    annos = json.load(open(file_name, 'r'))
    for anno in annos:
      ls.append(anno['image_id'])
    myset = {}.fromkeys(ls).keys()
    return myset
if __name__ == '__main__':
    annType = ['segm', 'bbox', 'keypoints']#set iouType to 'segm', 'bbox' or 'keypoints'
    annType = annType[1] # specify type here
    cocoGt_file = '/home/tentcent/Documents/valuation_yolo/json/instances_val2014.json'
    cocoGt = COCO(cocoGt_file)#取得标注集中coco json对象
    #cocoDt_file = '/home/tentcent/Documents/valuation_yolo/json/coco_results_origin.json'
    #cocoDt_file = '/home/tentcent/Documents/valuation_yolo/json/coco_results_ourtrain.json'
    cocoDt_file = '/home/tentcent/Documents/valuation_yolo/json/coco_results_pretrain.json'
    print("Valuation: {}".format(cocoDt_file.split('/')[-1]))
    imgIds = get_img_id(cocoDt_file)
    print(len(imgIds))
    cocoDt = cocoGt.loadRes(cocoDt_file)#取得结果集中image json对象
    imgIds = sorted(imgIds)#按顺序排列coco标注集image_id
    imgIds = imgIds[0:5000]#标注集中的image数据
    cocoEval = COCOeval(cocoGt, cocoDt, annType)
    cocoEval.params.imgIds = imgIds#参数设置
    cocoEval.evaluate()#评价
    cocoEval.accumulate()#积累
    cocoEval.summarize()#总结

  

!需要注意的地方:
【1】 cocoGt_file 和 cocoDt_file 两个变量需要自行修改一下哈。
【2】 cocoGt_file:instances_val2014.json文件路径(之前下载coco数据集的时候就有,不清楚可以回去看看); cocoDt_file :上一步评估操作生成的coco_results.json文件路径。
代码运行结果:
 
原文链接:https://blog.csdn.net/zw__chen/article/details/102808144

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值