diff --git a/CNNDemo/ResNet50Weight.bin b/CNNDemo/ResNet50Weight.bin index b4126fd..1cb05b8 100644 Binary files a/CNNDemo/ResNet50Weight.bin and b/CNNDemo/ResNet50Weight.bin differ diff --git a/CNNDemo/ResNet50Weight.cc b/CNNDemo/ResNet50Weight.cc index 7321c2a..7c18f10 100644 --- a/CNNDemo/ResNet50Weight.cc +++ b/CNNDemo/ResNet50Weight.cc @@ -265,34 +265,74 @@ int RN50_layer4__modules_2_bn3_weight[] = { 94228224,94236415 }; int RN50_layer4__modules_2_bn3_bias[] = { 94236416,94244607 }; int RN50_fc_weight[] = { 94244608,102436607 }; int RN50_fc_bias[] = { 102436608,102440607 }; -int verify_input[] = { 102440608,103042719 }; -int verify_conv1[] = { 103042720,106253983 }; -int verify_bn1[] = { 106253984,109465247 }; -int verify_relu[] = { 109465248,112676511 }; -int verify_maxpool[] = { 112676512,113479327 }; -int verify_layer1[] = { 113479328,116690591 }; -int verify_layer2[] = { 116690592,118296223 }; -int verify_layer3[] = { 118296224,119099039 }; -int verify_layer4[] = { 119099040,119500447 }; -int verify_avgpool[] = { 119500448,119508639 }; -int verify_fc[] = { 119508640,119512639 }; -int input_0[] = { 119512640,120114751 }; -int output_0[] = { 120114752,120118751 }; -int input_1[] = { 120118752,120720863 }; -int output_1[] = { 120720864,120724863 }; -int input_2[] = { 120724864,121326975 }; -int output_2[] = { 121326976,121330975 }; -int input_3[] = { 121330976,121933087 }; -int output_3[] = { 121933088,121937087 }; -int input_4[] = { 121937088,122539199 }; -int output_4[] = { 122539200,122543199 }; -int input_5[] = { 122543200,123145311 }; -int output_5[] = { 123145312,123149311 }; -int input_6[] = { 123149312,123751423 }; -int output_6[] = { 123751424,123755423 }; -int input_7[] = { 123755424,124357535 }; -int output_7[] = { 124357536,124361535 }; -int input_8[] = { 124361536,124963647 }; -int output_8[] = { 124963648,124967647 }; -int input_9[] = { 124967648,125569759 }; -int output_9[] = { 125569760,125573759 }; +int input_0[] = { 102440608,103042719 }; +int output_0[] = { 103042720,103046719 }; +int input_1[] = { 103046720,103648831 }; +int output_1[] = { 103648832,103652831 }; +int input_2[] = { 103652832,104254943 }; +int output_2[] = { 104254944,104258943 }; +int input_3[] = { 104258944,104861055 }; +int output_3[] = { 104861056,104865055 }; +int input_4[] = { 104865056,105467167 }; +int output_4[] = { 105467168,105471167 }; +int input_5[] = { 105471168,106073279 }; +int output_5[] = { 106073280,106077279 }; +int input_6[] = { 106077280,106679391 }; +int output_6[] = { 106679392,106683391 }; +int input_7[] = { 106683392,107285503 }; +int output_7[] = { 107285504,107289503 }; +int input_8[] = { 107289504,107891615 }; +int output_8[] = { 107891616,107895615 }; +int input_9[] = { 107895616,108497727 }; +int output_9[] = { 108497728,108501727 }; +int verify_input[] = { 108501728,109103839 }; +int verify_conv1[] = { 109103840,112315103 }; +int verify_bn1[] = { 112315104,115526367 }; +int verify_relu[] = { 115526368,118737631 }; +int verify_maxpool[] = { 118737632,119540447 }; +int verify_layer1[] = { 119540448,122751711 }; +int verify_layer2[] = { 122751712,124357343 }; +int verify_layer3[] = { 124357344,125160159 }; +int verify_layer4[] = { 125160160,125561567 }; +int verify_avgpool[] = { 125561568,125569759 }; +int verify_fc[] = { 125569760,125573759 }; +int layer1_block0_conv1_input[] = { 125573760,126376575 }; +int layer1_block0_conv1_output[] = { 126376576,127179391 }; +int layer1_block0_bn1_input[] = { 127179392,127982207 }; +int layer1_block0_bn1_output[] = { 127982208,128785023 }; +int layer1_block0_conv2_input[] = { 128785024,129587839 }; +int layer1_block0_conv2_output[] = { 129587840,130390655 }; +int layer1_block0_bn2_input[] = { 130390656,131193471 }; +int layer1_block0_bn2_output[] = { 131193472,131996287 }; +int layer1_block0_conv3_input[] = { 131996288,132799103 }; +int layer1_block0_conv3_output[] = { 132799104,136010367 }; +int layer1_block0_bn3_input[] = { 136010368,139221631 }; +int layer1_block0_bn3_output[] = { 139221632,142432895 }; +int layer1_block0_downsample_conv_input[] = { 142432896,143235711 }; +int layer1_block0_downsample_conv_output[] = { 143235712,146446975 }; +int layer1_block0_downsample_bn_input[] = { 146446976,149658239 }; +int layer1_block0_downsample_bn_output[] = { 149658240,152869503 }; +int layer1_block1_conv1_input[] = { 152869504,156080767 }; +int layer1_block1_conv1_output[] = { 156080768,156883583 }; +int layer1_block1_bn1_input[] = { 156883584,157686399 }; +int layer1_block1_bn1_output[] = { 157686400,158489215 }; +int layer1_block1_conv2_input[] = { 158489216,159292031 }; +int layer1_block1_conv2_output[] = { 159292032,160094847 }; +int layer1_block1_bn2_input[] = { 160094848,160897663 }; +int layer1_block1_bn2_output[] = { 160897664,161700479 }; +int layer1_block1_conv3_input[] = { 161700480,162503295 }; +int layer1_block1_conv3_output[] = { 162503296,165714559 }; +int layer1_block1_bn3_input[] = { 165714560,168925823 }; +int layer1_block1_bn3_output[] = { 168925824,172137087 }; +int layer1_block2_conv1_input[] = { 172137088,175348351 }; +int layer1_block2_conv1_output[] = { 175348352,176151167 }; +int layer1_block2_bn1_input[] = { 176151168,176953983 }; +int layer1_block2_bn1_output[] = { 176953984,177756799 }; +int layer1_block2_conv2_input[] = { 177756800,178559615 }; +int layer1_block2_conv2_output[] = { 178559616,179362431 }; +int layer1_block2_bn2_input[] = { 179362432,180165247 }; +int layer1_block2_bn2_output[] = { 180165248,180968063 }; +int layer1_block2_conv3_input[] = { 180968064,181770879 }; +int layer1_block2_conv3_output[] = { 181770880,184982143 }; +int layer1_block2_bn3_input[] = { 184982144,188193407 }; +int layer1_block2_bn3_output[] = { 188193408,191404671 }; diff --git a/CNNDemo/Resnet50.py b/CNNDemo/Resnet50.py index 1880393..ced61a7 100644 --- a/CNNDemo/Resnet50.py +++ b/CNNDemo/Resnet50.py @@ -31,21 +31,19 @@ from struct import Struct CurrentPath = os.path.split(os.path.realpath(__file__))[0]+"/" -resnet50 = models.resnet50(pretrained=True) - - +# resnet50 = models.resnet50(pretrained=True) # torch.save(resnet50, CurrentPath+'params.pth') resnet50 = torch.load(CurrentPath+'params.pth') resnet50.eval() -print("===========================") -print("===========================") -print("===========================") -print(resnet50) -print("===========================") -print("===========================") -print("===========================") +# print("===========================") +# print("===========================") +# print("===========================") +# print(resnet50) +# print("===========================") +# print("===========================") +# print("===========================") ResNet50 = { @@ -245,7 +243,7 @@ ResNet50 = { weightfile = open(CurrentPath+'ResNet50Weight.cc', 'w') binaryfile = open(CurrentPath+'ResNet50Weight.bin', 'wb') currentbyte = 0 - +strg = '' def genData(name, data, currentbyte, binaryfile, strg): strg = strg + "int "+name+"[] = { " @@ -260,6 +258,37 @@ def genData(name, data, currentbyte, binaryfile, strg): return (currentbyte,binaryfile,strg) + +def hook_fn(m, i, o): + print(m) + print("------------Input Grad------------") + + for grad in i: + try: + print(grad.shape) + except AttributeError: + print ("None found for Gradient") + + print("------------Output Grad------------") + for grad in o: + try: + print(grad.shape) + except AttributeError: + print ("None found for Gradient") + print("\n") + + +def hook_print(name, m, i, o): + global currentbyte + global binaryfile + global strg + currentbyte, binaryfile, strg = genData( + name+"_input", i[0], currentbyte, binaryfile, strg) + currentbyte, binaryfile, strg = genData( + name+"_output", o[0], currentbyte, binaryfile, strg) + + + def printDick(d, head, obj): global currentbyte global binaryfile @@ -296,8 +325,6 @@ def printDick(d, head, obj): return strg - -strg = '' strg = printDick(ResNet50, "RN50", resnet50) normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], @@ -314,6 +341,16 @@ val_loader = torch.utils.data.DataLoader( num_workers=1, pin_memory=True) + +for batch_idx, (data, target) in enumerate(val_loader): + currentbyte, binaryfile,strg = genData("input_"+str(batch_idx), data, currentbyte, binaryfile, strg) + out = resnet50(data) + currentbyte, binaryfile, strg = genData( + "output_"+str(batch_idx), out, currentbyte, binaryfile, strg) + + + + for batch_idx, (data, target) in enumerate(val_loader): currentbyte,binaryfile,strg = genData("verify_input", data, currentbyte, binaryfile, strg) x = resnet50.conv1(data) @@ -340,11 +377,35 @@ for batch_idx, (data, target) in enumerate(val_loader): break +resnet50.layer1._modules['0'].bn1.register_forward_hook(lambda m, i, o: hook_print("layer1_block0_bn1", m, i, o)) +resnet50.layer1._modules['0'].bn2.register_forward_hook(lambda m, i, o: hook_print("layer1_block0_bn2", m, i, o)) +resnet50.layer1._modules['0'].bn3.register_forward_hook(lambda m, i, o: hook_print("layer1_block0_bn3", m, i, o)) +resnet50.layer1._modules['0'].conv1.register_forward_hook(lambda m, i, o: hook_print("layer1_block0_conv1", m, i, o)) +resnet50.layer1._modules['0'].conv2.register_forward_hook(lambda m, i, o: hook_print("layer1_block0_conv2", m, i, o)) +resnet50.layer1._modules['0'].conv3.register_forward_hook(lambda m, i, o: hook_print("layer1_block0_conv3", m, i, o)) + +resnet50.layer1._modules['0'].downsample._modules['0'].register_forward_hook(lambda m, i, o: hook_print("layer1_block0_downsample_conv", m, i, o)) +resnet50.layer1._modules['0'].downsample._modules['1'].register_forward_hook(lambda m, i, o: hook_print("layer1_block0_downsample_bn", m, i, o)) + +resnet50.layer1._modules['1'].bn1.register_forward_hook(lambda m, i, o: hook_print("layer1_block1_bn1", m, i, o)) +resnet50.layer1._modules['1'].bn2.register_forward_hook(lambda m, i, o: hook_print("layer1_block1_bn2", m, i, o)) +resnet50.layer1._modules['1'].bn3.register_forward_hook(lambda m, i, o: hook_print("layer1_block1_bn3", m, i, o)) +resnet50.layer1._modules['1'].conv1.register_forward_hook(lambda m, i, o: hook_print("layer1_block1_conv1", m, i, o)) +resnet50.layer1._modules['1'].conv2.register_forward_hook(lambda m, i, o: hook_print("layer1_block1_conv2", m, i, o)) +resnet50.layer1._modules['1'].conv3.register_forward_hook(lambda m, i, o: hook_print("layer1_block1_conv3", m, i, o)) + +resnet50.layer1._modules['2'].bn1.register_forward_hook(lambda m, i, o: hook_print("layer1_block2_bn1", m, i, o)) +resnet50.layer1._modules['2'].bn2.register_forward_hook(lambda m, i, o: hook_print("layer1_block2_bn2", m, i, o)) +resnet50.layer1._modules['2'].bn3.register_forward_hook(lambda m, i, o: hook_print("layer1_block2_bn3", m, i, o)) +resnet50.layer1._modules['2'].conv1.register_forward_hook(lambda m, i, o: hook_print("layer1_block2_conv1", m, i, o)) +resnet50.layer1._modules['2'].conv2.register_forward_hook(lambda m, i, o: hook_print("layer1_block2_conv2", m, i, o)) +resnet50.layer1._modules['2'].conv3.register_forward_hook(lambda m, i, o: hook_print("layer1_block2_conv3", m, i, o)) + for batch_idx, (data, target) in enumerate(val_loader): - currentbyte, binaryfile,strg = genData("input_"+str(batch_idx), data, currentbyte, binaryfile, strg) out = resnet50(data) - currentbyte, binaryfile, strg = genData( - "output_"+str(batch_idx), out, currentbyte, binaryfile, strg) + break + + weightfile.write(strg) @@ -352,7 +413,7 @@ binaryfile.close() weightfile.close() -print(strg) +# print(strg) print("===========================") print("===========================")