[
  {
    "path": ".gitignore",
    "content": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\nxcuserdata/\nDerivedData/\n.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata\n"
  },
  {
    "path": ".swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2021 MLBoy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Package.swift",
    "content": "// swift-tools-version:5.5\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"SemanticImage\",\n    platforms: [\n            .iOS(.v14)\n            ],\n    products: [\n        // Products define the executables and libraries a package produces, and make them visible to other packages.\n        .library(\n            name: \"SemanticImage\",\n            targets: [\"SemanticImage\"]),\n    ],\n    dependencies: [\n        // Dependencies declare other packages that this package depends on.\n        // .package(url: /* package url */, from: \"1.0.0\"),\n    ],\n    targets: [\n        // Targets are the basic building blocks of a package. A target can define a module or a test suite.\n        // Targets can depend on other targets in this package, and on products in packages this package depends on.\n        .target(\n            name: \"SemanticImage\",\n            dependencies: [],\n            resources: [.process(\"segmentation.mlmodelc\")]),\n        .testTarget(\n            name: \"SemanticImageTests\",\n            dependencies: [\"SemanticImage\"]),\n    ]\n)\n"
  },
  {
    "path": "README.md",
    "content": "# SemanticImage\n\n**Plug-and-play image/video filters built on Vision + CoreML + CoreImage — for iOS. Person segmentation, background blur, depth-based bokeh, style transfer, super-resolution.**\n\nBy [Daisuke Majima](https://john-rocky.github.io). Maintainer of [CoreML-Models](https://github.com/john-rocky/CoreML-Models) (1,749★).\n\nThese filters power [Blur. on the App Store](https://apps.apple.com/us/developer/daisuke-majima/id1350309854) and similar shipping iOS apps.\n\n💼 **Open to Staff / Senior iOS / Mobile ML roles** — [john-rocky.github.io](https://john-rocky.github.io)\n\n---\n\n# SemanticImage\n\nA collection of easy-to-use image / video filters.\n\n# How to use\n\n### Setting Up\n\n1, Add SemanticImage to your project as Swift Package with Swift Package Manager. \n   Or just drag SemanticImage.swift to your project.\n\n2, Import and initialize SemanticImage\n\n```swift\nimport SemanticImage\n```\n\n```swift\nlet semanticImage = SemanticImage()\n```\n\n**Requires iOS 14 or above**\n\n# Filter Collection\n\n## Image\n\n### Get Person Mask\n\n<img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/146860733-acf875a5-043c-4ebb-ab3c-f98e124f6a93.jpg\"> <img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/146860762-01faf109-019f-4644-9e02-65c04adc1b79.JPG\">\n\n\n```swift\nlet maskImage:UIImage? = semanticImage.personMaskImage(uiImage: yourUIImage)\n```\n\n### Swap the background of a person\n\n<img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/146860733-acf875a5-043c-4ebb-ab3c-f98e124f6a93.jpg\"> <img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/146862832-14c0f002-b4e7-43c6-92e4-8595e99e15fd.JPG\">\n\n```swift\nlet swappedImage:UIImage? = semanticImage.swapBackgroundOfPerson(personUIImage: yourUIImage, backgroundUIImage: yourBackgroundUIImage)\n```\n\n### Blur the backgrond of a person\n\n<img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/146860733-acf875a5-043c-4ebb-ab3c-f98e124f6a93.jpg\"> <img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/147166740-a762db75-142b-401c-a726-2a78d84c2496.JPG\">\n\n```swift\nlet blurredPersonImage:UIImage? = semanticImage.personBlur(uiImage:UIImage, intensity:Float)\n// Blur intensity: 0~100 \n```\n\n### Get a prominent object mask\n\n<img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/147181216-9758bb77-c729-420c-addc-728c5da3b330.jpeg\"> <img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/147181239-4c28c545-8a19-4f12-99f6-78cac3c8c3c7.JPG\">\n\n```swift\nlet prominentMaskImage:UIImage? = semanticImage.saliencyMask(uiImage:image)\n```\n\n### Swap the background of the prominent object\n\n<img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/147267778-f158f6c9-a0bf-46ac-b4af-7a1c3008abd6.jpeg\"> <img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/147267793-39c9ae74-ada5-4a29-90b0-eda39145bb61.jpeg\"> <img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/147267801-54b04b4a-fc90-4dd7-bffb-86dc7983c17b.JPG\">\n\n```swift\nlet backgroundSwapImage:UIImage? = semanticImage.saliencyBlend(objectUIImage: image, backgroundUIImage: bgImage)\n```\n\n### Crop a face rectangle\n\n<img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/146860733-acf875a5-043c-4ebb-ab3c-f98e124f6a93.jpg\"> <img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/147011663-326292e3-982b-4214-bbb5-ebb1ceb06e02.JPG\">\n\n```swift\nlet faceImage:UIImage? = semanticImage.faceRectangle(uiImage: image)\n```\n\n### Crop a body rectangle\n\n<img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/146860733-acf875a5-043c-4ebb-ab3c-f98e124f6a93.jpg\"> <img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/147012402-f3866730-4996-4036-b7c5-1358bad547b1.JPG\">\n\n```swift\nlet bodyImage:UIImage? = semanticImage.humanRectangle(uiImage: image)\n```\n\n### Crop face rectangles\n\n<img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/147014241-fca3ceb0-c042-4a64-96a5-ad54c3dde96e.JPEG\"> <img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147014227-3a4aa167-3cd4-492f-a515-48ec7a7e2489.JPG\"><img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147014232-559a7373-2288-4ee1-ac88-5b2cd7a9e65d.JPG\"><img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147014233-819fd97a-138f-4de8-8c44-3f59742e68a0.JPG\"><img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147014235-08347066-d97f-46aa-8810-9349f6481917.JPG\"><img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147014237-8bb38476-3073-4dd7-9a72-b836e029dc9e.JPG\"><img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147014238-8e9b5727-2821-4798-b66b-ae2fa8673c57.JPG\">\n\n```swift\nlet faceImages:[UIImage] = semanticImage.faceRectangles(uiImage: image)\n```\n\n### Crop body rectangles\n\n<img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/147015645-f8b5d6a1-95cb-4656-8b51-57b24b8e82a5.jpeg\"> <img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147015635-52e77dc8-87b7-44f4-89ba-cbad4e7d94d4.JPG\"><img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147015636-d36a4cfc-202f-4ea1-bd17-860180e1001a.JPG\"><img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147015640-33d58d38-af34-4dc5-bb6a-f46994732d8a.JPG\"><img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147015642-ada60f8d-7637-4823-b343-e5fb4dd4c275.JPG\">\n\n```swift\nlet bodyImages:[UIImage] = semanticImage.humanRectangles(uiImage: image)\n```\n\n### Crop an animal(Cat/Dog) rectangle\n\n<img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/147165331-d99b2fbe-b04e-4de9-a215-226da16ab232.jpeg\"> <img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/147165338-1056ce1a-86e7-441e-b782-517b1129e2a2.JPG\">\n\n```swift\nlet animalImage:UIImage? = semanticImage.animalRectangle(uiImage: image)\n```\n\n### Crop multiple animal(Cat/Dog) rectangles\n\n<img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/147165104-f3cace3c-ab5c-4e26-a28d-ac50e16eeb23.jpg\"> <img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147165102-826e9262-0256-40c8-9fbb-4195ed1485e4.JPG\"><img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147165100-4afe5856-e0e1-4c82-a725-8a149731e5a9.JPG\"><img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147165097-0e7b946c-83bb-4f63-85df-3cf2036620a5.JPG\"><img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147165096-3e0c901b-b973-4086-a86f-b6c96d741b33.JPG\"><img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147165093-613875ed-107c-42eb-8ee4-376a01789523.JPG\"><img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147165092-a5037cc7-14ff-436c-bb1a-b1fe79ece681.JPG\"><img width=\"100\" src=\"https://user-images.githubusercontent.com/23278992/147165088-3fd812f9-aab5-4ca3-8b68-9e631d334039.JPG\">\n\n```swift\nlet animalImages:[UIImage] = semanticImage.animalRectangles(uiImage: image)\n```\n\n### Crop and warp document\n\n<img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/156080423-ec99d475-56bb-4787-9348-4c7b5d463b93.jpg\"> <img width=\"300\" src=\"https://user-images.githubusercontent.com/23278992/156080447-9751c793-952e-4ba6-bf47-336778934383.JPG\">\n\n```swift\nlet documentImage:UIImage? = semanticImage.getDocumentImage(image: image)\n```\n\n## Video\n\n### Apply CIFilter to Video\n\n<img width=\"600\" src=\"https://user-images.githubusercontent.com/23278992/147177254-06633831-7dcd-4b4f-be3c-fc97eadbceac.gif\">\n\n```swift\nguard let ciFilter = CIFilter(name: \"CIEdgeWork\", parameters: [kCIInputRadiusKey:3.0]) else { return }\nsemanticImage.ciFilterVideo(videoURL: url, ciFilter: ciFilter, { err, processedURL in\n    // Handle processedURL in here.\n})\n// This process takes about the same time as the video playback time.\n```\n\n### Add virtual background of the person video\n\n<img width=\"600\" src=\"https://user-images.githubusercontent.com/23278992/147275276-5c108efd-f61d-4ba7-a27d-c3df5bb7cc5b.gif\">\n\n```swift\nsemanticImage.swapBackgroundOfPersonVideo(videoURL: url, backgroundUIImage: uiImage, { err, processedURL in\n    // Handle processedURL in here.\n})\n    // This process takes about the same time as the video playback time.\n```\n\n### Add virtual background of the salient object video\n\n<img width=\"600\" src=\"https://user-images.githubusercontent.com/23278992/147276773-6571ca77-4b05-4ab8-a64d-1dafa8dd4be4.gif\">\n\n```swift\nsemanticImage.swapBGOfSalientObjectVideo(videoURL: url, backgroundUIImage: uiImage, { err, processedURL in\n    // Handle processedURL in here.\n})\n    // This process takes about the same time as the video playback time.\n```\n\n### Process video\n\n<img src=https://user-images.githubusercontent.com/23278992/148341103-a44f2b04-2f93-4c69-8cfd-f5ba36801075.gif width=600>\n\n```swift\nsemanticImage.applyProcessingOnVideo(videoURL: url, { ciImage in\n    // Write the processing of ciImage (i.e. video frame) here.\n    return newImage\n}, {  err, editedURL in\n   // The processed video URL is returned\n})\n```\n\n# Author\n\nDaisuke Majima\n\nFreelance iOS programmer from Japan.\n\nPROFILES:\n\nWORKS:\n\nBLOGS: Medium\n\nCONTACTS: rockyshikoku@gmail.com\n"
  },
  {
    "path": "Sources/SemanticImage/SemanticImage.swift",
    "content": "import Foundation\nimport Vision\nimport UIKit\nimport AVKit\n\npublic class SemanticImage {\n    \n    public init() {\n    }\n    \n    @available(iOS 15.0, *)\n    lazy var personSegmentationRequest = VNGeneratePersonSegmentationRequest()\n    lazy var faceRectangleRequest = VNDetectFaceRectanglesRequest()\n    lazy var humanRectanglesRequest:VNDetectHumanRectanglesRequest = {\n       let request = VNDetectHumanRectanglesRequest()\n        if #available(iOS 15.0, *) {\n            request.upperBodyOnly = false\n        }\n        return request\n    }()\n    lazy var animalRequest = VNRecognizeAnimalsRequest()\n\n    lazy var segmentationRequest:VNCoreMLRequest? =  {\n        let url = try? Bundle.module.url(forResource: \"segmentation\", withExtension: \"mlmodelc\")\n        let mlModel = try! MLModel(contentsOf: url!, configuration: MLModelConfiguration())\n        guard let model = try? VNCoreMLModel(for: mlModel) else { return nil }\n        let request = VNCoreMLRequest(model: model)\n        request.imageCropAndScaleOption = .scaleFill\n        return request\n    }()\n    lazy var rectangleRequest = VNDetectRectanglesRequest()\n\n    let ciContext = CIContext()\n    \n    public func getDocumentImage(image:UIImage) -> UIImage? {\n        let newImage = getCorrectOrientationUIImage(uiImage:image)\n        let ciImage = CIImage(image: newImage)!\n        let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])\n        try! handler.perform([rectangleRequest])\n        guard let result = rectangleRequest.results?.first else { return nil }\n        \n        let topLeft = CGPoint(x: result.topLeft.x, y: 1-result.topLeft.y)\n        let topRight = CGPoint(x: result.topRight.x, y: 1-result.topRight.y)\n        let bottomLeft = CGPoint(x: result.bottomLeft.x, y: 1-result.bottomLeft.y)\n        let bottomRight = CGPoint(x: result.bottomRight.x, y: 1-result.bottomRight.y)\n\n        \n        let deNormalizedTopLeft = VNImagePointForNormalizedPoint(topLeft, Int(ciImage.extent.width), Int(ciImage.extent.height))\n        let deNormalizedTopRight = VNImagePointForNormalizedPoint(topRight, Int(ciImage.extent.width), Int(ciImage.extent.height))\n        let deNormalizedBottomLeft = VNImagePointForNormalizedPoint(bottomLeft, Int(ciImage.extent.width), Int(ciImage.extent.height))\n        let deNormalizedBottomRight = VNImagePointForNormalizedPoint(bottomRight, Int(ciImage.extent.width), Int(ciImage.extent.height))\n\n        let croppedImage = getCroppedImage(image: ciImage, topL: deNormalizedTopLeft, topR: deNormalizedTopRight, botL: deNormalizedBottomLeft, botR: deNormalizedBottomRight)\n        let safeCGImage = ciContext.createCGImage(croppedImage, from: croppedImage.extent)\n        let croppedUIImage = UIImage(cgImage: safeCGImage!)\n        return croppedUIImage\n    }\n    \n    private func getCroppedImage(image: CIImage, topL: CGPoint, topR: CGPoint, botL: CGPoint, botR: CGPoint) -> CIImage {\n        let rectCoords = NSMutableDictionary(capacity: 4)\n        \n        rectCoords[\"inputTopLeft\"] = topL.toVector(image: image)\n        rectCoords[\"inputTopRight\"] = topR.toVector(image: image)\n        rectCoords[\"inputBottomLeft\"] = botL.toVector(image: image)\n        rectCoords[\"inputBottomRight\"] = botR.toVector(image: image)\n        \n        guard let coords = rectCoords as? [String : Any] else {\n            return image\n        }\n        return image.applyingFilter(\"CIPerspectiveCorrection\", parameters: coords)\n    }\n    \n    // MARK: Segmentation\n    \n    public func personMaskImage(uiImage:UIImage) -> UIImage? {\n        let newImage = getCorrectOrientationUIImage(uiImage:uiImage)\n        guard let ciImage = CIImage(image: newImage) else { print(\"Image processing failed.Please try with another image.\"); return nil }\n        let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])\n        do {\n            if #available(iOS 15.0, *) {\n                try handler.perform([personSegmentationRequest])\n                guard let result = personSegmentationRequest.results?.first\n                       else { print(\"Image processing failed.Please try with another image.\") ; return nil }\n                let maskCIImage = CIImage(cvPixelBuffer: result.pixelBuffer)\n                let scaledMask = maskCIImage.resize(as: CGSize(width: ciImage.extent.width, height: ciImage.extent.height))\n\n                guard let safeCGImage = ciContext.createCGImage(scaledMask, from: scaledMask.extent) else { print(\"Image processing failed.Please try with another image.\") ; return nil }\n                let maskUIImage = UIImage(cgImage: safeCGImage)\n                return maskUIImage\n            } else {\n                guard let segmentationRequest = segmentationRequest else {\n                    print(\"This func can't be used in this OS version.\"); return nil\n                }\n                try handler.perform([segmentationRequest])\n                guard let result = segmentationRequest.results?.first as? VNPixelBufferObservation\n                       else { print(\"Image processing failed.Please try with another image.\") ; return nil }\n                let maskCIImage = CIImage(cvPixelBuffer: result.pixelBuffer)\n                let scaledMask = maskCIImage.resize(as: CGSize(width: ciImage.extent.width, height: ciImage.extent.height))\n\n                guard let safeCGImage = ciContext.createCGImage(scaledMask, from: scaledMask.extent) else { print(\"Image processing failed.Please try with another image.\") ; return nil }\n                let maskUIImage = UIImage(cgImage: safeCGImage)\n                return maskUIImage\n            }\n        } catch let error {\n            print(\"Vision error \\(error)\")\n            return nil\n        }\n    }\n    \n    \n    public func swapBackgroundOfPerson(personUIImage: UIImage, backgroundUIImage: UIImage) -> UIImage? {\n        let newPersonUIImage = getCorrectOrientationUIImage(uiImage:personUIImage)\n        let newBackgroundUIImage = getCorrectOrientationUIImage(uiImage:backgroundUIImage)\n        \n        guard let personCIImage = CIImage(image: newPersonUIImage),\n              let backgroundCIImage = CIImage(image: newBackgroundUIImage),\n              let maskUIImage = personMaskImage(uiImage: newPersonUIImage),\n              let maskCIImage = CIImage(image: maskUIImage) else {\n                  return nil }\n        \n        let backgroundImageSize = backgroundCIImage.extent\n        let originalSize = personCIImage.extent\n        var scale:CGFloat = 1\n        let widthScale =  originalSize.width / backgroundImageSize.width\n        let heightScale = originalSize.height / backgroundImageSize.height\n        if widthScale > heightScale {\n            scale = personCIImage.extent.width / backgroundImageSize.width\n        } else {\n            scale = personCIImage.extent.height / backgroundImageSize.height\n        }\n        \n        let scaledBG = backgroundCIImage.resize(as: CGSize(width: backgroundCIImage.extent.width*scale, height: backgroundCIImage.extent.height*scale))\n        let BGCenter = CGPoint(x: scaledBG.extent.width/2, y: scaledBG.extent.height/2)\n        let originalExtent = personCIImage.extent\n        let cropRect = CGRect(x: BGCenter.x-(originalExtent.width/2), y: BGCenter.y-(originalExtent.height/2), width: originalExtent.width, height: originalExtent.height)\n        let croppedBG = scaledBG.cropped(to: cropRect)\n        let translate = CGAffineTransform(translationX: -croppedBG.extent.minX, y: -croppedBG.extent.minY)\n        let traslatedBG = croppedBG.transformed(by: translate)\n        guard let blended = CIFilter(name: \"CIBlendWithMask\", parameters: [\n            kCIInputImageKey: personCIImage,\n            kCIInputBackgroundImageKey:traslatedBG,\n            kCIInputMaskImageKey:maskCIImage])?.outputImage else { return nil }\n        guard let safeCGImage = ciContext.createCGImage(blended, from: blended.extent) else { print(\"Image processing failed.Please try with another image.\") ; return nil }\n        let blendedUIImage = UIImage(cgImage: safeCGImage)\n        return blendedUIImage\n    }\n    \n    public func personBlur(uiImage:UIImage, intensity:Float) -> UIImage?{\n        let newUIImage = getCorrectOrientationUIImage(uiImage:uiImage)\n        guard let originalCIImage = CIImage(image: newUIImage),\n              let maskUIImage = personMaskImage(uiImage: newUIImage),\n              let maskCIImage = CIImage(image: maskUIImage) else { print(\"Image processing failed.Please try with another image.\"); return nil }\n        let safeCropSize = CGRect(x: 0, y: 0, width: originalCIImage.extent.width * 0.999, height: originalCIImage.extent.height * 0.999)\n        guard let blurBGCIImage = CIFilter(name: \"CIGaussianBlur\", parameters: [kCIInputImageKey:originalCIImage,\n                                                                         kCIInputRadiusKey:intensity])?.outputImage?.cropped(to: safeCropSize).resize(as: originalCIImage.extent.size) else { return nil }\n        guard let blendedCIImage = CIFilter(name: \"CIBlendWithMask\", parameters: [\n            kCIInputImageKey: originalCIImage,\n            kCIInputBackgroundImageKey:blurBGCIImage,\n            kCIInputMaskImageKey:maskCIImage])?.outputImage,\n              let safeCGImage = ciContext.createCGImage(blendedCIImage, from: blendedCIImage.extent)else {  print(\"Image processing failed.Please try with another image.\"); return nil }\n        \n        let final = UIImage(cgImage: safeCGImage)\n        return final\n    }\n    \n    // MARK: Saliency\n    \n    public func saliencyMask(uiImage:UIImage) -> UIImage? {\n        let newImage = getCorrectOrientationUIImage(uiImage:uiImage)\n        guard let ciImage = CIImage(image: newImage),\n              let request = segmentationRequest else { print(\"Image processing failed.Please try with another image.\"); return nil }\n        let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])\n        do {\n            try handler.perform([request])\n            guard let result = request.results?.first as? VNPixelBufferObservation\n                   else { print(\"Image processing failed.Please try with another image.\") ; return nil }\n            let maskCIImage = CIImage(cvPixelBuffer: result.pixelBuffer)\n            let scaledMask = maskCIImage.resize(as: CGSize(width: ciImage.extent.width, height: ciImage.extent.height))\n\n            guard let safeCGImage = ciContext.createCGImage(scaledMask, from: scaledMask.extent) else { print(\"Image processing failed.Please try with another image.\") ; return nil }\n            let maskUIImage = UIImage(cgImage: safeCGImage)\n            return maskUIImage\n\n        } catch let error {\n            print(\"Vision error \\(error)\")\n            return nil\n        }\n    }\n    \n    public func saliencyBlend(objectUIImage:UIImage, backgroundUIImage: UIImage) -> UIImage? {\n        let newSaliencyUIImage = getCorrectOrientationUIImage(uiImage:objectUIImage)\n        let newBackgroundUIImage = getCorrectOrientationUIImage(uiImage:backgroundUIImage)\n        \n        guard let personCIImage = CIImage(image: newSaliencyUIImage),\n              let backgroundCIImage = CIImage(image: newBackgroundUIImage),\n              let maskUIImage = saliencyMask(uiImage: newSaliencyUIImage),\n              let maskCIImage = CIImage(image: maskUIImage) else {\n                  return nil }\n        \n        let backgroundImageSize = backgroundCIImage.extent\n        let originalSize = personCIImage.extent\n        var scale:CGFloat = 1\n        let widthScale =  originalSize.width / backgroundImageSize.width\n        let heightScale = originalSize.height / backgroundImageSize.height\n        if widthScale > heightScale {\n            scale = personCIImage.extent.width / backgroundImageSize.width\n        } else {\n            scale = personCIImage.extent.height / backgroundImageSize.height\n        }\n        \n        let scaledBG = backgroundCIImage.resize(as: CGSize(width: backgroundCIImage.extent.width*scale, height: backgroundCIImage.extent.height*scale))\n        let BGCenter = CGPoint(x: scaledBG.extent.width/2, y: scaledBG.extent.height/2)\n        let originalExtent = personCIImage.extent\n        let cropRect = CGRect(x: BGCenter.x-(originalExtent.width/2), y: BGCenter.y-(originalExtent.height/2), width: originalExtent.width, height: originalExtent.height)\n        let croppedBG = scaledBG.cropped(to: cropRect)\n        let translate = CGAffineTransform(translationX: -croppedBG.extent.minX, y: -croppedBG.extent.minY)\n        let traslatedBG = croppedBG.transformed(by: translate)\n        print(traslatedBG.extent)\n        guard let blended = CIFilter(name: \"CIBlendWithMask\", parameters: [\n            kCIInputImageKey: personCIImage,\n            kCIInputBackgroundImageKey:traslatedBG,\n            kCIInputMaskImageKey:maskCIImage])?.outputImage,\n              let safeCGImage = ciContext.createCGImage(blended, from: blended.extent) else { print(\"Image processing failed.Please try with another image.\"); return nil }\n        let blendedUIImage = UIImage(cgImage: safeCGImage)\n        return blendedUIImage\n    }\n    \n    // MARK: Rectangle\n    \n    \n    public func faceRectangle(uiImage:UIImage) -> UIImage? {\n        let newImage = getCorrectOrientationUIImage(uiImage:uiImage)\n        guard let ciImage = CIImage(image: newImage) else { print(\"Image processing failed.Please try with another image.\"); return nil }\n        let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])\n        do {\n            try handler.perform([faceRectangleRequest])\n            guard let result = faceRectangleRequest.results?.first else { print(\"Image processing failed.Please try with another image.\"); return nil }\n                let boundingBox = result.boundingBox\n                let faceRect = VNImageRectForNormalizedRect((boundingBox),Int(ciImage.extent.size.width), Int(ciImage.extent.size.height))\n            var doubleScaleRect = CGRect(x: faceRect.minX - faceRect.width * 0.5, y: faceRect.minY - faceRect.height * 0.5, width: faceRect.width * 2, height: faceRect.height * 2)\n            if doubleScaleRect.minX < 0 {\n                doubleScaleRect.origin.x = 0\n            }\n\n            if doubleScaleRect.minY < 0 {\n                doubleScaleRect.origin.y = 0\n            }\n            if doubleScaleRect.maxX > ciImage.extent.maxX  {\n                doubleScaleRect = CGRect(x: doubleScaleRect.origin.x, y: doubleScaleRect.origin.y, width: ciImage.extent.width - doubleScaleRect.origin.x, height: doubleScaleRect.height)\n            }\n            if doubleScaleRect.maxY > ciImage.extent.maxY  {\n                doubleScaleRect = CGRect(x: doubleScaleRect.origin.x, y: doubleScaleRect.origin.y, width: doubleScaleRect.width, height: ciImage.extent.height - doubleScaleRect.origin.y)\n            }\n            \n                let faceImage = ciImage.cropped(to: doubleScaleRect)\n                guard let final = ciContext.createCGImage(faceImage, from: faceImage.extent) else { print(\"Image processing failed.Please try with another image.\"); return nil }\n                let finalUiimage =  UIImage(cgImage: final)\n                return finalUiimage\n        } catch let error {\n            print(\"Vision error \\(error)\")\n            return nil\n        }\n    }\n    \n    public func faceRectangles(uiImage:UIImage) -> [UIImage] {\n        var faceUIImages:[UIImage] = []\n        let semaphore = DispatchSemaphore(value: 0)\n        let newImage = getCorrectOrientationUIImage(uiImage:uiImage)\n        guard let ciImage = CIImage(image: newImage) else { print(\"Image processing failed.Please try with another image.\"); return [] }\n        let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])\n        do {\n            try handler.perform([faceRectangleRequest])\n            guard let results = faceRectangleRequest.results else { print(\"Image processing failed.Please try with another image.\"); return [] }\n            guard !results.isEmpty else { print(\"Image processing failed.Please try with another image.\"); return [] }\n            for result in results {\n                let boundingBox = result.boundingBox\n                let faceRect = VNImageRectForNormalizedRect((boundingBox),Int(ciImage.extent.size.width), Int(ciImage.extent.size.height))\n            var doubleScaleRect = CGRect(x: faceRect.minX - faceRect.width * 0.5, y: faceRect.minY - faceRect.height * 0.5, width: faceRect.width * 2, height: faceRect.height * 2)\n            if doubleScaleRect.minX < 0 {\n                doubleScaleRect.origin.x = 0\n            }\n\n            if doubleScaleRect.minY < 0 {\n                doubleScaleRect.origin.y = 0\n            }\n            if doubleScaleRect.maxX > ciImage.extent.maxX  {\n                doubleScaleRect = CGRect(x: doubleScaleRect.origin.x, y: doubleScaleRect.origin.y, width: ciImage.extent.width - doubleScaleRect.origin.x, height: doubleScaleRect.height)\n            }\n            if doubleScaleRect.maxY > ciImage.extent.maxY  {\n                doubleScaleRect = CGRect(x: doubleScaleRect.origin.x, y: doubleScaleRect.origin.y, width: doubleScaleRect.width, height: ciImage.extent.height - doubleScaleRect.origin.y)\n            }\n            \n                let faceImage = ciImage.cropped(to: doubleScaleRect)\n                guard let final = ciContext.createCGImage(faceImage, from: faceImage.extent) else { print(\"Image processing failed.Please try with another image.\"); return [] }\n                let finalUiimage =  UIImage(cgImage: final)\n                faceUIImages.append(finalUiimage)\n                if faceUIImages.count == results.count {\n                    semaphore.signal()\n                }\n            }\n            semaphore.wait()\n            return faceUIImages\n        } catch let error {\n            print(\"Vision error \\(error)\")\n            return []\n        }\n    }\n    \n    public func humanRectangle(uiImage:UIImage) -> UIImage? {\n        let newImage = getCorrectOrientationUIImage(uiImage:uiImage)\n        guard let ciImage = CIImage(image: newImage) else { print(\"Image processing failed.Please try with another image.\"); return nil }\n        let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])\n        do {\n            try handler.perform([humanRectanglesRequest])\n            guard let result = humanRectanglesRequest.results?.first else { print(\"Image processing failed.Please try with another image.\"); return nil }\n            let boundingBox = result.boundingBox\n            let humanRect = VNImageRectForNormalizedRect((boundingBox),Int(ciImage.extent.size.width), Int(ciImage.extent.size.height))\n            let humanImage = ciImage.cropped(to: humanRect)\n            guard let final = ciContext.createCGImage(humanImage, from: humanImage.extent) else { print(\"Image processing failed.Please try with another image.\"); return nil }\n            let finalUiimage =  UIImage(cgImage: final)\n            return finalUiimage\n        } catch let error {\n            print(\"Vision error \\(error)\")\n            return nil\n        }\n    }\n    \n    public func humanRectangles(uiImage:UIImage) -> [UIImage] {\n        var bodyUIImages:[UIImage] = []\n        let semaphore = DispatchSemaphore(value: 0)\n        let newImage = getCorrectOrientationUIImage(uiImage:uiImage)\n        guard let ciImage = CIImage(image: newImage) else { print(\"Image processing failed.Please try with another image.\"); return [] }\n        let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])\n        do {\n            try handler.perform([humanRectanglesRequest])\n            guard let results = humanRectanglesRequest.results else { print(\"Image processing failed.Please try with another image.\"); return [] }\n            guard !results.isEmpty else { print(\"Image processing failed.Please try with another image.\"); return [] }\n            \n            for result in results {\n                let boundingBox = result.boundingBox\n                let humanRect = VNImageRectForNormalizedRect((boundingBox),Int(ciImage.extent.size.width), Int(ciImage.extent.size.height))\n                let humanImage = ciImage.cropped(to: humanRect)\n                guard let final = ciContext.createCGImage(humanImage, from: humanImage.extent) else { print(\"Image processing failed.Please try with another image.\"); return [] }\n                let finalUiimage =  UIImage(cgImage: final)\n                bodyUIImages.append(finalUiimage)\n                if bodyUIImages.count == results.count {\n                    semaphore.signal()\n                }\n            }\n            semaphore.wait()\n            return bodyUIImages\n        } catch let error {\n            print(\"Vision error \\(error)\")\n            return []\n        }\n    }\n    \n    public func animalRectangle(uiImage:UIImage) -> UIImage?{\n        \n        let newImage = getCorrectOrientationUIImage(uiImage:uiImage)\n        guard let ciImage = CIImage(image: newImage) else { print(\"Image processing failed.Please try with another image.\"); return nil }\n        let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])\n        do {\n            try handler.perform([animalRequest])\n            guard let result = animalRequest.results?.first else { print(\"Image processing failed.Please try with another image.\"); return nil }\n            let boundingBox = result.boundingBox\n            let rect = VNImageRectForNormalizedRect((boundingBox),Int(ciImage.extent.size.width), Int(ciImage.extent.size.height))\n            let croppedImage = ciImage.cropped(to: rect)\n            guard let final = ciContext.createCGImage(croppedImage, from: croppedImage.extent) else { print(\"Image processing failed.Please try with another image.\"); return nil }\n            let finalUiimage =  UIImage(cgImage: final)\n            return finalUiimage\n        } catch let error {\n            print(\"Vision error \\(error)\")\n            return nil\n        }\n    }\n    \n    public func animalRectangles(uiImage:UIImage) -> [UIImage] {\n        var animalUIImages:[UIImage] = []\n        let semaphore = DispatchSemaphore(value: 0)\n        let newImage = getCorrectOrientationUIImage(uiImage:uiImage)\n        guard let ciImage = CIImage(image: newImage) else { print(\"Image processing failed.Please try with another image.\"); return [] }\n        let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])\n        do {\n            try handler.perform([animalRequest])\n            guard let results = animalRequest.results else { print(\"Image processing failed.Please try with another image.\"); return [] }\n            guard !results.isEmpty else { print(\"Image processing failed.Please try with another image.\"); return [] }\n            \n            for result in results {\n                let boundingBox = result.boundingBox\n                let rect = VNImageRectForNormalizedRect((boundingBox),Int(ciImage.extent.size.width), Int(ciImage.extent.size.height))\n                let croppedImage = ciImage.cropped(to: rect)\n                guard let final = ciContext.createCGImage(croppedImage, from: croppedImage.extent) else { print(\"Image processing failed.Please try with another image.\"); return [] }\n                let finalUiimage =  UIImage(cgImage: final)\n                animalUIImages.append(finalUiimage)\n                if animalUIImages.count == results.count {\n                    semaphore.signal()\n                }\n            }\n            semaphore.wait()\n            return animalUIImages\n        } catch let error {\n            print(\"Vision error \\(error)\")\n            return []\n        }\n    }\n    \n    public func swapBGOfSalientObjectVideo(videoURL:URL, backgroundUIImage: UIImage, _ completion: ((_ err: NSError?, _ filteredVideoURL: URL?) -> Void)?) {\n        guard let bgCIImage = CIImage(image: backgroundUIImage) else { print(\"background image is nil\") ; return}\n        applyProcessingOnVideo(videoURL: videoURL, { ciImage in\n            let personCIImage = ciImage\n            let backgroundCIImage = bgCIImage\n            var maskCIImage:CIImage\n            let handler = VNImageRequestHandler(ciImage: personCIImage, options: [:])\n            do {\n                guard let segmentationRequest = self.segmentationRequest else {\n                    print(\"This func can't be used in this OS version.\"); return nil\n                }\n                try handler.perform([segmentationRequest])\n                guard let result = segmentationRequest.results?.first as? VNPixelBufferObservation\n                else { print(\"Image processing failed.Please try with another image.\") ; return nil }\n                let maskImage = CIImage(cvPixelBuffer: result.pixelBuffer)\n                let scaledMask = maskImage.resize(as: CGSize(width: ciImage.extent.width, height: ciImage.extent.height))\n                \n                guard let safeCGImage = self.ciContext.createCGImage(scaledMask, from: scaledMask.extent) else { print(\"Image processing failed.Please try with another image.\") ; return nil }\n                maskCIImage = CIImage(cgImage: safeCGImage)\n            } catch let error {\n                print(\"Vision error \\(error)\")\n                return ciImage\n            }\n            \n            let backgroundImageSize = backgroundCIImage.extent\n            let originalSize = personCIImage.extent\n            var scale:CGFloat = 1\n            let widthScale =  originalSize.width / backgroundImageSize.width\n            let heightScale = originalSize.height / backgroundImageSize.height\n            if widthScale > heightScale {\n                scale = personCIImage.extent.width / backgroundImageSize.width\n            } else {\n                scale = personCIImage.extent.height / backgroundImageSize.height\n            }\n            \n            let scaledBG = backgroundCIImage.resize(as: CGSize(width: backgroundCIImage.extent.width*scale, height: backgroundCIImage.extent.height*scale))\n            let BGCenter = CGPoint(x: scaledBG.extent.width/2, y: scaledBG.extent.height/2)\n            let originalExtent = personCIImage.extent\n            let cropRect = CGRect(x: BGCenter.x-(originalExtent.width/2), y: BGCenter.y-(originalExtent.height/2), width: originalExtent.width, height: originalExtent.height)\n            let croppedBG = scaledBG.cropped(to: cropRect)\n            let translate = CGAffineTransform(translationX: -croppedBG.extent.minX, y: -croppedBG.extent.minY)\n            let traslatedBG = croppedBG.transformed(by: translate)\n            guard let blended = CIFilter(name: \"CIBlendWithMask\", parameters: [\n                kCIInputImageKey: personCIImage,\n                kCIInputBackgroundImageKey:traslatedBG,\n                kCIInputMaskImageKey:maskCIImage])?.outputImage,\n                  let safeCGImage = self.ciContext.createCGImage(blended, from: blended.extent) else {return ciImage}\n                    let outCIImage = CIImage(cgImage: safeCGImage)\n            return outCIImage\n        } , { err, processedVideoURL in\n            guard err == nil else { print(err?.localizedDescription); return }\n            completion?(err,processedVideoURL)\n        })\n    }\n    \n    public func swapBackgroundOfPersonVideo(videoURL:URL, backgroundUIImage: UIImage, _ completion: ((_ err: NSError?, _ filteredVideoURL: URL?) -> Void)?) {\n        guard let bgCIImage = CIImage(image: backgroundUIImage) else { print(\"background image is nil\") ; return}\n        applyProcessingOnVideo(videoURL: videoURL, { ciImage in\n            let personCIImage = ciImage\n            let backgroundCIImage = bgCIImage\n            var maskCIImage:CIImage\n            let handler = VNImageRequestHandler(ciImage: personCIImage, options: [:])\n            do {\n                if #available(iOS 15.0, *) {\n                    try handler.perform([self.personSegmentationRequest])\n                    guard let result = self.personSegmentationRequest.results?.first\n                           else { print(\"Image processing failed.Please try with another image.\") ; return nil }\n                    let maskImage = CIImage(cvPixelBuffer: result.pixelBuffer)\n                    let scaledMask = maskImage.resize(as: CGSize(width: ciImage.extent.width, height: ciImage.extent.height))\n\n                    guard let safeCGImage = self.ciContext.createCGImage(scaledMask, from: scaledMask.extent) else { print(\"Image processing failed.Please try with another image.\") ; return nil }\n                    maskCIImage = CIImage(cgImage: safeCGImage)\n                } else {\n                    guard let segmentationRequest = self.segmentationRequest else {\n                        print(\"This func can't be used in this OS version.\"); return nil\n                    }\n                    try handler.perform([segmentationRequest])\n                    guard let result = segmentationRequest.results?.first as? VNPixelBufferObservation\n                           else { print(\"Image processing failed.Please try with another image.\") ; return nil }\n                    let maskImage = CIImage(cvPixelBuffer: result.pixelBuffer)\n                    let scaledMask = maskImage.resize(as: CGSize(width: ciImage.extent.width, height: ciImage.extent.height))\n\n                    guard let safeCGImage = self.ciContext.createCGImage(scaledMask, from: scaledMask.extent) else { print(\"Image processing failed.Please try with another image.\") ; return nil }\n                    maskCIImage = CIImage(cgImage: safeCGImage)\n                }\n            } catch let error {\n                print(\"Vision error \\(error)\")\n                return ciImage\n            }\n            \n            let backgroundImageSize = backgroundCIImage.extent\n            let originalSize = personCIImage.extent\n            var scale:CGFloat = 1\n            let widthScale =  originalSize.width / backgroundImageSize.width\n            let heightScale = originalSize.height / backgroundImageSize.height\n            if widthScale > heightScale {\n                scale = personCIImage.extent.width / backgroundImageSize.width\n            } else {\n                scale = personCIImage.extent.height / backgroundImageSize.height\n            }\n            \n            let scaledBG = backgroundCIImage.resize(as: CGSize(width: backgroundCIImage.extent.width*scale, height: backgroundCIImage.extent.height*scale))\n            let BGCenter = CGPoint(x: scaledBG.extent.width/2, y: scaledBG.extent.height/2)\n            let originalExtent = personCIImage.extent\n            let cropRect = CGRect(x: BGCenter.x-(originalExtent.width/2), y: BGCenter.y-(originalExtent.height/2), width: originalExtent.width, height: originalExtent.height)\n            let croppedBG = scaledBG.cropped(to: cropRect)\n            let translate = CGAffineTransform(translationX: -croppedBG.extent.minX, y: -croppedBG.extent.minY)\n            let traslatedBG = croppedBG.transformed(by: translate)\n            guard let blended = CIFilter(name: \"CIBlendWithMask\", parameters: [\n                kCIInputImageKey: personCIImage,\n                kCIInputBackgroundImageKey:traslatedBG,\n                kCIInputMaskImageKey:maskCIImage])?.outputImage,\n                  let safeCGImage = self.ciContext.createCGImage(blended, from: blended.extent) else {return ciImage}\n                    let outCIImage = CIImage(cgImage: safeCGImage)\n            return outCIImage\n        } , { err, processedVideoURL in\n            guard err == nil else { print(err?.localizedDescription); return }\n            completion?(err,processedVideoURL)\n        })\n    }\n    \n    public func ciFilterVideo(videoURL:URL, ciFilter: CIFilter, _ completion: ((_ err: NSError?, _ filteredVideoURL: URL?) -> Void)?) {\n        applyProcessingOnVideo(videoURL: videoURL, { ciImage in\n            ciFilter.setValue(ciImage, forKey: kCIInputImageKey)\n            let outCIImage = ciFilter.outputImage\n            return outCIImage\n        } , { err, processedVideoURL in\n            guard err == nil else { print(err?.localizedDescription as Any); return }\n            completion?(err,processedVideoURL)\n        })\n    }\n    \n    public func applyProcessingOnVideo(videoURL:URL, _ processingFunction: @escaping ((CIImage) -> CIImage?), _ completion: ((_ err: NSError?, _ processedVideoURL: URL?) -> Void)?) {\n        var frame:Int = 0\n        var isFrameRotated = false\n        let asset = AVURLAsset(url: videoURL)\n        let duration = asset.duration.value\n        let frameRate = asset.preferredRate\n        let totalFrame = frameRate * Float(duration)\n        let err: NSError = NSError.init(domain: \"SemanticImage\", code: 999, userInfo: [NSLocalizedDescriptionKey: \"Video Processing Failed\"])\n        guard let writingDestinationUrl: URL  = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent(\"\\(Date())\" + \".mp4\") else { print(\"nil\"); return}\n\n        // setup\n\n        guard let reader: AVAssetReader = try? AVAssetReader.init(asset: asset) else {\n            completion?(err, nil)\n            return\n        }\n        guard let writer: AVAssetWriter = try? AVAssetWriter(outputURL: writingDestinationUrl, fileType: AVFileType.mov) else {\n            completion?(err, nil)\n            return\n        }\n        \n        // setup finish closure\n\n        var audioFinished: Bool = false\n        var videoFinished: Bool = false\n        let writtingFinished: (() -> Void) = {\n            if audioFinished == true && videoFinished == true {\n                writer.finishWriting {\n                    completion?(nil, writingDestinationUrl)\n                }\n                reader.cancelReading()\n            }\n        }\n        \n        // prepare video reader\n        \n        let readerVideoOutput: AVAssetReaderTrackOutput = AVAssetReaderTrackOutput(\n            track: asset.tracks(withMediaType: AVMediaType.video)[0],\n            outputSettings: [\n                kCVPixelBufferPixelFormatTypeKey as String: Int(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange),\n            ]\n        )\n        \n        reader.add(readerVideoOutput)\n        \n        // prepare audio reader\n        \n        var readerAudioOutput: AVAssetReaderTrackOutput!\n        if asset.tracks(withMediaType: AVMediaType.audio).count <= 0 {\n            audioFinished = true\n        } else {\n            readerAudioOutput = AVAssetReaderTrackOutput.init(\n                track: asset.tracks(withMediaType: AVMediaType.audio)[0],\n                outputSettings: [\n                    AVSampleRateKey: 44100,\n                    AVFormatIDKey:   kAudioFormatLinearPCM,\n                ]\n            )\n            if reader.canAdd(readerAudioOutput) {\n                reader.add(readerAudioOutput)\n            } else {\n                print(\"Cannot add audio output reader\")\n                audioFinished = true\n            }\n        }\n        \n        // prepare video input\n        \n        let transform = asset.tracks(withMediaType: AVMediaType.video)[0].preferredTransform\n        let radians = atan2(transform.b, transform.a)\n        let degrees = (radians * 180.0) / .pi\n        \n        var writerVideoInput: AVAssetWriterInput\n        switch degrees {\n        case 90:\n            let rotateTransform = CGAffineTransform(rotationAngle: 0)\n            writerVideoInput = AVAssetWriterInput.init(\n                mediaType: AVMediaType.video,\n                outputSettings: [\n                    AVVideoCodecKey:                 AVVideoCodecType.h264,\n                    AVVideoWidthKey:                 asset.tracks(withMediaType: AVMediaType.video)[0].naturalSize.height,\n                    AVVideoHeightKey:                asset.tracks(withMediaType: AVMediaType.video)[0].naturalSize.width,\n                    AVVideoCompressionPropertiesKey: [\n                        AVVideoAverageBitRateKey: asset.tracks(withMediaType: AVMediaType.video)[0].estimatedDataRate,\n                    ],\n                ]\n            )\n            writerVideoInput.expectsMediaDataInRealTime = false\n            \n            isFrameRotated = true\n            writerVideoInput.transform = rotateTransform\n        default:\n            writerVideoInput = AVAssetWriterInput.init(\n                mediaType: AVMediaType.video,\n                outputSettings: [\n                    AVVideoCodecKey:                 AVVideoCodecType.h264,\n                    AVVideoWidthKey:                 asset.tracks(withMediaType: AVMediaType.video)[0].naturalSize.width,\n                    AVVideoHeightKey:                asset.tracks(withMediaType: AVMediaType.video)[0].naturalSize.height,\n                    AVVideoCompressionPropertiesKey: [\n                        AVVideoAverageBitRateKey: asset.tracks(withMediaType: AVMediaType.video)[0].estimatedDataRate,\n                    ],\n                ]\n            )\n            writerVideoInput.expectsMediaDataInRealTime = false\n            isFrameRotated = false\n            writerVideoInput.transform = asset.tracks(withMediaType: AVMediaType.video)[0].preferredTransform\n        }\n        let pixelBufferAdaptor = AVAssetWriterInputPixelBufferAdaptor(assetWriterInput: writerVideoInput, sourcePixelBufferAttributes: [kCVPixelBufferPixelFormatTypeKey as String: Int(kCVPixelFormatType_32BGRA)])\n        \n        writer.add(writerVideoInput)\n        \n        \n        // prepare writer input for audio\n        \n        var writerAudioInput: AVAssetWriterInput! = nil\n        if asset.tracks(withMediaType: AVMediaType.audio).count > 0 {\n            let formatDesc: [Any] = asset.tracks(withMediaType: AVMediaType.audio)[0].formatDescriptions\n            var channels: UInt32 = 1\n            var sampleRate: Float64 = 44100.000000\n            for i in 0 ..< formatDesc.count {\n                guard let bobTheDesc: UnsafePointer<AudioStreamBasicDescription> = CMAudioFormatDescriptionGetStreamBasicDescription(formatDesc[i] as! CMAudioFormatDescription) else {\n                    continue\n                }\n                channels = bobTheDesc.pointee.mChannelsPerFrame\n                sampleRate = bobTheDesc.pointee.mSampleRate\n                break\n            }\n            writerAudioInput = AVAssetWriterInput.init(\n                mediaType: AVMediaType.audio,\n                outputSettings: [\n                    AVFormatIDKey:         kAudioFormatMPEG4AAC,\n                    AVNumberOfChannelsKey: channels,\n                    AVSampleRateKey:       sampleRate,\n                    AVEncoderBitRateKey:   128000,\n                ]\n            )\n            writerAudioInput.expectsMediaDataInRealTime = true\n            writer.add(writerAudioInput)\n        }\n        \n\n        // write\n        \n        let videoQueue = DispatchQueue.init(label: \"videoQueue\")\n        let audioQueue = DispatchQueue.init(label: \"audioQueue\")\n        writer.startWriting()\n        reader.startReading()\n        writer.startSession(atSourceTime: CMTime.zero)\n\n        // write video\n        \n        writerVideoInput.requestMediaDataWhenReady(on: videoQueue) {\n            while writerVideoInput.isReadyForMoreMediaData {\n                autoreleasepool {\n                    if let buffer = readerVideoOutput.copyNextSampleBuffer(),let pixelBuffer = CMSampleBufferGetImageBuffer(buffer) {\n                        frame += 1\n                        var ciImage = CIImage(cvPixelBuffer: pixelBuffer)\n                        if isFrameRotated {\n                            ciImage = ciImage.oriented(CGImagePropertyOrientation.right)\n                        }\n                        guard let outCIImage = processingFunction(ciImage) else { print(\"Video Processing Failed\") ; return }\n                        \n                        let presentationTime = CMSampleBufferGetOutputPresentationTimeStamp(buffer)\n                        var pixelBufferOut: CVPixelBuffer?\n                        CVPixelBufferPoolCreatePixelBuffer(kCFAllocatorDefault, pixelBufferAdaptor.pixelBufferPool!, &pixelBufferOut)\n                        self.ciContext.render(outCIImage, to: pixelBufferOut!)\n                        pixelBufferAdaptor.append(pixelBufferOut!, withPresentationTime: presentationTime)\n                        \n//                        if frame % 100 == 0 {\n//                            print(\"\\(frame) / \\(totalFrame) frames were processed..\")\n//                        }\n                    } else {\n                        writerVideoInput.markAsFinished()\n                        DispatchQueue.main.async {\n                            videoFinished = true\n                            writtingFinished()\n                        }\n                    }\n                }\n            }\n        }\n        if writerAudioInput != nil {\n            writerAudioInput.requestMediaDataWhenReady(on: audioQueue) {\n                while writerAudioInput.isReadyForMoreMediaData {\n                    autoreleasepool {\n                        let buffer = readerAudioOutput.copyNextSampleBuffer()\n                        if buffer != nil {\n                            writerAudioInput.append(buffer!)\n                        } else {\n                            writerAudioInput.markAsFinished()\n                            DispatchQueue.main.async {\n                                audioFinished = true\n                                writtingFinished()\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n    \n    func scaleMaskImage(maskCIImage:CIImage, originalCIImage:CIImage) -> CIImage {\n        let scaledMaskCIImage = maskCIImage.resize(as: originalCIImage.extent.size)\n        return scaledMaskCIImage\n    }\n    \n    public func getCorrectOrientationUIImage(uiImage:UIImage) -> UIImage {\n            var newImage = UIImage()\n            switch uiImage.imageOrientation.rawValue {\n            case 1:\n                guard let orientedCIImage = CIImage(image: uiImage)?.oriented(CGImagePropertyOrientation.down),\n                      let cgImage = ciContext.createCGImage(orientedCIImage, from: orientedCIImage.extent) else { return uiImage}\n                \n                newImage = UIImage(cgImage: cgImage)\n            case 3:\n                guard let orientedCIImage = CIImage(image: uiImage)?.oriented(CGImagePropertyOrientation.right),\n                        let cgImage = ciContext.createCGImage(orientedCIImage, from: orientedCIImage.extent) else { return uiImage}\n                newImage = UIImage(cgImage: cgImage)\n            default:\n                newImage = uiImage\n            }\n        return newImage\n    }\n}\n    \nextension CIImage {\n    func resize(as size: CGSize) -> CIImage {\n        let selfSize = extent.size\n        let transform = CGAffineTransform(scaleX: size.width / selfSize.width, y: size.height / selfSize.height)\n        return transformed(by: transform)\n    }\n}\n\nextension CGPoint {\n    func toVector(image: CIImage) -> CIVector {\n        return CIVector(x: x, y: image.extent.height-y)\n    }\n}\n\n"
  },
  {
    "path": "Sources/SemanticImage/segmentation.mlmodelc/metadata.json",
    "content": "[\n  {\n    \"metadataOutputVersion\" : \"3.0\",\n    \"storagePrecision\" : \"Float32\",\n    \"outputSchema\" : [\n      {\n        \"height\" : \"320\",\n        \"colorspace\" : \"Grayscale\",\n        \"isOptional\" : \"0\",\n        \"width\" : \"320\",\n        \"isColor\" : \"0\",\n        \"formattedType\" : \"Image (Grayscale 320 × 320)\",\n        \"hasSizeFlexibility\" : \"0\",\n        \"type\" : \"Image\",\n        \"shortDescription\" : \"\",\n        \"name\" : \"out_p0\"\n      },\n      {\n        \"height\" : \"320\",\n        \"colorspace\" : \"Grayscale\",\n        \"isOptional\" : \"0\",\n        \"width\" : \"320\",\n        \"isColor\" : \"0\",\n        \"formattedType\" : \"Image (Grayscale 320 × 320)\",\n        \"hasSizeFlexibility\" : \"0\",\n        \"type\" : \"Image\",\n        \"shortDescription\" : \"\",\n        \"name\" : \"out_p1\"\n      },\n      {\n        \"height\" : \"320\",\n        \"colorspace\" : \"Grayscale\",\n        \"isOptional\" : \"0\",\n        \"width\" : \"320\",\n        \"isColor\" : \"0\",\n        \"formattedType\" : \"Image (Grayscale 320 × 320)\",\n        \"hasSizeFlexibility\" : \"0\",\n        \"type\" : \"Image\",\n        \"shortDescription\" : \"\",\n        \"name\" : \"out_p2\"\n      },\n      {\n        \"height\" : \"320\",\n        \"colorspace\" : \"Grayscale\",\n        \"isOptional\" : \"0\",\n        \"width\" : \"320\",\n        \"isColor\" : \"0\",\n        \"formattedType\" : \"Image (Grayscale 320 × 320)\",\n        \"hasSizeFlexibility\" : \"0\",\n        \"type\" : \"Image\",\n        \"shortDescription\" : \"\",\n        \"name\" : \"out_p3\"\n      },\n      {\n        \"height\" : \"320\",\n        \"colorspace\" : \"Grayscale\",\n        \"isOptional\" : \"0\",\n        \"width\" : \"320\",\n        \"isColor\" : \"0\",\n        \"formattedType\" : \"Image (Grayscale 320 × 320)\",\n        \"hasSizeFlexibility\" : \"0\",\n        \"type\" : \"Image\",\n        \"shortDescription\" : \"\",\n        \"name\" : \"out_p4\"\n      },\n      {\n        \"height\" : \"320\",\n        \"colorspace\" : \"Grayscale\",\n        \"isOptional\" : \"0\",\n        \"width\" : \"320\",\n        \"isColor\" : \"0\",\n        \"formattedType\" : \"Image (Grayscale 320 × 320)\",\n        \"hasSizeFlexibility\" : \"0\",\n        \"type\" : \"Image\",\n        \"shortDescription\" : \"\",\n        \"name\" : \"out_p5\"\n      },\n      {\n        \"height\" : \"320\",\n        \"colorspace\" : \"Grayscale\",\n        \"isOptional\" : \"0\",\n        \"width\" : \"320\",\n        \"isColor\" : \"0\",\n        \"formattedType\" : \"Image (Grayscale 320 × 320)\",\n        \"hasSizeFlexibility\" : \"0\",\n        \"type\" : \"Image\",\n        \"shortDescription\" : \"\",\n        \"name\" : \"out_p6\"\n      }\n    ],\n    \"modelParameters\" : [\n\n    ],\n    \"specificationVersion\" : 5,\n    \"computePrecision\" : \"Float16\",\n    \"isUpdatable\" : \"0\",\n    \"availability\" : {\n      \"macOS\" : \"11.0\",\n      \"tvOS\" : \"14.0\",\n      \"watchOS\" : \"7.0\",\n      \"iOS\" : \"14.0\",\n      \"macCatalyst\" : \"14.0\"\n    },\n    \"neuralNetworkLayerTypeHistogram\" : {\n      \"Concat\" : 51,\n      \"ActivationLinear\" : 7,\n      \"ActivationReLU\" : 112,\n      \"UpsampleBiLinear\" : 38,\n      \"Add\" : 11,\n      \"BatchNorm\" : 112,\n      \"Convolution\" : 119,\n      \"ActivationSigmoid\" : 7,\n      \"PoolingMax\" : 33\n    },\n    \"modelType\" : {\n      \"name\" : \"MLModelType_neuralNetwork\"\n    },\n    \"userDefinedMetadata\" : {\n      \"com.github.apple.coremltools.version\" : \"4.1\",\n      \"com.github.apple.coremltools.source\" : \"torch==1.8.1+cu101\"\n    },\n    \"generatedClassName\" : \"segmentation\",\n    \"inputSchema\" : [\n      {\n        \"height\" : \"320\",\n        \"colorspace\" : \"RGB\",\n        \"isOptional\" : \"0\",\n        \"width\" : \"320\",\n        \"isColor\" : \"1\",\n        \"formattedType\" : \"Image (Color 320 × 320)\",\n        \"hasSizeFlexibility\" : \"0\",\n        \"type\" : \"Image\",\n        \"shortDescription\" : \"\",\n        \"name\" : \"in_0\"\n      }\n    ],\n    \"method\" : \"predict\"\n  }\n]"
  },
  {
    "path": "Sources/SemanticImage/segmentation.mlmodelc/model.espresso.net",
    "content": "{\n  \"layers\" : [\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.2\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.4\",\n      \"blob_weights\" : 3,\n      \"K\" : 3,\n      \"blob_biases\" : 1,\n      \"name\" : \"input.2\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"in_0\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.5\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.7\",\n      \"blob_weights\" : 7,\n      \"K\" : 64,\n      \"blob_biases\" : 5,\n      \"name\" : \"input.5\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.4\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.8\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.8\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.8\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.7\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.9\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.11\",\n      \"blob_weights\" : 11,\n      \"K\" : 16,\n      \"blob_biases\" : 9,\n      \"name\" : \"input.9\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.8\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.12\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.12\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.12\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.11\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.13\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.15\",\n      \"blob_weights\" : 15,\n      \"K\" : 16,\n      \"blob_biases\" : 13,\n      \"name\" : \"input.13\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.12\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.16\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.16\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.16\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.15\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.17\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.19\",\n      \"blob_weights\" : 19,\n      \"K\" : 16,\n      \"blob_biases\" : 17,\n      \"name\" : \"input.17\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.16\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.20\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.20\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.20\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.19\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.21\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.23\",\n      \"blob_weights\" : 23,\n      \"K\" : 16,\n      \"blob_biases\" : 21,\n      \"name\" : \"input.21\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.20\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.24\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.24\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.24\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.23\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.25\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.27\",\n      \"blob_weights\" : 27,\n      \"K\" : 16,\n      \"blob_biases\" : 25,\n      \"name\" : \"input.25\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.24\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 2,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.28\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 2,\n      \"pad_l\" : 2,\n      \"top\" : \"hx7.1\",\n      \"blob_weights\" : 31,\n      \"K\" : 16,\n      \"blob_biases\" : 29,\n      \"name\" : \"input.28\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 2,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.27\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 2,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.30\",\n      \"top\" : \"input.30\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.30\",\n      \"bottom\" : \"hx7.1,input.27\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.31\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.33\",\n      \"blob_weights\" : 35,\n      \"K\" : 32,\n      \"blob_biases\" : 33,\n      \"name\" : \"input.31\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.30\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx6dup.1\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.33\",\n      \"debug_info\" : \"hx6dup.1\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx6dup.1\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.34\",\n      \"top\" : \"input.34\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.34\",\n      \"bottom\" : \"hx6dup.1,input.23\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.35\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.37\",\n      \"blob_weights\" : 39,\n      \"K\" : 32,\n      \"blob_biases\" : 37,\n      \"name\" : \"input.35\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.34\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx5dup.1\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.37\",\n      \"debug_info\" : \"hx5dup.1\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx5dup.1\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.38\",\n      \"top\" : \"input.38\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.38\",\n      \"bottom\" : \"hx5dup.1,input.19\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.39\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.41\",\n      \"blob_weights\" : 43,\n      \"K\" : 32,\n      \"blob_biases\" : 41,\n      \"name\" : \"input.39\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.38\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx4dup.1\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.41\",\n      \"debug_info\" : \"hx4dup.1\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx4dup.1\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.42\",\n      \"top\" : \"input.42\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.42\",\n      \"bottom\" : \"hx4dup.1,input.15\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.43\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.45\",\n      \"blob_weights\" : 47,\n      \"K\" : 32,\n      \"blob_biases\" : 45,\n      \"name\" : \"input.43\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.42\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx3dup.1\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.45\",\n      \"debug_info\" : \"hx3dup.1\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx3dup.1\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.46\",\n      \"top\" : \"input.46\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.46\",\n      \"bottom\" : \"hx3dup.1,input.11\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.47\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.49\",\n      \"blob_weights\" : 51,\n      \"K\" : 32,\n      \"blob_biases\" : 49,\n      \"name\" : \"input.47\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.46\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx2dup.1\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.49\",\n      \"debug_info\" : \"hx2dup.1\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx2dup.1\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.50\",\n      \"top\" : \"input.50\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.50\",\n      \"bottom\" : \"hx2dup.1,input.7\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.51\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"hx1d.1\",\n      \"blob_weights\" : 55,\n      \"K\" : 32,\n      \"blob_biases\" : 53,\n      \"name\" : \"input.51\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.50\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"bottom\" : \"input.4,hx1d.1\",\n      \"alpha\" : 1,\n      \"operation\" : 0,\n      \"weights\" : {\n\n      },\n      \"fused_relu\" : 0,\n      \"debug_info\" : \"input.53\",\n      \"top\" : \"input.53\",\n      \"type\" : \"elementwise\",\n      \"name\" : \"input.53\",\n      \"beta\" : 0\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.54\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.54\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.54\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.53\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.55\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.57\",\n      \"blob_weights\" : 59,\n      \"K\" : 64,\n      \"blob_biases\" : 57,\n      \"name\" : \"input.55\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.54\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.58\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.60\",\n      \"blob_weights\" : 63,\n      \"K\" : 64,\n      \"blob_biases\" : 61,\n      \"name\" : \"input.58\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.57\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.61\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.61\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.61\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.60\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.62\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.64\",\n      \"blob_weights\" : 67,\n      \"K\" : 16,\n      \"blob_biases\" : 65,\n      \"name\" : \"input.62\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.61\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.65\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.65\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.65\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.64\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.66\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.68\",\n      \"blob_weights\" : 71,\n      \"K\" : 16,\n      \"blob_biases\" : 69,\n      \"name\" : \"input.66\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.65\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.69\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.69\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.69\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.68\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.70\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.72\",\n      \"blob_weights\" : 75,\n      \"K\" : 16,\n      \"blob_biases\" : 73,\n      \"name\" : \"input.70\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.69\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.73\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.73\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.73\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.72\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.74\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.76\",\n      \"blob_weights\" : 79,\n      \"K\" : 16,\n      \"blob_biases\" : 77,\n      \"name\" : \"input.74\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.73\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 2,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.77\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 2,\n      \"pad_l\" : 2,\n      \"top\" : \"hx6.1\",\n      \"blob_weights\" : 83,\n      \"K\" : 16,\n      \"blob_biases\" : 81,\n      \"name\" : \"input.77\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 2,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.76\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 2,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.79\",\n      \"top\" : \"input.79\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.79\",\n      \"bottom\" : \"hx6.1,input.76\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.80\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.82\",\n      \"blob_weights\" : 87,\n      \"K\" : 32,\n      \"blob_biases\" : 85,\n      \"name\" : \"input.80\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.79\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx5dup.2\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.82\",\n      \"debug_info\" : \"hx5dup.2\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx5dup.2\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.83\",\n      \"top\" : \"input.83\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.83\",\n      \"bottom\" : \"hx5dup.2,input.72\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.84\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.86\",\n      \"blob_weights\" : 91,\n      \"K\" : 32,\n      \"blob_biases\" : 89,\n      \"name\" : \"input.84\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.83\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx4dup.2\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.86\",\n      \"debug_info\" : \"hx4dup.2\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx4dup.2\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.87\",\n      \"top\" : \"input.87\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.87\",\n      \"bottom\" : \"hx4dup.2,input.68\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.88\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.90\",\n      \"blob_weights\" : 95,\n      \"K\" : 32,\n      \"blob_biases\" : 93,\n      \"name\" : \"input.88\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.87\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx3dup.2\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.90\",\n      \"debug_info\" : \"hx3dup.2\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx3dup.2\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.91\",\n      \"top\" : \"input.91\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.91\",\n      \"bottom\" : \"hx3dup.2,input.64\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.92\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.94\",\n      \"blob_weights\" : 99,\n      \"K\" : 32,\n      \"blob_biases\" : 97,\n      \"name\" : \"input.92\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.91\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx2dup.2\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.94\",\n      \"debug_info\" : \"hx2dup.2\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx2dup.2\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.95\",\n      \"top\" : \"input.95\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.95\",\n      \"bottom\" : \"hx2dup.2,input.60\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.96\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"hx1d.2\",\n      \"blob_weights\" : 103,\n      \"K\" : 32,\n      \"blob_biases\" : 101,\n      \"name\" : \"input.96\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.95\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"bottom\" : \"input.57,hx1d.2\",\n      \"alpha\" : 1,\n      \"operation\" : 0,\n      \"weights\" : {\n\n      },\n      \"fused_relu\" : 0,\n      \"debug_info\" : \"input.98\",\n      \"top\" : \"input.98\",\n      \"type\" : \"elementwise\",\n      \"name\" : \"input.98\",\n      \"beta\" : 0\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.99\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.99\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.99\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.98\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.100\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.102\",\n      \"blob_weights\" : 107,\n      \"K\" : 64,\n      \"blob_biases\" : 105,\n      \"name\" : \"input.100\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.99\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.103\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.105\",\n      \"blob_weights\" : 111,\n      \"K\" : 64,\n      \"blob_biases\" : 109,\n      \"name\" : \"input.103\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.102\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.106\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.106\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.106\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.105\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.107\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.109\",\n      \"blob_weights\" : 115,\n      \"K\" : 16,\n      \"blob_biases\" : 113,\n      \"name\" : \"input.107\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.106\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.110\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.110\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.110\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.109\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.111\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.113\",\n      \"blob_weights\" : 119,\n      \"K\" : 16,\n      \"blob_biases\" : 117,\n      \"name\" : \"input.111\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.110\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.114\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.114\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.114\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.113\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.115\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.117\",\n      \"blob_weights\" : 123,\n      \"K\" : 16,\n      \"blob_biases\" : 121,\n      \"name\" : \"input.115\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.114\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 2,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.118\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 2,\n      \"pad_l\" : 2,\n      \"top\" : \"hx5.1\",\n      \"blob_weights\" : 127,\n      \"K\" : 16,\n      \"blob_biases\" : 125,\n      \"name\" : \"input.118\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 2,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.117\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 2,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.120\",\n      \"top\" : \"input.120\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.120\",\n      \"bottom\" : \"hx5.1,input.117\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.121\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.123\",\n      \"blob_weights\" : 131,\n      \"K\" : 32,\n      \"blob_biases\" : 129,\n      \"name\" : \"input.121\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.120\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx4dup.3\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.123\",\n      \"debug_info\" : \"hx4dup.3\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx4dup.3\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.124\",\n      \"top\" : \"input.124\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.124\",\n      \"bottom\" : \"hx4dup.3,input.113\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.125\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.127\",\n      \"blob_weights\" : 135,\n      \"K\" : 32,\n      \"blob_biases\" : 133,\n      \"name\" : \"input.125\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.124\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx3dup.3\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.127\",\n      \"debug_info\" : \"hx3dup.3\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx3dup.3\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.128\",\n      \"top\" : \"input.128\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.128\",\n      \"bottom\" : \"hx3dup.3,input.109\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.129\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.131\",\n      \"blob_weights\" : 139,\n      \"K\" : 32,\n      \"blob_biases\" : 137,\n      \"name\" : \"input.129\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.128\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx2dup.3\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.131\",\n      \"debug_info\" : \"hx2dup.3\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx2dup.3\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.132\",\n      \"top\" : \"input.132\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.132\",\n      \"bottom\" : \"hx2dup.3,input.105\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.133\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"hx1d.3\",\n      \"blob_weights\" : 143,\n      \"K\" : 32,\n      \"blob_biases\" : 141,\n      \"name\" : \"input.133\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.132\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"bottom\" : \"input.102,hx1d.3\",\n      \"alpha\" : 1,\n      \"operation\" : 0,\n      \"weights\" : {\n\n      },\n      \"fused_relu\" : 0,\n      \"debug_info\" : \"input.135\",\n      \"top\" : \"input.135\",\n      \"type\" : \"elementwise\",\n      \"name\" : \"input.135\",\n      \"beta\" : 0\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.136\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.136\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.136\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.135\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.137\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.139\",\n      \"blob_weights\" : 147,\n      \"K\" : 64,\n      \"blob_biases\" : 145,\n      \"name\" : \"input.137\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.136\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.140\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.142\",\n      \"blob_weights\" : 151,\n      \"K\" : 64,\n      \"blob_biases\" : 149,\n      \"name\" : \"input.140\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.139\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.143\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.143\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.143\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.142\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.144\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.146\",\n      \"blob_weights\" : 155,\n      \"K\" : 16,\n      \"blob_biases\" : 153,\n      \"name\" : \"input.144\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.143\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.147\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.147\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.147\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.146\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.148\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.150\",\n      \"blob_weights\" : 159,\n      \"K\" : 16,\n      \"blob_biases\" : 157,\n      \"name\" : \"input.148\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.147\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 2,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.151\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 2,\n      \"pad_l\" : 2,\n      \"top\" : \"hx4.1\",\n      \"blob_weights\" : 163,\n      \"K\" : 16,\n      \"blob_biases\" : 161,\n      \"name\" : \"input.151\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 2,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.150\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 2,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.153\",\n      \"top\" : \"input.153\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.153\",\n      \"bottom\" : \"hx4.1,input.150\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.154\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.156\",\n      \"blob_weights\" : 167,\n      \"K\" : 32,\n      \"blob_biases\" : 165,\n      \"name\" : \"input.154\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.153\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx3dup.4\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.156\",\n      \"debug_info\" : \"hx3dup.4\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx3dup.4\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.157\",\n      \"top\" : \"input.157\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.157\",\n      \"bottom\" : \"hx3dup.4,input.146\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.158\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.160\",\n      \"blob_weights\" : 171,\n      \"K\" : 32,\n      \"blob_biases\" : 169,\n      \"name\" : \"input.158\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.157\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx2dup.4\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.160\",\n      \"debug_info\" : \"hx2dup.4\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx2dup.4\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.161\",\n      \"top\" : \"input.161\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.161\",\n      \"bottom\" : \"hx2dup.4,input.142\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.162\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"hx1d.4\",\n      \"blob_weights\" : 175,\n      \"K\" : 32,\n      \"blob_biases\" : 173,\n      \"name\" : \"input.162\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.161\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"bottom\" : \"input.139,hx1d.4\",\n      \"alpha\" : 1,\n      \"operation\" : 0,\n      \"weights\" : {\n\n      },\n      \"fused_relu\" : 0,\n      \"debug_info\" : \"input.164\",\n      \"top\" : \"input.164\",\n      \"type\" : \"elementwise\",\n      \"name\" : \"input.164\",\n      \"beta\" : 0\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.165\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.165\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.165\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.164\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.166\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.168\",\n      \"blob_weights\" : 179,\n      \"K\" : 64,\n      \"blob_biases\" : 177,\n      \"name\" : \"input.166\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.165\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.169\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.171\",\n      \"blob_weights\" : 183,\n      \"K\" : 64,\n      \"blob_biases\" : 181,\n      \"name\" : \"input.169\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.168\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 2,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.172\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 2,\n      \"pad_l\" : 2,\n      \"top\" : \"input.174\",\n      \"blob_weights\" : 187,\n      \"K\" : 16,\n      \"blob_biases\" : 185,\n      \"name\" : \"input.172\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 2,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.171\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 2,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 2\n    },\n    {\n      \"pad_r\" : 4,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.175\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 4,\n      \"pad_l\" : 4,\n      \"top\" : \"input.177\",\n      \"blob_weights\" : 191,\n      \"K\" : 16,\n      \"blob_biases\" : 189,\n      \"name\" : \"input.175\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 4,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.174\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 4,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 4\n    },\n    {\n      \"pad_r\" : 8,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.178\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 8,\n      \"pad_l\" : 8,\n      \"top\" : \"hx4.2\",\n      \"blob_weights\" : 195,\n      \"K\" : 16,\n      \"blob_biases\" : 193,\n      \"name\" : \"input.178\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 8,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.177\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 8,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 8\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.180\",\n      \"top\" : \"input.180\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.180\",\n      \"bottom\" : \"hx4.2,input.177\"\n    },\n    {\n      \"pad_r\" : 4,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.181\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 4,\n      \"pad_l\" : 4,\n      \"top\" : \"hx3d.1\",\n      \"blob_weights\" : 199,\n      \"K\" : 32,\n      \"blob_biases\" : 197,\n      \"name\" : \"input.181\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 4,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.180\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 4,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 4\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.183\",\n      \"top\" : \"input.183\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.183\",\n      \"bottom\" : \"hx3d.1,input.174\"\n    },\n    {\n      \"pad_r\" : 2,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.184\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 2,\n      \"pad_l\" : 2,\n      \"top\" : \"hx2d.1\",\n      \"blob_weights\" : 203,\n      \"K\" : 32,\n      \"blob_biases\" : 201,\n      \"name\" : \"input.184\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 2,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.183\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 2,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.186\",\n      \"top\" : \"input.186\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.186\",\n      \"bottom\" : \"hx2d.1,input.171\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.187\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"hx1d.5\",\n      \"blob_weights\" : 207,\n      \"K\" : 32,\n      \"blob_biases\" : 205,\n      \"name\" : \"input.187\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.186\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"bottom\" : \"input.168,hx1d.5\",\n      \"alpha\" : 1,\n      \"operation\" : 0,\n      \"weights\" : {\n\n      },\n      \"fused_relu\" : 0,\n      \"debug_info\" : \"input.189\",\n      \"top\" : \"input.189\",\n      \"type\" : \"elementwise\",\n      \"name\" : \"input.189\",\n      \"beta\" : 0\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.190\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.190\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.190\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.189\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.191\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.193\",\n      \"blob_weights\" : 211,\n      \"K\" : 64,\n      \"blob_biases\" : 209,\n      \"name\" : \"input.191\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.190\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.194\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.196\",\n      \"blob_weights\" : 215,\n      \"K\" : 64,\n      \"blob_biases\" : 213,\n      \"name\" : \"input.194\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.193\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 2,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.197\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 2,\n      \"pad_l\" : 2,\n      \"top\" : \"input.199\",\n      \"blob_weights\" : 219,\n      \"K\" : 16,\n      \"blob_biases\" : 217,\n      \"name\" : \"input.197\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 2,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.196\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 2,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 2\n    },\n    {\n      \"pad_r\" : 4,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.200\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 4,\n      \"pad_l\" : 4,\n      \"top\" : \"input.202\",\n      \"blob_weights\" : 223,\n      \"K\" : 16,\n      \"blob_biases\" : 221,\n      \"name\" : \"input.200\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 4,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.199\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 4,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 4\n    },\n    {\n      \"pad_r\" : 8,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.203\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 8,\n      \"pad_l\" : 8,\n      \"top\" : \"hx4.3\",\n      \"blob_weights\" : 227,\n      \"K\" : 16,\n      \"blob_biases\" : 225,\n      \"name\" : \"input.203\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 8,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.202\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 8,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 8\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.205\",\n      \"top\" : \"input.205\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.205\",\n      \"bottom\" : \"hx4.3,input.202\"\n    },\n    {\n      \"pad_r\" : 4,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.206\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 4,\n      \"pad_l\" : 4,\n      \"top\" : \"hx3d.2\",\n      \"blob_weights\" : 231,\n      \"K\" : 32,\n      \"blob_biases\" : 229,\n      \"name\" : \"input.206\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 4,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.205\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 4,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 4\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.208\",\n      \"top\" : \"input.208\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.208\",\n      \"bottom\" : \"hx3d.2,input.199\"\n    },\n    {\n      \"pad_r\" : 2,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.209\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 2,\n      \"pad_l\" : 2,\n      \"top\" : \"hx2d.2\",\n      \"blob_weights\" : 235,\n      \"K\" : 32,\n      \"blob_biases\" : 233,\n      \"name\" : \"input.209\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 2,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.208\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 2,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.211\",\n      \"top\" : \"input.211\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.211\",\n      \"bottom\" : \"hx2d.2,input.196\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.212\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"hx1d.6\",\n      \"blob_weights\" : 239,\n      \"K\" : 32,\n      \"blob_biases\" : 237,\n      \"name\" : \"input.212\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.211\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"bottom\" : \"input.193,hx1d.6\",\n      \"alpha\" : 1,\n      \"operation\" : 0,\n      \"weights\" : {\n\n      },\n      \"fused_relu\" : 0,\n      \"debug_info\" : \"input.214\",\n      \"top\" : \"input.214\",\n      \"type\" : \"elementwise\",\n      \"name\" : \"input.214\",\n      \"beta\" : 0\n    },\n    {\n      \"top\" : \"hx6up\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.214\",\n      \"debug_info\" : \"hx6up\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx6up\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.215\",\n      \"top\" : \"input.215\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.215\",\n      \"bottom\" : \"hx6up,input.189\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.216\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.218\",\n      \"blob_weights\" : 243,\n      \"K\" : 128,\n      \"blob_biases\" : 241,\n      \"name\" : \"input.216\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.215\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.219\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.221\",\n      \"blob_weights\" : 247,\n      \"K\" : 64,\n      \"blob_biases\" : 245,\n      \"name\" : \"input.219\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.218\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 2,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.222\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 2,\n      \"pad_l\" : 2,\n      \"top\" : \"input.224\",\n      \"blob_weights\" : 251,\n      \"K\" : 16,\n      \"blob_biases\" : 249,\n      \"name\" : \"input.222\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 2,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.221\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 2,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 2\n    },\n    {\n      \"pad_r\" : 4,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.225\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 4,\n      \"pad_l\" : 4,\n      \"top\" : \"input.227\",\n      \"blob_weights\" : 255,\n      \"K\" : 16,\n      \"blob_biases\" : 253,\n      \"name\" : \"input.225\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 4,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.224\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 4,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 4\n    },\n    {\n      \"pad_r\" : 8,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.228\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 8,\n      \"pad_l\" : 8,\n      \"top\" : \"hx4.4\",\n      \"blob_weights\" : 259,\n      \"K\" : 16,\n      \"blob_biases\" : 257,\n      \"name\" : \"input.228\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 8,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.227\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 8,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 8\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.230\",\n      \"top\" : \"input.230\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.230\",\n      \"bottom\" : \"hx4.4,input.227\"\n    },\n    {\n      \"pad_r\" : 4,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.231\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 4,\n      \"pad_l\" : 4,\n      \"top\" : \"hx3d\",\n      \"blob_weights\" : 263,\n      \"K\" : 32,\n      \"blob_biases\" : 261,\n      \"name\" : \"input.231\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 4,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.230\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 4,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 4\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.233\",\n      \"top\" : \"input.233\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.233\",\n      \"bottom\" : \"hx3d,input.224\"\n    },\n    {\n      \"pad_r\" : 2,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.234\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 2,\n      \"pad_l\" : 2,\n      \"top\" : \"hx2d\",\n      \"blob_weights\" : 267,\n      \"K\" : 32,\n      \"blob_biases\" : 265,\n      \"name\" : \"input.234\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 2,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.233\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 2,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.236\",\n      \"top\" : \"input.236\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.236\",\n      \"bottom\" : \"hx2d,input.221\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.237\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"hx1d.7\",\n      \"blob_weights\" : 271,\n      \"K\" : 32,\n      \"blob_biases\" : 269,\n      \"name\" : \"input.237\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.236\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"bottom\" : \"input.218,hx1d.7\",\n      \"alpha\" : 1,\n      \"operation\" : 0,\n      \"weights\" : {\n\n      },\n      \"fused_relu\" : 0,\n      \"debug_info\" : \"input.239\",\n      \"top\" : \"input.239\",\n      \"type\" : \"elementwise\",\n      \"name\" : \"input.239\",\n      \"beta\" : 0\n    },\n    {\n      \"top\" : \"hx5dup.3\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.239\",\n      \"debug_info\" : \"hx5dup.3\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx5dup.3\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.240\",\n      \"top\" : \"input.240\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.240\",\n      \"bottom\" : \"hx5dup.3,input.164\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.241\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.243\",\n      \"blob_weights\" : 275,\n      \"K\" : 128,\n      \"blob_biases\" : 273,\n      \"name\" : \"input.241\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.240\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.244\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.246\",\n      \"blob_weights\" : 279,\n      \"K\" : 64,\n      \"blob_biases\" : 277,\n      \"name\" : \"input.244\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.243\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.247\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.247\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.247\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.246\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.248\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.250\",\n      \"blob_weights\" : 283,\n      \"K\" : 16,\n      \"blob_biases\" : 281,\n      \"name\" : \"input.248\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.247\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.251\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.251\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.251\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.250\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.252\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.254\",\n      \"blob_weights\" : 287,\n      \"K\" : 16,\n      \"blob_biases\" : 285,\n      \"name\" : \"input.252\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.251\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 2,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.255\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 2,\n      \"pad_l\" : 2,\n      \"top\" : \"hx4\",\n      \"blob_weights\" : 291,\n      \"K\" : 16,\n      \"blob_biases\" : 289,\n      \"name\" : \"input.255\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 2,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.254\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 2,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.257\",\n      \"top\" : \"input.257\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.257\",\n      \"bottom\" : \"hx4,input.254\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.258\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.260\",\n      \"blob_weights\" : 295,\n      \"K\" : 32,\n      \"blob_biases\" : 293,\n      \"name\" : \"input.258\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.257\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx3dup.5\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.260\",\n      \"debug_info\" : \"hx3dup.5\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx3dup.5\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.261\",\n      \"top\" : \"input.261\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.261\",\n      \"bottom\" : \"hx3dup.5,input.250\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.262\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.264\",\n      \"blob_weights\" : 299,\n      \"K\" : 32,\n      \"blob_biases\" : 297,\n      \"name\" : \"input.262\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.261\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx2dup.5\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.264\",\n      \"debug_info\" : \"hx2dup.5\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx2dup.5\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.265\",\n      \"top\" : \"input.265\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.265\",\n      \"bottom\" : \"hx2dup.5,input.246\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.266\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"hx1d.8\",\n      \"blob_weights\" : 303,\n      \"K\" : 32,\n      \"blob_biases\" : 301,\n      \"name\" : \"input.266\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.265\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"bottom\" : \"input.243,hx1d.8\",\n      \"alpha\" : 1,\n      \"operation\" : 0,\n      \"weights\" : {\n\n      },\n      \"fused_relu\" : 0,\n      \"debug_info\" : \"input.268\",\n      \"top\" : \"input.268\",\n      \"type\" : \"elementwise\",\n      \"name\" : \"input.268\",\n      \"beta\" : 0\n    },\n    {\n      \"top\" : \"hx4dup.4\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.268\",\n      \"debug_info\" : \"hx4dup.4\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx4dup.4\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.269\",\n      \"top\" : \"input.269\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.269\",\n      \"bottom\" : \"hx4dup.4,input.135\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.270\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.272\",\n      \"blob_weights\" : 307,\n      \"K\" : 128,\n      \"blob_biases\" : 305,\n      \"name\" : \"input.270\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.269\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.273\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.275\",\n      \"blob_weights\" : 311,\n      \"K\" : 64,\n      \"blob_biases\" : 309,\n      \"name\" : \"input.273\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.272\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.276\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.276\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.276\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.275\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.277\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.279\",\n      \"blob_weights\" : 315,\n      \"K\" : 16,\n      \"blob_biases\" : 313,\n      \"name\" : \"input.277\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.276\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.280\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.280\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.280\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.279\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.281\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.283\",\n      \"blob_weights\" : 319,\n      \"K\" : 16,\n      \"blob_biases\" : 317,\n      \"name\" : \"input.281\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.280\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.284\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.284\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.284\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.283\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.285\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.287\",\n      \"blob_weights\" : 323,\n      \"K\" : 16,\n      \"blob_biases\" : 321,\n      \"name\" : \"input.285\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.284\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 2,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.288\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 2,\n      \"pad_l\" : 2,\n      \"top\" : \"hx5\",\n      \"blob_weights\" : 327,\n      \"K\" : 16,\n      \"blob_biases\" : 325,\n      \"name\" : \"input.288\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 2,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.287\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 2,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.290\",\n      \"top\" : \"input.290\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.290\",\n      \"bottom\" : \"hx5,input.287\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.291\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.293\",\n      \"blob_weights\" : 331,\n      \"K\" : 32,\n      \"blob_biases\" : 329,\n      \"name\" : \"input.291\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.290\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx4dup.5\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.293\",\n      \"debug_info\" : \"hx4dup.5\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx4dup.5\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.294\",\n      \"top\" : \"input.294\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.294\",\n      \"bottom\" : \"hx4dup.5,input.283\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.295\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.297\",\n      \"blob_weights\" : 335,\n      \"K\" : 32,\n      \"blob_biases\" : 333,\n      \"name\" : \"input.295\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.294\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx3dup.6\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.297\",\n      \"debug_info\" : \"hx3dup.6\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx3dup.6\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.298\",\n      \"top\" : \"input.298\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.298\",\n      \"bottom\" : \"hx3dup.6,input.279\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.299\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.301\",\n      \"blob_weights\" : 339,\n      \"K\" : 32,\n      \"blob_biases\" : 337,\n      \"name\" : \"input.299\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.298\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx2dup.6\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.301\",\n      \"debug_info\" : \"hx2dup.6\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx2dup.6\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.302\",\n      \"top\" : \"input.302\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.302\",\n      \"bottom\" : \"hx2dup.6,input.275\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.303\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"hx1d.9\",\n      \"blob_weights\" : 343,\n      \"K\" : 32,\n      \"blob_biases\" : 341,\n      \"name\" : \"input.303\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.302\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"bottom\" : \"input.272,hx1d.9\",\n      \"alpha\" : 1,\n      \"operation\" : 0,\n      \"weights\" : {\n\n      },\n      \"fused_relu\" : 0,\n      \"debug_info\" : \"input.305\",\n      \"top\" : \"input.305\",\n      \"type\" : \"elementwise\",\n      \"name\" : \"input.305\",\n      \"beta\" : 0\n    },\n    {\n      \"top\" : \"hx3dup.7\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.305\",\n      \"debug_info\" : \"hx3dup.7\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx3dup.7\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.306\",\n      \"top\" : \"input.306\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.306\",\n      \"bottom\" : \"hx3dup.7,input.98\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.307\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.309\",\n      \"blob_weights\" : 347,\n      \"K\" : 128,\n      \"blob_biases\" : 345,\n      \"name\" : \"input.307\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.306\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.310\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.312\",\n      \"blob_weights\" : 351,\n      \"K\" : 64,\n      \"blob_biases\" : 349,\n      \"name\" : \"input.310\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.309\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.313\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.313\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.313\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.312\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.314\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.316\",\n      \"blob_weights\" : 355,\n      \"K\" : 16,\n      \"blob_biases\" : 353,\n      \"name\" : \"input.314\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.313\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.317\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.317\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.317\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.316\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.318\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.320\",\n      \"blob_weights\" : 359,\n      \"K\" : 16,\n      \"blob_biases\" : 357,\n      \"name\" : \"input.318\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.317\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.321\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.321\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.321\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.320\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.322\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.324\",\n      \"blob_weights\" : 363,\n      \"K\" : 16,\n      \"blob_biases\" : 361,\n      \"name\" : \"input.322\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.321\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.325\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.325\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.325\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.324\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.326\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.328\",\n      \"blob_weights\" : 367,\n      \"K\" : 16,\n      \"blob_biases\" : 365,\n      \"name\" : \"input.326\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.325\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 2,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.329\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 2,\n      \"pad_l\" : 2,\n      \"top\" : \"hx6\",\n      \"blob_weights\" : 371,\n      \"K\" : 16,\n      \"blob_biases\" : 369,\n      \"name\" : \"input.329\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 2,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.328\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 2,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.331\",\n      \"top\" : \"input.331\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.331\",\n      \"bottom\" : \"hx6,input.328\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.332\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.334\",\n      \"blob_weights\" : 375,\n      \"K\" : 32,\n      \"blob_biases\" : 373,\n      \"name\" : \"input.332\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.331\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx5dup.4\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.334\",\n      \"debug_info\" : \"hx5dup.4\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx5dup.4\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.335\",\n      \"top\" : \"input.335\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.335\",\n      \"bottom\" : \"hx5dup.4,input.324\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.336\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.338\",\n      \"blob_weights\" : 379,\n      \"K\" : 32,\n      \"blob_biases\" : 377,\n      \"name\" : \"input.336\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.335\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx4dup.6\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.338\",\n      \"debug_info\" : \"hx4dup.6\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx4dup.6\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.339\",\n      \"top\" : \"input.339\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.339\",\n      \"bottom\" : \"hx4dup.6,input.320\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.340\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.342\",\n      \"blob_weights\" : 383,\n      \"K\" : 32,\n      \"blob_biases\" : 381,\n      \"name\" : \"input.340\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.339\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx3dup.8\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.342\",\n      \"debug_info\" : \"hx3dup.8\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx3dup.8\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.343\",\n      \"top\" : \"input.343\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.343\",\n      \"bottom\" : \"hx3dup.8,input.316\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.344\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.346\",\n      \"blob_weights\" : 387,\n      \"K\" : 32,\n      \"blob_biases\" : 385,\n      \"name\" : \"input.344\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.343\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx2dup.7\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.346\",\n      \"debug_info\" : \"hx2dup.7\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx2dup.7\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.347\",\n      \"top\" : \"input.347\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.347\",\n      \"bottom\" : \"hx2dup.7,input.312\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.348\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"hx1d.10\",\n      \"blob_weights\" : 391,\n      \"K\" : 32,\n      \"blob_biases\" : 389,\n      \"name\" : \"input.348\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.347\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"bottom\" : \"input.309,hx1d.10\",\n      \"alpha\" : 1,\n      \"operation\" : 0,\n      \"weights\" : {\n\n      },\n      \"fused_relu\" : 0,\n      \"debug_info\" : \"input.350\",\n      \"top\" : \"input.350\",\n      \"type\" : \"elementwise\",\n      \"name\" : \"input.350\",\n      \"beta\" : 0\n    },\n    {\n      \"top\" : \"hx2dup.8\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.350\",\n      \"debug_info\" : \"hx2dup.8\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx2dup.8\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.351\",\n      \"top\" : \"input.351\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.351\",\n      \"bottom\" : \"hx2dup.8,input.53\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.352\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.354\",\n      \"blob_weights\" : 395,\n      \"K\" : 128,\n      \"blob_biases\" : 393,\n      \"name\" : \"input.352\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.351\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.355\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.357\",\n      \"blob_weights\" : 399,\n      \"K\" : 64,\n      \"blob_biases\" : 397,\n      \"name\" : \"input.355\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.354\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.358\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.358\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.358\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.357\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.359\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.361\",\n      \"blob_weights\" : 403,\n      \"K\" : 16,\n      \"blob_biases\" : 401,\n      \"name\" : \"input.359\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.358\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.362\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.362\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.362\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.361\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.363\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.365\",\n      \"blob_weights\" : 407,\n      \"K\" : 16,\n      \"blob_biases\" : 405,\n      \"name\" : \"input.363\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.362\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.366\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.366\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.366\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.365\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.367\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.369\",\n      \"blob_weights\" : 411,\n      \"K\" : 16,\n      \"blob_biases\" : 409,\n      \"name\" : \"input.367\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.366\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.370\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.370\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.370\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.369\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.371\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.373\",\n      \"blob_weights\" : 415,\n      \"K\" : 16,\n      \"blob_biases\" : 413,\n      \"name\" : \"input.371\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.370\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 0,\n      \"debug_info\" : \"input.374\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"size_x\" : 2,\n      \"top\" : \"input.374\",\n      \"top_shape_style\" : 0,\n      \"stride_x\" : 2,\n      \"avg_or_max\" : 1,\n      \"average_count_exclude_padding\" : 1,\n      \"type\" : \"pool\",\n      \"name\" : \"input.374\",\n      \"pad_t\" : 0,\n      \"stride_y\" : 2,\n      \"bottom\" : \"input.373\",\n      \"weights\" : {\n\n      },\n      \"pad_mode\" : 2,\n      \"size_y\" : 2,\n      \"pad_value\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.375\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.377\",\n      \"blob_weights\" : 419,\n      \"K\" : 16,\n      \"blob_biases\" : 417,\n      \"name\" : \"input.375\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.374\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 2,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.378\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 2,\n      \"pad_l\" : 2,\n      \"top\" : \"hx7\",\n      \"blob_weights\" : 423,\n      \"K\" : 16,\n      \"blob_biases\" : 421,\n      \"name\" : \"input.378\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 2,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.377\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"dilation_x\" : 2,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1,\n      \"dilation_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.380\",\n      \"top\" : \"input.380\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.380\",\n      \"bottom\" : \"hx7,input.377\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.381\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.383\",\n      \"blob_weights\" : 427,\n      \"K\" : 32,\n      \"blob_biases\" : 425,\n      \"name\" : \"input.381\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.380\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx6dup\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.383\",\n      \"debug_info\" : \"hx6dup\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx6dup\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.384\",\n      \"top\" : \"input.384\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.384\",\n      \"bottom\" : \"hx6dup,input.373\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.385\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.387\",\n      \"blob_weights\" : 431,\n      \"K\" : 32,\n      \"blob_biases\" : 429,\n      \"name\" : \"input.385\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.384\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx5dup\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.387\",\n      \"debug_info\" : \"hx5dup\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx5dup\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.388\",\n      \"top\" : \"input.388\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.388\",\n      \"bottom\" : \"hx5dup,input.369\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.389\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.391\",\n      \"blob_weights\" : 435,\n      \"K\" : 32,\n      \"blob_biases\" : 433,\n      \"name\" : \"input.389\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.388\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx4dup\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.391\",\n      \"debug_info\" : \"hx4dup\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx4dup\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.392\",\n      \"top\" : \"input.392\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.392\",\n      \"bottom\" : \"hx4dup,input.365\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.393\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.395\",\n      \"blob_weights\" : 439,\n      \"K\" : 32,\n      \"blob_biases\" : 437,\n      \"name\" : \"input.393\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.392\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx3dup\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.395\",\n      \"debug_info\" : \"hx3dup\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx3dup\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.396\",\n      \"top\" : \"input.396\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.396\",\n      \"bottom\" : \"hx3dup,input.361\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.397\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.399\",\n      \"blob_weights\" : 443,\n      \"K\" : 32,\n      \"blob_biases\" : 441,\n      \"name\" : \"input.397\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 16,\n      \"bottom\" : \"input.396\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"hx2dup\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.399\",\n      \"debug_info\" : \"hx2dup\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"hx2dup\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.400\",\n      \"top\" : \"input.400\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.400\",\n      \"bottom\" : \"hx2dup,input.357\"\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 1,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.401\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"hx1d\",\n      \"blob_weights\" : 447,\n      \"K\" : 32,\n      \"blob_biases\" : 445,\n      \"name\" : \"input.401\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 64,\n      \"bottom\" : \"input.400\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"bottom\" : \"input.354,hx1d\",\n      \"alpha\" : 1,\n      \"operation\" : 0,\n      \"weights\" : {\n\n      },\n      \"fused_relu\" : 0,\n      \"debug_info\" : \"input.403\",\n      \"top\" : \"input.403\",\n      \"type\" : \"elementwise\",\n      \"name\" : \"input.403\",\n      \"beta\" : 0\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 0,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"tar\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"tar\",\n      \"blob_weights\" : 451,\n      \"K\" : 64,\n      \"blob_biases\" : 449,\n      \"name\" : \"tar\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 1,\n      \"bottom\" : \"input.403\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 0,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.404\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.404\",\n      \"blob_weights\" : 455,\n      \"K\" : 64,\n      \"blob_biases\" : 453,\n      \"name\" : \"input.404\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 1,\n      \"bottom\" : \"input.350\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"d2\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 2,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.404\",\n      \"debug_info\" : \"d2\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"d2\",\n      \"scaling_factor_y\" : 2\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 0,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.405\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.405\",\n      \"blob_weights\" : 459,\n      \"K\" : 64,\n      \"blob_biases\" : 457,\n      \"name\" : \"input.405\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 1,\n      \"bottom\" : \"input.305\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"d3\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 4,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.405\",\n      \"debug_info\" : \"d3\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"d3\",\n      \"scaling_factor_y\" : 4\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 0,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.406\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.406\",\n      \"blob_weights\" : 463,\n      \"K\" : 64,\n      \"blob_biases\" : 461,\n      \"name\" : \"input.406\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 1,\n      \"bottom\" : \"input.268\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"d4\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 8,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.406\",\n      \"debug_info\" : \"d4\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"d4\",\n      \"scaling_factor_y\" : 8\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 0,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.407\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.407\",\n      \"blob_weights\" : 467,\n      \"K\" : 64,\n      \"blob_biases\" : 465,\n      \"name\" : \"input.407\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 1,\n      \"bottom\" : \"input.239\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"d5\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 16,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.407\",\n      \"debug_info\" : \"d5\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"d5\",\n      \"scaling_factor_y\" : 16\n    },\n    {\n      \"pad_r\" : 1,\n      \"fused_relu\" : 0,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input.408\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 1,\n      \"pad_l\" : 1,\n      \"top\" : \"input.408\",\n      \"blob_weights\" : 471,\n      \"K\" : 64,\n      \"blob_biases\" : 469,\n      \"name\" : \"input.408\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 1,\n      \"has_biases\" : 1,\n      \"C\" : 1,\n      \"bottom\" : \"input.214\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 3,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 3,\n      \"n_parallel\" : 1\n    },\n    {\n      \"top\" : \"d6\",\n      \"use_fractional_scale_factors\" : false,\n      \"weights\" : {\n\n      },\n      \"fractional_scaling_factor_y\" : 1,\n      \"type\" : \"upsample\",\n      \"scaling_factor_x\" : 32,\n      \"mode\" : 1,\n      \"align_corners\" : 0,\n      \"bottom\" : \"input.408\",\n      \"debug_info\" : \"d6\",\n      \"fractional_scaling_factor_x\" : 1,\n      \"is_legacy_mode\" : 0,\n      \"name\" : \"d6\",\n      \"scaling_factor_y\" : 32\n    },\n    {\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"input.409\",\n      \"top\" : \"input.409\",\n      \"type\" : \"concat\",\n      \"name\" : \"input.409\",\n      \"bottom\" : \"tar,d2,d3,d4,d5,d6\"\n    },\n    {\n      \"pad_r\" : 0,\n      \"fused_relu\" : 0,\n      \"fused_tanh\" : 0,\n      \"debug_info\" : \"input\",\n      \"pad_fill_mode\" : 0,\n      \"pad_b\" : 0,\n      \"pad_l\" : 0,\n      \"top\" : \"input\",\n      \"blob_weights\" : 475,\n      \"K\" : 6,\n      \"blob_biases\" : 473,\n      \"name\" : \"input\",\n      \"has_batch_norm\" : 0,\n      \"type\" : \"convolution\",\n      \"n_groups\" : 1,\n      \"pad_t\" : 0,\n      \"has_biases\" : 1,\n      \"C\" : 1,\n      \"bottom\" : \"input.409\",\n      \"weights\" : {\n\n      },\n      \"Nx\" : 1,\n      \"pad_mode\" : 0,\n      \"pad_value\" : 0,\n      \"Ny\" : 1,\n      \"n_parallel\" : 1\n    },\n    {\n      \"bottom\" : \"input\",\n      \"weights\" : {\n\n      },\n      \"mode\" : 3,\n      \"debug_info\" : \"2169\",\n      \"top\" : \"out_a0\",\n      \"type\" : \"activation\",\n      \"name\" : \"2169\"\n    },\n    {\n      \"bottom\" : \"tar\",\n      \"weights\" : {\n\n      },\n      \"mode\" : 3,\n      \"debug_info\" : \"2170\",\n      \"top\" : \"out_a1\",\n      \"type\" : \"activation\",\n      \"name\" : \"2170\"\n    },\n    {\n      \"bottom\" : \"d2\",\n      \"weights\" : {\n\n      },\n      \"mode\" : 3,\n      \"debug_info\" : \"2171\",\n      \"top\" : \"out_a2\",\n      \"type\" : \"activation\",\n      \"name\" : \"2171\"\n    },\n    {\n      \"bottom\" : \"d3\",\n      \"weights\" : {\n\n      },\n      \"mode\" : 3,\n      \"debug_info\" : \"2172\",\n      \"top\" : \"out_a3\",\n      \"type\" : \"activation\",\n      \"name\" : \"2172\"\n    },\n    {\n      \"bottom\" : \"d4\",\n      \"weights\" : {\n\n      },\n      \"mode\" : 3,\n      \"debug_info\" : \"2173\",\n      \"top\" : \"out_a4\",\n      \"type\" : \"activation\",\n      \"name\" : \"2173\"\n    },\n    {\n      \"bottom\" : \"d5\",\n      \"weights\" : {\n\n      },\n      \"mode\" : 3,\n      \"debug_info\" : \"2174\",\n      \"top\" : \"out_a5\",\n      \"type\" : \"activation\",\n      \"name\" : \"2174\"\n    },\n    {\n      \"bottom\" : \"d6\",\n      \"weights\" : {\n\n      },\n      \"mode\" : 3,\n      \"debug_info\" : \"2175\",\n      \"top\" : \"out_a6\",\n      \"type\" : \"activation\",\n      \"name\" : \"2175\"\n    },\n    {\n      \"bottom\" : \"out_a0\",\n      \"alpha\" : 255,\n      \"beta\" : 0,\n      \"mode\" : 6,\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"out_p0\",\n      \"top\" : \"out_p0\",\n      \"type\" : \"activation\",\n      \"name\" : \"out_p0\",\n      \"attributes\" : {\n        \"is_output\" : 1\n      }\n    },\n    {\n      \"bottom\" : \"out_a1\",\n      \"alpha\" : 255,\n      \"beta\" : 0,\n      \"mode\" : 6,\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"out_p1\",\n      \"top\" : \"out_p1\",\n      \"type\" : \"activation\",\n      \"name\" : \"out_p1\",\n      \"attributes\" : {\n        \"is_output\" : 1\n      }\n    },\n    {\n      \"bottom\" : \"out_a2\",\n      \"alpha\" : 255,\n      \"beta\" : 0,\n      \"mode\" : 6,\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"out_p2\",\n      \"top\" : \"out_p2\",\n      \"type\" : \"activation\",\n      \"name\" : \"out_p2\",\n      \"attributes\" : {\n        \"is_output\" : 1\n      }\n    },\n    {\n      \"bottom\" : \"out_a3\",\n      \"alpha\" : 255,\n      \"beta\" : 0,\n      \"mode\" : 6,\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"out_p3\",\n      \"top\" : \"out_p3\",\n      \"type\" : \"activation\",\n      \"name\" : \"out_p3\",\n      \"attributes\" : {\n        \"is_output\" : 1\n      }\n    },\n    {\n      \"bottom\" : \"out_a4\",\n      \"alpha\" : 255,\n      \"beta\" : 0,\n      \"mode\" : 6,\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"out_p4\",\n      \"top\" : \"out_p4\",\n      \"type\" : \"activation\",\n      \"name\" : \"out_p4\",\n      \"attributes\" : {\n        \"is_output\" : 1\n      }\n    },\n    {\n      \"bottom\" : \"out_a5\",\n      \"alpha\" : 255,\n      \"beta\" : 0,\n      \"mode\" : 6,\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"out_p5\",\n      \"top\" : \"out_p5\",\n      \"type\" : \"activation\",\n      \"name\" : \"out_p5\",\n      \"attributes\" : {\n        \"is_output\" : 1\n      }\n    },\n    {\n      \"bottom\" : \"out_a6\",\n      \"alpha\" : 255,\n      \"beta\" : 0,\n      \"mode\" : 6,\n      \"weights\" : {\n\n      },\n      \"debug_info\" : \"out_p6\",\n      \"top\" : \"out_p6\",\n      \"type\" : \"activation\",\n      \"name\" : \"out_p6\",\n      \"attributes\" : {\n        \"is_output\" : 1\n      }\n    }\n  ],\n  \"transform_params\" : {\n    \"in_0\" : {\n      \"bias_a\" : 0,\n      \"bias_g\" : 0,\n      \"bias_r\" : 0,\n      \"bias_b\" : 0,\n      \"center_mean\" : 0,\n      \"is_network_bgr\" : 0,\n      \"scale\" : 0.0039215688593685627\n    }\n  },\n  \"storage\" : \"model.espresso.weights\",\n  \"metadata_in_weights\" : [\n\n  ],\n  \"properties\" : {\n\n  },\n  \"analyses\" : {\n\n  },\n  \"format_version\" : 200\n}"
  },
  {
    "path": "Sources/SemanticImage/segmentation.mlmodelc/model.espresso.shape",
    "content": "{\n  \"layer_shapes\" : {\n    \"input.95\" : {\n      \"k\" : 32,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.354\" : {\n      \"k\" : 64,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.41\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.369\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.383\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.403\" : {\n      \"k\" : 64,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"tar\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.16\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"hx4.4\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.208\" : {\n      \"k\" : 32,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx5dup.4\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.251\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.46\" : {\n      \"k\" : 32,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.280\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"hx6dup.1\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"out_p6\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.76\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx6dup\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.373\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.105\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.388\" : {\n      \"k\" : 32,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.8\" : {\n      \"k\" : 16,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.408\" : {\n      \"k\" : 1,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx2dup.1\" : {\n      \"k\" : 16,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.227\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"hx5.1\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.27\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx1d.2\" : {\n      \"k\" : 64,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.82\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.305\" : {\n      \"k\" : 64,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"hx2dup.6\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.57\" : {\n      \"k\" : 64,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.334\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx1d.10\" : {\n      \"k\" : 64,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.392\" : {\n      \"k\" : 32,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.124\" : {\n      \"k\" : 32,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.139\" : {\n      \"k\" : 64,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.87\" : {\n      \"k\" : 32,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"hx3d\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.33\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx3dup.3\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.168\" : {\n      \"k\" : 64,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.153\" : {\n      \"k\" : 32,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.202\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.246\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.260\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.275\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"hx3dup.8\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.38\" : {\n      \"k\" : 32,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.324\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.339\" : {\n      \"k\" : 32,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.114\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx4dup.5\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.68\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.143\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"hx1d.3\" : {\n      \"k\" : 64,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"hx2d\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.221\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"hx5dup.2\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.98\" : {\n      \"k\" : 64,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.236\" : {\n      \"k\" : 32,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.250\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.265\" : {\n      \"k\" : 32,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.294\" : {\n      \"k\" : 32,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.19\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.343\" : {\n      \"k\" : 32,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.20\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.358\" : {\n      \"k\" : 16,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.387\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.4\" : {\n      \"k\" : 64,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.49\" : {\n      \"k\" : 16,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.407\" : {\n      \"k\" : 1,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.50\" : {\n      \"k\" : 32,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.177\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.211\" : {\n      \"k\" : 32,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.79\" : {\n      \"k\" : 32,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.240\" : {\n      \"k\" : 128,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"hx4dup\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"hx1d\" : {\n      \"k\" : 64,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.284\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx2dup.4\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"hx1d.4\" : {\n      \"k\" : 64,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.362\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.377\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.391\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.123\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.109\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"hx3dup.1\" : {\n      \"k\" : 16,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"hx6.1\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"out_a0\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.196\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.230\" : {\n      \"k\" : 32,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.61\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"hx3dup.6\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.309\" : {\n      \"k\" : 64,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.91\" : {\n      \"k\" : 32,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.338\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.113\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"hx4dup.3\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"hx2d.1\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.396\" : {\n      \"k\" : 32,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.142\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.128\" : {\n      \"k\" : 32,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.12\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.157\" : {\n      \"k\" : 32,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.171\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.186\" : {\n      \"k\" : 32,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"hx1d.5\" : {\n      \"k\" : 64,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.42\" : {\n      \"k\" : 32,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.264\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.279\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.293\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.313\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.72\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.328\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.342\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"out_a1\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.357\" : {\n      \"k\" : 16,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"out_p0\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.132\" : {\n      \"k\" : 32,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.406\" : {\n      \"k\" : 1,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.147\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.161\" : {\n      \"k\" : 32,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.190\" : {\n      \"k\" : 64,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.23\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.254\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.269\" : {\n      \"k\" : 128,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.283\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.298\" : {\n      \"k\" : 32,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"hx2d.2\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx2dup.2\" : {\n      \"k\" : 16,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.53\" : {\n      \"k\" : 64,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.347\" : {\n      \"k\" : 32,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.361\" : {\n      \"k\" : 16,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.83\" : {\n      \"k\" : 32,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"hx1d.6\" : {\n      \"k\" : 64,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx2dup\" : {\n      \"k\" : 16,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.180\" : {\n      \"k\" : 32,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"hx2dup.7\" : {\n      \"k\" : 16,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.215\" : {\n      \"k\" : 128,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"out_a2\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"out_p1\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"hx3dup.4\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.34\" : {\n      \"k\" : 32,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"hx7.1\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.351\" : {\n      \"k\" : 128,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"in_0\" : {\n      \"k\" : 3,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.366\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.380\" : {\n      \"k\" : 32,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx4dup.1\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.64\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.127\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.400\" : {\n      \"k\" : 32,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.395\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.156\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.205\" : {\n      \"k\" : 32,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.94\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"hx4dup.6\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.69\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.15\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.312\" : {\n      \"k\" : 16,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"hx1d.7\" : {\n      \"k\" : 64,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.370\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.99\" : {\n      \"k\" : 64,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.102\" : {\n      \"k\" : 64,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.45\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.117\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.131\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"hx5dup.3\" : {\n      \"k\" : 64,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.405\" : {\n      \"k\" : 1,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.146\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.160\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"out_a3\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"out_p2\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.224\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.239\" : {\n      \"k\" : 64,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.268\" : {\n      \"k\" : 64,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.302\" : {\n      \"k\" : 32,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.297\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"hx5dup\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.317\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.331\" : {\n      \"k\" : 32,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.346\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"hx4\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.136\" : {\n      \"k\" : 64,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.150\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.165\" : {\n      \"k\" : 64,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"hx5\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx2dup.5\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.214\" : {\n      \"k\" : 64,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx1d.8\" : {\n      \"k\" : 64,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"hx6\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.243\" : {\n      \"k\" : 64,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.272\" : {\n      \"k\" : 64,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"hx3dup.2\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.86\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.287\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx7\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.321\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"out_a4\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.350\" : {\n      \"k\" : 64,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"out_p3\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.365\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"hx3dup.7\" : {\n      \"k\" : 64,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"hx3d.1\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.37\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"d2\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.199\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.233\" : {\n      \"k\" : 32,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"d3\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"hx4dup.4\" : {\n      \"k\" : 64,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"d4\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"d5\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"d6\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"hx5dup.1\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.384\" : {\n      \"k\" : 32,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"hx1d.9\" : {\n      \"k\" : 64,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.399\" : {\n      \"k\" : 16,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.404\" : {\n      \"k\" : 1,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.174\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.73\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.189\" : {\n      \"k\" : 64,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"out_a5\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"out_p4\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.301\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.316\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.7\" : {\n      \"k\" : 16,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"hx4.1\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx3d.2\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.24\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.374\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.106\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.120\" : {\n      \"k\" : 32,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.135\" : {\n      \"k\" : 64,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.409\" : {\n      \"k\" : 6,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.164\" : {\n      \"k\" : 64,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"hx2dup.3\" : {\n      \"k\" : 16,\n      \"w\" : 80,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 80\n    },\n    \"input.54\" : {\n      \"k\" : 64,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"hx6up\" : {\n      \"k\" : 64,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.193\" : {\n      \"k\" : 64,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx3dup\" : {\n      \"k\" : 16,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.257\" : {\n      \"k\" : 32,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.30\" : {\n      \"k\" : 32,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx4.2\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.306\" : {\n      \"k\" : 128,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.320\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"hx2dup.8\" : {\n      \"k\" : 64,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.335\" : {\n      \"k\" : 32,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.60\" : {\n      \"k\" : 16,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.110\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"out_a6\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"hx3dup.5\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"out_p5\" : {\n      \"k\" : 1,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    },\n    \"input.183\" : {\n      \"k\" : 32,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.90\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.218\" : {\n      \"k\" : 64,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"hx4.3\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"input.261\" : {\n      \"k\" : 32,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.65\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.247\" : {\n      \"k\" : 16,\n      \"w\" : 20,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 20\n    },\n    \"input.11\" : {\n      \"k\" : 16,\n      \"w\" : 160,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 160\n    },\n    \"input.290\" : {\n      \"k\" : 32,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx4dup.2\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.276\" : {\n      \"k\" : 16,\n      \"w\" : 40,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 40\n    },\n    \"input.325\" : {\n      \"k\" : 16,\n      \"w\" : 10,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 10\n    },\n    \"hx1d.1\" : {\n      \"k\" : 64,\n      \"w\" : 320,\n      \"n\" : 1,\n      \"_rank\" : 4,\n      \"h\" : 320\n    }\n  }\n}"
  },
  {
    "path": "Sources/SemanticImage/segmentation.swift",
    "content": "//\n// segmentation.swift\n//\n// This file was automatically generated and should not be edited.\n//\n\nimport CoreML\n\n\n/// Model Prediction Input Type\n@available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *)\nclass segmentationInput : MLFeatureProvider {\n\n    /// in_0 as color (kCVPixelFormatType_32BGRA) image buffer, 320 pixels wide by 320 pixels high\n    var in_0: CVPixelBuffer\n\n    var featureNames: Set<String> {\n        get {\n            return [\"in_0\"]\n        }\n    }\n    \n    func featureValue(for featureName: String) -> MLFeatureValue? {\n        if (featureName == \"in_0\") {\n            return MLFeatureValue(pixelBuffer: in_0)\n        }\n        return nil\n    }\n    \n    init(in_0: CVPixelBuffer) {\n        self.in_0 = in_0\n    }\n\n    convenience init(in_0With in_0: CGImage) throws {\n        self.init(in_0: try MLFeatureValue(cgImage: in_0, pixelsWide: 320, pixelsHigh: 320, pixelFormatType: kCVPixelFormatType_32ARGB, options: nil).imageBufferValue!)\n    }\n\n    convenience init(in_0At in_0: URL) throws {\n        self.init(in_0: try MLFeatureValue(imageAt: in_0, pixelsWide: 320, pixelsHigh: 320, pixelFormatType: kCVPixelFormatType_32ARGB, options: nil).imageBufferValue!)\n    }\n\n    func setIn_0(with in_0: CGImage) throws  {\n        self.in_0 = try MLFeatureValue(cgImage: in_0, pixelsWide: 320, pixelsHigh: 320, pixelFormatType: kCVPixelFormatType_32ARGB, options: nil).imageBufferValue!\n    }\n\n    func setIn_0(with in_0: URL) throws  {\n        self.in_0 = try MLFeatureValue(imageAt: in_0, pixelsWide: 320, pixelsHigh: 320, pixelFormatType: kCVPixelFormatType_32ARGB, options: nil).imageBufferValue!\n    }\n\n}\n\n\n/// Model Prediction Output Type\n@available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *)\nclass segmentationOutput : MLFeatureProvider {\n\n    /// Source provided by CoreML\n    private let provider : MLFeatureProvider\n\n    /// out_p0 as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 320 pixels wide by 320 pixels high\n    lazy var out_p0: CVPixelBuffer = {\n        [unowned self] in return self.provider.featureValue(for: \"out_p0\")!.imageBufferValue\n    }()!\n\n    /// out_p1 as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 320 pixels wide by 320 pixels high\n    lazy var out_p1: CVPixelBuffer = {\n        [unowned self] in return self.provider.featureValue(for: \"out_p1\")!.imageBufferValue\n    }()!\n\n    /// out_p2 as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 320 pixels wide by 320 pixels high\n    lazy var out_p2: CVPixelBuffer = {\n        [unowned self] in return self.provider.featureValue(for: \"out_p2\")!.imageBufferValue\n    }()!\n\n    /// out_p3 as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 320 pixels wide by 320 pixels high\n    lazy var out_p3: CVPixelBuffer = {\n        [unowned self] in return self.provider.featureValue(for: \"out_p3\")!.imageBufferValue\n    }()!\n\n    /// out_p4 as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 320 pixels wide by 320 pixels high\n    lazy var out_p4: CVPixelBuffer = {\n        [unowned self] in return self.provider.featureValue(for: \"out_p4\")!.imageBufferValue\n    }()!\n\n    /// out_p5 as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 320 pixels wide by 320 pixels high\n    lazy var out_p5: CVPixelBuffer = {\n        [unowned self] in return self.provider.featureValue(for: \"out_p5\")!.imageBufferValue\n    }()!\n\n    /// out_p6 as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 320 pixels wide by 320 pixels high\n    lazy var out_p6: CVPixelBuffer = {\n        [unowned self] in return self.provider.featureValue(for: \"out_p6\")!.imageBufferValue\n    }()!\n\n    var featureNames: Set<String> {\n        return self.provider.featureNames\n    }\n    \n    func featureValue(for featureName: String) -> MLFeatureValue? {\n        return self.provider.featureValue(for: featureName)\n    }\n\n    init(out_p0: CVPixelBuffer, out_p1: CVPixelBuffer, out_p2: CVPixelBuffer, out_p3: CVPixelBuffer, out_p4: CVPixelBuffer, out_p5: CVPixelBuffer, out_p6: CVPixelBuffer) {\n        self.provider = try! MLDictionaryFeatureProvider(dictionary: [\"out_p0\" : MLFeatureValue(pixelBuffer: out_p0), \"out_p1\" : MLFeatureValue(pixelBuffer: out_p1), \"out_p2\" : MLFeatureValue(pixelBuffer: out_p2), \"out_p3\" : MLFeatureValue(pixelBuffer: out_p3), \"out_p4\" : MLFeatureValue(pixelBuffer: out_p4), \"out_p5\" : MLFeatureValue(pixelBuffer: out_p5), \"out_p6\" : MLFeatureValue(pixelBuffer: out_p6)])\n    }\n\n    init(features: MLFeatureProvider) {\n        self.provider = features\n    }\n}\n\n\n/// Class for model loading and prediction\n@available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *)\nclass segmentation {\n    let model: MLModel\n\n    /// URL of model assuming it was installed in the same bundle as this class\n    class var urlOfModelInThisBundle : URL {\n        let bundle = Bundle(for: self)\n        return bundle.url(forResource: \"segmentation\", withExtension:\"mlmodelc\")!\n    }\n\n    /**\n        Construct segmentation instance with an existing MLModel object.\n\n        Usually the application does not use this initializer unless it makes a subclass of segmentation.\n        Such application may want to use `MLModel(contentsOfURL:configuration:)` and `segmentation.urlOfModelInThisBundle` to create a MLModel object to pass-in.\n\n        - parameters:\n          - model: MLModel object\n    */\n    init(model: MLModel) {\n        self.model = model\n    }\n\n    /**\n        Construct a model with configuration\n\n        - parameters:\n           - configuration: the desired model configuration\n\n        - throws: an NSError object that describes the problem\n    */\n    convenience init(configuration: MLModelConfiguration = MLModelConfiguration()) throws {\n        try self.init(contentsOf: type(of:self).urlOfModelInThisBundle, configuration: configuration)\n    }\n\n    /**\n        Construct segmentation instance with explicit path to mlmodelc file\n        - parameters:\n           - modelURL: the file url of the model\n\n        - throws: an NSError object that describes the problem\n    */\n    convenience init(contentsOf modelURL: URL) throws {\n        try self.init(model: MLModel(contentsOf: modelURL))\n    }\n\n    /**\n        Construct a model with URL of the .mlmodelc directory and configuration\n\n        - parameters:\n           - modelURL: the file url of the model\n           - configuration: the desired model configuration\n\n        - throws: an NSError object that describes the problem\n    */\n    convenience init(contentsOf modelURL: URL, configuration: MLModelConfiguration) throws {\n        try self.init(model: MLModel(contentsOf: modelURL, configuration: configuration))\n    }\n\n    /**\n        Construct segmentation instance asynchronously with optional configuration.\n\n        Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.\n\n        - parameters:\n          - configuration: the desired model configuration\n          - handler: the completion handler to be called when the model loading completes successfully or unsuccessfully\n    */\n    class func load(configuration: MLModelConfiguration = MLModelConfiguration(), completionHandler handler: @escaping (Swift.Result<segmentation, Error>) -> Void) {\n        return self.load(contentsOf: self.urlOfModelInThisBundle, configuration: configuration, completionHandler: handler)\n    }\n\n    /**\n        Construct segmentation instance asynchronously with optional configuration.\n\n        Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.\n\n        - parameters:\n          - configuration: the desired model configuration\n    */\n    @available(macOS 12.0, iOS 15.0, tvOS 15.0, watchOS 8.0, *)\n    class func load(configuration: MLModelConfiguration = MLModelConfiguration()) async throws -> segmentation {\n        return try await self.load(contentsOf: self.urlOfModelInThisBundle, configuration: configuration)\n    }\n\n    /**\n        Construct segmentation instance asynchronously with URL of the .mlmodelc directory with optional configuration.\n\n        Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.\n\n        - parameters:\n          - modelURL: the URL to the model\n          - configuration: the desired model configuration\n          - handler: the completion handler to be called when the model loading completes successfully or unsuccessfully\n    */\n    class func load(contentsOf modelURL: URL, configuration: MLModelConfiguration = MLModelConfiguration(), completionHandler handler: @escaping (Swift.Result<segmentation, Error>) -> Void) {\n        MLModel.load(contentsOf: modelURL, configuration: configuration) { result in\n            switch result {\n            case .failure(let error):\n                handler(.failure(error))\n            case .success(let model):\n                handler(.success(segmentation(model: model)))\n            }\n        }\n    }\n\n    /**\n        Construct segmentation instance asynchronously with URL of the .mlmodelc directory with optional configuration.\n\n        Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.\n\n        - parameters:\n          - modelURL: the URL to the model\n          - configuration: the desired model configuration\n    */\n    @available(macOS 12.0, iOS 15.0, tvOS 15.0, watchOS 8.0, *)\n    class func load(contentsOf modelURL: URL, configuration: MLModelConfiguration = MLModelConfiguration()) async throws -> segmentation {\n        let model = try await MLModel.load(contentsOf: modelURL, configuration: configuration)\n        return segmentation(model: model)\n    }\n\n    /**\n        Make a prediction using the structured interface\n\n        - parameters:\n           - input: the input to the prediction as segmentationInput\n\n        - throws: an NSError object that describes the problem\n\n        - returns: the result of the prediction as segmentationOutput\n    */\n    func prediction(input: segmentationInput) throws -> segmentationOutput {\n        return try self.prediction(input: input, options: MLPredictionOptions())\n    }\n\n    /**\n        Make a prediction using the structured interface\n\n        - parameters:\n           - input: the input to the prediction as segmentationInput\n           - options: prediction options \n\n        - throws: an NSError object that describes the problem\n\n        - returns: the result of the prediction as segmentationOutput\n    */\n    func prediction(input: segmentationInput, options: MLPredictionOptions) throws -> segmentationOutput {\n        let outFeatures = try model.prediction(from: input, options:options)\n        return segmentationOutput(features: outFeatures)\n    }\n\n    /**\n        Make a prediction using the convenience interface\n\n        - parameters:\n            - in_0 as color (kCVPixelFormatType_32BGRA) image buffer, 320 pixels wide by 320 pixels high\n\n        - throws: an NSError object that describes the problem\n\n        - returns: the result of the prediction as segmentationOutput\n    */\n    func prediction(in_0: CVPixelBuffer) throws -> segmentationOutput {\n        let input_ = segmentationInput(in_0: in_0)\n        return try self.prediction(input: input_)\n    }\n\n    /**\n        Make a batch prediction using the structured interface\n\n        - parameters:\n           - inputs: the inputs to the prediction as [segmentationInput]\n           - options: prediction options \n\n        - throws: an NSError object that describes the problem\n\n        - returns: the result of the prediction as [segmentationOutput]\n    */\n    func predictions(inputs: [segmentationInput], options: MLPredictionOptions = MLPredictionOptions()) throws -> [segmentationOutput] {\n        let batchIn = MLArrayBatchProvider(array: inputs)\n        let batchOut = try model.predictions(from: batchIn, options: options)\n        var results : [segmentationOutput] = []\n        results.reserveCapacity(inputs.count)\n        for i in 0..<batchOut.count {\n            let outProvider = batchOut.features(at: i)\n            let result =  segmentationOutput(features: outProvider)\n            results.append(result)\n        }\n        return results\n    }\n}\n"
  },
  {
    "path": "Tests/SemanticImageTests/SemanticImageTests.swift",
    "content": "import XCTest\n@testable import SemanticImage\n\nfinal class SemanticImageTests: XCTestCase {\n    func testExample() throws {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct\n        // results.\n//        XCTAssertEqual(SemanticImage().text, \"Hello, World!\")\n    }\n}\n"
  }
]