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..