Windows下在darknet框架下训练yolov3常用指令汇总

Windows下在darknet框架下训练yolov3常用指令汇总

训练指令

darknet.exe detector train .\build\darknet\x64\data\obj.data .\cfg\yolov3-obj.cfg .\build\darknet\x64\weights_pr\darknet53.conv.74 .\results_mine

测试指令

darknet.exe detector test .\build\darknet\x64\data\obj.data .\cfg\yolov3-obj.cfg .\build\darknet\x64\results_mine\yolov3-obj_final.weights

计算recall

darknet.exe detector recall .\build\darknet\x64\data\obj.data .\cfg\yolov3-obj.cfg .\build\darknet\x64\results_mine\yolov3-obj_final.weights

批量测试+保存测试图片指令

darknet.exe detector test .\build\darknet\x64\data\obj.data .\cfg\yolov3-obj.cfg .\build\darknet\x64\results_mine\yolov3-obj_final.weights <D:\wzx-test\darknet-master7.21\build\darknet\2007_test.txt> result.txt

windows下保存log的训练指令(每次换不同文件夹跑程序需要改.\darknet-master\build\darknet\x64\data下面的obj.data)

1、darknet.exe detector train .\build\darknet\x64\data\obj.data .\cfg\yolov3-obj.cfg .\build\darknet\x64\weights_pr\darknet53.conv.74 .\results_mine   >>.\build\darknet\x64\log\train_yolov3.log
2、darknet.exe detector train .\build\darknet\x64\data\obj.data .\cfg\yolov3-obj.cfg .\build\darknet\x64\weights_pr\darknet53.conv.74 .\results_mine 2>&1 | tee .\build\darknet\x64\log\train_yolov3.log(得到的log更详细)

加载上一轮未训练完的权重继续训练(把上一轮的权重放到.\build\darknet\x64\weights_pr\yolov3-obj_last.weights文件夹中)(还未测试)

darknet.exe detector train .\build\darknet\x64\data\obj.data .\cfg\yolov3-obj.cfg .\build\darknet\x64\weights_pr\yolov3-obj_last.weights .\results_mine

从停止处训练(别人:还未测试)

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gups 0 myData/weights/my_yolov3.backup

生成适合于自己数据集的anchor大小(clusters代表集群,生成几个聚类中心)

darknet.exe detector calc_anchors .\build\darknet\x64\data\obj.data -num_of_clusters 9 -width 640 -height 512

多GPU训练:(目前测试好像并未成功)

别人:darknet.exe detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpu 0,1,2,3
自己:darknet.exe detector train .\build\darknet\x64\data\obj.data .\cfg\yolov3-obj.cfg .\build\darknet\x64\weights_pr\darknet53.conv.74 .\results_mine -gpu 0,1,2,3(目前测试好像并未成功)

显示map训练方法:(测试可行,但必须要从迭代1000次开始记录)

自己:darknet.exe detector train .\build\darknet\x64\data\obj.data .\cfg\yolov3-obj.cfg .\build\darknet\x64\weights_pr\darknet53.conv.74 .\results_mine -map

从保存的log中提取有效信息代码(python)
分成两个train_log_loss.txt和train_log_iou.txt两个文件

import inspect
import os
import random
import sys

def extract_log(log_file, new_log_file, key_word):
    with open(log_file, 'r') as f:
        with open(new_log_file, 'w') as train_log:
            # f = open(log_file)
            # train_log = open(new_log_file, 'w')
            for line in f:
                # 去除多gpu的同步log
                if 'Syncing' in line:
                    continue
                # 去除除零错误的log
                if 'nan' in line:
                    continue
                if key_word in line:
                    train_log.write(line)
    f.close()
    train_log.close()

extract_log('train_yolov3.log', 'train_log_loss.txt', 'images')
extract_log('train_yolov3.log', 'train_log_iou.txt', 'IOU')

提取train_log_loss.txt中某一列数据代码

list1 = []
try:
    file = open('train_log_loss.txt', 'r')
except FileNotFoundError:
    print('File is not found')
else:
    lines = file.readlines()
    for line in lines:
        a = line.split()
        x = a[2]   ##把log中对应的第三列提取出来
        list1.append(x)
file.close()

for x in list1:
    print(x)

用matlab画loss损失函数图代码
把相应的文档放到和matlab对应的.m文件目录一块

x=textread('16016data.txt');
figure;
p=plot(x(:,1));
lgd=legend(p,'loss');
%plot(test(:,1));
%xlim([135,420]);
%ylim([0,5]);
xlim([50,10000]);
ylim([0,5]);
%xlabel('迭代次数 ');
xlabel('迭代次数 ');
ylabel('损失函数'); 
title('损失函数曲线');

猜你喜欢

转载自blog.csdn.net/yuzhongmanbu99/article/details/122514530