中文字幕人妻中文_99精品欧美一区二区三区综合在线_精品久久久久一区二区_色月丁香_免费福利在线视频_欧美大片免费观看网址_国产伦精品一区二区三区在线播放_污污污污污污www网站免费_久久月本道色综合久久_色69激情爱久久_尹人香蕉久久99天天拍_国产美女www_亚洲国产精品无码7777一线_五月婷婷六月激情_看免费一级片_精品久久久久久成人av_在线色亚洲_女人另类性混交zo_国产精品青青在线观看爽香蕉_人人澡人人添人人爽一区二区

主頁(yè) > 知識(shí)庫(kù) > PyTorch一小時(shí)掌握之圖像識(shí)別實(shí)戰(zhàn)篇

PyTorch一小時(shí)掌握之圖像識(shí)別實(shí)戰(zhàn)篇

熱門標(biāo)簽:不錯(cuò)的400電話辦理 徐州天音防封電銷卡 鄭州智能外呼系統(tǒng)運(yùn)營(yíng)商 佛山防封外呼系統(tǒng)收費(fèi) 南昌辦理400電話怎么安裝 獲客智能電銷機(jī)器人 電話機(jī)器人適用業(yè)務(wù) 哈爾濱外呼系統(tǒng)代理商 湛江電銷防封卡

概述

今天我們要來做一個(gè)進(jìn)階的花分類問題. 不同于之前做過的鳶尾花, 這次我們會(huì)分析 102 中不同的花. 是不是很上頭呀.

預(yù)處理

導(dǎo)包

常規(guī)操作, 沒什么好解釋的. 缺模塊的同學(xué)自行pip -install.

import numpy as np
import time
from matplotlib import pyplot as plt
import json
import copy
import os
import torch
from torch import nn
from torch import optim
from torchvision import transforms, models, datasets

數(shù)據(jù)讀取與預(yù)處理

數(shù)據(jù)預(yù)處理部分:
數(shù)據(jù)增強(qiáng): torchvision 中 transforms 模塊自帶功能, 用于擴(kuò)充數(shù)據(jù)樣本
數(shù)據(jù)預(yù)處理: torchvision 中 transforms 也幫我們實(shí)現(xiàn)好了
數(shù)據(jù)分批: DataLoader 模塊直接讀取 batch 數(shù)據(jù)

# ----------------1. 數(shù)據(jù)讀取與預(yù)處理------------------

# 路徑
data_dir = './flower_data/'
train_dir = data_dir + '/train'
valid_dir = data_dir + '/valid'

# 制作數(shù)據(jù)源
data_transforms = {
    'train': transforms.Compose([transforms.RandomRotation(45),  #隨機(jī)旋轉(zhuǎn),-45到45度之間隨機(jī)選
        transforms.CenterCrop(224),  #從中心開始裁剪
        transforms.RandomHorizontalFlip(p=0.5),  #隨機(jī)水平翻轉(zhuǎn) 選擇一個(gè)概率概率
        transforms.RandomVerticalFlip(p=0.5),  #隨機(jī)垂直翻轉(zhuǎn)
        transforms.ColorJitter(brightness=0.2, contrast=0.1, saturation=0.1, hue=0.1),  #參數(shù)1為亮度, 參數(shù)2為對(duì)比度,參數(shù)3為飽和度,參數(shù)4為色相
        transforms.RandomGrayscale(p=0.025),  #概率轉(zhuǎn)換成灰度率, 3通道就是R=G=B
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])  #均值, 標(biāo)準(zhǔn)差
    ]),
    'valid': transforms.Compose([transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}

batch_size = 8

image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x]) for x in ['train', 'valid']}
dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=batch_size, shuffle=True) for x in ['train', 'valid']}
dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'valid']}
class_names = image_datasets['train'].classes

# 調(diào)試輸出
print(image_datasets)
print(dataloaders)
print(dataset_sizes)
print(class_names)

# 讀取標(biāo)簽對(duì)應(yīng)的實(shí)際名字
with open('cat_to_name.json', 'r') as f:
    cat_to_name = json.load(f)

print(cat_to_name)

輸出結(jié)果:
{'train': Dataset ImageFolder
Number of datapoints: 6552
Root location: ./flower_data/train
StandardTransform
Transform: Compose(
RandomRotation(degrees=(-45, 45), resample=False, expand=False)
CenterCrop(size=(224, 224))
RandomHorizontalFlip(p=0.5)
RandomVerticalFlip(p=0.5)
ColorJitter(brightness=[0.8, 1.2], contrast=[0.9, 1.1], saturation=[0.9, 1.1], hue=[-0.1, 0.1])
RandomGrayscale(p=0.025)
ToTensor()
Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
), 'valid': Dataset ImageFolder
Number of datapoints: 818
Root location: ./flower_data/valid
StandardTransform
Transform: Compose(
Resize(size=256, interpolation=PIL.Image.BILINEAR)
CenterCrop(size=(224, 224))
ToTensor()
Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
)}
{'train': torch.utils.data.dataloader.DataLoader object at 0x000001B718A277F0>, 'valid': torch.utils.data.dataloader.DataLoader object at 0x000001B718A27898>}
{'train': 6552, 'valid': 818}
['1', '10', '100', '101', '102', '11', '12', '13', '14', '15', '16', '17', '18', '19', '2', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '3', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '4', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '5', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '6', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '7', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '8', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '9', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99']
{'21': 'fire lily', '3': 'canterbury bells', '45': 'bolero deep blue', '1': 'pink primrose', '34': 'mexican aster', '27': 'prince of wales feathers', '7': 'moon orchid', '16': 'globe-flower', '25': 'grape hyacinth', '26': 'corn poppy', '79': 'toad lily', '39': 'siam tulip', '24': 'red ginger', '67': 'spring crocus', '35': 'alpine sea holly', '32': 'garden phlox', '10': 'globe thistle', '6': 'tiger lily', '93': 'ball moss', '33': 'love in the mist', '9': 'monkshood', '102': 'blackberry lily', '14': 'spear thistle', '19': 'balloon flower', '100': 'blanket flower', '13': 'king protea', '49': 'oxeye daisy', '15': 'yellow iris', '61': 'cautleya spicata', '31': 'carnation', '64': 'silverbush', '68': 'bearded iris', '63': 'black-eyed susan', '69': 'windflower', '62': 'japanese anemone', '20': 'giant white arum lily', '38': 'great masterwort', '4': 'sweet pea', '86': 'tree mallow', '101': 'trumpet creeper', '42': 'daffodil', '22': 'pincushion flower', '2': 'hard-leaved pocket orchid', '54': 'sunflower', '66': 'osteospermum', '70': 'tree poppy', '85': 'desert-rose', '99': 'bromelia', '87': 'magnolia', '5': 'english marigold', '92': 'bee balm', '28': 'stemless gentian', '97': 'mallow', '57': 'gaura', '40': 'lenten rose', '47': 'marigold', '59': 'orange dahlia', '48': 'buttercup', '55': 'pelargonium', '36': 'ruby-lipped cattleya', '91': 'hippeastrum', '29': 'artichoke', '71': 'gazania', '90': 'canna lily', '18': 'peruvian lily', '98': 'mexican petunia', '8': 'bird of paradise', '30': 'sweet william', '17': 'purple coneflower', '52': 'wild pansy', '84': 'columbine', '12': "colt's foot", '11': 'snapdragon', '96': 'camellia', '23': 'fritillary', '50': 'common dandelion', '44': 'poinsettia', '53': 'primula', '72': 'azalea', '65': 'californian poppy', '80': 'anthurium', '76': 'morning glory', '37': 'cape flower', '56': 'bishop of llandaff', '60': 'pink-yellow dahlia', '82': 'clematis', '58': 'geranium', '75': 'thorn apple', '41': 'barbeton daisy', '95': 'bougainvillea', '43': 'sword lily', '83': 'hibiscus', '78': 'lotus lotus', '88': 'cyclamen', '94': 'foxglove', '81': 'frangipani', '74': 'rose', '89': 'watercress', '73': 'water lily', '46': 'wallflower', '77': 'passion flower', '51': 'petunia'}

數(shù)據(jù)可視化

雖然我也不知道這些都是什么花, 但是還是一起來看一下. 有知道的大佬可以評(píng)論區(qū)留個(gè)言.

# ----------------2. 展示下數(shù)據(jù)------------------
def im_convert(tensor):
    """ 展示數(shù)據(jù)"""

    image = tensor.to("cpu").clone().detach()
    image = image.numpy().squeeze()
    image = image.transpose(1, 2, 0)
    image = image * np.array((0.229, 0.224, 0.225)) + np.array((0.485, 0.456, 0.406))
    image = image.clip(0, 1)

    return image


def im_convert(tensor):
    """ 展示數(shù)據(jù)"""

    image = tensor.to("cpu").clone().detach()
    image = image.numpy().squeeze()
    image = image.transpose(1, 2, 0)
    image = image * np.array((0.229, 0.224, 0.225)) + np.array((0.485, 0.456, 0.406))
    image = image.clip(0, 1)

    return image

fig=plt.figure(figsize=(20, 12))
columns = 4
rows = 2

dataiter = iter(dataloaders['valid'])
inputs, classes = dataiter.next()

for idx in range (columns*rows):
    ax = fig.add_subplot(rows, columns, idx+1, xticks=[], yticks=[])
    ax.set_title(cat_to_name[str(int(class_names[classes[idx]]))])
    plt.imshow(im_convert(inputs[idx]))
plt.show()

輸出結(jié)果:

主體

加載參數(shù)

# ----------------3. 加載models中提供的模型------------------

# 直接使用訓(xùn)練好的權(quán)重當(dāng)做初始化參數(shù)
model_name = "resnet"  # 可選的比較多 ['resnet', 'alexnet', 'vgg', 'squeezenet', 'densenet', 'inception']

# 是否使用人家訓(xùn)練好的特征來做
feature_extract = True

# 是否使用GPU訓(xùn)練
train_on_gpu = torch.cuda.is_available()

if not train_on_gpu:
    print('CUDA is not available.  Training on CPU ...')
else:
    print('CUDA is not available.  Training on CPU ...')

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

def set_parameter_requires_grad(model, feature_extracting):
    if feature_extracting:
        for param in model.parameters():
            param.requires_grad = False


model_ft = models.resnet152()
print(model_ft)

輸出結(jié)果:
CUDA is not available. Training on CPU ...
ResNet(
(conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
(layer1): Sequential(
(0): Bottleneck(
(conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
(1): Bottleneck(
(conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(2): Bottleneck(
(conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
)
(layer2): Sequential(
(0): Bottleneck(
(conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)
(1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
(1): Bottleneck(
(conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(2): Bottleneck(
(conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(3): Bottleneck(
(conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(4): Bottleneck(
(conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(5): Bottleneck(
(conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(6): Bottleneck(
(conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(7): Bottleneck(
(conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
)
(layer3): Sequential(
(0): Bottleneck(
(conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)
(1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
(1): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(2): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(3): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(4): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(5): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(6): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(7): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(8): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(9): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(10): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(11): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(12): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(13): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(14): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(15): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(16): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(17): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(18): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(19): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(20): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(21): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(22): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(23): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(24): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(25): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(26): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(27): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(28): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(29): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(30): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(31): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(32): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(33): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(34): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(35): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
)
(layer4): Sequential(
(0): Bottleneck(
(conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)
(1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
(1): Bottleneck(
(conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(2): Bottleneck(
(conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
)
(avgpool): AdaptiveAvgPool2d(output_size=(1, 1))
(fc): Linear(in_features=2048, out_features=1000, bias=True)
)

建立模型

# ----------------4. 參考PyTorch官網(wǎng)例子------------------

def initialize_model(model_name, num_classes, feature_extract, use_pretrained=True):
    # 選擇合適的模型,不同模型的初始化方法稍微有點(diǎn)區(qū)別
    model_ft = None
    input_size = 0

    if model_name == "resnet":
        """ Resnet152
        """
        model_ft = models.resnet152(pretrained=use_pretrained)
        set_parameter_requires_grad(model_ft, feature_extract)
        num_ftrs = model_ft.fc.in_features
        model_ft.fc = nn.Sequential(nn.Linear(num_ftrs, 102),
                                   nn.LogSoftmax(dim=1))
        input_size = 224

    elif model_name == "alexnet":
        """ Alexnet
        """
        model_ft = models.alexnet(pretrained=use_pretrained)
        set_parameter_requires_grad(model_ft, feature_extract)
        num_ftrs = model_ft.classifier[6].in_features
        model_ft.classifier[6] = nn.Linear(num_ftrs,num_classes)
        input_size = 224

    elif model_name == "vgg":
        """ VGG11_bn
        """
        model_ft = models.vgg16(pretrained=use_pretrained)
        set_parameter_requires_grad(model_ft, feature_extract)
        num_ftrs = model_ft.classifier[6].in_features
        model_ft.classifier[6] = nn.Linear(num_ftrs,num_classes)
        input_size = 224

    elif model_name == "squeezenet":
        """ Squeezenet
        """
        model_ft = models.squeezenet1_0(pretrained=use_pretrained)
        set_parameter_requires_grad(model_ft, feature_extract)
        model_ft.classifier[1] = nn.Conv2d(512, num_classes, kernel_size=(1,1), stride=(1,1))
        model_ft.num_classes = num_classes
        input_size = 224

    elif model_name == "densenet":
        """ Densenet
        """
        model_ft = models.densenet121(pretrained=use_pretrained)
        set_parameter_requires_grad(model_ft, feature_extract)
        num_ftrs = model_ft.classifier.in_features
        model_ft.classifier = nn.Linear(num_ftrs, num_classes)
        input_size = 224

    elif model_name == "inception":
        """ Inception v3
        Be careful, expects (299,299) sized images and has auxiliary output
        """
        model_ft = models.inception_v3(pretrained=use_pretrained)
        set_parameter_requires_grad(model_ft, feature_extract)
        # Handle the auxilary net
        num_ftrs = model_ft.AuxLogits.fc.in_features
        model_ft.AuxLogits.fc = nn.Linear(num_ftrs, num_classes)
        # Handle the primary net
        num_ftrs = model_ft.fc.in_features
        model_ft.fc = nn.Linear(num_ftrs,num_classes)
        input_size = 299

    else:
        print("Invalid model name, exiting...")
        exit()

    return model_ft, input_size

設(shè)置哪些層需要訓(xùn)練

# ----------------5. 設(shè)置哪些層需要訓(xùn)練------------------

model_ft, input_size = initialize_model(model_name, 102, feature_extract, use_pretrained=True)

# GPU計(jì)算
model_ft = model_ft.to(device)

# 模型保存
filename='checkpoint.pth'

# 是否訓(xùn)練所有層
params_to_update = model_ft.parameters()
print("Params to learn:")
if feature_extract:
    params_to_update = []
    for name,param in model_ft.named_parameters():
        if param.requires_grad == True:
            params_to_update.append(param)
            print("\t",name)
else:
    for name,param in model_ft.named_parameters():
        if param.requires_grad == True:
            print("\t",name)

優(yōu)化器設(shè)置

# ----------------6. 優(yōu)化器設(shè)置------------------

# 優(yōu)化器設(shè)置
optimizer_ft = optim.Adam(params_to_update, lr=1e-2)
scheduler = optim.lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)  # 學(xué)習(xí)率每7個(gè)epoch衰減成原來的1/10

# 最后一層已經(jīng)LogSoftmax()了,所以不能nn.CrossEntropyLoss()來計(jì)算了
# nn.CrossEntropyLoss()相當(dāng)于logSoftmax()和nn.NLLLoss()整合
criterion = nn.NLLLoss()

訓(xùn)練模塊

# ----------------7. 訓(xùn)練模塊------------------

def train_model(model, dataloaders, criterion, optimizer, num_epochs=25, is_inception=False, filename=filename):
    since = time.time()
    best_acc = 0
    """
    checkpoint = torch.load(filename)
    best_acc = checkpoint['best_acc']
    model.load_state_dict(checkpoint['state_dict'])
    optimizer.load_state_dict(checkpoint['optimizer'])
    model.class_to_idx = checkpoint['mapping']
    """
    model.to(device)

    val_acc_history = []
    train_acc_history = []
    train_losses = []
    valid_losses = []
    LRs = [optimizer.param_groups[0]['lr']]

    best_model_wts = copy.deepcopy(model.state_dict())

    for epoch in range(num_epochs):
        print('Epoch {}/{}'.format(epoch, num_epochs - 1))
        print('-' * 10)

        # 訓(xùn)練和驗(yàn)證
        for phase in ['train', 'valid']:
            if phase == 'train':
                model.train()  # 訓(xùn)練
            else:
                model.eval()  # 驗(yàn)證

            running_loss = 0.0
            running_corrects = 0

            # 把數(shù)據(jù)都取個(gè)遍
            for inputs, labels in dataloaders[phase]:
                inputs = inputs.to(device)
                labels = labels.to(device)

                # 清零
                optimizer.zero_grad()
                # 只有訓(xùn)練的時(shí)候計(jì)算和更新梯度
                with torch.set_grad_enabled(phase == 'train'):
                    if is_inception and phase == 'train':
                        outputs, aux_outputs = model(inputs)
                        loss1 = criterion(outputs, labels)
                        loss2 = criterion(aux_outputs, labels)
                        loss = loss1 + 0.4 * loss2
                    else:  # resnet執(zhí)行的是這里
                        outputs = model(inputs)
                        loss = criterion(outputs, labels)

                    _, preds = torch.max(outputs, 1)

                    # 訓(xùn)練階段更新權(quán)重
                    if phase == 'train':
                        loss.backward()
                        optimizer.step()

                # 計(jì)算損失
                running_loss += loss.item() * inputs.size(0)
                running_corrects += torch.sum(preds == labels.data)

            epoch_loss = running_loss / len(dataloaders[phase].dataset)
            epoch_acc = running_corrects.double() / len(dataloaders[phase].dataset)

            time_elapsed = time.time() - since
            print('Time elapsed {:.0f}m {:.0f}s'.format(time_elapsed // 60, time_elapsed % 60))
            print('{} Loss: {:.4f} Acc: {:.4f}'.format(phase, epoch_loss, epoch_acc))

            # 得到最好那次的模型
            if phase == 'valid' and epoch_acc > best_acc:
                best_acc = epoch_acc
                best_model_wts = copy.deepcopy(model.state_dict())
                state = {
                    'state_dict': model.state_dict(),
                    'best_acc': best_acc,
                    'optimizer': optimizer.state_dict(),
                }
                torch.save(state, filename)
            if phase == 'valid':
                val_acc_history.append(epoch_acc)
                valid_losses.append(epoch_loss)
                scheduler.step(epoch_loss)
            if phase == 'train':
                train_acc_history.append(epoch_acc)
                train_losses.append(epoch_loss)

        print('Optimizer learning rate : {:.7f}'.format(optimizer.param_groups[0]['lr']))
        LRs.append(optimizer.param_groups[0]['lr'])
        print()

    time_elapsed = time.time() - since
    print('Training complete in {:.0f}m {:.0f}s'.format(time_elapsed // 60, time_elapsed % 60))
    print('Best val Acc: {:4f}'.format(best_acc))

    # 訓(xùn)練完后用最好的一次當(dāng)做模型最終的結(jié)果
    model.load_state_dict(best_model_wts)
    return model, val_acc_history, train_acc_history, valid_losses, train_losses, LRs

開始訓(xùn)練

# ----------------8. 開始訓(xùn)練------------------

# 訓(xùn)練
model_ft, val_acc_history, train_acc_history, valid_losses, train_losses, LRs  = \

    train_model(model_ft, dataloaders, criterion, optimizer_ft, num_epochs=20, is_inception=(model_name=="inception"))

# 再繼續(xù)訓(xùn)練所有層
for param in model_ft.parameters():
    param.requires_grad = True

# 再繼續(xù)訓(xùn)練所有的參數(shù),學(xué)習(xí)率調(diào)小一點(diǎn)
optimizer = optim.Adam(params_to_update, lr=1e-4)
scheduler = optim.lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)

# 損失函數(shù)
criterion = nn.NLLLoss()

# Load the checkpoint

checkpoint = torch.load(filename)
best_acc = checkpoint['best_acc']
model_ft.load_state_dict(checkpoint['state_dict'])
optimizer.load_state_dict(checkpoint['optimizer'])
#model_ft.class_to_idx = checkpoint['mapping']

model_ft, val_acc_history, train_acc_history, valid_losses, train_losses, LRs  = train_model(model_ft, dataloaders, criterion, optimizer, num_epochs=10, is_inception=(model_name=="inception"))

輸出結(jié)果:
Epoch 0/9
----------
Time elapsed 3m 8s
train Loss: 1.8128 Acc: 0.8065
Time elapsed 3m 17s
valid Loss: 4.6786 Acc: 0.6993
Optimizer learning rate : 0.0010000

Epoch 1/9
----------
Time elapsed 6m 26s
train Loss: 1.5370 Acc: 0.8268
Time elapsed 6m 34s
valid Loss: 4.3483 Acc: 0.7017
Optimizer learning rate : 0.0010000

Epoch 2/9
----------
Time elapsed 9m 44s
train Loss: 1.3812 Acc: 0.8367
Time elapsed 9m 52s
valid Loss: 4.0840 Acc: 0.7127
Optimizer learning rate : 0.0010000

Epoch 3/9
----------
Time elapsed 13m 2s
train Loss: 1.4777 Acc: 0.8312
Time elapsed 13m 10s
valid Loss: 4.2493 Acc: 0.7078
Optimizer learning rate : 0.0010000

Epoch 4/9
----------
Time elapsed 16m 22s
train Loss: 1.3351 Acc: 0.8434
Time elapsed 16m 31s
valid Loss: 3.6103 Acc: 0.7396
Optimizer learning rate : 0.0010000

Epoch 5/9
----------
Time elapsed 19m 42s
train Loss: 1.2934 Acc: 0.8466
Time elapsed 19m 51s
valid Loss: 3.3350 Acc: 0.7494
Optimizer learning rate : 0.0010000

Epoch 6/9
----------
Time elapsed 23m 2s
train Loss: 1.3289 Acc: 0.8379
Time elapsed 23m 11s
valid Loss: 3.9728 Acc: 0.7164
Optimizer learning rate : 0.0010000

Epoch 7/9
----------
Time elapsed 26m 22s
train Loss: 1.3739 Acc: 0.8321
Time elapsed 26m 31s
valid Loss: 3.7483 Acc: 0.7237
Optimizer learning rate : 0.0010000

Epoch 8/9
----------
Time elapsed 29m 43s
train Loss: 1.2110 Acc: 0.8495
Time elapsed 29m 52s
valid Loss: 3.7712 Acc: 0.7164
Optimizer learning rate : 0.0010000

Epoch 9/9
----------
Time elapsed 33m 2s
train Loss: 1.2643 Acc: 0.8452
Time elapsed 33m 11s
valid Loss: 3.7012 Acc: 0.7311
Optimizer learning rate : 0.0010000

Training complete in 33m 11s
Best val Acc: 0.749389

測(cè)試

測(cè)試網(wǎng)絡(luò)效果

# ----------------9. 測(cè)試網(wǎng)絡(luò)效果------------------

probs, classes = predict(image_path, model)
print(probs)
print(classes)

輸出結(jié)果:
[ 0.01558163 0.01541934 0.01452626 0.01443549 0.01407339]
['70', '3', '45', '62', '55']

測(cè)試訓(xùn)練好的模型

# ----------------10. 測(cè)試訓(xùn)練好的模型------------------

model_ft, input_size = initialize_model(model_name, 102, feature_extract, use_pretrained=True)

# GPU模式
model_ft = model_ft.to(device)

# 保存文件的名字
filename = 'seriouscheckpoint.pth'

# 加載模型
checkpoint = torch.load(filename)
best_acc = checkpoint['best_acc']
model_ft.load_state_dict(checkpoint['state_dict'])

測(cè)試數(shù)據(jù)預(yù)處理

注意:

  1. 測(cè)試數(shù)據(jù)處理方法需要跟訓(xùn)練時(shí)一致才可以
  2. crop 操作的目的是保證輸入的大小是一致的
  3. 標(biāo)準(zhǔn)化也是必須的, 用跟訓(xùn)練數(shù)據(jù)相同的 mean 和 std
  4. 訓(xùn)練數(shù)據(jù)是在 0~1 上進(jìn)行標(biāo)準(zhǔn)化, 所以測(cè)試數(shù)據(jù)也需要先歸一化
  5. PyTorch 中的顏色是第一個(gè)維度, 跟很多工具包都不一樣, 需要轉(zhuǎn)換
# ----------------11. 測(cè)試數(shù)據(jù)預(yù)處理------------------

def process_image(image_path):
    # 讀取測(cè)試數(shù)據(jù)
    img = Image.open(image_path)
    # Resize,thumbnail方法只能進(jìn)行縮小,所以進(jìn)行了判斷
    if img.size[0] > img.size[1]:
        img.thumbnail((10000, 256))
    else:
        img.thumbnail((256, 10000))
    # Crop操作
    left_margin = (img.width - 224) / 2
    bottom_margin = (img.height - 224) / 2
    right_margin = left_margin + 224
    top_margin = bottom_margin + 224
    img = img.crop((left_margin, bottom_margin, right_margin,
                    top_margin))
    # 相同的預(yù)處理方法
    img = np.array(img) / 255
    mean = np.array([0.485, 0.456, 0.406])  # provided mean
    std = np.array([0.229, 0.224, 0.225])  # provided std
    img = (img - mean) / std

    # 注意顏色通道應(yīng)該放在第一個(gè)位置
    img = img.transpose((2, 0, 1))

    return img


def imshow(image, ax=None, title=None):
    """展示數(shù)據(jù)"""
    if ax is None:
        fig, ax = plt.subplots()

    # 顏色通道還原
    image = np.array(image).transpose((1, 2, 0))

    # 預(yù)處理還原
    mean = np.array([0.485, 0.456, 0.406])
    std = np.array([0.229, 0.224, 0.225])
    image = std * image + mean
    image = np.clip(image, 0, 1)

    ax.imshow(image)
    ax.set_title(title)

    return ax

image_path = 'image_06621.jpg'
img = process_image(image_path)
imshow(img)

# 得到一個(gè)batch的測(cè)試數(shù)據(jù)
dataiter = iter(dataloaders['valid'])
images, labels = dataiter.next()

model_ft.eval()

if train_on_gpu:
    output = model_ft(images.cuda())
else:
    output = model_ft(images)

_, preds_tensor = torch.max(output, 1)

preds = np.squeeze(preds_tensor.numpy()) if not train_on_gpu else np.squeeze(preds_tensor.cpu().numpy())

展示預(yù)測(cè)結(jié)果

# ----------------12. 展示預(yù)測(cè)結(jié)果------------------

fig=plt.figure(figsize=(20, 20))
columns =4
rows = 2

for idx in range (columns*rows):
    ax = fig.add_subplot(rows, columns, idx+1, xticks=[], yticks=[])
    plt.imshow(im_convert(images[idx]))
    ax.set_title("{} ({})".format(cat_to_name[str(preds[idx])], cat_to_name[str(labels[idx].item())]),
                 color=("green" if cat_to_name[str(preds[idx])]==cat_to_name[str(labels[idx].item())] else "red"))
plt.show()

輸出結(jié)果:

到此這篇關(guān)于PyTorch一小時(shí)掌握之圖像識(shí)別實(shí)戰(zhàn)篇的文章就介紹到這了,更多相關(guān)PyTorch圖像識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • PyTorch一小時(shí)掌握之a(chǎn)utograd機(jī)制篇
  • PyTorch一小時(shí)掌握之神經(jīng)網(wǎng)絡(luò)氣溫預(yù)測(cè)篇
  • PyTorch一小時(shí)掌握之神經(jīng)網(wǎng)絡(luò)分類篇
  • PyTorch一小時(shí)掌握之基本操作篇

標(biāo)簽:呂梁 紹興 廣西 吉安 蕪湖 蘭州 安康 懷化

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PyTorch一小時(shí)掌握之圖像識(shí)別實(shí)戰(zhàn)篇》,本文關(guān)鍵詞  PyTorch,一小時(shí),掌握,之,圖像,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PyTorch一小時(shí)掌握之圖像識(shí)別實(shí)戰(zhàn)篇》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于PyTorch一小時(shí)掌握之圖像識(shí)別實(shí)戰(zhàn)篇的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 格润德机械制造有限公司| 东莞市力华机械设备有限公司| 潍坊天宇机械有限公司| 诚辉机械制造有限公司| 河南宏基矿山机械有限公司| 沈阳奎鑫钢铁有限公司| 芜湖良仕机械有限公司| 唐山榕丰钢铁有限公司| 西帕机械杭州有限公司| 河南起重机器有限公司| 东莞市亚龙玻璃机械有限公司 | 山矿机械设备有限公司| 南京阿特拉斯机械设备有限公司 | 南京宏伟屠宰机械制造有限公司| 山东誉亚大豆机械制造有限公司 | 常州 机械有限公司| 鹤壁万丰矿山机械制造有限公司 | 西安筑路机械有限公司| 东莞市恒生机械制造有限公司| 玛连尼 法亚机械有限公司| 富江机械制造有限公司| 苏州凯威塑料机械有限公司 | 恩比尔(厦门)机械制造有限公司| 苏州诚亚机械有限公司| 潍坊天洁机械有限公司| 兴龙机械模具有限公司| 德州仁信印染机械有限公司| 无锡锡科机械制造有限公司| 上海科劳机械设备有限公司| 河南世茂机械制造有限公司| 山东恒旺机械有限公司| 晶元精密机械有限公司| 天津市液压机械有限公司 | 上海达辉机械有限公司| 苏州拓博机械有限公司| 莱州弘宇机械有限公司| 江阴派格机械设备有限公司| 东莞市正一轴承机械有限公司| 山西中德科工机械制造有限公司 | 东莞市铖铭机械有限公司| 陕西机械制造有限公司| 南通新兴机械制造有限公司| 重庆庆泰机械有限公司| 宁波住重机械有限公司| 云南中拓钢铁有限公司| 临清市机械有限公司| 台州瑞进机械有限公司| 新昌县蓝翔机械有限公司| 河南茂盛机械制造有限公司| 鸿兴织带机械有限公司| 江阴市机械设备有限公司| 湛江恒润机械有限公司| 上海金纬挤出机械制造有限公司| 温州设备机械有限公司| 深圳固尔琦包装机械有限公司| 安徽金锡机械有限公司| 广东南牧机械设备有限公司 | 重庆宏塑机械有限公司| 南通申通机械有限公司| 珠海康信精密机械有限公司| 重庆精密机械有限公司| 天盛机械制造有限公司| 洛阳卓格哈斯机械有限公司| 中山中炬精工机械有限公司| 苏州精雕精密机械工程有限公司 | 江苏食品机械有限公司| 郑州山川重工有限公司| 硕方精密机械有限公司| 广州市德晟机械有限公司| 宁波海江机械制造有限公司| 精雕精密机械有限公司| 江苏祥达机械制造有限公司| 华盛机械制造有限公司| 山西中阳钢铁有限公司| 常州常矿起重机械有限公司 | 新乡市长城机械有限公司| 沈阳世润重工有限公司| 南通惠生重工有限公司| 扬州鼎隆机械有限公司| 昆山总馨机械有限公司| 杭州博创机械有限公司| 重庆庆泰机械有限公司| 苏州立注机械有限公司| 佛山市钲昌机械设备有限公司| 武汉 机械制造有限公司| 上海橡塑机械有限公司| 新乡市机械有限公司| 普特工程机械有限公司| 兖州大华机械有限公司| 山东利达工程机械有限公司| 温州锐光机械有限公司| 长沙起重机厂有限公司| 山东隆盛钢铁有限公司| 固尔琦包装机械有限公司| 盐城机械设备有限公司| 经纬纺织机械有限公司| 东莞鸿昌机械有限公司| 郑州一本机械设备有限公司| 青岛 钢铁有限公司| 苏州昶智精密机械有限公司| 迁安九江钢铁有限公司| 固精密机械有限公司| 杭州 机械设备有限公司| 柳州恒瑞机械有限公司| 杭州起重机械有限公司| 山东问云机械有限公司| 青岛科尼乐机械设备有限公司 | 四川望锦机械有限公司| 武安市裕华钢铁有限公司| 安徽柳工起重机有限公司| 济南食品机械有限公司| 常州艾隆精密机械有限公司| 江苏双箭输送机械有限公司| 吉川机械设备有限公司| 北京恒机械有限公司| 佛山市奥索包装机械有限公司| 日照兴业机械有限公司| 青岛橡塑机械有限公司| 上海德托机械有限公司| 金达机械制造有限公司| 青岛科尼乐重工有限公司| 重庆德运机械制造有限公司| 河南矿山机械有限公司| 浙江安奇迪动力机械有限公司| 昆山台一精密机械有限公司| 东莞市千岛机械制造有限公司| 输送机械设备有限公司| 上海德珂斯机械自动化技术有限公司 | 黎城太行钢铁有限公司| 江西 机械有限公司| 鼎工机械制造有限公司| 成都中挖机械有限公司| 山东煤矿机械有限公司| 上海嘉倍德塑胶机械有限公司 | 昆山市海进机械有限公司| 东莞市科机械有限公司| 上海满鑫机械有限公司| 郑州华郑机械有限公司| 太仓鸿安机械有限公司| 广州坚诺机械设备有限公司| 德清泰德机械有限公司| 青岛德维机械制造有限公司 | 广西千里通机械设备有限公司| 东莞市康机械有限公司| 明辉机械设备制造有限公司| 四川机械设备有限公司| 浙江炜冈机械有限公司| 长城重工机械有限公司| 新疆八一钢铁有限公司| 江苏 重型机械有限公司| 中泰机械设备有限公司| 济南冠越机械设备有限公司| 徐州福曼随车起重机有限公司| 武汉包装机械有限公司| 机械有限公司怎么注册| 扬州华粮机械有限公司| 京华机械设备有限公司| 浙江路杰机械有限公司| 苏州新风机械有限公司| 山东动力机械有限公司| 辽宁营口钢铁有限公司| 东平开元机械有限公司| 上海展仕机械设备有限公司| 张家港 机械设备有限公司| 山东六丰机械工业有限公司| 湘元三一机械有限公司| 汕头市伟力塑料机械厂有限公司| 天津市精密机械有限公司| 温州市兴业机械设备有限公司| 济南科华机械有限公司| 无锡纺织机械有限公司| 贝力特机械有限公司| 嘉兴市宏丰机械有限公司| 东莞市金拓机械有限公司| 宁波雄腾机械有限公司| 北京丰茂植保机械有限公司| 哈克农业机械装备制造有限公司| 浙江瑞德森机械有限公司| 上海紫宏机械有限公司| 河北坤达起重设备有限公司| 青州市远航机械设备有限公司| 东莞市腾机械有限公司| 唐山港陆钢铁有限公司| 长沙精密机械有限公司| 浙江盛维机械有限公司| 温州铸鼎机械有限公司| 武汉山推机械有限公司| 南通市通州区三槐机械制造有限公司| 江苏重型机械有限公司| 登福机械(上海)有限公司| 广州市佳速精密机械有限公司| 上海紫光机械有限公司| 郑州博源机械有限公司| 迁安鑫达钢铁有限公司| 上海震伦机械有限公司| 油机机械工业有限公司| 山东枭隆机械有限公司| 温州天富机械有限公司| 深圳包装机械有限公司| 无锡 液压机械有限公司| 南方路面机械有限公司| 矿山机械设备有限公司| 申光洗涤机械有限公司| 昆荣机械(昆山)有限公司| 常州赛瑞克包装机械有限公司| 安阳斯普机械有限公司| 东莞市凯奥机械有限公司| 宁波市凯博数控机械有限公司| 上海贯博起重设备有限公司 | 郑州江河重工有限公司| 上海精密机械有限公司| 马氏木工机械有限公司| 青岛义龙包装机械有限公司| 锋机械设备有限公司| 张家港精密机械有限公司| 佛山市浩铭达机械制造有限公司 | 山本机械苏州有限公司| 上海颍盛机械有限公司| 江西江锻重工有限公司| 广东富华机械装备制造有限公司 | 陆丰机械郑州有限公司| 东莞市包装机械有限公司| 哈尔滨联科包装机械有限公司 | 启英机械设备有限公司| 河南通达重工有限公司| 常州市禾昌机械有限公司| 邢台机械轧辊有限公司| 洛阳大华重型机械有限公司| 青岛木工机械有限公司| 湖南润通机械制造有限公司| 洛阳美卓重工机械有限公司| 徐州明文机械有限公司| 安徽矿山机械有限公司| 上海科熙起重设备有限公司| 南通腾中机械有限公司| 佛山市宝索机械制造有限公司| 温州包装机械有限公司| 扬州正大机械有限公司| 南通江华机械有限公司| 陕西 机械 有限公司| 艾沃意特机械设备制造有限公司| 浙江机械设备有限公司| 烟台博迈机械有限公司| 宁波市北仑机械制造有限公司| 江苏爱斯特机械有限公司怎么样| 福州恒拓机械有限公司| 天津文洲机械有限公司| 新乡市东源机械有限公司| 平湖英厚机械有限公司| 富华重工有限公司老板| 肥城金塔机械有限公司| 佛山市南海鼎工包装机械有限公司| 新科起重机有限公司| 张家港市饮料机械有限公司| 莱州市鲁樽机械有限公司| 沧州昌鸿磨浆机械有限公司 | 龙工江西机械有限公司| 浙江兄弟包装机械有限公司| 精密机械制造有限公司| 台州精密机械有限公司| 杭州金狮机械有限公司| 雷州雷宝机械有限公司| 武汉餐至饮机械设备有限公司| 世创机械制造有限公司| 曲阜兴运输送机械设备有限公司| 江苏东邦机械有限公司| 研精舍上海精密机械加工有限公司 | 洛阳重型机械有限公司| 陕西金奇机械电器制造有限公司| 无锡胜麦机械有限公司| 注册机械设备有限公司有什么要求 | 东莞市正一轴承机械有限公司| 济南金梭机械制造有限公司| 招商局重工(江苏)有限公司| 郑州米格机械有限公司| 天津市仁翼钢铁有限公司| 济南泽机械有限公司| 同鼎机械设备有限公司| 河南茂盛机械制造有限公司| 兰州 机械 有限公司| 哈克农业机械装备制造有限公司 | 无锡市双瑞机械有限公司| 常州凯发动力机械有限公司| 上海海邦机械设备制造有限公司| 上海旭恒精工机械制造有限公司| 首钢东华机械有限公司| 杭州友高精密机械有限公司| 郑州中嘉重工有限公司| 上海成套机械有限公司| 源通机械设备有限公司| 泰兴石油机械有限公司| 山东运泰机械有限公司| 宁波友杰机械有限公司| 深圳市神田机械设备有限公司| 抚顺机械设备制造有限公司| 浙江明天机械有限公司| 爱可机械深圳有限公司| 浙江嘉元机械制造有限公司 | 上海宝锻机械制造有限公司| 江苏双箭输送机械有限公司| 四川工程机械有限公司| 南京海威机械有限公司| 山东泗水鑫峰面粉机械有限公司 | 东莞兆恒机械有限公司| 成都恒飞机械有限公司| 上海申虎包装机械设备有限公司| 佛山突破机械制造有限公司 | 河南星光机械有限公司| 冷水江钢铁有限公司| 上海奕晟矿山机械有限公司| 苏州华尔普机械有限公司| 大连行健数控机械技术有限公司| 南京重霸起重设备有限公司| 铜梁君卓机械有限公司| 青岛如隆机械有限公司| 东莞兆恒机械有限公司| 宁波精密机械有限公司| 上海众德机械有限公司| 长春协展机械工业有限公司| 长沙天映机械有限公司| 临沂市机械有限公司| 河北雪龙机械制造有限公司 | 天津艾尔特精密机械有限公司| 广州汇亿机械有限公司| 徐州宝丰钢铁有限公司| 三一起重机械有限公司| 启瑞机械广州有限公司| 盐城万富隆机械制造有限公司| 抚顺新钢铁有限公司| 无锡万华机械有限公司| 章丘丰源机械有限公司| 常州铭盈包装机械有限公司 | 常州博成机械有限公司| 江阴惠尔信机械有限公司| 台州启运机械有限公司| 海宁诚达机械有限公司| 杭州铁牛机械有限公司| 山东峻峰起重机械有限公司| 杭州冠浩机械设备有限公司| 昆玉钢铁有限公司招聘| 维特根机械有限公司| 珠海飞马传动机械有限公司 | 阳宏机械制造有限公司| 机械装备制造有限公司| 江阴市博越机械有限公司| 常林道依茨法尔机械有限公司| 河南朝阳钢铁有限公司| 阳宏机械制造有限公司| 天津蓝科机械有限公司| 新乡市起重机厂有限公司| 广东川德机械有限公司| 江苏国天锻压机械有限公司 | 江苏佳粮机械有限公司| 抚顺机械设备制造有限公司| 上海玉兆精密机械有限公司| 南阳鼎鑫钢铁有限公司| 中交天和机械设备制造有限公司| 南通武藏精密机械有限公司招聘| 唐山市机械有限公司| 随州盛星机械有限公司| 济宁机械制造有限公司| 上海京雅机械有限公司| 重庆宝汇跨搏机械制造有限公司| 昆山锦沪机械有限公司| 河北输送机械有限公司| 佛山市优霸机械设备有限公司| 上海杉野机械有限公司| 济南机械 设备有限公司| 邯郸新兴重型机械有限公司| 上海又高机械有限公司| 劲源机械设备有限公司| 苏州传动机械有限公司| 恩格尔机械上海有限公司| 杭州沃沃机械有限公司| 河南三兄重工有限公司| 青岛诺机械有限公司| 浙江科鑫重工有限公司| 中船重工海空智能装备有限公司 | 河北曙光机械有限公司| 河北春耕机械制造有限公司| 河北大恒重型机械有限公司| 莆田 机械有限公司| 无锡机械制造有限公司| 重庆海迅机械制造有限公司| 安特精密机械有限公司| 上海集美食品机械有限公司| 潍坊市通用机械有限公司| 余姚 机械 有限公司| 昆山总馨机械有限公司| 烟台瑞进精密机械有限公司| 新昌华亿机械有限公司| 鲁山万通通机械制造有限公司| 石家庄米兹机械设备有限公司| 承德盛丰钢铁有限公司| 安徽泰源工程机械有限公司| 无锡东晨机械有限公司| 浙江瑞德森机械有限公司| 杭州九钻机械有限公司| 诸暨市机械有限公司| 许昌智工机械制造有限公司| 四川晶工机械有限公司| 潍坊竣通机械配套有限公司| 新乡 筛分机械有限公司| 唐山唐银钢铁有限公司| 宁波力源机械有限公司| 山东科恳机械制造有限公司| 深圳市高士达精密机械有限公司 | 扬州中孚机械有限公司| 江阴江顺精密机械零部件有限公司 | 上海欧特莱阀门机械有限公司| 唐山凯恒钢铁有限公司| 沂南县宏发机械有限公司| 中施机械设备有限公司| 锦州万得包装机械有限公司| 东莞市台钢机械设备有限公司| 临沂美联重工有限公司| 青岛昌源隆纺织机械有限公司| 玉环博机械有限公司| 无锡建仪仪器机械有限公司| 浙江康思特动力机械有限公司 | 玉环县三和机械制造有限公司 | 兰州 机械 有限公司| 天津中核机械有限公司| 泊头市环保机械有限公司| 武汉环卫机械有限公司| 苏州圣亚精密机械有限公司| 济宁鑫宏工矿机械设备有限公司 | 东莞科雄机械有限公司| 上海松铭传动机械有限公司| 青岛塑料机械有限公司| 常州好迪机械有限公司| 金龙机械制造有限公司| 爱克苏州机械有限公司| 广东中泽重工有限公司| 广州工程机械有限公司| 江苏爱斯特机械有限公司怎么样| 潍坊爱地植保机械有限公司| 南通力福通起重机械有限公司 | 重庆金丰机械有限公司| 上海航发机械有限公司| 郑州宇通重工有限公司| 挤出机械 有限公司| 河南 机械有限公司| 湖南信昌机械有限公司| 上海博储机械工业有限公司| 上海环野机械有限公司| 四川盛和机械设备有限公司| 深圳华盛昌机械实业有限公司 | 武汉臻尚机械设备有限公司| 中船重工环境工程有限公司怎么样| 东莞市通机械有限公司| 江阴市永昌药化机械有限公司| 常州泉汇机械有限公司| 新乡市东源机械有限公司| 山东新船重工有限公司| 上海三久机械有限公司| 丰机械有限公司怎么样| 浙江瑞德森机械有限公司| 鑫鑫建筑机械有限公司| 郑州市鑫宇机械制造有限公司| 上海集美食品机械有限公司| 郑州红星机械制造有限公司| 上海涟恒精密机械有限公司| 安徽柳工起重机有限公司| 武汉四方圆机械设备有限公司| 上海瑞派机械有限公司招聘 | 天津京龙工程机械有限公司| 戴氏印刷机械有限公司| 玉环机械制造有限公司| 白鸽食品机械有限公司| 昌利机械制造有限公司| 威海环宇化工机械有限公司| 江苏佳力起重机械制造有限公司| 博可机械上海有限公司| 济南 建筑机械有限公司| 扬州华粮机械有限公司| 郑州市天赐重工机械有限公司| 溧阳科华机械制造有限公司| 抚顺机械设备制造有限公司| 武汉环卫机械有限公司| 马氏木工机械有限公司| 苏州博机械有限公司| 常州倍安特动力机械有限公司 | 常州英来机械有限公司| 德州 机械有限公司| 上海杉野机械有限公司| 捷泰克机械有限公司| 泰州市机械有限公司| 大洋食品机械有限公司| 日照兴业机械有限公司| 长江机械设备有限公司| 青州市三联重工设备制造有限公司| 青岛橡胶机械有限公司| 无纺布机械有限公司| 河北唐银钢铁有限公司| 江苏双箭输送机械有限公司| 浙江五一机械有限公司| 宁波隆源精密机械有限公司| 东莞%机械%有限公司| 德马科起重机械有限公司| 佛山市晶菱玻璃机械有限公司 | 沧州沧狮磨浆机械有限公司| 上海钢铁物资有限公司| 穗华机械设备有限公司| 绍兴越发机械有限公司| 郑州机械制造有限公司| 山东达普机械制造有限公司| 博可机械上海有限公司| 青岛安成食品机械有限公司| 张家港市港丰机械有限公司| 东莞志成机械有限公司| 济南格特机械设备有限公司 | 玉环博行机械有限公司| 宁波永博机械制造有限公司| 杭州联德机械有限公司| 深圳市合发齿轮机械有限公司| 南京 机械有限公司| 沂南中天机械有限公司| 乐清市机械有限公司| 山东亚泰机械有限公司| 宁波民盛机械有限公司| 中欣机械厦门有限公司| 烟台莫深机械设备有限公司| 芜湖科翔动力机械有限公司| 山鑫机械制造有限公司| 宁波华美达机械制造有限公司| 三一重工昆山有限公司| 湖州天和机械有限公司| 上海起重电机厂有限公司| 天津蓝科机械有限公司| 山东泗水鑫峰面粉机械有限公司| 营口嘉晨钢铁有限公司| 苏州科瑞机械有限公司| 永红铸造机械有限公司| 福建机械设备有限公司| 射阳县机械有限公司| 昌乐 机械 有限公司| 成都包装机械有限公司| 机械化施工有限公司| 鞍山机械设备有限公司| 博山 机械有限公司| 无锡纺织机械有限公司| 郑州重型机械有限公司| 新疆八一钢铁有限公司| 湖南工程机械有限公司| 佛山市鹏轩机械制造有限公司| 江门 机械 有限公司| 河南省浩业矿山机械有限公司| 青岛 机械制造有限公司| 江阴市豪亚机械制造有限公司| 佛山柯田包装机械有限公司| 南通艾迈特机械有限公司| 北京市机械施工有限公司| 首钢京唐钢铁有限公司| 泰安东岳重工有限公司| 广东富华重工制造有限公司| 宜兴市机械有限公司| 顺兴机械制造有限公司| 上海 食品机械有限公司| 天津机械配件有限公司| 上海东泷重型机械有限公司| 合肥春华起重机械有限公司| 诚泰精密机械有限公司| 新乡市豫新起重机械有限公司| 上海上丰机械有限公司| 涞源奥宇钢铁有限公司| 郑州正科机械有限公司| 上海一达机械有限公司| 瑞安 包装机械有限公司| 苏州凯威塑料机械有限公司 | 福建巨邦机械有限公司| 无锡诺德传动机械有限公司| 郑州大华矿山机械有限公司| 永胜机械工业有限公司| 太原重工轨道交通设备有限公司| 江西 机械有限公司| 广州普耐柯数控机械有限公司 | 重庆市机械有限公司| 昆玉钢铁有限公司招聘| 江苏合丰机械制造有限公司| 浙江雷克机械工业有限公司| 潍坊瑞发机械有限公司| 杭州海纳机械有限公司| 山东国丰机械有限公司| 江阴市勤业化工机械有限公司| 曲靖呈钢铁有限公司| 安特苏州精密机械有限公司| 聊城 机械有限公司| 安徽大洋机械有限公司| 温州光明印刷机械有限公司| 河北国煤机械制造有限公司| 山东瑞浩重型机械有限公司| 山东威海机械有限公司| 翼虎动力机械有限公司| 机械化工工程有限公司| 苏州联佳精密机械有限公司| 安丘博阳机械制造有限公司| 上海科峰机械有限公司| 慈溪市宏晟机械设备有限公司| 机械设备工程有限公司| 伟拓压铸机械有限公司| 上海自动化机械有限公司| 东营海河机械有限公司| 威海威力起重有限公司| 上海泓阳机械有限公司| 合肥中辰轻工机械有限公司| 郑州市天赐重工机械有限公司| 北京包装机械有限公司| 福建巨邦机械有限公司| 唐山市德龙钢铁有限公司| 河南省新乡市矿山起重机有限公司| 常州市雪龙机械制造有限公司| 江苏国瑞液压机械有限公司| 常州市永明机械制造有限公司| 上海丰禾精密机械有限公司| 营口隆仁重工有限公司| 深圳市环球同创机械有限公司| 上海申克机械有限公司| 山东国新起重机械有限公司| 新余钢铁厂有限公司| 江苏金沃机械有限公司| 阳煤化工机械有限公司| 珠海 机械 有限公司| 长沙盛泓机械有限公司| 瑞安正博机械有限公司| 芜湖 机械 有限公司| 泰安嘉和重工机械有限公司| 南通腾中机械有限公司| 江苏鸿泰钢铁有限公司| 恩倍力机械有限公司| 重庆纵横机械有限公司| 山东永峰钢铁有限公司| 江苏双友重型机械有限公司| 济南机械制造有限公司| 张市机械机械有限公司| 潍坊机械制造有限公司| 福清市机械有限公司| 沈阳鸿本机械有限公司| 佛山市松可包装机械有限公司 | 深圳市创能机械有限公司| 河北卓昊机械制造有限公司| 三一工程机械有限公司| 山东兴源机械有限公司| 上海三久机械有限公司| 华宇机械制造有限公司| 深圳新添润彩印机械设备有限公司| 农业机械有限公司招聘| 夹江水工机械有限公司| 浙江德迈机械有限公司| 瑞祥机械制造有限公司| 常州杰和机械有限公司| 上海宝锻机械制造有限公司| 万兹莱压缩机械(上海)有限公司| 苏州恩贝德机械有限公司| 普特工程机械有限公司| 新乡市矿山重型起重机有限公司| 深圳印刷机械深圳有限公司| 上海胜松机械制造有限公司 | 山东德丰重工有限公司| 安阳斯普机械有限公司| 新乡市大汉振动机械有限公司| 徐工重型机械有限公司| 洛阳路通重工机械有限公司| 成都瑞迪机械实业有限公司| 江阴中南重工有限公司| 张家港市家源机械有限公司| 东莞市包装机械有限公司| 潍坊广德机械有限公司| 无锡秉杰机械有限公司| 湖南正中制药机械有限公司| 苏州包装机械有限公司| 安徽 机械制造有限公司| 江阴市永昌药化机械有限公司 | 大连盘起工业有限公司| 日照港达船舶重工有限公司| 星精密机械有限公司| 青岛软控重工有限公司| 浙江精密机械有限公司| 南通力威机械有限公司| 山东鲁工机械有限公司| 中意合资 威尼托机械有限公司| 东莞市台立数控机械有限公司| 新乡市中轻机械有限公司| 诸城市中天机械有限公司| 新乡 筛分机械有限公司| 昆山裕邦机械有限公司| 江苏普格机械有限公司| 常州武进机械有限公司| 阿特拉斯机械设备有限公司| 济宁金牛重工有限公司| 上海五金机械有限公司| 北京北宇机械设备有限公司| 上海捷赛机械有限公司| 徐州徐工随车起重机有限公司| 苏州 机械 有限公司| 无锡市阳通机械设备有限公司| 浙江山海机械有限公司| 台州市路桥奇勇农业机械有限公司| 华东油压机械制造有限公司| 华威机械制造有限公司| 金鹰重工有限公司招聘| 潍坊天宇机械有限公司| 杭州天扬机械有限公司| 北京余特包装机械有限公司| 苏州首达机械有限公司| 安徽工程机械有限公司| 杭州岛文机械有限公司| 重庆中容石化机械制造有限公司| 河南世茂机械制造有限公司| 杭州川禾机械有限公司| 杭州萧山机械有限公司| 宁波华强机械有限公司| 南京 机械有限公司| 昆山翔固机械有限公司| 天津 机械 有限公司| 天阳机械制造有限公司| 山东凯达起重机械有限公司 | 河北金维重工有限公司| 安徽金丰机械有限公司| 青岛木业机械有限公司| 铜陵富鑫钢铁有限公司| 服装有限公司起名大全| 潍坊宝润机械有限公司| 无锡诺德传动机械有限公司 | 东莞新宇机械有限公司| 苏州凯尔博精密机械有限公司| 沈阳六合机械有限公司| 山东港中钢铁有限公司| 济南速雕数控机械有限公司| 粤北联合钢铁有限公司| 江苏苏东化工机械有限公司| 嘉诚机械制造有限公司| 江苏长虹涂装机械有限公司| 郑州世纪精信机械制造有限公司| 工程机械有限公司经营范围| 广东富华重工制造有限公司| 南通国盛精密机械有限公司| 江苏长虹涂装机械有限公司| 济南 重工有限公司| 衡阳纺织机械有限公司| 建荣精密机械有限公司| 南京明瑞机械设备有限公司 | 山西天巨重工机械有限公司 | 宇进注塑机械有限公司| 德州佳永机械制造有限公司| 广州华臻机械设备有限公司| 启英机械设备有限公司| 山西万泽锦达机械制造有限公司| 上海毅锴机械有限公司| 常州市昊博机械有限公司| 中设(苏州)机械设备工程有限公司 | 欧克机械制造有限公司| 艾瑞精密机械有限公司| 东莞凯格精密机械有限公司| 苏州琦珏机械有限公司| 诸城市铭威食品机械有限公司| 上海诺 机械有限公司| 河南东起机械有限公司| 聊城新泺机械有限公司| 住友重机械有限公司| 上海全众机械有限公司| 河北工程机械有限公司| 嘉兴机械有限公司招聘| 鑫阳机械设备有限公司| 安阳锻压机械工业有限公司 | 上海鑫斌机械有限公司| 河南正工机械制造有限公司| 长沙宏银机械有限公司| 无锡英那威特机械发展有限公司| 厦门 机械有限公司| 安阳市机械有限公司| 东台市机械有限公司| 瑞达机械制造有限公司| 昆山六丰机械工业有限公司 | 浙江中兴机械制造有限公司 | 衡阳沃力机械有限公司| 廊坊德基机械有限公司| 海宁美惠机械有限公司| 浙江达青机械有限公司| 重庆海松机械有限公司| 三力机械制造有限公司| 无锡精密机械有限公司| 江苏中威重工机械有限公司| 北京印刷机械有限公司| 深圳 机械设备有限公司| 山东鲁成起重机械有限公司| 东莞市科环机械设备有限公司| 上海机械成套设备有限公司| 天津钢铁贸易有限公司| 上海江浪流体机械制造有限公司 | 江阴市华科机械设备有限公司 | 恒联食品机械有限公司| 廊坊百冠包装机械有限公司| 安徽艾特巴机械制造有限公司| 江苏双友重型机械有限公司| 东平开元机械有限公司| 温州精宇机械有限公司| 洛阳震动机械有限公司| 泉州泉盛机械有限公司| 龙口旭鑫机械有限公司| 维特根机械有限公司| 靖江市机械制造有限公司| 南通佳吉机械有限公司| 浙江超伟机械有限公司| 北京复盛机械有限公司| 莱州化工机械有限公司| 昆山环保机械有限公司| 震德塑料机械有限公司| 深圳恒盛力包装机械有限公司 | 常州起重机械有限公司| 潍坊润鑫机械有限公司| 汕头 机械有限公司招聘| 上海曼亿包装机械有限公司| 广州惠德机械有限公司| 上海盟申机械有限公司| 上海善能机械有限公司| 东莞市比奥机械有限公司| 安徽格瑞德机械制造有限公司| 长沙天映机械有限公司| 山西新泰钢铁有限公司| 杭州海铭钢铁有限公司| 五洋纺织机械有限公司| 深圳市鑫宏伟机械设备有限公司 | 华天机械制造有限公司| 上海宏铭纺织机械有限公司| 兴澄特种钢铁有限公司| 武汉臻尚机械设备有限公司| 江苏精明机械有限公司| 机械(无锡)有限公司| 淄博张钢钢铁有限公司| 武汉臻尚机械设备有限公司| 青岛美嘉隆包装机械有限公司| 机械加工有限公司简介| 宏信机械制造有限公司| 广东仕诚塑料机械有限公司| 东莞市乔锋机械有限公司| 济南 机械制造有限公司| 烟台东恒机械有限公司| 瑞 机械有限公司| 中山力劲机械有限公司| 阳煤化工机械有限公司| 安徽金龙机械有限公司| 深圳塑胶机械有限公司| 山东吉恒机械有限公司| 广州田田机械有限公司| 杭州冠浩机械设备有限公司| 天山重工机械有限公司| 玻璃设备机械有限公司| 念朋机械设备有限公司| 南阳 机械 有限公司| 东风悦达起亚有限公司| 洛阳翼明机械有限公司| 重庆江峰机械有限公司| 湖南华菱湘潭钢铁有限公司| 佐竹机械苏州有限公司| 洛阳卡瑞起重设备有限公司 | 十堰福堰钢铁有限公司| 凯斯纽荷兰机械 哈尔滨 有限公司 | 浙江 动力机械有限公司| 飞迈烟台机械有限公司| 大唐机械制造有限公司| 深圳格瑞克机械有限公司| 船舶机械制造有限公司| 浙江天联机械有限公司| 蓬莱禄昊化工机械有限公司| 德莱赛机械苏州有限公司| 杭州通产机械有限公司| 江苏瑞德机械有限公司| 河南大方起重机有限公司| 嘉兴赛诺机械有限公司| 杭州博创机械有限公司| 上海重型机械有限公司| 温州工程机械有限公司| 广东富华机械装备制造有限公司 | 晶元精密机械有限公司| 东莞市 机械有限公司| 洛阳美卓重工机械有限公司 | 东莞智荣机械有限公司| 广汉市蜀汉粮油机械有限公司| 河北冀工机械制造有限公司 | 山东威力重工机床有限公司 | 上海紫明印刷机械有限公司| 浙江网路崛起有限公司| 青岛欧普机械有限公司| 济南 机械有限公司| 徐州普特工程机械有限公司| 济南农沃机械有限公司| 福建三嘉钢铁有限公司| 浙江佳成机械有限公司| 江苏申特钢铁有限公司| 舞钢中加钢铁有限公司| 宁波永博机械制造有限公司 | 郑州矿山机械有限公司| 苏州朗威电子机械有限公司| 天津 起重有限公司| 高邮和益机械有限公司| 嵊州市龙威机械制造有限公司| 扬州精辉试验机械有限公司| 无锡六叶机械有限公司| 东莞协鑫机械有限公司| 溧阳申特钢铁有限公司| 鸿达机械设备有限公司| 佳木斯农业机械有限公司| 洛阳鹏起实业有限公司怎么样| 徐州中嘉工程机械有限公司| 临沂胜代机械有限公司| 泰州市海锋机械制造有限公司| 陕西机械设备有限公司| 山东联亿重工有限公司| 山东广富钢铁有限公司| 浙江盾安机械有限公司| 上海圣起包装机械有限公司| 青岛给力机械有限公司| 诸城盛和机械有限公司| 潍坊大众机械有限公司| 苏州孚杰机械有限公司| 上海科劳机械设备有限公司| 武汉联明机械有限公司| 山东常美机械有限公司| 广东思沃精密机械有限公司| 济南铭机械有限公司| 东莞市鑫焘机械有限公司| 北京骏马机械有限公司| 洛阳市机械有限公司| 常林道依茨法尔机械有限公司| 杭州金竺机械有限公司| 重庆地泽机械有限公司| 金纬机械溧阳有限公司| 徐州华东机械有限公司| 高邮和益机械有限公司| 苏州精锐精密机械有限公司| 宝鸡南车时代工程机械有限公司 | 徐州机械设备有限公司| 沙钢永兴钢铁有限公司| 温州联腾包装机械有限公司| 博凯机械上海有限公司| 万杰食品机械有限公司| 邢台 机械有限公司| 徐州东南钢铁工业有限公司| 新疆汇合钢铁有限公司| 重型机械制造有限公司| 广东华冠钢铁有限公司| 新乡市矿山起重机械有限公司| 福建南方路面机械有限公司 | 温州天富机械有限公司| 宁波钢铁有限公司电话| 青岛科尼乐重工有限公司| 江苏联顺机械有限公司| 贝力特机械有限公司| 北仑旭升机械有限公司| 苏福马机械有限公司| 潍坊西泰机械有限公司| 盐城市成功机械制造有限公司| 鑫华机械制造有限公司| 广州伟基机械有限公司| 济宁福康机械加工有限公司| 江苏金沃机械有限公司| 上海连富机械有限公司| 无锡凯希迪斯机械有限公司 | 海沃机械扬州有限公司| 重庆洲泽机械制造有限公司| 江苏精密机械有限公司| 武汉瑞威特机械有限公司 | 大连吉利机械配件有限公司| 石家庄钢铁有限公司| 常州远见机械有限公司| 重庆彪汉机械有限公司| 广东食品机械有限公司| 百斯特机械有限公司| 沃德精密机械有限公司| 荆州华力机械有限公司| 佛山市劲雄机械有限公司| 山东天力液压机械有限公司| 柳州富达机械有限公司官网| 大连工程机械有限公司| 江阴市液压机械有限公司| 无锡锡南机械有限公司| 河北双天机械制造有限公司| 温州博宇机械有限公司| 重庆泰诺机械有限公司| 东莞兆恒机械有限公司| 临沂新天力机械有限公司| 曲阜志成机械有限公司| 凯岛起重机械有限公司| 德莱赛机械苏州有限公司| 宁波联成机械有限公司| 合肥逸飞包装机械有限公司| 宁波金亿精密机械有限公司| 江苏红日钢铁有限公司| 天烨机械工程有限公司| 诸城顺德机械有限公司| 重庆蓝黛动力传动机械有限公司| 苏州市恒升机械有限公司| 新乡市威远机械有限公司| 长春协展机械工业有限公司| 河源德润钢铁有限公司| 宁波健信机械有限公司| 广东华鼎机械有限公司| 鸿源机械制造有限公司|