Repository: john-rocky/SemanticImage Branch: main Commit: 539927430ad3 Files: 12 Total size: 217.7 KB Directory structure: gitextract_0eo7rbyt/ ├── .gitignore ├── .swiftpm/ │ └── xcode/ │ └── package.xcworkspace/ │ └── xcshareddata/ │ └── IDEWorkspaceChecks.plist ├── LICENSE ├── Package.swift ├── README.md ├── Sources/ │ └── SemanticImage/ │ ├── SemanticImage.swift │ ├── segmentation.mlmodelc/ │ │ ├── metadata.json │ │ ├── model.espresso.net │ │ ├── model.espresso.shape │ │ └── model.espresso.weights │ └── segmentation.swift └── Tests/ └── SemanticImageTests/ └── SemanticImageTests.swift ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ .DS_Store /.build /Packages /*.xcodeproj xcuserdata/ DerivedData/ .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata ================================================ FILE: .swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ================================================ IDEDidComputeMac32BitWarning ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2021 MLBoy Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: Package.swift ================================================ // swift-tools-version:5.5 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "SemanticImage", platforms: [ .iOS(.v14) ], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( name: "SemanticImage", targets: ["SemanticImage"]), ], dependencies: [ // Dependencies declare other packages that this package depends on. // .package(url: /* package url */, from: "1.0.0"), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "SemanticImage", dependencies: [], resources: [.process("segmentation.mlmodelc")]), .testTarget( name: "SemanticImageTests", dependencies: ["SemanticImage"]), ] ) ================================================ FILE: README.md ================================================ # SemanticImage **Plug-and-play image/video filters built on Vision + CoreML + CoreImage — for iOS. Person segmentation, background blur, depth-based bokeh, style transfer, super-resolution.** By [Daisuke Majima](https://john-rocky.github.io). Maintainer of [CoreML-Models](https://github.com/john-rocky/CoreML-Models) (1,749★). These filters power [Blur. on the App Store](https://apps.apple.com/us/developer/daisuke-majima/id1350309854) and similar shipping iOS apps. 💼 **Open to Staff / Senior iOS / Mobile ML roles** — [john-rocky.github.io](https://john-rocky.github.io) --- # SemanticImage A collection of easy-to-use image / video filters. # How to use ### Setting Up 1, Add SemanticImage to your project as Swift Package with Swift Package Manager. Or just drag SemanticImage.swift to your project. 2, Import and initialize SemanticImage ```swift import SemanticImage ``` ```swift let semanticImage = SemanticImage() ``` **Requires iOS 14 or above** # Filter Collection ## Image ### Get Person Mask ```swift let maskImage:UIImage? = semanticImage.personMaskImage(uiImage: yourUIImage) ``` ### Swap the background of a person ```swift let swappedImage:UIImage? = semanticImage.swapBackgroundOfPerson(personUIImage: yourUIImage, backgroundUIImage: yourBackgroundUIImage) ``` ### Blur the backgrond of a person ```swift let blurredPersonImage:UIImage? = semanticImage.personBlur(uiImage:UIImage, intensity:Float) // Blur intensity: 0~100 ``` ### Get a prominent object mask ```swift let prominentMaskImage:UIImage? = semanticImage.saliencyMask(uiImage:image) ``` ### Swap the background of the prominent object ```swift let backgroundSwapImage:UIImage? = semanticImage.saliencyBlend(objectUIImage: image, backgroundUIImage: bgImage) ``` ### Crop a face rectangle ```swift let faceImage:UIImage? = semanticImage.faceRectangle(uiImage: image) ``` ### Crop a body rectangle ```swift let bodyImage:UIImage? = semanticImage.humanRectangle(uiImage: image) ``` ### Crop face rectangles ```swift let faceImages:[UIImage] = semanticImage.faceRectangles(uiImage: image) ``` ### Crop body rectangles ```swift let bodyImages:[UIImage] = semanticImage.humanRectangles(uiImage: image) ``` ### Crop an animal(Cat/Dog) rectangle ```swift let animalImage:UIImage? = semanticImage.animalRectangle(uiImage: image) ``` ### Crop multiple animal(Cat/Dog) rectangles ```swift let animalImages:[UIImage] = semanticImage.animalRectangles(uiImage: image) ``` ### Crop and warp document ```swift let documentImage:UIImage? = semanticImage.getDocumentImage(image: image) ``` ## Video ### Apply CIFilter to Video ```swift guard let ciFilter = CIFilter(name: "CIEdgeWork", parameters: [kCIInputRadiusKey:3.0]) else { return } semanticImage.ciFilterVideo(videoURL: url, ciFilter: ciFilter, { err, processedURL in // Handle processedURL in here. }) // This process takes about the same time as the video playback time. ``` ### Add virtual background of the person video ```swift semanticImage.swapBackgroundOfPersonVideo(videoURL: url, backgroundUIImage: uiImage, { err, processedURL in // Handle processedURL in here. }) // This process takes about the same time as the video playback time. ``` ### Add virtual background of the salient object video ```swift semanticImage.swapBGOfSalientObjectVideo(videoURL: url, backgroundUIImage: uiImage, { err, processedURL in // Handle processedURL in here. }) // This process takes about the same time as the video playback time. ``` ### Process video ```swift semanticImage.applyProcessingOnVideo(videoURL: url, { ciImage in // Write the processing of ciImage (i.e. video frame) here. return newImage }, { err, editedURL in // The processed video URL is returned }) ``` # Author Daisuke Majima Freelance iOS programmer from Japan. PROFILES: WORKS: BLOGS: Medium CONTACTS: rockyshikoku@gmail.com ================================================ FILE: Sources/SemanticImage/SemanticImage.swift ================================================ import Foundation import Vision import UIKit import AVKit public class SemanticImage { public init() { } @available(iOS 15.0, *) lazy var personSegmentationRequest = VNGeneratePersonSegmentationRequest() lazy var faceRectangleRequest = VNDetectFaceRectanglesRequest() lazy var humanRectanglesRequest:VNDetectHumanRectanglesRequest = { let request = VNDetectHumanRectanglesRequest() if #available(iOS 15.0, *) { request.upperBodyOnly = false } return request }() lazy var animalRequest = VNRecognizeAnimalsRequest() lazy var segmentationRequest:VNCoreMLRequest? = { let url = try? Bundle.module.url(forResource: "segmentation", withExtension: "mlmodelc") let mlModel = try! MLModel(contentsOf: url!, configuration: MLModelConfiguration()) guard let model = try? VNCoreMLModel(for: mlModel) else { return nil } let request = VNCoreMLRequest(model: model) request.imageCropAndScaleOption = .scaleFill return request }() lazy var rectangleRequest = VNDetectRectanglesRequest() let ciContext = CIContext() public func getDocumentImage(image:UIImage) -> UIImage? { let newImage = getCorrectOrientationUIImage(uiImage:image) let ciImage = CIImage(image: newImage)! let handler = VNImageRequestHandler(ciImage: ciImage, options: [:]) try! handler.perform([rectangleRequest]) guard let result = rectangleRequest.results?.first else { return nil } let topLeft = CGPoint(x: result.topLeft.x, y: 1-result.topLeft.y) let topRight = CGPoint(x: result.topRight.x, y: 1-result.topRight.y) let bottomLeft = CGPoint(x: result.bottomLeft.x, y: 1-result.bottomLeft.y) let bottomRight = CGPoint(x: result.bottomRight.x, y: 1-result.bottomRight.y) let deNormalizedTopLeft = VNImagePointForNormalizedPoint(topLeft, Int(ciImage.extent.width), Int(ciImage.extent.height)) let deNormalizedTopRight = VNImagePointForNormalizedPoint(topRight, Int(ciImage.extent.width), Int(ciImage.extent.height)) let deNormalizedBottomLeft = VNImagePointForNormalizedPoint(bottomLeft, Int(ciImage.extent.width), Int(ciImage.extent.height)) let deNormalizedBottomRight = VNImagePointForNormalizedPoint(bottomRight, Int(ciImage.extent.width), Int(ciImage.extent.height)) let croppedImage = getCroppedImage(image: ciImage, topL: deNormalizedTopLeft, topR: deNormalizedTopRight, botL: deNormalizedBottomLeft, botR: deNormalizedBottomRight) let safeCGImage = ciContext.createCGImage(croppedImage, from: croppedImage.extent) let croppedUIImage = UIImage(cgImage: safeCGImage!) return croppedUIImage } private func getCroppedImage(image: CIImage, topL: CGPoint, topR: CGPoint, botL: CGPoint, botR: CGPoint) -> CIImage { let rectCoords = NSMutableDictionary(capacity: 4) rectCoords["inputTopLeft"] = topL.toVector(image: image) rectCoords["inputTopRight"] = topR.toVector(image: image) rectCoords["inputBottomLeft"] = botL.toVector(image: image) rectCoords["inputBottomRight"] = botR.toVector(image: image) guard let coords = rectCoords as? [String : Any] else { return image } return image.applyingFilter("CIPerspectiveCorrection", parameters: coords) } // MARK: Segmentation public func personMaskImage(uiImage:UIImage) -> UIImage? { let newImage = getCorrectOrientationUIImage(uiImage:uiImage) guard let ciImage = CIImage(image: newImage) else { print("Image processing failed.Please try with another image."); return nil } let handler = VNImageRequestHandler(ciImage: ciImage, options: [:]) do { if #available(iOS 15.0, *) { try handler.perform([personSegmentationRequest]) guard let result = personSegmentationRequest.results?.first else { print("Image processing failed.Please try with another image.") ; return nil } let maskCIImage = CIImage(cvPixelBuffer: result.pixelBuffer) let scaledMask = maskCIImage.resize(as: CGSize(width: ciImage.extent.width, height: ciImage.extent.height)) guard let safeCGImage = ciContext.createCGImage(scaledMask, from: scaledMask.extent) else { print("Image processing failed.Please try with another image.") ; return nil } let maskUIImage = UIImage(cgImage: safeCGImage) return maskUIImage } else { guard let segmentationRequest = segmentationRequest else { print("This func can't be used in this OS version."); return nil } try handler.perform([segmentationRequest]) guard let result = segmentationRequest.results?.first as? VNPixelBufferObservation else { print("Image processing failed.Please try with another image.") ; return nil } let maskCIImage = CIImage(cvPixelBuffer: result.pixelBuffer) let scaledMask = maskCIImage.resize(as: CGSize(width: ciImage.extent.width, height: ciImage.extent.height)) guard let safeCGImage = ciContext.createCGImage(scaledMask, from: scaledMask.extent) else { print("Image processing failed.Please try with another image.") ; return nil } let maskUIImage = UIImage(cgImage: safeCGImage) return maskUIImage } } catch let error { print("Vision error \(error)") return nil } } public func swapBackgroundOfPerson(personUIImage: UIImage, backgroundUIImage: UIImage) -> UIImage? { let newPersonUIImage = getCorrectOrientationUIImage(uiImage:personUIImage) let newBackgroundUIImage = getCorrectOrientationUIImage(uiImage:backgroundUIImage) guard let personCIImage = CIImage(image: newPersonUIImage), let backgroundCIImage = CIImage(image: newBackgroundUIImage), let maskUIImage = personMaskImage(uiImage: newPersonUIImage), let maskCIImage = CIImage(image: maskUIImage) else { return nil } let backgroundImageSize = backgroundCIImage.extent let originalSize = personCIImage.extent var scale:CGFloat = 1 let widthScale = originalSize.width / backgroundImageSize.width let heightScale = originalSize.height / backgroundImageSize.height if widthScale > heightScale { scale = personCIImage.extent.width / backgroundImageSize.width } else { scale = personCIImage.extent.height / backgroundImageSize.height } let scaledBG = backgroundCIImage.resize(as: CGSize(width: backgroundCIImage.extent.width*scale, height: backgroundCIImage.extent.height*scale)) let BGCenter = CGPoint(x: scaledBG.extent.width/2, y: scaledBG.extent.height/2) let originalExtent = personCIImage.extent let cropRect = CGRect(x: BGCenter.x-(originalExtent.width/2), y: BGCenter.y-(originalExtent.height/2), width: originalExtent.width, height: originalExtent.height) let croppedBG = scaledBG.cropped(to: cropRect) let translate = CGAffineTransform(translationX: -croppedBG.extent.minX, y: -croppedBG.extent.minY) let traslatedBG = croppedBG.transformed(by: translate) guard let blended = CIFilter(name: "CIBlendWithMask", parameters: [ kCIInputImageKey: personCIImage, kCIInputBackgroundImageKey:traslatedBG, kCIInputMaskImageKey:maskCIImage])?.outputImage else { return nil } guard let safeCGImage = ciContext.createCGImage(blended, from: blended.extent) else { print("Image processing failed.Please try with another image.") ; return nil } let blendedUIImage = UIImage(cgImage: safeCGImage) return blendedUIImage } public func personBlur(uiImage:UIImage, intensity:Float) -> UIImage?{ let newUIImage = getCorrectOrientationUIImage(uiImage:uiImage) guard let originalCIImage = CIImage(image: newUIImage), let maskUIImage = personMaskImage(uiImage: newUIImage), let maskCIImage = CIImage(image: maskUIImage) else { print("Image processing failed.Please try with another image."); return nil } let safeCropSize = CGRect(x: 0, y: 0, width: originalCIImage.extent.width * 0.999, height: originalCIImage.extent.height * 0.999) guard let blurBGCIImage = CIFilter(name: "CIGaussianBlur", parameters: [kCIInputImageKey:originalCIImage, kCIInputRadiusKey:intensity])?.outputImage?.cropped(to: safeCropSize).resize(as: originalCIImage.extent.size) else { return nil } guard let blendedCIImage = CIFilter(name: "CIBlendWithMask", parameters: [ kCIInputImageKey: originalCIImage, kCIInputBackgroundImageKey:blurBGCIImage, kCIInputMaskImageKey:maskCIImage])?.outputImage, let safeCGImage = ciContext.createCGImage(blendedCIImage, from: blendedCIImage.extent)else { print("Image processing failed.Please try with another image."); return nil } let final = UIImage(cgImage: safeCGImage) return final } // MARK: Saliency public func saliencyMask(uiImage:UIImage) -> UIImage? { let newImage = getCorrectOrientationUIImage(uiImage:uiImage) guard let ciImage = CIImage(image: newImage), let request = segmentationRequest else { print("Image processing failed.Please try with another image."); return nil } let handler = VNImageRequestHandler(ciImage: ciImage, options: [:]) do { try handler.perform([request]) guard let result = request.results?.first as? VNPixelBufferObservation else { print("Image processing failed.Please try with another image.") ; return nil } let maskCIImage = CIImage(cvPixelBuffer: result.pixelBuffer) let scaledMask = maskCIImage.resize(as: CGSize(width: ciImage.extent.width, height: ciImage.extent.height)) guard let safeCGImage = ciContext.createCGImage(scaledMask, from: scaledMask.extent) else { print("Image processing failed.Please try with another image.") ; return nil } let maskUIImage = UIImage(cgImage: safeCGImage) return maskUIImage } catch let error { print("Vision error \(error)") return nil } } public func saliencyBlend(objectUIImage:UIImage, backgroundUIImage: UIImage) -> UIImage? { let newSaliencyUIImage = getCorrectOrientationUIImage(uiImage:objectUIImage) let newBackgroundUIImage = getCorrectOrientationUIImage(uiImage:backgroundUIImage) guard let personCIImage = CIImage(image: newSaliencyUIImage), let backgroundCIImage = CIImage(image: newBackgroundUIImage), let maskUIImage = saliencyMask(uiImage: newSaliencyUIImage), let maskCIImage = CIImage(image: maskUIImage) else { return nil } let backgroundImageSize = backgroundCIImage.extent let originalSize = personCIImage.extent var scale:CGFloat = 1 let widthScale = originalSize.width / backgroundImageSize.width let heightScale = originalSize.height / backgroundImageSize.height if widthScale > heightScale { scale = personCIImage.extent.width / backgroundImageSize.width } else { scale = personCIImage.extent.height / backgroundImageSize.height } let scaledBG = backgroundCIImage.resize(as: CGSize(width: backgroundCIImage.extent.width*scale, height: backgroundCIImage.extent.height*scale)) let BGCenter = CGPoint(x: scaledBG.extent.width/2, y: scaledBG.extent.height/2) let originalExtent = personCIImage.extent let cropRect = CGRect(x: BGCenter.x-(originalExtent.width/2), y: BGCenter.y-(originalExtent.height/2), width: originalExtent.width, height: originalExtent.height) let croppedBG = scaledBG.cropped(to: cropRect) let translate = CGAffineTransform(translationX: -croppedBG.extent.minX, y: -croppedBG.extent.minY) let traslatedBG = croppedBG.transformed(by: translate) print(traslatedBG.extent) guard let blended = CIFilter(name: "CIBlendWithMask", parameters: [ kCIInputImageKey: personCIImage, kCIInputBackgroundImageKey:traslatedBG, kCIInputMaskImageKey:maskCIImage])?.outputImage, let safeCGImage = ciContext.createCGImage(blended, from: blended.extent) else { print("Image processing failed.Please try with another image."); return nil } let blendedUIImage = UIImage(cgImage: safeCGImage) return blendedUIImage } // MARK: Rectangle public func faceRectangle(uiImage:UIImage) -> UIImage? { let newImage = getCorrectOrientationUIImage(uiImage:uiImage) guard let ciImage = CIImage(image: newImage) else { print("Image processing failed.Please try with another image."); return nil } let handler = VNImageRequestHandler(ciImage: ciImage, options: [:]) do { try handler.perform([faceRectangleRequest]) guard let result = faceRectangleRequest.results?.first else { print("Image processing failed.Please try with another image."); return nil } let boundingBox = result.boundingBox let faceRect = VNImageRectForNormalizedRect((boundingBox),Int(ciImage.extent.size.width), Int(ciImage.extent.size.height)) 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) if doubleScaleRect.minX < 0 { doubleScaleRect.origin.x = 0 } if doubleScaleRect.minY < 0 { doubleScaleRect.origin.y = 0 } if doubleScaleRect.maxX > ciImage.extent.maxX { doubleScaleRect = CGRect(x: doubleScaleRect.origin.x, y: doubleScaleRect.origin.y, width: ciImage.extent.width - doubleScaleRect.origin.x, height: doubleScaleRect.height) } if doubleScaleRect.maxY > ciImage.extent.maxY { doubleScaleRect = CGRect(x: doubleScaleRect.origin.x, y: doubleScaleRect.origin.y, width: doubleScaleRect.width, height: ciImage.extent.height - doubleScaleRect.origin.y) } let faceImage = ciImage.cropped(to: doubleScaleRect) guard let final = ciContext.createCGImage(faceImage, from: faceImage.extent) else { print("Image processing failed.Please try with another image."); return nil } let finalUiimage = UIImage(cgImage: final) return finalUiimage } catch let error { print("Vision error \(error)") return nil } } public func faceRectangles(uiImage:UIImage) -> [UIImage] { var faceUIImages:[UIImage] = [] let semaphore = DispatchSemaphore(value: 0) let newImage = getCorrectOrientationUIImage(uiImage:uiImage) guard let ciImage = CIImage(image: newImage) else { print("Image processing failed.Please try with another image."); return [] } let handler = VNImageRequestHandler(ciImage: ciImage, options: [:]) do { try handler.perform([faceRectangleRequest]) guard let results = faceRectangleRequest.results else { print("Image processing failed.Please try with another image."); return [] } guard !results.isEmpty else { print("Image processing failed.Please try with another image."); return [] } for result in results { let boundingBox = result.boundingBox let faceRect = VNImageRectForNormalizedRect((boundingBox),Int(ciImage.extent.size.width), Int(ciImage.extent.size.height)) 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) if doubleScaleRect.minX < 0 { doubleScaleRect.origin.x = 0 } if doubleScaleRect.minY < 0 { doubleScaleRect.origin.y = 0 } if doubleScaleRect.maxX > ciImage.extent.maxX { doubleScaleRect = CGRect(x: doubleScaleRect.origin.x, y: doubleScaleRect.origin.y, width: ciImage.extent.width - doubleScaleRect.origin.x, height: doubleScaleRect.height) } if doubleScaleRect.maxY > ciImage.extent.maxY { doubleScaleRect = CGRect(x: doubleScaleRect.origin.x, y: doubleScaleRect.origin.y, width: doubleScaleRect.width, height: ciImage.extent.height - doubleScaleRect.origin.y) } let faceImage = ciImage.cropped(to: doubleScaleRect) guard let final = ciContext.createCGImage(faceImage, from: faceImage.extent) else { print("Image processing failed.Please try with another image."); return [] } let finalUiimage = UIImage(cgImage: final) faceUIImages.append(finalUiimage) if faceUIImages.count == results.count { semaphore.signal() } } semaphore.wait() return faceUIImages } catch let error { print("Vision error \(error)") return [] } } public func humanRectangle(uiImage:UIImage) -> UIImage? { let newImage = getCorrectOrientationUIImage(uiImage:uiImage) guard let ciImage = CIImage(image: newImage) else { print("Image processing failed.Please try with another image."); return nil } let handler = VNImageRequestHandler(ciImage: ciImage, options: [:]) do { try handler.perform([humanRectanglesRequest]) guard let result = humanRectanglesRequest.results?.first else { print("Image processing failed.Please try with another image."); return nil } let boundingBox = result.boundingBox let humanRect = VNImageRectForNormalizedRect((boundingBox),Int(ciImage.extent.size.width), Int(ciImage.extent.size.height)) let humanImage = ciImage.cropped(to: humanRect) guard let final = ciContext.createCGImage(humanImage, from: humanImage.extent) else { print("Image processing failed.Please try with another image."); return nil } let finalUiimage = UIImage(cgImage: final) return finalUiimage } catch let error { print("Vision error \(error)") return nil } } public func humanRectangles(uiImage:UIImage) -> [UIImage] { var bodyUIImages:[UIImage] = [] let semaphore = DispatchSemaphore(value: 0) let newImage = getCorrectOrientationUIImage(uiImage:uiImage) guard let ciImage = CIImage(image: newImage) else { print("Image processing failed.Please try with another image."); return [] } let handler = VNImageRequestHandler(ciImage: ciImage, options: [:]) do { try handler.perform([humanRectanglesRequest]) guard let results = humanRectanglesRequest.results else { print("Image processing failed.Please try with another image."); return [] } guard !results.isEmpty else { print("Image processing failed.Please try with another image."); return [] } for result in results { let boundingBox = result.boundingBox let humanRect = VNImageRectForNormalizedRect((boundingBox),Int(ciImage.extent.size.width), Int(ciImage.extent.size.height)) let humanImage = ciImage.cropped(to: humanRect) guard let final = ciContext.createCGImage(humanImage, from: humanImage.extent) else { print("Image processing failed.Please try with another image."); return [] } let finalUiimage = UIImage(cgImage: final) bodyUIImages.append(finalUiimage) if bodyUIImages.count == results.count { semaphore.signal() } } semaphore.wait() return bodyUIImages } catch let error { print("Vision error \(error)") return [] } } public func animalRectangle(uiImage:UIImage) -> UIImage?{ let newImage = getCorrectOrientationUIImage(uiImage:uiImage) guard let ciImage = CIImage(image: newImage) else { print("Image processing failed.Please try with another image."); return nil } let handler = VNImageRequestHandler(ciImage: ciImage, options: [:]) do { try handler.perform([animalRequest]) guard let result = animalRequest.results?.first else { print("Image processing failed.Please try with another image."); return nil } let boundingBox = result.boundingBox let rect = VNImageRectForNormalizedRect((boundingBox),Int(ciImage.extent.size.width), Int(ciImage.extent.size.height)) let croppedImage = ciImage.cropped(to: rect) guard let final = ciContext.createCGImage(croppedImage, from: croppedImage.extent) else { print("Image processing failed.Please try with another image."); return nil } let finalUiimage = UIImage(cgImage: final) return finalUiimage } catch let error { print("Vision error \(error)") return nil } } public func animalRectangles(uiImage:UIImage) -> [UIImage] { var animalUIImages:[UIImage] = [] let semaphore = DispatchSemaphore(value: 0) let newImage = getCorrectOrientationUIImage(uiImage:uiImage) guard let ciImage = CIImage(image: newImage) else { print("Image processing failed.Please try with another image."); return [] } let handler = VNImageRequestHandler(ciImage: ciImage, options: [:]) do { try handler.perform([animalRequest]) guard let results = animalRequest.results else { print("Image processing failed.Please try with another image."); return [] } guard !results.isEmpty else { print("Image processing failed.Please try with another image."); return [] } for result in results { let boundingBox = result.boundingBox let rect = VNImageRectForNormalizedRect((boundingBox),Int(ciImage.extent.size.width), Int(ciImage.extent.size.height)) let croppedImage = ciImage.cropped(to: rect) guard let final = ciContext.createCGImage(croppedImage, from: croppedImage.extent) else { print("Image processing failed.Please try with another image."); return [] } let finalUiimage = UIImage(cgImage: final) animalUIImages.append(finalUiimage) if animalUIImages.count == results.count { semaphore.signal() } } semaphore.wait() return animalUIImages } catch let error { print("Vision error \(error)") return [] } } public func swapBGOfSalientObjectVideo(videoURL:URL, backgroundUIImage: UIImage, _ completion: ((_ err: NSError?, _ filteredVideoURL: URL?) -> Void)?) { guard let bgCIImage = CIImage(image: backgroundUIImage) else { print("background image is nil") ; return} applyProcessingOnVideo(videoURL: videoURL, { ciImage in let personCIImage = ciImage let backgroundCIImage = bgCIImage var maskCIImage:CIImage let handler = VNImageRequestHandler(ciImage: personCIImage, options: [:]) do { guard let segmentationRequest = self.segmentationRequest else { print("This func can't be used in this OS version."); return nil } try handler.perform([segmentationRequest]) guard let result = segmentationRequest.results?.first as? VNPixelBufferObservation else { print("Image processing failed.Please try with another image.") ; return nil } let maskImage = CIImage(cvPixelBuffer: result.pixelBuffer) let scaledMask = maskImage.resize(as: CGSize(width: ciImage.extent.width, height: ciImage.extent.height)) guard let safeCGImage = self.ciContext.createCGImage(scaledMask, from: scaledMask.extent) else { print("Image processing failed.Please try with another image.") ; return nil } maskCIImage = CIImage(cgImage: safeCGImage) } catch let error { print("Vision error \(error)") return ciImage } let backgroundImageSize = backgroundCIImage.extent let originalSize = personCIImage.extent var scale:CGFloat = 1 let widthScale = originalSize.width / backgroundImageSize.width let heightScale = originalSize.height / backgroundImageSize.height if widthScale > heightScale { scale = personCIImage.extent.width / backgroundImageSize.width } else { scale = personCIImage.extent.height / backgroundImageSize.height } let scaledBG = backgroundCIImage.resize(as: CGSize(width: backgroundCIImage.extent.width*scale, height: backgroundCIImage.extent.height*scale)) let BGCenter = CGPoint(x: scaledBG.extent.width/2, y: scaledBG.extent.height/2) let originalExtent = personCIImage.extent let cropRect = CGRect(x: BGCenter.x-(originalExtent.width/2), y: BGCenter.y-(originalExtent.height/2), width: originalExtent.width, height: originalExtent.height) let croppedBG = scaledBG.cropped(to: cropRect) let translate = CGAffineTransform(translationX: -croppedBG.extent.minX, y: -croppedBG.extent.minY) let traslatedBG = croppedBG.transformed(by: translate) guard let blended = CIFilter(name: "CIBlendWithMask", parameters: [ kCIInputImageKey: personCIImage, kCIInputBackgroundImageKey:traslatedBG, kCIInputMaskImageKey:maskCIImage])?.outputImage, let safeCGImage = self.ciContext.createCGImage(blended, from: blended.extent) else {return ciImage} let outCIImage = CIImage(cgImage: safeCGImage) return outCIImage } , { err, processedVideoURL in guard err == nil else { print(err?.localizedDescription); return } completion?(err,processedVideoURL) }) } public func swapBackgroundOfPersonVideo(videoURL:URL, backgroundUIImage: UIImage, _ completion: ((_ err: NSError?, _ filteredVideoURL: URL?) -> Void)?) { guard let bgCIImage = CIImage(image: backgroundUIImage) else { print("background image is nil") ; return} applyProcessingOnVideo(videoURL: videoURL, { ciImage in let personCIImage = ciImage let backgroundCIImage = bgCIImage var maskCIImage:CIImage let handler = VNImageRequestHandler(ciImage: personCIImage, options: [:]) do { if #available(iOS 15.0, *) { try handler.perform([self.personSegmentationRequest]) guard let result = self.personSegmentationRequest.results?.first else { print("Image processing failed.Please try with another image.") ; return nil } let maskImage = CIImage(cvPixelBuffer: result.pixelBuffer) let scaledMask = maskImage.resize(as: CGSize(width: ciImage.extent.width, height: ciImage.extent.height)) guard let safeCGImage = self.ciContext.createCGImage(scaledMask, from: scaledMask.extent) else { print("Image processing failed.Please try with another image.") ; return nil } maskCIImage = CIImage(cgImage: safeCGImage) } else { guard let segmentationRequest = self.segmentationRequest else { print("This func can't be used in this OS version."); return nil } try handler.perform([segmentationRequest]) guard let result = segmentationRequest.results?.first as? VNPixelBufferObservation else { print("Image processing failed.Please try with another image.") ; return nil } let maskImage = CIImage(cvPixelBuffer: result.pixelBuffer) let scaledMask = maskImage.resize(as: CGSize(width: ciImage.extent.width, height: ciImage.extent.height)) guard let safeCGImage = self.ciContext.createCGImage(scaledMask, from: scaledMask.extent) else { print("Image processing failed.Please try with another image.") ; return nil } maskCIImage = CIImage(cgImage: safeCGImage) } } catch let error { print("Vision error \(error)") return ciImage } let backgroundImageSize = backgroundCIImage.extent let originalSize = personCIImage.extent var scale:CGFloat = 1 let widthScale = originalSize.width / backgroundImageSize.width let heightScale = originalSize.height / backgroundImageSize.height if widthScale > heightScale { scale = personCIImage.extent.width / backgroundImageSize.width } else { scale = personCIImage.extent.height / backgroundImageSize.height } let scaledBG = backgroundCIImage.resize(as: CGSize(width: backgroundCIImage.extent.width*scale, height: backgroundCIImage.extent.height*scale)) let BGCenter = CGPoint(x: scaledBG.extent.width/2, y: scaledBG.extent.height/2) let originalExtent = personCIImage.extent let cropRect = CGRect(x: BGCenter.x-(originalExtent.width/2), y: BGCenter.y-(originalExtent.height/2), width: originalExtent.width, height: originalExtent.height) let croppedBG = scaledBG.cropped(to: cropRect) let translate = CGAffineTransform(translationX: -croppedBG.extent.minX, y: -croppedBG.extent.minY) let traslatedBG = croppedBG.transformed(by: translate) guard let blended = CIFilter(name: "CIBlendWithMask", parameters: [ kCIInputImageKey: personCIImage, kCIInputBackgroundImageKey:traslatedBG, kCIInputMaskImageKey:maskCIImage])?.outputImage, let safeCGImage = self.ciContext.createCGImage(blended, from: blended.extent) else {return ciImage} let outCIImage = CIImage(cgImage: safeCGImage) return outCIImage } , { err, processedVideoURL in guard err == nil else { print(err?.localizedDescription); return } completion?(err,processedVideoURL) }) } public func ciFilterVideo(videoURL:URL, ciFilter: CIFilter, _ completion: ((_ err: NSError?, _ filteredVideoURL: URL?) -> Void)?) { applyProcessingOnVideo(videoURL: videoURL, { ciImage in ciFilter.setValue(ciImage, forKey: kCIInputImageKey) let outCIImage = ciFilter.outputImage return outCIImage } , { err, processedVideoURL in guard err == nil else { print(err?.localizedDescription as Any); return } completion?(err,processedVideoURL) }) } public func applyProcessingOnVideo(videoURL:URL, _ processingFunction: @escaping ((CIImage) -> CIImage?), _ completion: ((_ err: NSError?, _ processedVideoURL: URL?) -> Void)?) { var frame:Int = 0 var isFrameRotated = false let asset = AVURLAsset(url: videoURL) let duration = asset.duration.value let frameRate = asset.preferredRate let totalFrame = frameRate * Float(duration) let err: NSError = NSError.init(domain: "SemanticImage", code: 999, userInfo: [NSLocalizedDescriptionKey: "Video Processing Failed"]) guard let writingDestinationUrl: URL = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("\(Date())" + ".mp4") else { print("nil"); return} // setup guard let reader: AVAssetReader = try? AVAssetReader.init(asset: asset) else { completion?(err, nil) return } guard let writer: AVAssetWriter = try? AVAssetWriter(outputURL: writingDestinationUrl, fileType: AVFileType.mov) else { completion?(err, nil) return } // setup finish closure var audioFinished: Bool = false var videoFinished: Bool = false let writtingFinished: (() -> Void) = { if audioFinished == true && videoFinished == true { writer.finishWriting { completion?(nil, writingDestinationUrl) } reader.cancelReading() } } // prepare video reader let readerVideoOutput: AVAssetReaderTrackOutput = AVAssetReaderTrackOutput( track: asset.tracks(withMediaType: AVMediaType.video)[0], outputSettings: [ kCVPixelBufferPixelFormatTypeKey as String: Int(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange), ] ) reader.add(readerVideoOutput) // prepare audio reader var readerAudioOutput: AVAssetReaderTrackOutput! if asset.tracks(withMediaType: AVMediaType.audio).count <= 0 { audioFinished = true } else { readerAudioOutput = AVAssetReaderTrackOutput.init( track: asset.tracks(withMediaType: AVMediaType.audio)[0], outputSettings: [ AVSampleRateKey: 44100, AVFormatIDKey: kAudioFormatLinearPCM, ] ) if reader.canAdd(readerAudioOutput) { reader.add(readerAudioOutput) } else { print("Cannot add audio output reader") audioFinished = true } } // prepare video input let transform = asset.tracks(withMediaType: AVMediaType.video)[0].preferredTransform let radians = atan2(transform.b, transform.a) let degrees = (radians * 180.0) / .pi var writerVideoInput: AVAssetWriterInput switch degrees { case 90: let rotateTransform = CGAffineTransform(rotationAngle: 0) writerVideoInput = AVAssetWriterInput.init( mediaType: AVMediaType.video, outputSettings: [ AVVideoCodecKey: AVVideoCodecType.h264, AVVideoWidthKey: asset.tracks(withMediaType: AVMediaType.video)[0].naturalSize.height, AVVideoHeightKey: asset.tracks(withMediaType: AVMediaType.video)[0].naturalSize.width, AVVideoCompressionPropertiesKey: [ AVVideoAverageBitRateKey: asset.tracks(withMediaType: AVMediaType.video)[0].estimatedDataRate, ], ] ) writerVideoInput.expectsMediaDataInRealTime = false isFrameRotated = true writerVideoInput.transform = rotateTransform default: writerVideoInput = AVAssetWriterInput.init( mediaType: AVMediaType.video, outputSettings: [ AVVideoCodecKey: AVVideoCodecType.h264, AVVideoWidthKey: asset.tracks(withMediaType: AVMediaType.video)[0].naturalSize.width, AVVideoHeightKey: asset.tracks(withMediaType: AVMediaType.video)[0].naturalSize.height, AVVideoCompressionPropertiesKey: [ AVVideoAverageBitRateKey: asset.tracks(withMediaType: AVMediaType.video)[0].estimatedDataRate, ], ] ) writerVideoInput.expectsMediaDataInRealTime = false isFrameRotated = false writerVideoInput.transform = asset.tracks(withMediaType: AVMediaType.video)[0].preferredTransform } let pixelBufferAdaptor = AVAssetWriterInputPixelBufferAdaptor(assetWriterInput: writerVideoInput, sourcePixelBufferAttributes: [kCVPixelBufferPixelFormatTypeKey as String: Int(kCVPixelFormatType_32BGRA)]) writer.add(writerVideoInput) // prepare writer input for audio var writerAudioInput: AVAssetWriterInput! = nil if asset.tracks(withMediaType: AVMediaType.audio).count > 0 { let formatDesc: [Any] = asset.tracks(withMediaType: AVMediaType.audio)[0].formatDescriptions var channels: UInt32 = 1 var sampleRate: Float64 = 44100.000000 for i in 0 ..< formatDesc.count { guard let bobTheDesc: UnsafePointer = CMAudioFormatDescriptionGetStreamBasicDescription(formatDesc[i] as! CMAudioFormatDescription) else { continue } channels = bobTheDesc.pointee.mChannelsPerFrame sampleRate = bobTheDesc.pointee.mSampleRate break } writerAudioInput = AVAssetWriterInput.init( mediaType: AVMediaType.audio, outputSettings: [ AVFormatIDKey: kAudioFormatMPEG4AAC, AVNumberOfChannelsKey: channels, AVSampleRateKey: sampleRate, AVEncoderBitRateKey: 128000, ] ) writerAudioInput.expectsMediaDataInRealTime = true writer.add(writerAudioInput) } // write let videoQueue = DispatchQueue.init(label: "videoQueue") let audioQueue = DispatchQueue.init(label: "audioQueue") writer.startWriting() reader.startReading() writer.startSession(atSourceTime: CMTime.zero) // write video writerVideoInput.requestMediaDataWhenReady(on: videoQueue) { while writerVideoInput.isReadyForMoreMediaData { autoreleasepool { if let buffer = readerVideoOutput.copyNextSampleBuffer(),let pixelBuffer = CMSampleBufferGetImageBuffer(buffer) { frame += 1 var ciImage = CIImage(cvPixelBuffer: pixelBuffer) if isFrameRotated { ciImage = ciImage.oriented(CGImagePropertyOrientation.right) } guard let outCIImage = processingFunction(ciImage) else { print("Video Processing Failed") ; return } let presentationTime = CMSampleBufferGetOutputPresentationTimeStamp(buffer) var pixelBufferOut: CVPixelBuffer? CVPixelBufferPoolCreatePixelBuffer(kCFAllocatorDefault, pixelBufferAdaptor.pixelBufferPool!, &pixelBufferOut) self.ciContext.render(outCIImage, to: pixelBufferOut!) pixelBufferAdaptor.append(pixelBufferOut!, withPresentationTime: presentationTime) // if frame % 100 == 0 { // print("\(frame) / \(totalFrame) frames were processed..") // } } else { writerVideoInput.markAsFinished() DispatchQueue.main.async { videoFinished = true writtingFinished() } } } } } if writerAudioInput != nil { writerAudioInput.requestMediaDataWhenReady(on: audioQueue) { while writerAudioInput.isReadyForMoreMediaData { autoreleasepool { let buffer = readerAudioOutput.copyNextSampleBuffer() if buffer != nil { writerAudioInput.append(buffer!) } else { writerAudioInput.markAsFinished() DispatchQueue.main.async { audioFinished = true writtingFinished() } } } } } } } func scaleMaskImage(maskCIImage:CIImage, originalCIImage:CIImage) -> CIImage { let scaledMaskCIImage = maskCIImage.resize(as: originalCIImage.extent.size) return scaledMaskCIImage } public func getCorrectOrientationUIImage(uiImage:UIImage) -> UIImage { var newImage = UIImage() switch uiImage.imageOrientation.rawValue { case 1: guard let orientedCIImage = CIImage(image: uiImage)?.oriented(CGImagePropertyOrientation.down), let cgImage = ciContext.createCGImage(orientedCIImage, from: orientedCIImage.extent) else { return uiImage} newImage = UIImage(cgImage: cgImage) case 3: guard let orientedCIImage = CIImage(image: uiImage)?.oriented(CGImagePropertyOrientation.right), let cgImage = ciContext.createCGImage(orientedCIImage, from: orientedCIImage.extent) else { return uiImage} newImage = UIImage(cgImage: cgImage) default: newImage = uiImage } return newImage } } extension CIImage { func resize(as size: CGSize) -> CIImage { let selfSize = extent.size let transform = CGAffineTransform(scaleX: size.width / selfSize.width, y: size.height / selfSize.height) return transformed(by: transform) } } extension CGPoint { func toVector(image: CIImage) -> CIVector { return CIVector(x: x, y: image.extent.height-y) } } ================================================ FILE: Sources/SemanticImage/segmentation.mlmodelc/metadata.json ================================================ [ { "metadataOutputVersion" : "3.0", "storagePrecision" : "Float32", "outputSchema" : [ { "height" : "320", "colorspace" : "Grayscale", "isOptional" : "0", "width" : "320", "isColor" : "0", "formattedType" : "Image (Grayscale 320 × 320)", "hasSizeFlexibility" : "0", "type" : "Image", "shortDescription" : "", "name" : "out_p0" }, { "height" : "320", "colorspace" : "Grayscale", "isOptional" : "0", "width" : "320", "isColor" : "0", "formattedType" : "Image (Grayscale 320 × 320)", "hasSizeFlexibility" : "0", "type" : "Image", "shortDescription" : "", "name" : "out_p1" }, { "height" : "320", "colorspace" : "Grayscale", "isOptional" : "0", "width" : "320", "isColor" : "0", "formattedType" : "Image (Grayscale 320 × 320)", "hasSizeFlexibility" : "0", "type" : "Image", "shortDescription" : "", "name" : "out_p2" }, { "height" : "320", "colorspace" : "Grayscale", "isOptional" : "0", "width" : "320", "isColor" : "0", "formattedType" : "Image (Grayscale 320 × 320)", "hasSizeFlexibility" : "0", "type" : "Image", "shortDescription" : "", "name" : "out_p3" }, { "height" : "320", "colorspace" : "Grayscale", "isOptional" : "0", "width" : "320", "isColor" : "0", "formattedType" : "Image (Grayscale 320 × 320)", "hasSizeFlexibility" : "0", "type" : "Image", "shortDescription" : "", "name" : "out_p4" }, { "height" : "320", "colorspace" : "Grayscale", "isOptional" : "0", "width" : "320", "isColor" : "0", "formattedType" : "Image (Grayscale 320 × 320)", "hasSizeFlexibility" : "0", "type" : "Image", "shortDescription" : "", "name" : "out_p5" }, { "height" : "320", "colorspace" : "Grayscale", "isOptional" : "0", "width" : "320", "isColor" : "0", "formattedType" : "Image (Grayscale 320 × 320)", "hasSizeFlexibility" : "0", "type" : "Image", "shortDescription" : "", "name" : "out_p6" } ], "modelParameters" : [ ], "specificationVersion" : 5, "computePrecision" : "Float16", "isUpdatable" : "0", "availability" : { "macOS" : "11.0", "tvOS" : "14.0", "watchOS" : "7.0", "iOS" : "14.0", "macCatalyst" : "14.0" }, "neuralNetworkLayerTypeHistogram" : { "Concat" : 51, "ActivationLinear" : 7, "ActivationReLU" : 112, "UpsampleBiLinear" : 38, "Add" : 11, "BatchNorm" : 112, "Convolution" : 119, "ActivationSigmoid" : 7, "PoolingMax" : 33 }, "modelType" : { "name" : "MLModelType_neuralNetwork" }, "userDefinedMetadata" : { "com.github.apple.coremltools.version" : "4.1", "com.github.apple.coremltools.source" : "torch==1.8.1+cu101" }, "generatedClassName" : "segmentation", "inputSchema" : [ { "height" : "320", "colorspace" : "RGB", "isOptional" : "0", "width" : "320", "isColor" : "1", "formattedType" : "Image (Color 320 × 320)", "hasSizeFlexibility" : "0", "type" : "Image", "shortDescription" : "", "name" : "in_0" } ], "method" : "predict" } ] ================================================ FILE: Sources/SemanticImage/segmentation.mlmodelc/model.espresso.net ================================================ { "layers" : [ { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.2", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.4", "blob_weights" : 3, "K" : 3, "blob_biases" : 1, "name" : "input.2", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "in_0", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.5", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.7", "blob_weights" : 7, "K" : 64, "blob_biases" : 5, "name" : "input.5", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.4", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.8", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.8", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.8", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.7", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.9", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.11", "blob_weights" : 11, "K" : 16, "blob_biases" : 9, "name" : "input.9", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.8", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.12", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.12", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.12", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.11", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.13", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.15", "blob_weights" : 15, "K" : 16, "blob_biases" : 13, "name" : "input.13", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.12", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.16", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.16", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.16", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.15", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.17", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.19", "blob_weights" : 19, "K" : 16, "blob_biases" : 17, "name" : "input.17", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.16", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.20", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.20", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.20", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.19", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.21", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.23", "blob_weights" : 23, "K" : 16, "blob_biases" : 21, "name" : "input.21", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.20", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.24", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.24", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.24", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.23", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.25", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.27", "blob_weights" : 27, "K" : 16, "blob_biases" : 25, "name" : "input.25", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.24", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 2, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.28", "pad_fill_mode" : 0, "pad_b" : 2, "pad_l" : 2, "top" : "hx7.1", "blob_weights" : 31, "K" : 16, "blob_biases" : 29, "name" : "input.28", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 2, "has_biases" : 1, "C" : 16, "bottom" : "input.27", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 2, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 2 }, { "weights" : { }, "debug_info" : "input.30", "top" : "input.30", "type" : "concat", "name" : "input.30", "bottom" : "hx7.1,input.27" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.31", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.33", "blob_weights" : 35, "K" : 32, "blob_biases" : 33, "name" : "input.31", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.30", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx6dup.1", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.33", "debug_info" : "hx6dup.1", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx6dup.1", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.34", "top" : "input.34", "type" : "concat", "name" : "input.34", "bottom" : "hx6dup.1,input.23" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.35", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.37", "blob_weights" : 39, "K" : 32, "blob_biases" : 37, "name" : "input.35", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.34", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx5dup.1", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.37", "debug_info" : "hx5dup.1", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx5dup.1", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.38", "top" : "input.38", "type" : "concat", "name" : "input.38", "bottom" : "hx5dup.1,input.19" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.39", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.41", "blob_weights" : 43, "K" : 32, "blob_biases" : 41, "name" : "input.39", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.38", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx4dup.1", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.41", "debug_info" : "hx4dup.1", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx4dup.1", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.42", "top" : "input.42", "type" : "concat", "name" : "input.42", "bottom" : "hx4dup.1,input.15" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.43", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.45", "blob_weights" : 47, "K" : 32, "blob_biases" : 45, "name" : "input.43", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.42", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx3dup.1", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.45", "debug_info" : "hx3dup.1", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx3dup.1", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.46", "top" : "input.46", "type" : "concat", "name" : "input.46", "bottom" : "hx3dup.1,input.11" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.47", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.49", "blob_weights" : 51, "K" : 32, "blob_biases" : 49, "name" : "input.47", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.46", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx2dup.1", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.49", "debug_info" : "hx2dup.1", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx2dup.1", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.50", "top" : "input.50", "type" : "concat", "name" : "input.50", "bottom" : "hx2dup.1,input.7" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.51", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "hx1d.1", "blob_weights" : 55, "K" : 32, "blob_biases" : 53, "name" : "input.51", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.50", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "bottom" : "input.4,hx1d.1", "alpha" : 1, "operation" : 0, "weights" : { }, "fused_relu" : 0, "debug_info" : "input.53", "top" : "input.53", "type" : "elementwise", "name" : "input.53", "beta" : 0 }, { "pad_r" : 0, "debug_info" : "input.54", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.54", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.54", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.53", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.55", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.57", "blob_weights" : 59, "K" : 64, "blob_biases" : 57, "name" : "input.55", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.54", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.58", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.60", "blob_weights" : 63, "K" : 64, "blob_biases" : 61, "name" : "input.58", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.57", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.61", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.61", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.61", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.60", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.62", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.64", "blob_weights" : 67, "K" : 16, "blob_biases" : 65, "name" : "input.62", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.61", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.65", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.65", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.65", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.64", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.66", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.68", "blob_weights" : 71, "K" : 16, "blob_biases" : 69, "name" : "input.66", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.65", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.69", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.69", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.69", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.68", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.70", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.72", "blob_weights" : 75, "K" : 16, "blob_biases" : 73, "name" : "input.70", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.69", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.73", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.73", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.73", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.72", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.74", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.76", "blob_weights" : 79, "K" : 16, "blob_biases" : 77, "name" : "input.74", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.73", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 2, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.77", "pad_fill_mode" : 0, "pad_b" : 2, "pad_l" : 2, "top" : "hx6.1", "blob_weights" : 83, "K" : 16, "blob_biases" : 81, "name" : "input.77", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 2, "has_biases" : 1, "C" : 16, "bottom" : "input.76", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 2, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 2 }, { "weights" : { }, "debug_info" : "input.79", "top" : "input.79", "type" : "concat", "name" : "input.79", "bottom" : "hx6.1,input.76" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.80", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.82", "blob_weights" : 87, "K" : 32, "blob_biases" : 85, "name" : "input.80", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.79", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx5dup.2", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.82", "debug_info" : "hx5dup.2", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx5dup.2", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.83", "top" : "input.83", "type" : "concat", "name" : "input.83", "bottom" : "hx5dup.2,input.72" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.84", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.86", "blob_weights" : 91, "K" : 32, "blob_biases" : 89, "name" : "input.84", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.83", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx4dup.2", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.86", "debug_info" : "hx4dup.2", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx4dup.2", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.87", "top" : "input.87", "type" : "concat", "name" : "input.87", "bottom" : "hx4dup.2,input.68" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.88", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.90", "blob_weights" : 95, "K" : 32, "blob_biases" : 93, "name" : "input.88", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.87", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx3dup.2", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.90", "debug_info" : "hx3dup.2", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx3dup.2", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.91", "top" : "input.91", "type" : "concat", "name" : "input.91", "bottom" : "hx3dup.2,input.64" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.92", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.94", "blob_weights" : 99, "K" : 32, "blob_biases" : 97, "name" : "input.92", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.91", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx2dup.2", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.94", "debug_info" : "hx2dup.2", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx2dup.2", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.95", "top" : "input.95", "type" : "concat", "name" : "input.95", "bottom" : "hx2dup.2,input.60" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.96", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "hx1d.2", "blob_weights" : 103, "K" : 32, "blob_biases" : 101, "name" : "input.96", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.95", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "bottom" : "input.57,hx1d.2", "alpha" : 1, "operation" : 0, "weights" : { }, "fused_relu" : 0, "debug_info" : "input.98", "top" : "input.98", "type" : "elementwise", "name" : "input.98", "beta" : 0 }, { "pad_r" : 0, "debug_info" : "input.99", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.99", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.99", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.98", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.100", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.102", "blob_weights" : 107, "K" : 64, "blob_biases" : 105, "name" : "input.100", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.99", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.103", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.105", "blob_weights" : 111, "K" : 64, "blob_biases" : 109, "name" : "input.103", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.102", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.106", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.106", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.106", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.105", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.107", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.109", "blob_weights" : 115, "K" : 16, "blob_biases" : 113, "name" : "input.107", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.106", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.110", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.110", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.110", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.109", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.111", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.113", "blob_weights" : 119, "K" : 16, "blob_biases" : 117, "name" : "input.111", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.110", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.114", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.114", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.114", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.113", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.115", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.117", "blob_weights" : 123, "K" : 16, "blob_biases" : 121, "name" : "input.115", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.114", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 2, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.118", "pad_fill_mode" : 0, "pad_b" : 2, "pad_l" : 2, "top" : "hx5.1", "blob_weights" : 127, "K" : 16, "blob_biases" : 125, "name" : "input.118", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 2, "has_biases" : 1, "C" : 16, "bottom" : "input.117", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 2, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 2 }, { "weights" : { }, "debug_info" : "input.120", "top" : "input.120", "type" : "concat", "name" : "input.120", "bottom" : "hx5.1,input.117" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.121", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.123", "blob_weights" : 131, "K" : 32, "blob_biases" : 129, "name" : "input.121", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.120", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx4dup.3", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.123", "debug_info" : "hx4dup.3", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx4dup.3", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.124", "top" : "input.124", "type" : "concat", "name" : "input.124", "bottom" : "hx4dup.3,input.113" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.125", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.127", "blob_weights" : 135, "K" : 32, "blob_biases" : 133, "name" : "input.125", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.124", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx3dup.3", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.127", "debug_info" : "hx3dup.3", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx3dup.3", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.128", "top" : "input.128", "type" : "concat", "name" : "input.128", "bottom" : "hx3dup.3,input.109" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.129", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.131", "blob_weights" : 139, "K" : 32, "blob_biases" : 137, "name" : "input.129", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.128", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx2dup.3", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.131", "debug_info" : "hx2dup.3", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx2dup.3", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.132", "top" : "input.132", "type" : "concat", "name" : "input.132", "bottom" : "hx2dup.3,input.105" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.133", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "hx1d.3", "blob_weights" : 143, "K" : 32, "blob_biases" : 141, "name" : "input.133", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.132", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "bottom" : "input.102,hx1d.3", "alpha" : 1, "operation" : 0, "weights" : { }, "fused_relu" : 0, "debug_info" : "input.135", "top" : "input.135", "type" : "elementwise", "name" : "input.135", "beta" : 0 }, { "pad_r" : 0, "debug_info" : "input.136", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.136", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.136", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.135", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.137", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.139", "blob_weights" : 147, "K" : 64, "blob_biases" : 145, "name" : "input.137", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.136", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.140", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.142", "blob_weights" : 151, "K" : 64, "blob_biases" : 149, "name" : "input.140", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.139", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.143", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.143", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.143", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.142", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.144", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.146", "blob_weights" : 155, "K" : 16, "blob_biases" : 153, "name" : "input.144", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.143", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.147", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.147", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.147", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.146", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.148", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.150", "blob_weights" : 159, "K" : 16, "blob_biases" : 157, "name" : "input.148", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.147", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 2, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.151", "pad_fill_mode" : 0, "pad_b" : 2, "pad_l" : 2, "top" : "hx4.1", "blob_weights" : 163, "K" : 16, "blob_biases" : 161, "name" : "input.151", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 2, "has_biases" : 1, "C" : 16, "bottom" : "input.150", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 2, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 2 }, { "weights" : { }, "debug_info" : "input.153", "top" : "input.153", "type" : "concat", "name" : "input.153", "bottom" : "hx4.1,input.150" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.154", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.156", "blob_weights" : 167, "K" : 32, "blob_biases" : 165, "name" : "input.154", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.153", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx3dup.4", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.156", "debug_info" : "hx3dup.4", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx3dup.4", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.157", "top" : "input.157", "type" : "concat", "name" : "input.157", "bottom" : "hx3dup.4,input.146" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.158", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.160", "blob_weights" : 171, "K" : 32, "blob_biases" : 169, "name" : "input.158", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.157", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx2dup.4", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.160", "debug_info" : "hx2dup.4", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx2dup.4", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.161", "top" : "input.161", "type" : "concat", "name" : "input.161", "bottom" : "hx2dup.4,input.142" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.162", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "hx1d.4", "blob_weights" : 175, "K" : 32, "blob_biases" : 173, "name" : "input.162", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.161", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "bottom" : "input.139,hx1d.4", "alpha" : 1, "operation" : 0, "weights" : { }, "fused_relu" : 0, "debug_info" : "input.164", "top" : "input.164", "type" : "elementwise", "name" : "input.164", "beta" : 0 }, { "pad_r" : 0, "debug_info" : "input.165", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.165", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.165", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.164", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.166", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.168", "blob_weights" : 179, "K" : 64, "blob_biases" : 177, "name" : "input.166", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.165", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.169", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.171", "blob_weights" : 183, "K" : 64, "blob_biases" : 181, "name" : "input.169", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.168", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 2, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.172", "pad_fill_mode" : 0, "pad_b" : 2, "pad_l" : 2, "top" : "input.174", "blob_weights" : 187, "K" : 16, "blob_biases" : 185, "name" : "input.172", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 2, "has_biases" : 1, "C" : 16, "bottom" : "input.171", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 2, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 2 }, { "pad_r" : 4, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.175", "pad_fill_mode" : 0, "pad_b" : 4, "pad_l" : 4, "top" : "input.177", "blob_weights" : 191, "K" : 16, "blob_biases" : 189, "name" : "input.175", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 4, "has_biases" : 1, "C" : 16, "bottom" : "input.174", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 4, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 4 }, { "pad_r" : 8, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.178", "pad_fill_mode" : 0, "pad_b" : 8, "pad_l" : 8, "top" : "hx4.2", "blob_weights" : 195, "K" : 16, "blob_biases" : 193, "name" : "input.178", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 8, "has_biases" : 1, "C" : 16, "bottom" : "input.177", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 8, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 8 }, { "weights" : { }, "debug_info" : "input.180", "top" : "input.180", "type" : "concat", "name" : "input.180", "bottom" : "hx4.2,input.177" }, { "pad_r" : 4, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.181", "pad_fill_mode" : 0, "pad_b" : 4, "pad_l" : 4, "top" : "hx3d.1", "blob_weights" : 199, "K" : 32, "blob_biases" : 197, "name" : "input.181", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 4, "has_biases" : 1, "C" : 16, "bottom" : "input.180", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 4, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 4 }, { "weights" : { }, "debug_info" : "input.183", "top" : "input.183", "type" : "concat", "name" : "input.183", "bottom" : "hx3d.1,input.174" }, { "pad_r" : 2, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.184", "pad_fill_mode" : 0, "pad_b" : 2, "pad_l" : 2, "top" : "hx2d.1", "blob_weights" : 203, "K" : 32, "blob_biases" : 201, "name" : "input.184", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 2, "has_biases" : 1, "C" : 16, "bottom" : "input.183", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 2, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 2 }, { "weights" : { }, "debug_info" : "input.186", "top" : "input.186", "type" : "concat", "name" : "input.186", "bottom" : "hx2d.1,input.171" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.187", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "hx1d.5", "blob_weights" : 207, "K" : 32, "blob_biases" : 205, "name" : "input.187", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.186", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "bottom" : "input.168,hx1d.5", "alpha" : 1, "operation" : 0, "weights" : { }, "fused_relu" : 0, "debug_info" : "input.189", "top" : "input.189", "type" : "elementwise", "name" : "input.189", "beta" : 0 }, { "pad_r" : 0, "debug_info" : "input.190", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.190", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.190", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.189", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.191", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.193", "blob_weights" : 211, "K" : 64, "blob_biases" : 209, "name" : "input.191", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.190", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.194", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.196", "blob_weights" : 215, "K" : 64, "blob_biases" : 213, "name" : "input.194", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.193", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 2, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.197", "pad_fill_mode" : 0, "pad_b" : 2, "pad_l" : 2, "top" : "input.199", "blob_weights" : 219, "K" : 16, "blob_biases" : 217, "name" : "input.197", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 2, "has_biases" : 1, "C" : 16, "bottom" : "input.196", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 2, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 2 }, { "pad_r" : 4, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.200", "pad_fill_mode" : 0, "pad_b" : 4, "pad_l" : 4, "top" : "input.202", "blob_weights" : 223, "K" : 16, "blob_biases" : 221, "name" : "input.200", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 4, "has_biases" : 1, "C" : 16, "bottom" : "input.199", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 4, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 4 }, { "pad_r" : 8, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.203", "pad_fill_mode" : 0, "pad_b" : 8, "pad_l" : 8, "top" : "hx4.3", "blob_weights" : 227, "K" : 16, "blob_biases" : 225, "name" : "input.203", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 8, "has_biases" : 1, "C" : 16, "bottom" : "input.202", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 8, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 8 }, { "weights" : { }, "debug_info" : "input.205", "top" : "input.205", "type" : "concat", "name" : "input.205", "bottom" : "hx4.3,input.202" }, { "pad_r" : 4, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.206", "pad_fill_mode" : 0, "pad_b" : 4, "pad_l" : 4, "top" : "hx3d.2", "blob_weights" : 231, "K" : 32, "blob_biases" : 229, "name" : "input.206", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 4, "has_biases" : 1, "C" : 16, "bottom" : "input.205", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 4, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 4 }, { "weights" : { }, "debug_info" : "input.208", "top" : "input.208", "type" : "concat", "name" : "input.208", "bottom" : "hx3d.2,input.199" }, { "pad_r" : 2, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.209", "pad_fill_mode" : 0, "pad_b" : 2, "pad_l" : 2, "top" : "hx2d.2", "blob_weights" : 235, "K" : 32, "blob_biases" : 233, "name" : "input.209", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 2, "has_biases" : 1, "C" : 16, "bottom" : "input.208", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 2, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 2 }, { "weights" : { }, "debug_info" : "input.211", "top" : "input.211", "type" : "concat", "name" : "input.211", "bottom" : "hx2d.2,input.196" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.212", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "hx1d.6", "blob_weights" : 239, "K" : 32, "blob_biases" : 237, "name" : "input.212", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.211", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "bottom" : "input.193,hx1d.6", "alpha" : 1, "operation" : 0, "weights" : { }, "fused_relu" : 0, "debug_info" : "input.214", "top" : "input.214", "type" : "elementwise", "name" : "input.214", "beta" : 0 }, { "top" : "hx6up", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.214", "debug_info" : "hx6up", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx6up", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.215", "top" : "input.215", "type" : "concat", "name" : "input.215", "bottom" : "hx6up,input.189" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.216", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.218", "blob_weights" : 243, "K" : 128, "blob_biases" : 241, "name" : "input.216", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.215", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.219", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.221", "blob_weights" : 247, "K" : 64, "blob_biases" : 245, "name" : "input.219", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.218", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 2, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.222", "pad_fill_mode" : 0, "pad_b" : 2, "pad_l" : 2, "top" : "input.224", "blob_weights" : 251, "K" : 16, "blob_biases" : 249, "name" : "input.222", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 2, "has_biases" : 1, "C" : 16, "bottom" : "input.221", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 2, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 2 }, { "pad_r" : 4, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.225", "pad_fill_mode" : 0, "pad_b" : 4, "pad_l" : 4, "top" : "input.227", "blob_weights" : 255, "K" : 16, "blob_biases" : 253, "name" : "input.225", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 4, "has_biases" : 1, "C" : 16, "bottom" : "input.224", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 4, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 4 }, { "pad_r" : 8, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.228", "pad_fill_mode" : 0, "pad_b" : 8, "pad_l" : 8, "top" : "hx4.4", "blob_weights" : 259, "K" : 16, "blob_biases" : 257, "name" : "input.228", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 8, "has_biases" : 1, "C" : 16, "bottom" : "input.227", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 8, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 8 }, { "weights" : { }, "debug_info" : "input.230", "top" : "input.230", "type" : "concat", "name" : "input.230", "bottom" : "hx4.4,input.227" }, { "pad_r" : 4, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.231", "pad_fill_mode" : 0, "pad_b" : 4, "pad_l" : 4, "top" : "hx3d", "blob_weights" : 263, "K" : 32, "blob_biases" : 261, "name" : "input.231", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 4, "has_biases" : 1, "C" : 16, "bottom" : "input.230", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 4, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 4 }, { "weights" : { }, "debug_info" : "input.233", "top" : "input.233", "type" : "concat", "name" : "input.233", "bottom" : "hx3d,input.224" }, { "pad_r" : 2, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.234", "pad_fill_mode" : 0, "pad_b" : 2, "pad_l" : 2, "top" : "hx2d", "blob_weights" : 267, "K" : 32, "blob_biases" : 265, "name" : "input.234", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 2, "has_biases" : 1, "C" : 16, "bottom" : "input.233", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 2, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 2 }, { "weights" : { }, "debug_info" : "input.236", "top" : "input.236", "type" : "concat", "name" : "input.236", "bottom" : "hx2d,input.221" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.237", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "hx1d.7", "blob_weights" : 271, "K" : 32, "blob_biases" : 269, "name" : "input.237", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.236", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "bottom" : "input.218,hx1d.7", "alpha" : 1, "operation" : 0, "weights" : { }, "fused_relu" : 0, "debug_info" : "input.239", "top" : "input.239", "type" : "elementwise", "name" : "input.239", "beta" : 0 }, { "top" : "hx5dup.3", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.239", "debug_info" : "hx5dup.3", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx5dup.3", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.240", "top" : "input.240", "type" : "concat", "name" : "input.240", "bottom" : "hx5dup.3,input.164" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.241", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.243", "blob_weights" : 275, "K" : 128, "blob_biases" : 273, "name" : "input.241", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.240", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.244", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.246", "blob_weights" : 279, "K" : 64, "blob_biases" : 277, "name" : "input.244", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.243", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.247", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.247", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.247", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.246", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.248", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.250", "blob_weights" : 283, "K" : 16, "blob_biases" : 281, "name" : "input.248", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.247", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.251", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.251", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.251", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.250", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.252", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.254", "blob_weights" : 287, "K" : 16, "blob_biases" : 285, "name" : "input.252", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.251", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 2, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.255", "pad_fill_mode" : 0, "pad_b" : 2, "pad_l" : 2, "top" : "hx4", "blob_weights" : 291, "K" : 16, "blob_biases" : 289, "name" : "input.255", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 2, "has_biases" : 1, "C" : 16, "bottom" : "input.254", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 2, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 2 }, { "weights" : { }, "debug_info" : "input.257", "top" : "input.257", "type" : "concat", "name" : "input.257", "bottom" : "hx4,input.254" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.258", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.260", "blob_weights" : 295, "K" : 32, "blob_biases" : 293, "name" : "input.258", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.257", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx3dup.5", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.260", "debug_info" : "hx3dup.5", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx3dup.5", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.261", "top" : "input.261", "type" : "concat", "name" : "input.261", "bottom" : "hx3dup.5,input.250" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.262", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.264", "blob_weights" : 299, "K" : 32, "blob_biases" : 297, "name" : "input.262", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.261", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx2dup.5", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.264", "debug_info" : "hx2dup.5", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx2dup.5", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.265", "top" : "input.265", "type" : "concat", "name" : "input.265", "bottom" : "hx2dup.5,input.246" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.266", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "hx1d.8", "blob_weights" : 303, "K" : 32, "blob_biases" : 301, "name" : "input.266", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.265", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "bottom" : "input.243,hx1d.8", "alpha" : 1, "operation" : 0, "weights" : { }, "fused_relu" : 0, "debug_info" : "input.268", "top" : "input.268", "type" : "elementwise", "name" : "input.268", "beta" : 0 }, { "top" : "hx4dup.4", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.268", "debug_info" : "hx4dup.4", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx4dup.4", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.269", "top" : "input.269", "type" : "concat", "name" : "input.269", "bottom" : "hx4dup.4,input.135" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.270", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.272", "blob_weights" : 307, "K" : 128, "blob_biases" : 305, "name" : "input.270", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.269", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.273", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.275", "blob_weights" : 311, "K" : 64, "blob_biases" : 309, "name" : "input.273", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.272", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.276", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.276", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.276", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.275", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.277", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.279", "blob_weights" : 315, "K" : 16, "blob_biases" : 313, "name" : "input.277", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.276", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.280", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.280", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.280", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.279", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.281", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.283", "blob_weights" : 319, "K" : 16, "blob_biases" : 317, "name" : "input.281", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.280", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.284", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.284", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.284", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.283", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.285", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.287", "blob_weights" : 323, "K" : 16, "blob_biases" : 321, "name" : "input.285", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.284", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 2, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.288", "pad_fill_mode" : 0, "pad_b" : 2, "pad_l" : 2, "top" : "hx5", "blob_weights" : 327, "K" : 16, "blob_biases" : 325, "name" : "input.288", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 2, "has_biases" : 1, "C" : 16, "bottom" : "input.287", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 2, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 2 }, { "weights" : { }, "debug_info" : "input.290", "top" : "input.290", "type" : "concat", "name" : "input.290", "bottom" : "hx5,input.287" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.291", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.293", "blob_weights" : 331, "K" : 32, "blob_biases" : 329, "name" : "input.291", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.290", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx4dup.5", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.293", "debug_info" : "hx4dup.5", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx4dup.5", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.294", "top" : "input.294", "type" : "concat", "name" : "input.294", "bottom" : "hx4dup.5,input.283" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.295", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.297", "blob_weights" : 335, "K" : 32, "blob_biases" : 333, "name" : "input.295", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.294", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx3dup.6", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.297", "debug_info" : "hx3dup.6", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx3dup.6", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.298", "top" : "input.298", "type" : "concat", "name" : "input.298", "bottom" : "hx3dup.6,input.279" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.299", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.301", "blob_weights" : 339, "K" : 32, "blob_biases" : 337, "name" : "input.299", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.298", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx2dup.6", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.301", "debug_info" : "hx2dup.6", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx2dup.6", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.302", "top" : "input.302", "type" : "concat", "name" : "input.302", "bottom" : "hx2dup.6,input.275" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.303", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "hx1d.9", "blob_weights" : 343, "K" : 32, "blob_biases" : 341, "name" : "input.303", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.302", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "bottom" : "input.272,hx1d.9", "alpha" : 1, "operation" : 0, "weights" : { }, "fused_relu" : 0, "debug_info" : "input.305", "top" : "input.305", "type" : "elementwise", "name" : "input.305", "beta" : 0 }, { "top" : "hx3dup.7", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.305", "debug_info" : "hx3dup.7", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx3dup.7", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.306", "top" : "input.306", "type" : "concat", "name" : "input.306", "bottom" : "hx3dup.7,input.98" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.307", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.309", "blob_weights" : 347, "K" : 128, "blob_biases" : 345, "name" : "input.307", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.306", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.310", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.312", "blob_weights" : 351, "K" : 64, "blob_biases" : 349, "name" : "input.310", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.309", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.313", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.313", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.313", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.312", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.314", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.316", "blob_weights" : 355, "K" : 16, "blob_biases" : 353, "name" : "input.314", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.313", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.317", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.317", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.317", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.316", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.318", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.320", "blob_weights" : 359, "K" : 16, "blob_biases" : 357, "name" : "input.318", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.317", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.321", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.321", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.321", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.320", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.322", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.324", "blob_weights" : 363, "K" : 16, "blob_biases" : 361, "name" : "input.322", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.321", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.325", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.325", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.325", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.324", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.326", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.328", "blob_weights" : 367, "K" : 16, "blob_biases" : 365, "name" : "input.326", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.325", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 2, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.329", "pad_fill_mode" : 0, "pad_b" : 2, "pad_l" : 2, "top" : "hx6", "blob_weights" : 371, "K" : 16, "blob_biases" : 369, "name" : "input.329", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 2, "has_biases" : 1, "C" : 16, "bottom" : "input.328", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 2, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 2 }, { "weights" : { }, "debug_info" : "input.331", "top" : "input.331", "type" : "concat", "name" : "input.331", "bottom" : "hx6,input.328" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.332", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.334", "blob_weights" : 375, "K" : 32, "blob_biases" : 373, "name" : "input.332", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.331", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx5dup.4", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.334", "debug_info" : "hx5dup.4", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx5dup.4", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.335", "top" : "input.335", "type" : "concat", "name" : "input.335", "bottom" : "hx5dup.4,input.324" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.336", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.338", "blob_weights" : 379, "K" : 32, "blob_biases" : 377, "name" : "input.336", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.335", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx4dup.6", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.338", "debug_info" : "hx4dup.6", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx4dup.6", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.339", "top" : "input.339", "type" : "concat", "name" : "input.339", "bottom" : "hx4dup.6,input.320" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.340", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.342", "blob_weights" : 383, "K" : 32, "blob_biases" : 381, "name" : "input.340", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.339", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx3dup.8", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.342", "debug_info" : "hx3dup.8", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx3dup.8", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.343", "top" : "input.343", "type" : "concat", "name" : "input.343", "bottom" : "hx3dup.8,input.316" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.344", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.346", "blob_weights" : 387, "K" : 32, "blob_biases" : 385, "name" : "input.344", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.343", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx2dup.7", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.346", "debug_info" : "hx2dup.7", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx2dup.7", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.347", "top" : "input.347", "type" : "concat", "name" : "input.347", "bottom" : "hx2dup.7,input.312" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.348", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "hx1d.10", "blob_weights" : 391, "K" : 32, "blob_biases" : 389, "name" : "input.348", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.347", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "bottom" : "input.309,hx1d.10", "alpha" : 1, "operation" : 0, "weights" : { }, "fused_relu" : 0, "debug_info" : "input.350", "top" : "input.350", "type" : "elementwise", "name" : "input.350", "beta" : 0 }, { "top" : "hx2dup.8", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.350", "debug_info" : "hx2dup.8", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx2dup.8", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.351", "top" : "input.351", "type" : "concat", "name" : "input.351", "bottom" : "hx2dup.8,input.53" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.352", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.354", "blob_weights" : 395, "K" : 128, "blob_biases" : 393, "name" : "input.352", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.351", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.355", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.357", "blob_weights" : 399, "K" : 64, "blob_biases" : 397, "name" : "input.355", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.354", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.358", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.358", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.358", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.357", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.359", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.361", "blob_weights" : 403, "K" : 16, "blob_biases" : 401, "name" : "input.359", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.358", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.362", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.362", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.362", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.361", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.363", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.365", "blob_weights" : 407, "K" : 16, "blob_biases" : 405, "name" : "input.363", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.362", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.366", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.366", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.366", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.365", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.367", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.369", "blob_weights" : 411, "K" : 16, "blob_biases" : 409, "name" : "input.367", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.366", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.370", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.370", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.370", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.369", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.371", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.373", "blob_weights" : 415, "K" : 16, "blob_biases" : 413, "name" : "input.371", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.370", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 0, "debug_info" : "input.374", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "size_x" : 2, "top" : "input.374", "top_shape_style" : 0, "stride_x" : 2, "avg_or_max" : 1, "average_count_exclude_padding" : 1, "type" : "pool", "name" : "input.374", "pad_t" : 0, "stride_y" : 2, "bottom" : "input.373", "weights" : { }, "pad_mode" : 2, "size_y" : 2, "pad_value" : 0 }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.375", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.377", "blob_weights" : 419, "K" : 16, "blob_biases" : 417, "name" : "input.375", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.374", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 2, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.378", "pad_fill_mode" : 0, "pad_b" : 2, "pad_l" : 2, "top" : "hx7", "blob_weights" : 423, "K" : 16, "blob_biases" : 421, "name" : "input.378", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 2, "has_biases" : 1, "C" : 16, "bottom" : "input.377", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "dilation_x" : 2, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1, "dilation_y" : 2 }, { "weights" : { }, "debug_info" : "input.380", "top" : "input.380", "type" : "concat", "name" : "input.380", "bottom" : "hx7,input.377" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.381", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.383", "blob_weights" : 427, "K" : 32, "blob_biases" : 425, "name" : "input.381", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.380", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx6dup", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.383", "debug_info" : "hx6dup", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx6dup", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.384", "top" : "input.384", "type" : "concat", "name" : "input.384", "bottom" : "hx6dup,input.373" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.385", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.387", "blob_weights" : 431, "K" : 32, "blob_biases" : 429, "name" : "input.385", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.384", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx5dup", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.387", "debug_info" : "hx5dup", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx5dup", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.388", "top" : "input.388", "type" : "concat", "name" : "input.388", "bottom" : "hx5dup,input.369" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.389", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.391", "blob_weights" : 435, "K" : 32, "blob_biases" : 433, "name" : "input.389", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.388", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx4dup", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.391", "debug_info" : "hx4dup", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx4dup", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.392", "top" : "input.392", "type" : "concat", "name" : "input.392", "bottom" : "hx4dup,input.365" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.393", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.395", "blob_weights" : 439, "K" : 32, "blob_biases" : 437, "name" : "input.393", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.392", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx3dup", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.395", "debug_info" : "hx3dup", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx3dup", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.396", "top" : "input.396", "type" : "concat", "name" : "input.396", "bottom" : "hx3dup,input.361" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.397", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.399", "blob_weights" : 443, "K" : 32, "blob_biases" : 441, "name" : "input.397", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 16, "bottom" : "input.396", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "hx2dup", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.399", "debug_info" : "hx2dup", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "hx2dup", "scaling_factor_y" : 2 }, { "weights" : { }, "debug_info" : "input.400", "top" : "input.400", "type" : "concat", "name" : "input.400", "bottom" : "hx2dup,input.357" }, { "pad_r" : 1, "fused_relu" : 1, "fused_tanh" : 0, "debug_info" : "input.401", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "hx1d", "blob_weights" : 447, "K" : 32, "blob_biases" : 445, "name" : "input.401", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 64, "bottom" : "input.400", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "bottom" : "input.354,hx1d", "alpha" : 1, "operation" : 0, "weights" : { }, "fused_relu" : 0, "debug_info" : "input.403", "top" : "input.403", "type" : "elementwise", "name" : "input.403", "beta" : 0 }, { "pad_r" : 1, "fused_relu" : 0, "fused_tanh" : 0, "debug_info" : "tar", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "tar", "blob_weights" : 451, "K" : 64, "blob_biases" : 449, "name" : "tar", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 1, "bottom" : "input.403", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "pad_r" : 1, "fused_relu" : 0, "fused_tanh" : 0, "debug_info" : "input.404", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.404", "blob_weights" : 455, "K" : 64, "blob_biases" : 453, "name" : "input.404", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 1, "bottom" : "input.350", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "d2", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 2, "mode" : 1, "align_corners" : 0, "bottom" : "input.404", "debug_info" : "d2", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "d2", "scaling_factor_y" : 2 }, { "pad_r" : 1, "fused_relu" : 0, "fused_tanh" : 0, "debug_info" : "input.405", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.405", "blob_weights" : 459, "K" : 64, "blob_biases" : 457, "name" : "input.405", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 1, "bottom" : "input.305", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "d3", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 4, "mode" : 1, "align_corners" : 0, "bottom" : "input.405", "debug_info" : "d3", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "d3", "scaling_factor_y" : 4 }, { "pad_r" : 1, "fused_relu" : 0, "fused_tanh" : 0, "debug_info" : "input.406", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.406", "blob_weights" : 463, "K" : 64, "blob_biases" : 461, "name" : "input.406", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 1, "bottom" : "input.268", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "d4", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 8, "mode" : 1, "align_corners" : 0, "bottom" : "input.406", "debug_info" : "d4", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "d4", "scaling_factor_y" : 8 }, { "pad_r" : 1, "fused_relu" : 0, "fused_tanh" : 0, "debug_info" : "input.407", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.407", "blob_weights" : 467, "K" : 64, "blob_biases" : 465, "name" : "input.407", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 1, "bottom" : "input.239", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "d5", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 16, "mode" : 1, "align_corners" : 0, "bottom" : "input.407", "debug_info" : "d5", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "d5", "scaling_factor_y" : 16 }, { "pad_r" : 1, "fused_relu" : 0, "fused_tanh" : 0, "debug_info" : "input.408", "pad_fill_mode" : 0, "pad_b" : 1, "pad_l" : 1, "top" : "input.408", "blob_weights" : 471, "K" : 64, "blob_biases" : 469, "name" : "input.408", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 1, "has_biases" : 1, "C" : 1, "bottom" : "input.214", "weights" : { }, "Nx" : 3, "pad_mode" : 0, "pad_value" : 0, "Ny" : 3, "n_parallel" : 1 }, { "top" : "d6", "use_fractional_scale_factors" : false, "weights" : { }, "fractional_scaling_factor_y" : 1, "type" : "upsample", "scaling_factor_x" : 32, "mode" : 1, "align_corners" : 0, "bottom" : "input.408", "debug_info" : "d6", "fractional_scaling_factor_x" : 1, "is_legacy_mode" : 0, "name" : "d6", "scaling_factor_y" : 32 }, { "weights" : { }, "debug_info" : "input.409", "top" : "input.409", "type" : "concat", "name" : "input.409", "bottom" : "tar,d2,d3,d4,d5,d6" }, { "pad_r" : 0, "fused_relu" : 0, "fused_tanh" : 0, "debug_info" : "input", "pad_fill_mode" : 0, "pad_b" : 0, "pad_l" : 0, "top" : "input", "blob_weights" : 475, "K" : 6, "blob_biases" : 473, "name" : "input", "has_batch_norm" : 0, "type" : "convolution", "n_groups" : 1, "pad_t" : 0, "has_biases" : 1, "C" : 1, "bottom" : "input.409", "weights" : { }, "Nx" : 1, "pad_mode" : 0, "pad_value" : 0, "Ny" : 1, "n_parallel" : 1 }, { "bottom" : "input", "weights" : { }, "mode" : 3, "debug_info" : "2169", "top" : "out_a0", "type" : "activation", "name" : "2169" }, { "bottom" : "tar", "weights" : { }, "mode" : 3, "debug_info" : "2170", "top" : "out_a1", "type" : "activation", "name" : "2170" }, { "bottom" : "d2", "weights" : { }, "mode" : 3, "debug_info" : "2171", "top" : "out_a2", "type" : "activation", "name" : "2171" }, { "bottom" : "d3", "weights" : { }, "mode" : 3, "debug_info" : "2172", "top" : "out_a3", "type" : "activation", "name" : "2172" }, { "bottom" : "d4", "weights" : { }, "mode" : 3, "debug_info" : "2173", "top" : "out_a4", "type" : "activation", "name" : "2173" }, { "bottom" : "d5", "weights" : { }, "mode" : 3, "debug_info" : "2174", "top" : "out_a5", "type" : "activation", "name" : "2174" }, { "bottom" : "d6", "weights" : { }, "mode" : 3, "debug_info" : "2175", "top" : "out_a6", "type" : "activation", "name" : "2175" }, { "bottom" : "out_a0", "alpha" : 255, "beta" : 0, "mode" : 6, "weights" : { }, "debug_info" : "out_p0", "top" : "out_p0", "type" : "activation", "name" : "out_p0", "attributes" : { "is_output" : 1 } }, { "bottom" : "out_a1", "alpha" : 255, "beta" : 0, "mode" : 6, "weights" : { }, "debug_info" : "out_p1", "top" : "out_p1", "type" : "activation", "name" : "out_p1", "attributes" : { "is_output" : 1 } }, { "bottom" : "out_a2", "alpha" : 255, "beta" : 0, "mode" : 6, "weights" : { }, "debug_info" : "out_p2", "top" : "out_p2", "type" : "activation", "name" : "out_p2", "attributes" : { "is_output" : 1 } }, { "bottom" : "out_a3", "alpha" : 255, "beta" : 0, "mode" : 6, "weights" : { }, "debug_info" : "out_p3", "top" : "out_p3", "type" : "activation", "name" : "out_p3", "attributes" : { "is_output" : 1 } }, { "bottom" : "out_a4", "alpha" : 255, "beta" : 0, "mode" : 6, "weights" : { }, "debug_info" : "out_p4", "top" : "out_p4", "type" : "activation", "name" : "out_p4", "attributes" : { "is_output" : 1 } }, { "bottom" : "out_a5", "alpha" : 255, "beta" : 0, "mode" : 6, "weights" : { }, "debug_info" : "out_p5", "top" : "out_p5", "type" : "activation", "name" : "out_p5", "attributes" : { "is_output" : 1 } }, { "bottom" : "out_a6", "alpha" : 255, "beta" : 0, "mode" : 6, "weights" : { }, "debug_info" : "out_p6", "top" : "out_p6", "type" : "activation", "name" : "out_p6", "attributes" : { "is_output" : 1 } } ], "transform_params" : { "in_0" : { "bias_a" : 0, "bias_g" : 0, "bias_r" : 0, "bias_b" : 0, "center_mean" : 0, "is_network_bgr" : 0, "scale" : 0.0039215688593685627 } }, "storage" : "model.espresso.weights", "metadata_in_weights" : [ ], "properties" : { }, "analyses" : { }, "format_version" : 200 } ================================================ FILE: Sources/SemanticImage/segmentation.mlmodelc/model.espresso.shape ================================================ { "layer_shapes" : { "input.95" : { "k" : 32, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.354" : { "k" : 64, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.41" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.369" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.383" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.403" : { "k" : 64, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "tar" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.16" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "hx4.4" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.208" : { "k" : 32, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx5dup.4" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.251" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.46" : { "k" : 32, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.280" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "hx6dup.1" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "out_p6" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.76" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx6dup" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.373" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.105" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.388" : { "k" : 32, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.8" : { "k" : 16, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.408" : { "k" : 1, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx2dup.1" : { "k" : 16, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.227" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "hx5.1" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.27" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx1d.2" : { "k" : 64, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.82" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.305" : { "k" : 64, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "hx2dup.6" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.57" : { "k" : 64, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.334" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx1d.10" : { "k" : 64, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.392" : { "k" : 32, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.124" : { "k" : 32, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.139" : { "k" : 64, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.87" : { "k" : 32, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "hx3d" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.33" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx3dup.3" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.168" : { "k" : 64, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.153" : { "k" : 32, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.202" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.246" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.260" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.275" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "hx3dup.8" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.38" : { "k" : 32, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.324" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.339" : { "k" : 32, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.114" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx4dup.5" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.68" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.143" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "hx1d.3" : { "k" : 64, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "hx2d" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.221" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "hx5dup.2" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.98" : { "k" : 64, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.236" : { "k" : 32, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.250" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.265" : { "k" : 32, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.294" : { "k" : 32, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.19" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.343" : { "k" : 32, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.20" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.358" : { "k" : 16, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.387" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.4" : { "k" : 64, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.49" : { "k" : 16, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.407" : { "k" : 1, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.50" : { "k" : 32, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.177" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.211" : { "k" : 32, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.79" : { "k" : 32, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.240" : { "k" : 128, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "hx4dup" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "hx1d" : { "k" : 64, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.284" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx2dup.4" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "hx1d.4" : { "k" : 64, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.362" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.377" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.391" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.123" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.109" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "hx3dup.1" : { "k" : 16, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "hx6.1" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "out_a0" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.196" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.230" : { "k" : 32, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.61" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "hx3dup.6" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.309" : { "k" : 64, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.91" : { "k" : 32, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.338" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.113" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "hx4dup.3" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "hx2d.1" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.396" : { "k" : 32, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.142" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.128" : { "k" : 32, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.12" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.157" : { "k" : 32, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.171" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.186" : { "k" : 32, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "hx1d.5" : { "k" : 64, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.42" : { "k" : 32, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.264" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.279" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.293" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.313" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.72" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.328" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.342" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "out_a1" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.357" : { "k" : 16, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "out_p0" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.132" : { "k" : 32, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.406" : { "k" : 1, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.147" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.161" : { "k" : 32, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.190" : { "k" : 64, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.23" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.254" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.269" : { "k" : 128, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.283" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.298" : { "k" : 32, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "hx2d.2" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx2dup.2" : { "k" : 16, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.53" : { "k" : 64, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.347" : { "k" : 32, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.361" : { "k" : 16, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.83" : { "k" : 32, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "hx1d.6" : { "k" : 64, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx2dup" : { "k" : 16, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.180" : { "k" : 32, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "hx2dup.7" : { "k" : 16, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.215" : { "k" : 128, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "out_a2" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "out_p1" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "hx3dup.4" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.34" : { "k" : 32, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "hx7.1" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.351" : { "k" : 128, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "in_0" : { "k" : 3, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.366" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.380" : { "k" : 32, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx4dup.1" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.64" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.127" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.400" : { "k" : 32, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.395" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.156" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.205" : { "k" : 32, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.94" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "hx4dup.6" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.69" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.15" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.312" : { "k" : 16, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "hx1d.7" : { "k" : 64, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.370" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.99" : { "k" : 64, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.102" : { "k" : 64, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.45" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.117" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.131" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "hx5dup.3" : { "k" : 64, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.405" : { "k" : 1, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.146" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.160" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "out_a3" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "out_p2" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.224" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.239" : { "k" : 64, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.268" : { "k" : 64, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.302" : { "k" : 32, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.297" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "hx5dup" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.317" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.331" : { "k" : 32, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.346" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "hx4" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.136" : { "k" : 64, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.150" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.165" : { "k" : 64, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "hx5" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx2dup.5" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.214" : { "k" : 64, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx1d.8" : { "k" : 64, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "hx6" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.243" : { "k" : 64, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.272" : { "k" : 64, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "hx3dup.2" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.86" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.287" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx7" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.321" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "out_a4" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.350" : { "k" : 64, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "out_p3" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.365" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "hx3dup.7" : { "k" : 64, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "hx3d.1" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.37" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "d2" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.199" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.233" : { "k" : 32, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "d3" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "hx4dup.4" : { "k" : 64, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "d4" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "d5" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "d6" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "hx5dup.1" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.384" : { "k" : 32, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "hx1d.9" : { "k" : 64, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.399" : { "k" : 16, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.404" : { "k" : 1, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.174" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.73" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.189" : { "k" : 64, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "out_a5" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "out_p4" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.301" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.316" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.7" : { "k" : 16, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "hx4.1" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx3d.2" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.24" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.374" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.106" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.120" : { "k" : 32, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.135" : { "k" : 64, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.409" : { "k" : 6, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.164" : { "k" : 64, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "hx2dup.3" : { "k" : 16, "w" : 80, "n" : 1, "_rank" : 4, "h" : 80 }, "input.54" : { "k" : 64, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "hx6up" : { "k" : 64, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.193" : { "k" : 64, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx3dup" : { "k" : 16, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.257" : { "k" : 32, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.30" : { "k" : 32, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx4.2" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.306" : { "k" : 128, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.320" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "hx2dup.8" : { "k" : 64, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.335" : { "k" : 32, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.60" : { "k" : 16, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.110" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "out_a6" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "hx3dup.5" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "out_p5" : { "k" : 1, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 }, "input.183" : { "k" : 32, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.90" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.218" : { "k" : 64, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "hx4.3" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "input.261" : { "k" : 32, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.65" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.247" : { "k" : 16, "w" : 20, "n" : 1, "_rank" : 4, "h" : 20 }, "input.11" : { "k" : 16, "w" : 160, "n" : 1, "_rank" : 4, "h" : 160 }, "input.290" : { "k" : 32, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx4dup.2" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.276" : { "k" : 16, "w" : 40, "n" : 1, "_rank" : 4, "h" : 40 }, "input.325" : { "k" : 16, "w" : 10, "n" : 1, "_rank" : 4, "h" : 10 }, "hx1d.1" : { "k" : 64, "w" : 320, "n" : 1, "_rank" : 4, "h" : 320 } } } ================================================ FILE: Sources/SemanticImage/segmentation.swift ================================================ // // segmentation.swift // // This file was automatically generated and should not be edited. // import CoreML /// Model Prediction Input Type @available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) class segmentationInput : MLFeatureProvider { /// in_0 as color (kCVPixelFormatType_32BGRA) image buffer, 320 pixels wide by 320 pixels high var in_0: CVPixelBuffer var featureNames: Set { get { return ["in_0"] } } func featureValue(for featureName: String) -> MLFeatureValue? { if (featureName == "in_0") { return MLFeatureValue(pixelBuffer: in_0) } return nil } init(in_0: CVPixelBuffer) { self.in_0 = in_0 } convenience init(in_0With in_0: CGImage) throws { self.init(in_0: try MLFeatureValue(cgImage: in_0, pixelsWide: 320, pixelsHigh: 320, pixelFormatType: kCVPixelFormatType_32ARGB, options: nil).imageBufferValue!) } convenience init(in_0At in_0: URL) throws { self.init(in_0: try MLFeatureValue(imageAt: in_0, pixelsWide: 320, pixelsHigh: 320, pixelFormatType: kCVPixelFormatType_32ARGB, options: nil).imageBufferValue!) } func setIn_0(with in_0: CGImage) throws { self.in_0 = try MLFeatureValue(cgImage: in_0, pixelsWide: 320, pixelsHigh: 320, pixelFormatType: kCVPixelFormatType_32ARGB, options: nil).imageBufferValue! } func setIn_0(with in_0: URL) throws { self.in_0 = try MLFeatureValue(imageAt: in_0, pixelsWide: 320, pixelsHigh: 320, pixelFormatType: kCVPixelFormatType_32ARGB, options: nil).imageBufferValue! } } /// Model Prediction Output Type @available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) class segmentationOutput : MLFeatureProvider { /// Source provided by CoreML private let provider : MLFeatureProvider /// out_p0 as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 320 pixels wide by 320 pixels high lazy var out_p0: CVPixelBuffer = { [unowned self] in return self.provider.featureValue(for: "out_p0")!.imageBufferValue }()! /// out_p1 as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 320 pixels wide by 320 pixels high lazy var out_p1: CVPixelBuffer = { [unowned self] in return self.provider.featureValue(for: "out_p1")!.imageBufferValue }()! /// out_p2 as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 320 pixels wide by 320 pixels high lazy var out_p2: CVPixelBuffer = { [unowned self] in return self.provider.featureValue(for: "out_p2")!.imageBufferValue }()! /// out_p3 as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 320 pixels wide by 320 pixels high lazy var out_p3: CVPixelBuffer = { [unowned self] in return self.provider.featureValue(for: "out_p3")!.imageBufferValue }()! /// out_p4 as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 320 pixels wide by 320 pixels high lazy var out_p4: CVPixelBuffer = { [unowned self] in return self.provider.featureValue(for: "out_p4")!.imageBufferValue }()! /// out_p5 as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 320 pixels wide by 320 pixels high lazy var out_p5: CVPixelBuffer = { [unowned self] in return self.provider.featureValue(for: "out_p5")!.imageBufferValue }()! /// out_p6 as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 320 pixels wide by 320 pixels high lazy var out_p6: CVPixelBuffer = { [unowned self] in return self.provider.featureValue(for: "out_p6")!.imageBufferValue }()! var featureNames: Set { return self.provider.featureNames } func featureValue(for featureName: String) -> MLFeatureValue? { return self.provider.featureValue(for: featureName) } init(out_p0: CVPixelBuffer, out_p1: CVPixelBuffer, out_p2: CVPixelBuffer, out_p3: CVPixelBuffer, out_p4: CVPixelBuffer, out_p5: CVPixelBuffer, out_p6: CVPixelBuffer) { 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)]) } init(features: MLFeatureProvider) { self.provider = features } } /// Class for model loading and prediction @available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *) class segmentation { let model: MLModel /// URL of model assuming it was installed in the same bundle as this class class var urlOfModelInThisBundle : URL { let bundle = Bundle(for: self) return bundle.url(forResource: "segmentation", withExtension:"mlmodelc")! } /** Construct segmentation instance with an existing MLModel object. Usually the application does not use this initializer unless it makes a subclass of segmentation. Such application may want to use `MLModel(contentsOfURL:configuration:)` and `segmentation.urlOfModelInThisBundle` to create a MLModel object to pass-in. - parameters: - model: MLModel object */ init(model: MLModel) { self.model = model } /** Construct a model with configuration - parameters: - configuration: the desired model configuration - throws: an NSError object that describes the problem */ convenience init(configuration: MLModelConfiguration = MLModelConfiguration()) throws { try self.init(contentsOf: type(of:self).urlOfModelInThisBundle, configuration: configuration) } /** Construct segmentation instance with explicit path to mlmodelc file - parameters: - modelURL: the file url of the model - throws: an NSError object that describes the problem */ convenience init(contentsOf modelURL: URL) throws { try self.init(model: MLModel(contentsOf: modelURL)) } /** Construct a model with URL of the .mlmodelc directory and configuration - parameters: - modelURL: the file url of the model - configuration: the desired model configuration - throws: an NSError object that describes the problem */ convenience init(contentsOf modelURL: URL, configuration: MLModelConfiguration) throws { try self.init(model: MLModel(contentsOf: modelURL, configuration: configuration)) } /** Construct segmentation instance asynchronously with optional configuration. 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. - parameters: - configuration: the desired model configuration - handler: the completion handler to be called when the model loading completes successfully or unsuccessfully */ class func load(configuration: MLModelConfiguration = MLModelConfiguration(), completionHandler handler: @escaping (Swift.Result) -> Void) { return self.load(contentsOf: self.urlOfModelInThisBundle, configuration: configuration, completionHandler: handler) } /** Construct segmentation instance asynchronously with optional configuration. 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. - parameters: - configuration: the desired model configuration */ @available(macOS 12.0, iOS 15.0, tvOS 15.0, watchOS 8.0, *) class func load(configuration: MLModelConfiguration = MLModelConfiguration()) async throws -> segmentation { return try await self.load(contentsOf: self.urlOfModelInThisBundle, configuration: configuration) } /** Construct segmentation instance asynchronously with URL of the .mlmodelc directory with optional configuration. 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. - parameters: - modelURL: the URL to the model - configuration: the desired model configuration - handler: the completion handler to be called when the model loading completes successfully or unsuccessfully */ class func load(contentsOf modelURL: URL, configuration: MLModelConfiguration = MLModelConfiguration(), completionHandler handler: @escaping (Swift.Result) -> Void) { MLModel.load(contentsOf: modelURL, configuration: configuration) { result in switch result { case .failure(let error): handler(.failure(error)) case .success(let model): handler(.success(segmentation(model: model))) } } } /** Construct segmentation instance asynchronously with URL of the .mlmodelc directory with optional configuration. 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. - parameters: - modelURL: the URL to the model - configuration: the desired model configuration */ @available(macOS 12.0, iOS 15.0, tvOS 15.0, watchOS 8.0, *) class func load(contentsOf modelURL: URL, configuration: MLModelConfiguration = MLModelConfiguration()) async throws -> segmentation { let model = try await MLModel.load(contentsOf: modelURL, configuration: configuration) return segmentation(model: model) } /** Make a prediction using the structured interface - parameters: - input: the input to the prediction as segmentationInput - throws: an NSError object that describes the problem - returns: the result of the prediction as segmentationOutput */ func prediction(input: segmentationInput) throws -> segmentationOutput { return try self.prediction(input: input, options: MLPredictionOptions()) } /** Make a prediction using the structured interface - parameters: - input: the input to the prediction as segmentationInput - options: prediction options - throws: an NSError object that describes the problem - returns: the result of the prediction as segmentationOutput */ func prediction(input: segmentationInput, options: MLPredictionOptions) throws -> segmentationOutput { let outFeatures = try model.prediction(from: input, options:options) return segmentationOutput(features: outFeatures) } /** Make a prediction using the convenience interface - parameters: - in_0 as color (kCVPixelFormatType_32BGRA) image buffer, 320 pixels wide by 320 pixels high - throws: an NSError object that describes the problem - returns: the result of the prediction as segmentationOutput */ func prediction(in_0: CVPixelBuffer) throws -> segmentationOutput { let input_ = segmentationInput(in_0: in_0) return try self.prediction(input: input_) } /** Make a batch prediction using the structured interface - parameters: - inputs: the inputs to the prediction as [segmentationInput] - options: prediction options - throws: an NSError object that describes the problem - returns: the result of the prediction as [segmentationOutput] */ func predictions(inputs: [segmentationInput], options: MLPredictionOptions = MLPredictionOptions()) throws -> [segmentationOutput] { let batchIn = MLArrayBatchProvider(array: inputs) let batchOut = try model.predictions(from: batchIn, options: options) var results : [segmentationOutput] = [] results.reserveCapacity(inputs.count) for i in 0..