一:国外篇
Cloudflare
Cloudflare是绝对的大厂了,百度的海外CDN业务就是和Cloudflare合作的。Cloudflare采用Anycast技术,免费套餐也是诚意满满,不仅不限流量,还可防DD、CC。很多站长喜欢CloudFlare Partner来自定义节点,不过很可惜,节点存活率很短。
目前国内移动是中国香港节点,联通电信是美国西部直连,部分IP走欧洲!
官网地址:https://www.cloudflare.com ps:CF冷知识
1.Cloudflare持有全球最好的IPV4-IP:”1.1.1.1″。这个IP是一个公共DNS服务器(类似谷歌的”8.8.8.8″),同时也是一个CDN节点IP。
2.目前cloudflare已经完全支持中文访问了。
3.此外CF Workers也是站长喜欢折腾的项目。陌涛提供给了不少教程,可以在博客里自行搜索关键词。这里列举一些:
利用 CloudFlare Workers 搭建 Google 云端硬盘索引网盘
【教程】CloudFlare 自定义节点优化网站速度 - CloudFlare 自选 IP 加快 CDN 速度
NodeCache
NodeCache也是比较有名的免费CDN商家了,官网提供中文界面。大鸟博客之前也介绍过这家。对国内比较友好的节点是中国香港节点,虽然绕路日本,不过日常情况下也还行。
官网:https://www.cloudflare.com 邀请注册地址:https://console-api.nodecache.com/f?aff=4wB0dE 邀请注册送1T流量,否则500G!
关于nodecache的文章如下:
免备案CDN加速服务商NodeCache新增中国直连线路 送100G体验
G-Core Labs
Gcore VPS是一家来自俄罗斯的VPS主机商,不过自身的业务已经不局限于主机服务,同时他们还提供了CDN加速、云存储以及SSL证书服务。
G-Core Labs免费CDN加速提供了100GB的月流量,虽然有日本、韩国、香港、美国等CDN节点,但是国内访问的话都被解析到了俄罗斯,加速效果不是很好,比较适合国外的网站加速。
超出100G部分是1G/0.06欧元。可设置流量提醒
不过现在似乎需要预存一定金额(10欧元)才能使用,每月免费100G依旧提供。门槛变高了有利有弊。
注:关于这100G额度有一定的争议,是每月100G还是100G不限时长用完即止。具体可问官方客服。
官网地址:https://gcorelabs.com/
FreeCDN
FreeCDN是国人商家,免费套餐分国内北岸以及国外免备,国内100G防御国外20G防御,无限流量。开通需要审核。仅支持一个域名,节点在中国香港和日本等地区,速度应该还不错。
该CDN提供3个节点(香港/美国/韩国)对国内用户来说是很不错的,当然该站还提供收费CDN,2018年开始提供免费服务。
公司简介里面这样介绍的。
智云加速CDN,创建于2018年,隶属于重庆易时代无名网络科技有限公司原"重庆智多星电脑网络科技"旗下智多互联IDC品牌。 致力于基础互联网应用标准化产品、云计算综合服务解决方案的互联 网业务服务企业。专注于基础互联网业务服务,提供域名注册、虚拟 主机、服务器合租、VPS、云主机、CDN加速、主机租用、企业邮局、网站推广 等企业应用服务。为个人站长,企业,政府,校园等机构提供最稳定的网络资源与最优质的服务。
官网地址:http://su.zhiduopc.com/
谷歌云
谷歌是超级大厂,他家的服务体验还是很不错的。关于CDN,并无免费套餐,不过新用户注册绑定信用卡会送300美金时长为1年的体验金。
流量是0.20美金(每G),加上IP以及其他费用(如果有),大约是有超过1000G不超过1500G的流量。
国内访问基本是在中国香港或者中国台湾节点,不过移动绕路到美国或日本,体验比较差。联通电信非常快。
官网地址:https://cloud.google.com/
aipky(企鹅小屋)
企鹅小屋CDN目前公测中,可以购买0元的公测套餐,最长购买1年。流量价格1元/G,每月送50G流量。免费版已经有9个亚洲区的节点。
付费的基础套餐和高级套餐的价格价格,配置分别为39元/月和900元/月。
官网地址:http://www.aipky.com/
Hosttry
Hosttry有每个月10G免费额度,超出部分0.01美金。具体有哪些节点不清楚。
官网:https://hostry.com/products/cdn/
DDOS-GUARD
DDoS-GUARD,应该是俄罗斯商家,2011年成立,主要提供DDOS防护服务,有CDN、虚拟主机、独立服务器等。其CND有免费和收费版,节点有香港、哈萨克斯坦、美国、德国、荷兰等,均不限流量,免费版只能绑定1个域名。缺点是需要修改域名的DNS为他们的。
官网地址:https://ddos-guard.net/
AionCloud
AionCloud免费套餐提供每月5G流量,有WAF功能。
官网:https://www.aioncloud.com/
优优加速
应该是小厂的cdn,CDN有20+的节点,并且是日本东京Choopa数据中心、香港 CloudIE数据中心、亚太地区等等。还不限制流量,在自己的网页下添加优优加速友链可以免费使用vip。
不过就算收费也不算贵,产品分为高中低,高级版25每月,中级15每月,低级10元每月。无需修改dns,使用智能CNAME解析指向,一健接入。
官网:http://uujs.cc/
二:国内篇
国内cdn就比较多了,质量都不错,不过唯一缺点的就是需要北岸。其他都没毛病。

腾讯云
腾讯云是国内一线大厂,有国内十几个节点。免费提供每个月10G流量。
新用户注册连续送6个月每月50G流量(相当于60G)
官网地址:https://cloud.tencent.com/
百度云加速
百度云加速的免费套餐还挺香的。免费套餐提供每日10G流量,超出部分回源,不会扣费。节点只有联通以及电信的几个节点。
官网地址:https://su.baidu.com/
七牛云
七牛云CDN每个月的前10G流量免费,但仅限HTTP!
官网地址:https://www.qiniu.com/
又拍云
又拍云联盟提供免费的10G存储以及15G的CDN流量,需要在网站底部挂又拍云的广告
官网地址:https://www.upyun.com/
加速乐
加速乐是知道创宇旗下的,免费套餐提供3600GB/月的流量,但是只支持HTTP
官网地址:https://www.yunaq.com/
奇安信(360)网站卫士
官网称是”将免费进行到底”,有收费套餐(听说涨到3W/年),本站在用(免费版)。
官网地址:https://wangzhan.qianxin.com/
魔门云
魔门云免费套餐每月免费HTTPS请求数: 1000万次超出价格:0.07元/万次,目前最便宜的特惠版299元每月。
官网地址:https://www.cachemoment.com/
猫云
猫云联盟提供30G的CDN流量以及20G的存储,获取方式与又拍云相似。需要在网站底部挂广告。MaoCloud目前推出大陆企业免备案CDN服务。
官网地址:https://www.maoyuncloud.com/
快快云
融合CDN,聚合华为云、阿里云和腾讯云的CDN,个人实名用户可领时长为1年的0元试用流量包(500G)
官网地址:https://www.kuaikuaicloud.com/
华为云
新手免费体验500G流量包(30天),速度不错。
官网地址:https://www.huaweicloud.com/

torchvision.models
官方预训练模型调用代码:https://github.com/pytorch/vision/tree/master/torchvision/models

官方文档地址 :https://pytorch.org/docs/master/torchvision/models.html

预训练模型下载:
Classification 分类
AlexNet

model_urls = {
    'alexnet': 'https://download.pytorch.org/models/alexnet-owt-4df8aa71.pth',
}

VGG

model_urls = {
    'vgg11': 'https://download.pytorch.org/models/vgg11-bbd30ac9.pth',
    'vgg13': 'https://download.pytorch.org/models/vgg13-c768596a.pth',
    'vgg16': 'https://download.pytorch.org/models/vgg16-397923af.pth',
    'vgg19': 'https://download.pytorch.org/models/vgg19-dcbb9e9d.pth',
    'vgg11_bn': 'https://download.pytorch.org/models/vgg11_bn-6002323d.pth',
    'vgg13_bn': 'https://download.pytorch.org/models/vgg13_bn-abd245e5.pth',
    'vgg16_bn': 'https://download.pytorch.org/models/vgg16_bn-6c64b313.pth',
    'vgg19_bn': 'https://download.pytorch.org/models/vgg19_bn-c79401a0.pth',
}

ResNet

model_urls = {
    'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth',
    'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth',
    'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth',
    'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth',
    'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth',
}

ResNeXt

model_urls = {
    'resnext50_32x4d': 'https://download.pytorch.org/models/resnext50_32x4d-7cdf4587.pth',
    'resnext101_32x8d': 'https://download.pytorch.org/models/resnext101_32x8d-8ba56ff5.pth',
    'resnext101_32x16d': 'https://download.pytorch.org/models/ig_resnext101_32x16-c6f796b0.pth'
}

Wide ResNet

model_urls = {
  'wide_resnet50_2': 'https://download.pytorch.org/models/wide_resnet50_2-95faca4d.pth',
  'wide_resnet101_2': 'https://download.pytorch.org/models/wide_resnet101_2-32ee1156.pth'
  }

SqueezeNet

model_urls = {
    'squeezenet1_0': 'https://download.pytorch.org/models/squeezenet1_0-a815701f.pth',
    'squeezenet1_1': 'https://download.pytorch.org/models/squeezenet1_1-f364aa15.pth',
}

DenseNet

model_urls = {
    'densenet121': 'https://download.pytorch.org/models/densenet121-a639ec97.pth',
    'densenet169': 'https://download.pytorch.org/models/densenet169-b2777c0a.pth',
    'densenet201': 'https://download.pytorch.org/models/densenet201-c1103571.pth',
    'densenet161': 'https://download.pytorch.org/models/densenet161-8d451a50.pth',
}

Inception v3

model_urls = {
    ## Inception v3 ported from TensorFlow
    'inception_v3_google': 'https://download.pytorch.org/models/inception_v3_google-1a9a5a14.pth',
}

GoogLeNet

model_urls = {
    # GoogLeNet ported from TensorFlow
    'googlenet': 'https://download.pytorch.org/models/googlenet-1378be20.pth',
}

ShuffleNet v2

model_urls = {
    'shufflenetv2_x0.5': 'https://download.pytorch.org/models/shufflenetv2_x0.5-f707e7126e.pth',
    'shufflenetv2_x1.0': 'https://download.pytorch.org/models/shufflenetv2_x1-5666bf0f80.pth',
    'shufflenetv2_x1.5': None,
    'shufflenetv2_x2.0': None,
}

MobileNet v2

model_urls = {
    'mobilenet_v2': 'https://download.pytorch.org/models/mobilenet_v2-b0353104.pth',
}

MobileNet v3

model_urls = {
    'mobilenet_v3_small': "https://download.pytorch.org/models/mobilenet_v3_small-047dcff4.pth",
    'mobilenet_v3_large': "https://download.pytorch.org/models/mobilenet_v3_large-5c1a4163.pth"
    
}

MNASNet

_MODEL_URLS = {
    "mnasnet0_5":
    "https://download.pytorch.org/models/mnasnet0.5_top1_67.823-3ffadce67e.pth",
    "mnasnet0_75": None,
    "mnasnet1_0":
    "https://download.pytorch.org/models/mnasnet1.0_top1_73.512-f206786ef8.pth",
    "mnasnet1_3": None
}

CONVNEXT

   _MODEL_URLS = {
    "convnext_tiny": "https://download.pytorch.org/models/convnext_tiny-983f1562.pth",
    "convnext_small": "https://download.pytorch.org/models/convnext_small-0c510722.pth",
    "convnext_base": "https://download.pytorch.org/models/convnext_base-6075fbad.pth",
    "convnext_large": "https://download.pytorch.org/models/convnext_large-ea097f82.pth",
}

REGNET

   _MODEL_URLS = {
    "regnet_y_400mf": "https://download.pytorch.org/models/regnet_y_400mf-e6988f5f.pth",
    "regnet_y_800mf": "https://download.pytorch.org/models/regnet_y_800mf-58fc7688.pth",
    "regnet_y_1_6gf": "https://download.pytorch.org/models/regnet_y_1_6gf-0d7bc02a.pth",
    "regnet_y_3_2gf": "https://download.pytorch.org/models/regnet_y_3_2gf-9180c971.pth",
    "regnet_y_8gf": "https://download.pytorch.org/models/regnet_y_8gf-dc2b1b54.pth",
    "regnet_y_16gf": "https://download.pytorch.org/models/regnet_y_16gf-3e4a00f9.pth",
    "regnet_y_32gf": "https://download.pytorch.org/models/regnet_y_32gf-8db6d4b5.pth",
    "regnet_y_128gf": "https://download.pytorch.org/models/regnet_y_128gf_swag-c8ce3e52.pth",
    "regnet_x_400mf": "https://download.pytorch.org/models/regnet_x_400mf-62229a5f.pth",
    "regnet_x_800mf": "https://download.pytorch.org/models/regnet_x_800mf-94a99ebd.pth",
    "regnet_x_1_6gf": "https://download.pytorch.org/models/regnet_x_1_6gf-a12f2b72.pth",
    "regnet_x_3_2gf": "https://download.pytorch.org/models/regnet_x_3_2gf-7071aa85.pth",
    "regnet_x_8gf": "https://download.pytorch.org/models/regnet_x_8gf-2b70d774.pth",
    "regnet_x_16gf": "https://download.pytorch.org/models/regnet_x_16gf-ba3796d7.pth",
    "regnet_x_32gf": "https://download.pytorch.org/models/regnet_x_32gf-6eb8fdc6.pth",  
}

Semantic Segmentation 语义分割
FCN ResNet50, ResNet101

model_urls = {
    'fcn_resnet50_coco': 'https://download.pytorch.org/models/fcn_resnet50_coco-1167a1af.pth',
    'fcn_resnet101_coco': 'https://download.pytorch.org/models/fcn_resnet101_coco-7ecb50ca.pth'
}

DeepLabV3 ResNet50, ResNet101

model_urls = {
    'deeplabv3_resnet50_coco': 'https://download.pytorch.org/models/deeplabv3_resnet50_coco-cd0a2569.pth',
    'deeplabv3_resnet101_coco': 'https://download.pytorch.org/models/deeplabv3_resnet101_coco-586e9e4e.pth'
}

Object Detection 目标检测
Faster R-CNN ResNet-50 FPN

model_urls = {
    'fasterrcnn_resnet50_fpn_coco':
    'https://download.pytorch.org/models/fasterrcnn_resnet50_fpn_coco-258fb6c6.pth',
}

Instance Segmentation 实例分割
Mask R-CNN ResNet-50 FPN

model_urls = {
    'maskrcnn_resnet50_fpn_coco':
    'https://download.pytorch.org/models/maskrcnn_resnet50_fpn_coco-bf2d0c1e.pth',
}

Person Keypoint Detection 人体关键点
Keypoint R-CNN ResNet-50 FPN

model_urls = {
    # legacy model for BC reasons, see https://github.com/pytorch/vision/issues/1606
    'keypointrcnn_resnet50_fpn_coco_legacy':
    'https://download.pytorch.org/models/keypointrcnn_resnet50_fpn_coco-9f466800.pth',
    'keypointrcnn_resnet50_fpn_coco':
    'https://download.pytorch.org/models/keypointrcnn_resnet50_fpn_coco-fc266e95.pth',
}

Video classification 视频分类
ResNet 3D

model_urls = {
    ## ResNet 3D
    'r3d_18': 'https://download.pytorch.org/models/r3d_18-b3b3357e.pth'
}

ResNet Mixed Convolution

model_urls = {
    ## ResNet Mixed Convolution
    'mc3_18': 'https://download.pytorch.org/models/mc3_18-a90a0ba3.pth'
}

ResNet (2+1)D

model_urls = {
    ## ResNet (2+1)D
    'r2plus1d_18': 'https://download.pytorch.org/models/r2plus1d_18-91a641e6.pth'
}

预训练模型加载调用:
Classification 分类

import torchvision.models as models
## 如果只需要网络结构,不需要用预训练模型的参数来初始化,pretrained=False:
resnet18 = models.resnet18(pretrained=True)
alexnet = models.alexnet(pretrained=True)
squeezenet = models.squeezenet1_0(pretrained=True)
vgg16 = models.vgg16(pretrained=True)
densenet = models.densenet161(pretrained=True)
inception = models.inception_v3(pretrained=True)
googlenet = models.googlenet(pretrained=True)
shufflenet = models.shufflenet_v2_x1_0(pretrained=True)
mobilenet = models.mobilenet_v2(pretrained=True)
resnext50_32x4d = models.resnext50_32x4d(pretrained=True)
wide_resnet50_2 = models.wide_resnet50_2(pretrained=True)
mnasnet = models.mnasnet1_0(pretrained=True)

Semantic Segmentation 语义分割

fcn_resnet50 = torchvision.models.segmentation.fcn_resnet50(pretrained=False, progress=True, num_classes=21, aux_loss=None)
fcn_resnet101 = torchvision.models.segmentation.fcn_resnet101(pretrained=False, progress=True, num_classes=21, aux_loss=None)
deeplabv3_resnet50 = torchvision.models.segmentation.deeplabv3_resnet50(pretrained=False, progress=True, num_classes=21, aux_loss=None)
deeplabv3_resnet101 = torchvision.models.segmentation.deeplabv3_resnet101(pretrained=False, progress=True, num_classes=21, aux_loss=None)

Object Detection 目标检测

fasterrcnn_resnet50_fpn = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=False, progress=True, num_classes=91, pretrained_backbone=True, trainable_backbone_layers=3)

Instance Segmentation 实例分割

maskrcnn_resnet50_fpn = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=False, progress=True, num_classes=91, pretrained_backbone=True)

Person Keypoint Detection 人体关键点

keypointrcnn_resnet50_fpn = torchvision.models.detection.keypointrcnn_resnet50_fpn(pretrained=False, progress=True, num_classes=2, num_keypoints=17, pretrained_backbone=True)

Video classification 视频分类

r3d_18 = torchvision.models.video.r3d_18(pretrained=False, progress=True)

完整调用代码请移步一>官方预训练模型调用代码:
https://github.com/pytorch/vision/tree/master/torchvision/models

完整理解代码请移步一>官方文档地址:
https://pytorch.org/docs/master/torchvision/models.html

调用例子:

import os
import torch
from torch.utils.data import DataLoader
from torch import nn
from torch import optim
import torchvision.models as models
import time

# use res18
# from resnet.resnetmini import ClassificModel as Model
from datasets.read_data_sleep import PlayPhoneData


def train(data_path=r"E:\Datasets\sleep_traindata"):
    # 设置超参数
    batch_size = 1  # 每次训练的数据量
    LR = 0.01  # 学习率
    STEP_SIZE = 5  # 控制学习率变化
    MAX_EPOCH = 20  # 总的训练次数
    num_print = 100  # 每n个batch打印一次

    playPhoneData = PlayPhoneData(data_path)

    # 利用dataloader加载数据集
    train_loader = torch.utils.data.DataLoader(playPhoneData, batch_size=batch_size, shuffle=True, drop_last=True)

    # 生成驱动器
    use_gpu = torch.cuda.is_available()
    if use_gpu:
        print('congratulation! You can use gpu to support acceleration')
    else:
        print('oppps, please use a small batch size')
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

    # 初始化模型
    model = models.resnet18()
    # 修改网络结构,将fc层1000个输出改为9个输出
    fc_input_feature = model.fc.in_features
    model.fc = nn.Linear(fc_input_feature, 9)
    # load除最后一层的预训练权重
    pretrained_weight = torch.hub.load_state_dict_from_url(
        url='https://download.pytorch.org/models/resnet18-5c106cde.pth', progress=True)
    del pretrained_weight['fc.weight']
    del pretrained_weight['fc.bias']
    model.load_state_dict(pretrained_weight, strict=False)
    model.to(device)

    # net = Model(8).to(device)  # class_num=8分八类:睡岗(趴着睡,躺着睡,仰着睡,低头睡),玩手机(俯视玩手机,平视玩手机,侧视玩手机),其他=[0,1,2,3,4,5,6,7]
    # net = Model(9).to(device)  # class_num=9分九类:睡岗(趴着睡,躺着睡,低头睡),站立,半蹲,坐(背坐,正坐,侧坐),其他=[0,1,2,3,4,5,6,7,8]

    # 损失函数
    get_loss = nn.CrossEntropyLoss()  #交叉熵损失函数

    # SGD优化器  第一个参数是输入需要优化的参数,第二个是学习率,第三个是动量,大致就是借助上一次导数结果,加快收敛速度。
    '''
    这一行代码里面实际上包含了多种优化:
    一个是动量优化,增加了一个关于上一次迭代得到的系数的偏置,借助上一次的指导,减小梯度震荡,加快收敛速度
    一个是权重衰减,通过对权重增加一个(正则项),该正则项会使得迭代公式中的权重按照比例缩减,这么做的原因是,过拟合的表现一般为参数浮动大,使用小参数可以防止过拟合
    '''
    optimizer = optim.SGD(model.parameters(), lr=LR, momentum=0.9, weight_decay=0.001)
    # optimizer = optim.Adam(net.parameters(), lr=learn_rate)

    # 动态调整学习率 StepLR 是等间隔调整学习率,每step_size 令lr=lr*gamma
    # 学习率衰减,随着训练的加深,目前的权重也越来越接近最优权重,原本的学习率会使得,loss上下震荡,逐步减小学习率能加快收敛速度。
    # scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=STEP_SIZE, gamma=0.5, last_epoch=-1)
    # Step:设置学习率下降策略
    scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1)
    loss_list = []
    start = time.time()
    for epoch in range(MAX_EPOCH):
        running_loss = 0.0
        # enumerate()是python自带的函数,用于迭代字典。参数1,是需要迭代的对象,第二参数是迭代的起始位置
        for i, (inputs, labels) in enumerate(train_loader, 0):
            inputs, labels = inputs.to(device), labels.to(device)
            outputs = model(inputs)  # 前向传播求出预测的值

            optimizer.zero_grad()  # 将梯度初始化为0
            loss = get_loss(outputs, labels.long())
            loss.backward()  # 反向传播求梯度
            optimizer.step()  # 更新所有参数

            running_loss += loss.item()  # loss是张量,访问值时需要使用item()
            loss_list.append(loss.item())

            if i % num_print == num_print - 1:  # 每num_print打印平均loss
                print('[%d epoch, %d] loss: %.6f' % (epoch + 1, i + 1, running_loss / num_print))
                running_loss = 0.0
        lr = optimizer.param_groups[0]['lr']  # 查看目前的学习率
        print('learn_rate : %.5f' % lr)
        scheduler.step()  # 根据迭代epoch更新学习率

    end = time.time()
    print('time:{}'.format(end - start))

    torch.save(model, f'E:/model/playphone+sleepthepose/model_resnetmini_睡岗9分类{end}.pth')


if __name__ == "__main__":
    train()

issue: https://github.com/composer/composer/issues/8726

出现类似以下错误的时候,需要降级进行安装

 require composer-plugin-api ^1.0 -> found composer-plugin-api[2.0.0] but it does not match the constraint.

降级安装composer

composer self-update --1

降级后如果想退回到高版本,根据提示还可以执行以下命令:

Use composer self-update --rollback to return to version 2.0.14