本来是想使用Qt Designer进行界面控件拖拽的方式进行界面设计的,但是后来觉得这样后面维护更新起来太麻烦了,就还是使用纯代码来写界面吧,这需要一定的想象能力。
设计界面
pyqt外部工具添加
在设置界面搜索“外部工具”,这里我已经添加了两个QT Designer的外部工具,一个是用于创建ui文件的,另一个是用于编辑ui文件的。
点击加号,按照这个参数添加两个工具。程序路径是电脑中安装的qt路径,如果没有安装qt的话,可以参考网上其他的方法,例如:配置Qt Designer到PyCharm。
程序:
选择自己环境下的python.exe
我的是anaconda的 D:\ProgramData\anaconda3\python.exe
实参:
-m PyQt5.uic.pyuic F i l e N a m e FileName FileName -o F i l e N a m e W i t h o u t E x t e n s i o n FileNameWithoutExtension FileNameWithoutExtension.py -x
工作目录:
F i l e D i r FileDir FileDir
创建界面
import os
import sys
import winreg
from PyQt5.QtCore import QThread, pyqtSlot
from PyQt5.QtCore import Qt, QMetaObject, QCoreApplication
from PyQt5.QtWidgets import QVBoxLayout, QWidget, QGridLayout, QLineEdit, QPushButton, QMainWindow, QTabWidget, QToolBar, QStatusBar, QAction, QComboBox, QLabel, QHBoxLayout, QTableWidget, QTextEdit, QProgressBar, QTableWidgetItem, QCheckBox, \
QHeaderView, QFileDialog, QApplication
Config_Parameters = [
{
'ID': 'input_shape', '名称': '输入尺寸', '取值范围': None, '默认值': [256, 256], '说明': '输入图像的尺寸。', '控件类型': 'LineEdit'},
{
'ID': 'Cuda', '名称': 'CUDA加速', '取值范围': [True, False], '默认值': True, '说明': '是否使用CUDA进行加速。', '控件类型': 'CheckBox'},
{
'ID': 'seed', '名称': '随机种子', '取值范围': None, '默认值': 11, '说明': '随机种子,使得每次独立训练都可以获得一样的结果。', '控件类型': 'LineEdit'},
{
'ID': 'fp16', '名称': '混合精度训练', '取值范围': [True, False], '默认值': False, '说明': '是否使用混合精度训练,可减少约一半的显存。', '控件类型': 'CheckBox'},
{
'ID': 'num_classes', '名称': '类别数量', '取值范围': None, '默认值': 2, '说明': '标签的总类别数,自己需要的分类个数+1,如2+1。', '控件类型': 'LineEdit'},
# {'ID': 'backbone', '名称': '主干网络', '取值范围': ['mobilenet', 'xception', 'vgg', 'resnet50'], '默认值': 'mobilenet', '说明': '模型的主干网络。', '控件类型': 'ComboBox'},
{
'ID': 'pretrained', '名称': '预训练模型', '取值范围': [True, False], '默认值': False, '说明': '是否使用预训练模型,如果设置了model_path,则主干的权值无需加载,pretrained的值无意义。', '控件类型': 'CheckBox'},
{
'ID': 'model_path', '名称': '预训练模型路径', '取值范围': None, '默认值': './model_data/deeplab_mobilenetv2.pth', '说明': '预训练模型的文件名,放在model_data文件夹内。', '控件类型': 'LineEdit'},
{
'ID': 'save_period', '名称': '模型保存周期', '取值范围': None, '默认值': 5, '说明': '表示多少个epoch保存一次权值。', '控件类型': 'LineEdit'},
{
'ID': 'save_dir', '名称': '存储路径', '取值范围': None, '默认值': 'logs', '说明': '模型权值与日志文件保存的文件夹。', '控件类型': 'LineEdit'},
{
'ID': 'downsample_factor', '名称': '下采样因子', '取值范围': [16, 8], '默认值': 16, '说明': '特征图的下采样因子,8下采样的倍数较小、理论上效果更好,但也要求更大的显存。', '控件类型': 'ComboBox'},
{
'ID': 'Init_Epoch', '名称': '初始训练轮数', '取值范围': None, '默认值': 0, '说明': '初始化训练的轮数,从第几个周期开始训练。', '控件类型': 'LineEdit'},
{
'ID': 'Freeze_Train', '名称': '冻结训练', '取值范围': [True, False], '默认值': True, '说明': '是否进行冻结训练,在显卡非常差的情况下,可设置Freeze_Epoch等于UnFreeze_Epoch,此时仅仅进行冻结训练。', '控件类型': 'CheckBox'},
{
'ID': 'Freeze_Epoch', '名称': '冻结训练轮数', '取值范围': None, '默认值': 50, '说明': '模型冻结训练的Freeze_Epoch。', '控件类型': 'LineEdit'},
{
'ID': 'Freeze_batch_size', '名称': '冻结训练批次大小', '取值范围': None, '默认值': 2, '说明': '冻结训练的批次大小,正常情况下Freeze_batch_size建议为Unfreeze_batch_size的1-2倍。', '控件类型': 'LineEdit'},
{
'ID': 'UnFreeze_Epoch', '名称': '解冻训练轮数', '取值范围': None, '默认值': 100, '说明': '模型总共训练的epoch。', '控件类型': 'LineEdit'},
{
'ID': 'UnFreeze_batch_size', '名称': '解冻训练批次大小', '取值范围': None, '默认值': 2, '说明': '解冻训练的批次大小,batch_size最小为2,不能为1。', '控件类型': 'LineEdit'},
{
'ID': 'Init_lr', '名称': '初始学习率', '取值范围': None, '默认值': 5e-5, '说明': '模型的最大学习率,建议:当使用Adam优化器5e-4,当使用SGD优化器=7e-3。', '控件类型': 'LineEdit'},
{
'ID': 'Min_lr', '名称': '最小学习率', '取值范围': None, '默认值': 5e-7, '说明': '模型的最小学习率,默认为初始学习率的0.01。', '控件类型': 'LineEdit'},
{
'ID': 'optimizer_type', '名称': '优化器类型', '取值范围': ['sgd', 'adam'], '默认值': 'sgd', '说明': '优化器类型,sgd适用于大规模数据集;adam适用于处理具有不同特征尺度的问题。',