本文的网络设计大多数来自于 https://github.com/bubbliiiing?tab=repositories,截取其中关键部分,将训练的脚本设计成可视化的操作界面。
第一步是训练已有的网络结构,包含图像分类、语义分割、目标检测和实例分割。
第二步的话,我觉得是可以加载单独的torch模块进行训练或者自定义的网络结构之类的,但是还不知道怎么做,继续学习吧!
第三步,关于预测功能的实现,应该可以包含图像导入处理、视频流处理、作为服务端接收图像将结果返回客户端等功能。

目标:

包含的任务类型和网络框架:

2024-01-25 实现了语义分割DeepLab、UNet、FCN、PSPNet、SegNet模型的训练。添加HRNet和DANet选项,但是还没有实现。
2024-01-29 实现了图像分类AlexNet、DenseNet、GhostsNet、GoogleNet、MobileNet、ResNet、Shufflenet、Swin_Transformer、VGGNet、Vision_Transformer模型多种版本的训练,仅测试了AlexNet可顺利训练,其余的还没有测试。
保留了Inception、SqueezeNet和EfficientNet选项,但是未实现。
2024-02-07 测试了DenseNet、GhostsNet、GoogleNet、MobileNet都可以正常训练,但是GoogleNet无法实现冻结训练。
2024-05-31 重新调整了一下界面
在这里插入图片描述

 NetworkTypeParams = [
        {
            "ID": "图像分类",
            "Ranges": [
                {"NetworkType": "AlexNet", "Version": ["none"], "Backbones": ["none"]},
                {"NetworkType": "DenseNet", "Version": ["16", "19"], "Backbones": ["none"]},
                {"NetworkType": "GhostsNet", "Version": ["16", "19"], "Backbones": ["none"]},
                {"NetworkType": "GoogleNet", "Version": ["16", "19"], "Backbones": ["none"]},
                {"NetworkType": "MobileNet", "Version": ["v2", "v3"], "Backbones": ["none"]},
                {"NetworkType": "ResNet", "Version": ["18", "34", "50", "101", "152"], "Backbones": ["none"]},
                {"NetworkType": "Shufflenet", "Version": ["g1", "g2", "v2_x0_5", "v2_x1_0", "v2_x1_5", "v2_x2_0"], "Backbones": ["none"]},
                {"NetworkType": "Swin_Transformer", "Version": ["tiny", "small", "base"], "Backbones": ["none"]},
                {"NetworkType": "VGGNet", "Version": ["11", "13", "16", "19", "11_bn", "13_bn", "16_bn", "19_bn"], "Backbones": ["none"]},
                {"NetworkType": "Vision_Transformer", "Version": ["vit_b_16"], "Backbones": ["none"]},

                {"NetworkType": "Inception", "Version": ["1.0", "2.0"], "Backbones": ["none"]},
                {"NetworkType": "SqueezeNet", "Version": ["1.0", "1.1"], "Backbones": ["none"]},
                {"NetworkType": "EfficientNet", "Version": ["B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7"], "Backbones": ["none"]}
            ],
            "默认值": {"NetworkType": "AlexNet", "Version": "none", "Backbones": ["none"]}
        },
        {
            "ID": "目标检测",
            "Ranges": [
                {"NetworkType": "YOLO", "Version": ["v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8"], "Backbones": ["none"]},
                {"NetworkType": "Faster R-CNN", "Version": ["1.0"], "Backbones": ["none"]},
                {"NetworkType": "SSD", "Version": ["1.0"], "Backbones": ["none"]},
                {"NetworkType": "RetinaNet", "Version": ["1.0"], "Backbones": ["none"]},
                {"NetworkType": "R-FCN", "Version": ["1.0"], "Backbones": ["none"]},
                {"NetworkType": "CornerNet", "Version": ["1.0"], "Backbones": ["none"]},
                {"NetworkType": "CenterNet", "Version": ["1.0"], "Backbones": ["none"]},
                {"NetworkType": "Other", "Version": ["1.0"], "Backbones": ["none"]}
            ],
            "默认值": {"NetworkType": "YOLO", "Version": "v1", "Backbones": ["none"]}
        },
        {
            "ID": "语义分割",
            "Ranges": [
                {"NetworkType": "DeepLab", "Version": ["1.0", "2.0", "3.0", "3.0+"], "Backbones": ["mobilenet", "xception"]},
                {"NetworkType": "UNet", "Version": ["1.0"], "Backbones": ["vgg", "resnet50"]},
                {"NetworkType": "FCN", "Version": ["1.0"], "Backbones": ["resnet34", "vgg16"]},
                {"NetworkType": "PSPNet", "Version": ["1.0"], "Backbones": ["mobilenet", "resnet50"]},
                {"NetworkType": "SegNet", "Version": ["1.0"], "Backbones": ["none"]},
                {"NetworkType": "HRNet", "Version": ["1.0"], "Backbones": ["none"]},
                {"NetworkType": "DANet", "Version": ["1.0"], "Backbones": ["none"]},
                {"NetworkType": "Other", "Version": ["1.0"], "Backbones": ["none"]}
            ],
            "默认值": {"NetworkType": "DeepLab", "Version": "3.0+", "Backbones": ["none"]}
        },
        {
            "ID": "实例分割",
            "Ranges": [
                {"NetworkType": "Mask R-CNN", "Version": ["1.0"], "Backbones": ["none"]},
                {"NetworkType": "FCIS", "Version": ["2.0"], "Backbones": ["none"]},
                {"NetworkType": "HTC", "Version": ["1.0"], "Backbones": ["none"]},
                {"NetworkType": "BlendMask", "Version": ["2.0"], "Backbones": ["none"]},
                {"NetworkType": "PolarMask", "Version": ["1.0"], "Backbones": ["none"]},
                {"NetworkType": "YOLACT", "Version": ["1.0"], "Backbones": ["none"]},
                {"NetworkType": "Other", "Version": ["1.0"], "Backbones": ["none"]}
            ],
            "默认值": {"NetworkType": "Mask R-CNN", "Version": "1.0", "Backbones": ["none"]}
        }
    ]

界面设计的大概布局:

2024-01-29:实现了图像分类,好像需要通过脚本对数据集进行划分,那要不要在界面上添加一个数据集拆分的功能呢?先加一个页面进去再说。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/eb8f5d6692464dd69bc28494ef0eee2f.png

在这里插入图片描述

当前运行的效果

在这里插入图片描述

没能把控制台的输出完全的转到界面上,**显示的字符不能和控制台那样对齐,另外tqdm的进度也转移不了 **
2024-02-06 通过设置xml格式可以对齐显示了,添加style="white-space: pre-wrap;实现空格显示。

validFormat = '<pre style="white-space: pre-wrap;"><span style="color: deepskyblue;">{}</span></pre>'
warningFormat = '<pre style="white-space: pre-wrap;"><span style="color: orange;">{}</span></pre>'
errorFormat = '<pre style="white-space: pre-wrap;"><span style="color: red;">{}</span></pre>'
def slot_print(self, msg, FormatFlag=1):
    if FormatFlag == 1:
        self.loginfo_textEdit.append(validFormat.format(msg))
    elif FormatFlag == 2:
        self.loginfo_textEdit.append(warningFormat.format(msg))
    elif FormatFlag == 3:
        self.loginfo_textEdit.append(errorFormat.format(msg))

在这里插入图片描述

皮肤样式更换

在这里插入图片描述

* {
/*设置所有控件的字体大小*/
    font-size: 16px;
}

QMainWindow {
	background-color:#1e1d23;
}
QWidget#central_widget {
    border: 1px solid;
    border-top-color: #6E6BE2;
    }
QDialog {
	background-color:#1e1d23;
}
QColorDialog {
	background-color:#1e1d23;
}
QTextEdit {
	background-color:#1e1d23;
	color: #a9b7c6;
	/* 设置行高 */
    line-height: 1.2; /* 1.5 倍行高 */
    font: normal normal 20px "隶书";
}
QPlainTextEdit {
	selection-background-color:#007b50;
	background-color:#1e1d23;
	border-style: solid;
	border-top-color: transparent;
	border-right-color: transparent;
	border-left-color: transparent;
	border-bottom-color: transparent;
	border-width: 1px;
	color: #a9b7c6;
}
QPushButton,QToolButton{
	border-style: solid;
	border-top-color: #42404d;
	border-right-color: #42404d;
	border-left-color: #42404d;
	border-bottom-color: #42404d;
	border-width: 1px;
	border-style: solid;
	color: #a9b7c6;
	padding: 2px;
	background-color: #1e1d23;
}
QPushButton::default{
	border-style: inset;
	border-top-color: #686479;
	border-right-color: #686479;
	border-left-color: #686479;
	border-bottom-color: #686479;
	border-width: 1px;
	color: #a9b7c6;
	padding: 2px;
	background-color: #1e1d23;
}
QToolButton:hover,QPushButton:hover{
	border-style: solid;
	border-top-color: #686479;
	border-right-color: #686479;
	border-left-color: #686479;
	border-bottom-color: #686479;
	border-bottom-width: 2px;
	border-style: solid;
	color: #FFFFFF;
	padding-bottom: 1px;
	background-color: #1e1d23;
}
QPushButton:pressed{
	border-style: solid;
	border-top-color: transparent;
	border-right-color: transparent;
	border-left-color: transparent;
	border-bottom-color: #37efba;
	border-bottom-width: 2px;
	border-style: solid;
	color: #FFFFFF;
	padding-bottom: 1px;
	background-color: #1e1d23;
}
QPushButton:disabled{
	border-style: solid;
	border-top-color: transparent;
	border-right-color: transparent;
	border-left-color: transparent;
	border-bottom-color: #808086;
	border-bottom-width: 2px;
	border-style: solid;
	color: #808086;
	padding-bottom: 1px;
	background-color: #1e1d23;
}
QLineEdit {
	border-width: 1px; border-radius: 4px;
	border-color: rgb(58, 58, 58);
	border-style: inset;
	padding: 0 8px;
	color: #a9b7c6;
	background:#1e1d23;
	selection-background-color:#007b50;
	selection-color: #FFFFFF;
}
QLabel {
	color: #a9b7c6;
	qproperty-alignment: AlignRight;
}

QLCDNumber {
	color: #37e6b4;
}
QProgressBar {
	text-align: center;
	color: rgb(240, 240, 240);
	border-width: 1px;
	border-radius: 10px;
	border-color: rgb(58, 58, 58);
	border-style: inset;
	background-color:#1e1d23;
}
QProgressBar::chunk {
	background-color: #04b97f;
	border-radius: 5px;
}
QMenuBar#menubar {
	background-color: #1e1d23;
	border: 1px solid;
	border-top-color: #6E6BE2 ;
}
QMenuBar::item {
	color: #a9b7c6;
  	spacing: 3px;
  	padding: 1px 4px;
  	background: #1e1d23;
}

QMenuBar::item:selected {
  	background:#1e1d23;
	color: #FFFFFF;
}
QMenu::item:selected {
	border-style: solid;
	border-top-color: transparent;
	border-right-color: transparent;
	border-left-color: #04b97f;
	border-bottom-color: transparent;
	border-left-width: 2px;
	color: #FFFFFF;
	padding-left:15px;
	padding-top:4px;
	padding-bottom:4px;
	padding-right:7px;
	background-color: #1e1d23;
}
QMenu::item {
	border-style: solid;
	border-top-color: transparent;
	border-right-color: transparent;
	border-left-color: transparent;
	border-bottom-color: transparent;
	border-bottom-width: 1px;
	border-style: solid;
	color: #a9b7c6;
	padding-left:17px;
	padding-top:4px;
	padding-bottom:4px;
	padding-right:7px;
	background-color: #1e1d23;
}
QMenu{
	background-color:#1e1d23;
}
QTabWidget {
	color:rgb(0,0,0);
	background-color:#1e1d23;
}
QTabWidget::tab-bar {
    alignment: center;
}
QTabWidget::pane {
		border-color: rgb(77,77,77);
		background-color:#1e1d23;
		border-style: solid;
		border-width: 1px;
    	border-radius: 6px;
}
QTabBar::tab {
	border-style: solid;
	border-top-color: transparent;
	border-right-color: transparent;
	border-left-color: transparent;
	border-bottom-color: transparent;
	border-bottom-width: 1px;
	border-style: solid;
	color: #808086;
	padding: 3px;
	margin-left:3px;
	background-color: #1e1d23;
}
QTabBar::tab:selected, QTabBar::tab:last:selected, QTabBar::tab:hover {
  	border-style: solid;
	border-top-color: transparent;
	border-right-color: transparent;
	border-left-color: transparent;
	border-bottom-color: #04b97f;
	border-bottom-width: 2px;
	border-style: solid;
	color: #FFFFFF;
	padding-left: 3px;
	padding-bottom: 2px;
	margin-left:3px;
	background-color: #1e1d23;
}

QCheckBox {
	color: #a9b7c6;
	padding: 2px;
}
QCheckBox:disabled {
	color: #808086;
	padding: 2px;
}

QCheckBox:hover {
	border-radius:4px;
	border-style:solid;
	padding-left: 1px;
	padding-right: 1px;
	padding-bottom: 1px;
	padding-top: 1px;
	border-width:1px;
	border-color: rgb(87, 97, 106);
	background-color:#1e1d23;
}
QCheckBox::indicator:checked {

	height: 10px;
	width: 10px;
	border-style:solid;
	border-width: 1px;
	border-color: #04b97f;
	color: #a9b7c6;
	background-color: #04b97f;
}
QCheckBox::indicator:unchecked {

	height: 10px;
	width: 10px;
	border-style:solid;
	border-width: 1px;
	border-color: #04b97f;
	color: #a9b7c6;
	background-color: transparent;
}
QRadioButton {
	color: #a9b7c6;
	background-color: #1e1d23;
	padding: 1px;
}
QRadioButton::indicator:checked {
	height: 10px;
	width: 10px;
	border-style:solid;
	border-radius:5px;
	border-width: 1px;
	border-color: #04b97f;
	color: #a9b7c6;
	background-color: #04b97f;
}
QRadioButton::indicator:!checked {
	height: 10px;
	width: 10px;
	border-style:solid;
	border-radius:5px;
	border-width: 1px;
	border-color: #04b97f;
	color: #a9b7c6;
	background-color: transparent;
}
QStatusBar {
	color:#027f7f;
}
QSpinBox {
	color: #a9b7c6;
	background-color: #1e1d23;
}
QDoubleSpinBox {
	color: #a9b7c6;
	background-color: #1e1d23;
}
QTimeEdit {
	color: #a9b7c6;
	background-color: #1e1d23;
}
QDateTimeEdit {
	color: #a9b7c6;
	background-color: #1e1d23;
}
QDateEdit {
	color: #a9b7c6;
	background-color: #1e1d23;
}
QComboBox {
	color: #a9b7c6;
	background: #1e1d23;
}
QComboBox#mysql_table_selector {
	color: #a9b7c6;
	background: #1e1d23;
	border-color: #04b97f;

}
QComboBox:editable {
	background: #1e1d23;
	color: #a9b7c6;
	selection-background-color: #1e1d23;
}
QComboBox QAbstractItemView {
	color: #a9b7c6;
	background: #1e1d23;
	selection-color: #FFFFFF;
	selection-background-color: #1e1d23;
}
QComboBox:!editable:on, QComboBox::drop-down:editable:on {
	color: #a9b7c6;
	background: #1e1d23;
}
QFontComboBox {
	color: #a9b7c6;
	background-color: #1e1d23;
}
QToolBox {
	color: #a9b7c6;
	background-color: #1e1d23;
}
QToolBox::tab {
	color: #a9b7c6;
	background-color: #1e1d23;
}
QToolBox::tab:selected {
	color: #FFFFFF;
	background-color: #1e1d23;
}
QScrollArea {
	color: #1e1d23;
	background-color: #1e1d23;
}
QSlider::groove:horizontal {
	height: 5px;
	background: #04b97f;
}
QSlider::groove:vertical {
	width: 5px;
	background: #04b97f;
}
QSlider::handle:horizontal {
	background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f);
	border: 1px solid #5c5c5c;
	width: 14px;
	margin: -5px 0;
	border-radius: 7px;
}
QSlider::handle:vertical {
	background: qlineargradient(x1:1, y1:1, x2:0, y2:0, stop:0 #b4b4b4, stop:1 #8f8f8f);
	border: 1px solid #5c5c5c;
	height: 14px;
	margin: 0 -5px;
	border-radius: 7px;
}
QSlider::add-page:horizontal {
    background: white;
}
QSlider::add-page:vertical {
    background: white;
}
QSlider::sub-page:horizontal {
    background: #04b97f;
}
QSlider::sub-page:vertical {
    background: #04b97f;
}


QGroupBox {
    background-color:#1e1d23;
    /* 边框 */
    border: 2px solid rgb(77,77,77);;
    /* 倒角 */
    border-radius: 4px;
    /* 就像墙上挂着的两个相框,margin指的是相框与相框的距离
       padding指的是每个相框里照片与相框边框的距离 */
    margin-top: 20px;
}

/* 标题设置 */
QGroupBox::title {
    /* 位置 */
    subcontrol-origin: margin;
    subcontrol-position: top center;

    /* 内边框,上下和左右 */
    /*padding: 10px 15px;*/

    /* 颜色 */
    /*background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #FF0ECE, stop: 1 #FFFFFF);*/
    color: #FFFFFF;
}

/*表格的一种美化方式*/
QTableWidget
{
    background: #303033;
}
QTableWidget::item
{
    color:rgba(255,255,255,150);
    background: #303033;
    text-align:center;
}
QTableWidget::item:hover
{
    color:#FFFFFF;
    background: #4B4B4D;
}
QTableWidget::item:selected
{
    color:#FFFFFF;
    background: #4B4B4D;
}
QHeaderView::section,QTableCornerButton:section
{
    text-align:center;
    padding:3px;
    margin:0px;
    color:#DCDCDC;
    border:1px solid #242424;
    border-left-width:0px;
    border-right-width:1px;
    border-top-width:0px;
     border-bottom-width:1px;
    background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #646464,stop:1 #525252);
 }
QHeaderView::section:selected
{
    color:#FFFFFF;
    border:1px solid #242424;
 }
QScrollBar:vertical{
    width:8px;
    border-style:flat;
    border-radius: 4px;
    border:0px;
     background: #19191A;
}
QScrollBar::handle:vertical{
    background: rgba(255,255,255,0.50);
    border-radius: 4px;
    width:8px;
    min-height:91px;
    border-style:flat;
}
QScrollBar::handle:vertical::hover{
    background: rgba(255,255,255,0.90);
    border-radius: 4px;
    width:8px;
}
QScrollBar::handle:vertical::pressed{
    background: rgba(255,255,255,0.90);
    border-radius:4px;
    width:8px;
}
QScrollBar::sub-page:vertical {
    background: #19191A;
border-style:flat;
}
QScrollBar::add-page:vertical {
   background: #19191A;
border-style:flat;
}
QScrollBar::add-line:vertical{
   background: #19191A;
}
QScrollBar::sub-line:vertical {
   background: #19191A;
}
QScrollBar:horizontal{
    height:8px;
    border-style:flat;
    border-radius: 4px;
    border:0px;
background: #19191A;
}
QScrollBar::handle:horizontal{
    background: rgba(255,255,255,0.50);
    border-radius: 4px;
    height:8px;
    min-width:91px;
    border-style:flat;
}
QScrollBar::handle:horizontal::hover{
    background: rgba(255,255,255,0.90);
    border-radius: 4px;
    height:8px;
}
QScrollBar::handle:horizontal::pressed{
    background: rgba(255,255,255,0.90);
    border-radius:4px;
    height:8px;
}
QScrollBar::sub-page:horizontal {
    background: #19191A;
    border-style:flat;
}
QScrollBar::add-page:horizontal {
   background: #19191A;
    border-style:flat;
}
QScrollBar::sub-line:horizontal {
   background: #19191A;
}
QScrollBar::add-line:horizontal{
   background: #19191A;
}

QVBoxLayout {
    background-color: rgba(255,255,255,0.90);
}

QDateTimeEdit{
    background:transparent;
    border:1px solid rgb(82,143,199);
    border-radius:2px;
    min-height:26px;
    max-height:26px;
}

QCalendarWidget{
    background-color:#FFFFFF;
    border: 1px solid #1e1d23;
}
QCalendarWidget QAbstractItemView:enabled{
    color:#1e1d23;
    background-color:#ffffff;
    selection-color: white;
    selection-background-color:#1e1d23;
}
QCalendarWidget QSpinBox#qt_calendar_yearedit{
    background:#1e1d23;
    height:24px;
    width:100px;
    selection-background-color:#1e1d23;
}
QCalendarWidget QToolButton{
    background-color:#FFFFFF;
    height:24px;
    width:100px;
    color:#1e1d23;
}
QCalendarWidget QToolButton:hover{
    border: 1px solid #1e1d23;
}
QCalendarWidget QToolButton::menu-indicator#qt_calendar_monthbutton{
    subcontrol-position: right center;
    subcontrol-origin: padding;
}
QCalendarWidget QToolButton QMenu{
    background-color:#FFFFFF;
    width:125px;
    border:1px solid #1e1d23;
    }
QCalendarWidget QToolButton QMenu::item:selected{
    color:#FFFFFF;
    background:#1e1d23;
}

皮肤的使用方法

if name == “main”:
app = QApplication(sys.argv)
ui = MainCode()
styleFile = r’.\skin_qss\MyQSS.qss’
qssStyle = CommonHelper.readQss(styleFile)
ui.setStyleSheet(qssStyle)
ui.show()
sys.exit(app.exec_())

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐