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('损失函数曲线');