├── .gitignore ├── HandDetector.cs ├── Readme.md ├── Scenes └── SampleScene.unity ├── StreamingAssets ├── frozen_inference_graph.pb ├── frozen_inference_graph.pbtxt └── palm.xml └── WebCamOperation.cs /.gitignore: -------------------------------------------------------------------------------- 1 | OpenCVForUnity 2 | *.meta -------------------------------------------------------------------------------- /HandDetector.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using System; 5 | using UnityEngine.UI; 6 | using OpenCVForUnity.CoreModule; 7 | using OpenCVForUnity.UnityUtils; 8 | using OpenCVForUnity.ImgprocModule; 9 | using OpenCVForUnity.ObjdetectModule; 10 | using OpenCVForUnity.DnnModule; 11 | 12 | public delegate void HandDel(Mat image, int imgWidth, int imgHeight,ref BoxOutline ouline); 13 | public class BoxOutline 14 | { 15 | public float XMin; 16 | public float XMax; 17 | public float YMin; 18 | public float YMax; 19 | } 20 | 21 | public class HandDetector : MonoBehaviour 22 | { 23 | public WebCamOperation webCamOperation; 24 | // [0]:opencv [1]:tensorflow [2]:contour [3]:cascade 25 | public int handDetectionMode; 26 | 27 | Net tfDetector; 28 | CascadeClassifier cascadeDetector; 29 | HandDel del; 30 | int imgWidth; 31 | int imgHeight; 32 | 33 | 34 | [Header("UI")] 35 | public RawImage HandImage; 36 | Texture2D HandTexture; 37 | Mat HandMat; 38 | BoxOutline Outline; 39 | 40 | private void LoadDetector() 41 | { 42 | if (handDetectionMode == 0) 43 | { 44 | var cascadeFileName = Utils.getFilePath("palm.xml"); 45 | cascadeDetector = new CascadeClassifier(); 46 | cascadeDetector.load(cascadeFileName); 47 | if (cascadeDetector.empty()) 48 | { 49 | Debug.LogError("cascade file is not loaded. Please copy from “OpenCVForUnity/StreamingAssets/” to “Assets/StreamingAssets/” folder. "); 50 | } 51 | } 52 | else if (handDetectionMode == 2) 53 | { 54 | 55 | var modelPath = Utils.getFilePath("frozen_inference_graph.pb"); 56 | var configPath = Utils.getFilePath("frozen_inference_graph.pbtxt"); 57 | tfDetector = Dnn.readNetFromTensorflow(modelPath, configPath); 58 | if (tfDetector.empty()) 59 | { 60 | Debug.Log("tf detector is empty"); 61 | } 62 | } 63 | } 64 | 65 | bool initialized = false; 66 | 67 | void init() 68 | { 69 | imgWidth = webCamOperation.GetWebCamTexture().width; 70 | imgHeight = webCamOperation.GetWebCamTexture().height; 71 | 72 | // Define the texture 73 | HandTexture = new Texture2D(imgWidth, imgHeight); 74 | HandImage.texture = HandTexture; 75 | HandMat = new Mat(imgHeight, imgWidth, CvType.CV_8UC3); 76 | 77 | LoadDetector(); 78 | 79 | initialized = true; 80 | } 81 | void Start() 82 | { 83 | if (handDetectionMode == 0) 84 | { 85 | del = new HandDel(this.CascadeDetect); 86 | } 87 | else if (handDetectionMode == 1) 88 | { 89 | del = new HandDel(this.ContourDetect); 90 | } 91 | else if (handDetectionMode == 2) 92 | { 93 | del = new HandDel(this.TFDetect); 94 | } 95 | } 96 | 97 | void Update() 98 | { 99 | if (!webCamOperation.WebCamRunning()) 100 | return; 101 | if (!initialized) 102 | { 103 | init(); 104 | } 105 | HandMat = webCamOperation.GetMat(); 106 | del.Invoke(HandMat, imgWidth, imgHeight, ref Outline); 107 | PostAction(HandTexture, HandMat, Outline); 108 | } 109 | 110 | void CascadeDetect(Mat image, int imgWidth, int imgHeight, ref BoxOutline outline) 111 | { 112 | MatOfRect hands = new MatOfRect(); 113 | Mat gray = new Mat(imgHeight, imgWidth, CvType.CV_8UC3); 114 | Imgproc.cvtColor(image, gray, Imgproc.COLOR_BGR2GRAY); 115 | Imgproc.equalizeHist(gray, gray); 116 | 117 | cascadeDetector.detectMultiScale( 118 | gray, 119 | hands, 120 | 1.1, 121 | 2, 122 | 0 | Objdetect.CASCADE_DO_CANNY_PRUNING | Objdetect.CASCADE_SCALE_IMAGE | Objdetect.CASCADE_FIND_BIGGEST_OBJECT, 123 | new Size(10, 10), 124 | new Size()); 125 | 126 | OpenCVForUnity.CoreModule.Rect[] handsArray = hands.toArray(); 127 | if (handsArray.Length != 0) 128 | { 129 | outline = new BoxOutline 130 | { 131 | XMin = (float)handsArray[0].x, 132 | XMax = (float)handsArray[0].x+handsArray[0].width, 133 | YMin = (float)handsArray[0].y, 134 | YMax = (float)handsArray[0].y + handsArray[0].height 135 | }; 136 | Debug.Log("cascade: palm detected!"); 137 | } 138 | else 139 | { 140 | outline = null; 141 | } 142 | } 143 | 144 | void ContourDetect(Mat image, int imgWidth, int imgHeight, ref BoxOutline outline) 145 | { 146 | // filter skin color 147 | var output_mask = GetSkinMask(image, imgWidth, imgHeight); 148 | 149 | // find the convex hull of finger 150 | int cx = -1, cy = -1; 151 | FindDefects(output_mask, ref cx, ref cy, 1, 4); 152 | if (cx == -1 && cy == -1) 153 | { 154 | outline = null; 155 | return; 156 | } 157 | outline = new BoxOutline 158 | { 159 | XMin = (float)cx - 15, 160 | XMax = (float)cx + 15, 161 | YMin = (float)cy - 15, 162 | YMax = (float)cy + 15 163 | }; 164 | } 165 | 166 | private void TFDetect(Mat image, int imgWidth, int imgHeight, ref BoxOutline outline) 167 | { 168 | if (image == null) 169 | { 170 | Debug.Log("unable to find colors"); 171 | return; 172 | } 173 | 174 | var blob = Dnn.blobFromImage(image, 1, new Size(300, 300), new Scalar(0, 0, 0), true, false); 175 | tfDetector.setInput(blob); 176 | Mat prob = tfDetector.forward(); 177 | Mat newMat = prob.reshape(1, (int)prob.total() / prob.size(3)); 178 | float maxScore = 0; 179 | int scoreInd = 0; 180 | for (int i = 0; i < newMat.rows(); i++) 181 | { 182 | var score = (float)newMat.get(i, 2)[0]; 183 | if (score > maxScore) 184 | { 185 | maxScore = score; 186 | scoreInd = i; 187 | } 188 | } 189 | //Debug.Log(maxScore); 190 | if (maxScore > 0.7) 191 | { 192 | float left = (float)(newMat.get(scoreInd, 3)[0] * imgWidth); 193 | float top = (float)(newMat.get(scoreInd, 4)[0] * imgHeight); 194 | float right = (float)(newMat.get(scoreInd, 5)[0] * imgWidth); 195 | float bottom = (float)(newMat.get(scoreInd, 6)[0] * imgHeight); 196 | 197 | left = (int)Mathf.Max(0, Mathf.Min(left, imgWidth - 1)); 198 | top = (int)Mathf.Max(0, Mathf.Min(top, imgHeight - 1)); 199 | right = (int)Mathf.Max(0, Mathf.Min(right, imgWidth - 1)); 200 | bottom = (int)Mathf.Max(0, Mathf.Min(bottom, imgHeight - 1)); 201 | 202 | outline = new BoxOutline 203 | { 204 | XMin = right, 205 | XMax = left, 206 | YMin = bottom, 207 | YMax = top 208 | }; 209 | } 210 | else 211 | { 212 | outline = null; 213 | } 214 | prob.Dispose(); 215 | newMat.Dispose(); 216 | } 217 | 218 | void PostAction(Texture2D tex, Mat mat, BoxOutline outl) 219 | { 220 | if (outl != null) 221 | { 222 | Imgproc.rectangle(mat, new Point(outl.XMin, outl.YMin), new Point(outl.XMax, outl.YMax), new Scalar(255, 0, 0)); 223 | } 224 | Utils.matToTexture2D(mat, tex); 225 | } 226 | 227 | private Mat GetSkinMask(Mat imgMat, int imgWidth, int imgHeight) 228 | { 229 | Mat YCrCb_image = new Mat(); 230 | int Y_channel = 0; 231 | int Cr_channel = 1; 232 | int Cb_channel = 2; 233 | Imgproc.cvtColor(imgMat, YCrCb_image, Imgproc.COLOR_RGB2YCrCb); 234 | 235 | // zero mat 236 | var output_mask = Mat.zeros(imgWidth, imgHeight, CvType.CV_8UC1); 237 | 238 | for (int i = 0; i < YCrCb_image.rows(); i++) 239 | { 240 | for (int j = 0; j < YCrCb_image.cols(); j++) 241 | { 242 | double[] p_src = YCrCb_image.get(i, j); 243 | 244 | if (p_src[Y_channel] > 80 && 245 | p_src[Cr_channel] > 135 && 246 | p_src[Cr_channel] < 180 && 247 | p_src[Cb_channel] > 85 && 248 | p_src[Cb_channel] < 135) 249 | { 250 | output_mask.put(i, j, 255); 251 | } 252 | } 253 | } 254 | YCrCb_image.Dispose(); 255 | return output_mask; 256 | } 257 | 258 | private void FindDefects(Mat maskImage, ref int cx, ref int cy, int min_defects_count, int max_defects_count) 259 | { 260 | int erosion_size = 1; 261 | 262 | Mat element = Imgproc.getStructuringElement( 263 | Imgproc.MORPH_ELLIPSE, 264 | new Size(2 * erosion_size + 1, 2 * erosion_size + 1), 265 | new Point(erosion_size, erosion_size)); 266 | 267 | // dilate and erode 268 | Imgproc.dilate(maskImage, maskImage, element); 269 | Imgproc.erode(maskImage, maskImage, element); 270 | element.Dispose(); 271 | //Find Contours in image 272 | List contours = new List(); 273 | Imgproc.findContours(maskImage, contours, new MatOfPoint(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); 274 | 275 | //Loop to find the biggest contour; If no contour is found index=-1 276 | int index = -1; 277 | double area = 2000; 278 | for (int i = 0; i < contours.Count; i++) 279 | { 280 | var tempsize = Imgproc.contourArea(contours[i]); 281 | if (tempsize > area) 282 | { 283 | area = tempsize; 284 | index = i; 285 | } 286 | } 287 | 288 | if (index == -1) 289 | { 290 | return; 291 | } 292 | else 293 | { 294 | var points = new MatOfPoint(contours[index].toArray()); 295 | var hull = new MatOfInt(); 296 | Imgproc.convexHull(points, hull, false); 297 | 298 | var defects = new MatOfInt4(); 299 | Imgproc.convexityDefects(points, hull, defects); 300 | 301 | var start_points = new MatOfPoint2f(); 302 | var far_points = new MatOfPoint2f(); 303 | 304 | for (int i = 0; i < defects.size().height; i++) 305 | { 306 | int ind_start = (int)defects.get(i, 0)[0]; 307 | int ind_end = (int)defects.get(i, 0)[1]; 308 | int ind_far = (int)defects.get(i, 0)[2]; 309 | double depth = defects.get(i, 0)[3] / 256; 310 | 311 | double a = Core.norm(contours[index].row(ind_start) - contours[index].row(ind_end)); 312 | double b = Core.norm(contours[index].row(ind_far) - contours[index].row(ind_start)); 313 | double c = Core.norm(contours[index].row(ind_far) - contours[index].row(ind_end)); 314 | 315 | double angle = Math.Acos((b * b + c * c - a * a) / (2 * b * c)) * 180.0 / Math.PI; 316 | 317 | double threshFingerLength = ((double)maskImage.height()) / 8.0; 318 | double threshAngle = 80; 319 | 320 | if (angle < threshAngle && depth > threshFingerLength) 321 | { 322 | //start point 323 | var aa = contours[index].row(ind_start); 324 | start_points.push_back(contours[index].row(ind_start)); 325 | far_points.push_back(contours[index].row(ind_far)); 326 | } 327 | } 328 | 329 | points.Dispose(); 330 | hull.Dispose(); 331 | defects.Dispose(); 332 | 333 | // when no finger found 334 | if (far_points.size().height < min_defects_count || far_points.size().height > max_defects_count) 335 | { 336 | return; 337 | } 338 | 339 | var cnts = new List(); 340 | cnts.Add(contours[index]); 341 | 342 | Mat mm = new Mat(); 343 | Imgproc.cvtColor(maskImage, mm, Imgproc.COLOR_GRAY2BGR); 344 | 345 | Imgproc.drawContours(mm, cnts, 0, new Scalar(0, 0, 255)); 346 | // OpenCVForUnity.ImgcodecsModule.Imgcodecs.imwrite("D:/tempImg.jpg", mm) 347 | 348 | //var rotatedRect = Imgproc.minAreaRect(far_points); 349 | var boundingRect = Imgproc.boundingRect(far_points); 350 | 351 | cx = (int)(boundingRect.x + boundingRect.width / 2); 352 | cy = (int)(boundingRect.y + boundingRect.height / 2); 353 | } 354 | 355 | } 356 | 357 | } 358 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | Please refer to [this medium post](https://medium.com/@teejs2012/hand-tracking-in-unity3d-f741a5e21a92) for the detailed illustration for this project. 2 | # Pre-requisite 3 | OpenCVForUnity plugin is needed for this project. Please download and import this plugin from Unity Asset Store. 4 | # Usage 5 | * Put everything in this repo to the "Asset" folder in Unity project. 6 | * Open the sample scene to run it. 7 | * Check the "Hand Detector" script on the "Detection" game object, the "Hand Detection Mode" is default to 0, means it is using haar cascade way for hand detection. To switch to contour based way, change this number to 1. To switch to neural network method, change this number to 2. -------------------------------------------------------------------------------- /Scenes/SampleScene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 170076734} 41 | m_IndirectSpecularColor: {r: 0.4465782, g: 0.49641252, b: 0.5748167, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 11 47 | m_GIWorkflowMode: 0 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 1 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 10 58 | m_Resolution: 2 59 | m_BakeResolution: 10 60 | m_AtlasSize: 512 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_Padding: 2 66 | m_LightmapParameters: {fileID: 0} 67 | m_LightmapsBakeMode: 1 68 | m_TextureCompression: 1 69 | m_FinalGather: 0 70 | m_FinalGatherFiltering: 1 71 | m_FinalGatherRayCount: 256 72 | m_ReflectionCompression: 2 73 | m_MixedBakeMode: 2 74 | m_BakeBackend: 1 75 | m_PVRSampling: 1 76 | m_PVRDirectSampleCount: 32 77 | m_PVRSampleCount: 256 78 | m_PVRBounces: 2 79 | m_PVRFilterTypeDirect: 0 80 | m_PVRFilterTypeIndirect: 0 81 | m_PVRFilterTypeAO: 0 82 | m_PVRFilteringMode: 1 83 | m_PVRCulling: 1 84 | m_PVRFilteringGaussRadiusDirect: 1 85 | m_PVRFilteringGaussRadiusIndirect: 5 86 | m_PVRFilteringGaussRadiusAO: 2 87 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 88 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 89 | m_PVRFilteringAtrousPositionSigmaAO: 1 90 | m_ShowResolutionOverlay: 1 91 | m_LightingDataAsset: {fileID: 0} 92 | m_UseShadowmask: 1 93 | --- !u!196 &4 94 | NavMeshSettings: 95 | serializedVersion: 2 96 | m_ObjectHideFlags: 0 97 | m_BuildSettings: 98 | serializedVersion: 2 99 | agentTypeID: 0 100 | agentRadius: 0.5 101 | agentHeight: 2 102 | agentSlope: 45 103 | agentClimb: 0.4 104 | ledgeDropHeight: 0 105 | maxJumpAcrossDistance: 0 106 | minRegionArea: 2 107 | manualCellSize: 0 108 | cellSize: 0.16666667 109 | manualTileSize: 0 110 | tileSize: 256 111 | accuratePlacement: 0 112 | debug: 113 | m_Flags: 0 114 | m_NavMeshData: {fileID: 0} 115 | --- !u!1 &170076733 116 | GameObject: 117 | m_ObjectHideFlags: 0 118 | m_CorrespondingSourceObject: {fileID: 0} 119 | m_PrefabInstance: {fileID: 0} 120 | m_PrefabAsset: {fileID: 0} 121 | serializedVersion: 6 122 | m_Component: 123 | - component: {fileID: 170076735} 124 | - component: {fileID: 170076734} 125 | m_Layer: 0 126 | m_Name: Directional Light 127 | m_TagString: Untagged 128 | m_Icon: {fileID: 0} 129 | m_NavMeshLayer: 0 130 | m_StaticEditorFlags: 0 131 | m_IsActive: 1 132 | --- !u!108 &170076734 133 | Light: 134 | m_ObjectHideFlags: 0 135 | m_CorrespondingSourceObject: {fileID: 0} 136 | m_PrefabInstance: {fileID: 0} 137 | m_PrefabAsset: {fileID: 0} 138 | m_GameObject: {fileID: 170076733} 139 | m_Enabled: 1 140 | serializedVersion: 8 141 | m_Type: 1 142 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} 143 | m_Intensity: 1 144 | m_Range: 10 145 | m_SpotAngle: 30 146 | m_CookieSize: 10 147 | m_Shadows: 148 | m_Type: 2 149 | m_Resolution: -1 150 | m_CustomResolution: -1 151 | m_Strength: 1 152 | m_Bias: 0.05 153 | m_NormalBias: 0.4 154 | m_NearPlane: 0.2 155 | m_Cookie: {fileID: 0} 156 | m_DrawHalo: 0 157 | m_Flare: {fileID: 0} 158 | m_RenderMode: 0 159 | m_CullingMask: 160 | serializedVersion: 2 161 | m_Bits: 4294967295 162 | m_Lightmapping: 1 163 | m_LightShadowCasterMode: 0 164 | m_AreaSize: {x: 1, y: 1} 165 | m_BounceIntensity: 1 166 | m_ColorTemperature: 6570 167 | m_UseColorTemperature: 0 168 | m_ShadowRadius: 0 169 | m_ShadowAngle: 0 170 | --- !u!4 &170076735 171 | Transform: 172 | m_ObjectHideFlags: 0 173 | m_CorrespondingSourceObject: {fileID: 0} 174 | m_PrefabInstance: {fileID: 0} 175 | m_PrefabAsset: {fileID: 0} 176 | m_GameObject: {fileID: 170076733} 177 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} 178 | m_LocalPosition: {x: 0, y: 3, z: 0} 179 | m_LocalScale: {x: 1, y: 1, z: 1} 180 | m_Children: [] 181 | m_Father: {fileID: 0} 182 | m_RootOrder: 1 183 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} 184 | --- !u!1 &230196133 185 | GameObject: 186 | m_ObjectHideFlags: 0 187 | m_CorrespondingSourceObject: {fileID: 0} 188 | m_PrefabInstance: {fileID: 0} 189 | m_PrefabAsset: {fileID: 0} 190 | serializedVersion: 6 191 | m_Component: 192 | - component: {fileID: 230196136} 193 | - component: {fileID: 230196135} 194 | - component: {fileID: 230196134} 195 | m_Layer: 0 196 | m_Name: EventSystem 197 | m_TagString: Untagged 198 | m_Icon: {fileID: 0} 199 | m_NavMeshLayer: 0 200 | m_StaticEditorFlags: 0 201 | m_IsActive: 1 202 | --- !u!114 &230196134 203 | MonoBehaviour: 204 | m_ObjectHideFlags: 0 205 | m_CorrespondingSourceObject: {fileID: 0} 206 | m_PrefabInstance: {fileID: 0} 207 | m_PrefabAsset: {fileID: 0} 208 | m_GameObject: {fileID: 230196133} 209 | m_Enabled: 1 210 | m_EditorHideFlags: 0 211 | m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} 212 | m_Name: 213 | m_EditorClassIdentifier: 214 | m_HorizontalAxis: Horizontal 215 | m_VerticalAxis: Vertical 216 | m_SubmitButton: Submit 217 | m_CancelButton: Cancel 218 | m_InputActionsPerSecond: 10 219 | m_RepeatDelay: 0.5 220 | m_ForceModuleActive: 0 221 | --- !u!114 &230196135 222 | MonoBehaviour: 223 | m_ObjectHideFlags: 0 224 | m_CorrespondingSourceObject: {fileID: 0} 225 | m_PrefabInstance: {fileID: 0} 226 | m_PrefabAsset: {fileID: 0} 227 | m_GameObject: {fileID: 230196133} 228 | m_Enabled: 1 229 | m_EditorHideFlags: 0 230 | m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} 231 | m_Name: 232 | m_EditorClassIdentifier: 233 | m_FirstSelected: {fileID: 0} 234 | m_sendNavigationEvents: 1 235 | m_DragThreshold: 10 236 | --- !u!4 &230196136 237 | Transform: 238 | m_ObjectHideFlags: 0 239 | m_CorrespondingSourceObject: {fileID: 0} 240 | m_PrefabInstance: {fileID: 0} 241 | m_PrefabAsset: {fileID: 0} 242 | m_GameObject: {fileID: 230196133} 243 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 244 | m_LocalPosition: {x: 0, y: 0, z: 0} 245 | m_LocalScale: {x: 1, y: 1, z: 1} 246 | m_Children: [] 247 | m_Father: {fileID: 0} 248 | m_RootOrder: 4 249 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 250 | --- !u!1 &534669902 251 | GameObject: 252 | m_ObjectHideFlags: 0 253 | m_CorrespondingSourceObject: {fileID: 0} 254 | m_PrefabInstance: {fileID: 0} 255 | m_PrefabAsset: {fileID: 0} 256 | serializedVersion: 6 257 | m_Component: 258 | - component: {fileID: 534669905} 259 | - component: {fileID: 534669904} 260 | - component: {fileID: 534669903} 261 | m_Layer: 0 262 | m_Name: Main Camera 263 | m_TagString: MainCamera 264 | m_Icon: {fileID: 0} 265 | m_NavMeshLayer: 0 266 | m_StaticEditorFlags: 0 267 | m_IsActive: 1 268 | --- !u!81 &534669903 269 | AudioListener: 270 | m_ObjectHideFlags: 0 271 | m_CorrespondingSourceObject: {fileID: 0} 272 | m_PrefabInstance: {fileID: 0} 273 | m_PrefabAsset: {fileID: 0} 274 | m_GameObject: {fileID: 534669902} 275 | m_Enabled: 1 276 | --- !u!20 &534669904 277 | Camera: 278 | m_ObjectHideFlags: 0 279 | m_CorrespondingSourceObject: {fileID: 0} 280 | m_PrefabInstance: {fileID: 0} 281 | m_PrefabAsset: {fileID: 0} 282 | m_GameObject: {fileID: 534669902} 283 | m_Enabled: 1 284 | serializedVersion: 2 285 | m_ClearFlags: 2 286 | m_BackGroundColor: {r: 0.009433985, g: 0.009433985, b: 0.009433985, a: 0} 287 | m_projectionMatrixMode: 1 288 | m_SensorSize: {x: 36, y: 24} 289 | m_LensShift: {x: 0, y: 0} 290 | m_GateFitMode: 2 291 | m_FocalLength: 50 292 | m_NormalizedViewPortRect: 293 | serializedVersion: 2 294 | x: 0 295 | y: 0 296 | width: 1 297 | height: 1 298 | near clip plane: 0.3 299 | far clip plane: 1000 300 | field of view: 60 301 | orthographic: 0 302 | orthographic size: 5 303 | m_Depth: -1 304 | m_CullingMask: 305 | serializedVersion: 2 306 | m_Bits: 4294967295 307 | m_RenderingPath: -1 308 | m_TargetTexture: {fileID: 0} 309 | m_TargetDisplay: 0 310 | m_TargetEye: 3 311 | m_HDR: 1 312 | m_AllowMSAA: 1 313 | m_AllowDynamicResolution: 0 314 | m_ForceIntoRT: 0 315 | m_OcclusionCulling: 1 316 | m_StereoConvergence: 10 317 | m_StereoSeparation: 0.022 318 | --- !u!4 &534669905 319 | Transform: 320 | m_ObjectHideFlags: 0 321 | m_CorrespondingSourceObject: {fileID: 0} 322 | m_PrefabInstance: {fileID: 0} 323 | m_PrefabAsset: {fileID: 0} 324 | m_GameObject: {fileID: 534669902} 325 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 326 | m_LocalPosition: {x: 0, y: 1, z: -10} 327 | m_LocalScale: {x: 1, y: 1, z: 1} 328 | m_Children: [] 329 | m_Father: {fileID: 0} 330 | m_RootOrder: 0 331 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 332 | --- !u!1 &649940734 333 | GameObject: 334 | m_ObjectHideFlags: 0 335 | m_CorrespondingSourceObject: {fileID: 0} 336 | m_PrefabInstance: {fileID: 0} 337 | m_PrefabAsset: {fileID: 0} 338 | serializedVersion: 6 339 | m_Component: 340 | - component: {fileID: 649940738} 341 | - component: {fileID: 649940737} 342 | - component: {fileID: 649940736} 343 | - component: {fileID: 649940735} 344 | m_Layer: 5 345 | m_Name: Canvas 346 | m_TagString: Untagged 347 | m_Icon: {fileID: 0} 348 | m_NavMeshLayer: 0 349 | m_StaticEditorFlags: 0 350 | m_IsActive: 1 351 | --- !u!114 &649940735 352 | MonoBehaviour: 353 | m_ObjectHideFlags: 0 354 | m_CorrespondingSourceObject: {fileID: 0} 355 | m_PrefabInstance: {fileID: 0} 356 | m_PrefabAsset: {fileID: 0} 357 | m_GameObject: {fileID: 649940734} 358 | m_Enabled: 1 359 | m_EditorHideFlags: 0 360 | m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} 361 | m_Name: 362 | m_EditorClassIdentifier: 363 | m_IgnoreReversedGraphics: 1 364 | m_BlockingObjects: 0 365 | m_BlockingMask: 366 | serializedVersion: 2 367 | m_Bits: 4294967295 368 | --- !u!114 &649940736 369 | MonoBehaviour: 370 | m_ObjectHideFlags: 0 371 | m_CorrespondingSourceObject: {fileID: 0} 372 | m_PrefabInstance: {fileID: 0} 373 | m_PrefabAsset: {fileID: 0} 374 | m_GameObject: {fileID: 649940734} 375 | m_Enabled: 1 376 | m_EditorHideFlags: 0 377 | m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} 378 | m_Name: 379 | m_EditorClassIdentifier: 380 | m_UiScaleMode: 0 381 | m_ReferencePixelsPerUnit: 100 382 | m_ScaleFactor: 1 383 | m_ReferenceResolution: {x: 800, y: 600} 384 | m_ScreenMatchMode: 0 385 | m_MatchWidthOrHeight: 0 386 | m_PhysicalUnit: 3 387 | m_FallbackScreenDPI: 96 388 | m_DefaultSpriteDPI: 96 389 | m_DynamicPixelsPerUnit: 1 390 | --- !u!223 &649940737 391 | Canvas: 392 | m_ObjectHideFlags: 0 393 | m_CorrespondingSourceObject: {fileID: 0} 394 | m_PrefabInstance: {fileID: 0} 395 | m_PrefabAsset: {fileID: 0} 396 | m_GameObject: {fileID: 649940734} 397 | m_Enabled: 1 398 | serializedVersion: 3 399 | m_RenderMode: 0 400 | m_Camera: {fileID: 0} 401 | m_PlaneDistance: 100 402 | m_PixelPerfect: 0 403 | m_ReceivesEvents: 1 404 | m_OverrideSorting: 0 405 | m_OverridePixelPerfect: 0 406 | m_SortingBucketNormalizedSize: 0 407 | m_AdditionalShaderChannelsFlag: 0 408 | m_SortingLayerID: 0 409 | m_SortingOrder: 0 410 | m_TargetDisplay: 0 411 | --- !u!224 &649940738 412 | RectTransform: 413 | m_ObjectHideFlags: 0 414 | m_CorrespondingSourceObject: {fileID: 0} 415 | m_PrefabInstance: {fileID: 0} 416 | m_PrefabAsset: {fileID: 0} 417 | m_GameObject: {fileID: 649940734} 418 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 419 | m_LocalPosition: {x: 0, y: 0, z: 0} 420 | m_LocalScale: {x: 0, y: 0, z: 0} 421 | m_Children: 422 | - {fileID: 938674669} 423 | m_Father: {fileID: 0} 424 | m_RootOrder: 3 425 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 426 | m_AnchorMin: {x: 0, y: 0} 427 | m_AnchorMax: {x: 0, y: 0} 428 | m_AnchoredPosition: {x: 0, y: 0} 429 | m_SizeDelta: {x: 0, y: 0} 430 | m_Pivot: {x: 0, y: 0} 431 | --- !u!1 &938674668 432 | GameObject: 433 | m_ObjectHideFlags: 0 434 | m_CorrespondingSourceObject: {fileID: 0} 435 | m_PrefabInstance: {fileID: 0} 436 | m_PrefabAsset: {fileID: 0} 437 | serializedVersion: 6 438 | m_Component: 439 | - component: {fileID: 938674669} 440 | - component: {fileID: 938674671} 441 | - component: {fileID: 938674670} 442 | m_Layer: 5 443 | m_Name: RawImage 444 | m_TagString: Untagged 445 | m_Icon: {fileID: 0} 446 | m_NavMeshLayer: 0 447 | m_StaticEditorFlags: 0 448 | m_IsActive: 1 449 | --- !u!224 &938674669 450 | RectTransform: 451 | m_ObjectHideFlags: 0 452 | m_CorrespondingSourceObject: {fileID: 0} 453 | m_PrefabInstance: {fileID: 0} 454 | m_PrefabAsset: {fileID: 0} 455 | m_GameObject: {fileID: 938674668} 456 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 457 | m_LocalPosition: {x: 0, y: 0, z: 0} 458 | m_LocalScale: {x: 1, y: 1, z: 1} 459 | m_Children: [] 460 | m_Father: {fileID: 649940738} 461 | m_RootOrder: 0 462 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 463 | m_AnchorMin: {x: 0, y: 0} 464 | m_AnchorMax: {x: 1, y: 1} 465 | m_AnchoredPosition: {x: 0, y: 0} 466 | m_SizeDelta: {x: 0, y: 0} 467 | m_Pivot: {x: 0.5, y: 0.5} 468 | --- !u!114 &938674670 469 | MonoBehaviour: 470 | m_ObjectHideFlags: 0 471 | m_CorrespondingSourceObject: {fileID: 0} 472 | m_PrefabInstance: {fileID: 0} 473 | m_PrefabAsset: {fileID: 0} 474 | m_GameObject: {fileID: 938674668} 475 | m_Enabled: 1 476 | m_EditorHideFlags: 0 477 | m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3} 478 | m_Name: 479 | m_EditorClassIdentifier: 480 | m_Material: {fileID: 0} 481 | m_Color: {r: 1, g: 1, b: 1, a: 1} 482 | m_RaycastTarget: 1 483 | m_OnCullStateChanged: 484 | m_PersistentCalls: 485 | m_Calls: [] 486 | m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, 487 | Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 488 | m_Texture: {fileID: 0} 489 | m_UVRect: 490 | serializedVersion: 2 491 | x: 0 492 | y: 0 493 | width: 1 494 | height: 1 495 | --- !u!222 &938674671 496 | CanvasRenderer: 497 | m_ObjectHideFlags: 0 498 | m_CorrespondingSourceObject: {fileID: 0} 499 | m_PrefabInstance: {fileID: 0} 500 | m_PrefabAsset: {fileID: 0} 501 | m_GameObject: {fileID: 938674668} 502 | m_CullTransparentMesh: 0 503 | --- !u!1 &1545015905 504 | GameObject: 505 | m_ObjectHideFlags: 0 506 | m_CorrespondingSourceObject: {fileID: 0} 507 | m_PrefabInstance: {fileID: 0} 508 | m_PrefabAsset: {fileID: 0} 509 | serializedVersion: 6 510 | m_Component: 511 | - component: {fileID: 1545015906} 512 | - component: {fileID: 1545015908} 513 | - component: {fileID: 1545015907} 514 | m_Layer: 0 515 | m_Name: Detection 516 | m_TagString: Untagged 517 | m_Icon: {fileID: 0} 518 | m_NavMeshLayer: 0 519 | m_StaticEditorFlags: 0 520 | m_IsActive: 1 521 | --- !u!4 &1545015906 522 | Transform: 523 | m_ObjectHideFlags: 0 524 | m_CorrespondingSourceObject: {fileID: 0} 525 | m_PrefabInstance: {fileID: 0} 526 | m_PrefabAsset: {fileID: 0} 527 | m_GameObject: {fileID: 1545015905} 528 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 529 | m_LocalPosition: {x: 0, y: 0, z: 0} 530 | m_LocalScale: {x: 1, y: 1, z: 1} 531 | m_Children: [] 532 | m_Father: {fileID: 0} 533 | m_RootOrder: 2 534 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 535 | --- !u!114 &1545015907 536 | MonoBehaviour: 537 | m_ObjectHideFlags: 0 538 | m_CorrespondingSourceObject: {fileID: 0} 539 | m_PrefabInstance: {fileID: 0} 540 | m_PrefabAsset: {fileID: 0} 541 | m_GameObject: {fileID: 1545015905} 542 | m_Enabled: 1 543 | m_EditorHideFlags: 0 544 | m_Script: {fileID: 11500000, guid: f0f680538fa921742b3aea40936fbb70, type: 3} 545 | m_Name: 546 | m_EditorClassIdentifier: 547 | webCamOperation: {fileID: 1545015908} 548 | handDetectionMode: 0 549 | HandImage: {fileID: 938674670} 550 | --- !u!114 &1545015908 551 | MonoBehaviour: 552 | m_ObjectHideFlags: 0 553 | m_CorrespondingSourceObject: {fileID: 0} 554 | m_PrefabInstance: {fileID: 0} 555 | m_PrefabAsset: {fileID: 0} 556 | m_GameObject: {fileID: 1545015905} 557 | m_Enabled: 1 558 | m_EditorHideFlags: 0 559 | m_Script: {fileID: 11500000, guid: d4f3798c647643641b3ba34e5d7449af, type: 3} 560 | m_Name: 561 | m_EditorClassIdentifier: 562 | isHideCameraImage: 1 563 | requestedWidth: 320 564 | requestedHeight: 180 565 | requestedFPS: 30 566 | -------------------------------------------------------------------------------- /StreamingAssets/frozen_inference_graph.pb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/teejs2012/Hand_Tracking_Unity3D/680b6fcaf4214fdcda1c396134b6029c5226efb8/StreamingAssets/frozen_inference_graph.pb -------------------------------------------------------------------------------- /StreamingAssets/frozen_inference_graph.pbtxt: -------------------------------------------------------------------------------- 1 | node { 2 | name: "image_tensor" 3 | op: "Placeholder" 4 | attr { 5 | key: "dtype" 6 | value { 7 | type: DT_UINT8 8 | } 9 | } 10 | attr { 11 | key: "shape" 12 | value { 13 | shape { 14 | dim { 15 | size: -1 16 | } 17 | dim { 18 | size: -1 19 | } 20 | dim { 21 | size: -1 22 | } 23 | dim { 24 | size: 3 25 | } 26 | } 27 | } 28 | } 29 | } 30 | node { 31 | name: "Preprocessor/mul" 32 | op: "Mul" 33 | input: "image_tensor" 34 | input: "Preprocessor/mul/x" 35 | } 36 | node { 37 | name: "Preprocessor/sub" 38 | op: "Sub" 39 | input: "Preprocessor/mul" 40 | input: "Preprocessor/sub/y" 41 | } 42 | node { 43 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Conv2D" 44 | op: "Conv2D" 45 | input: "Preprocessor/sub" 46 | input: "FeatureExtractor/MobilenetV1/Conv2d_0/weights" 47 | attr { 48 | key: "data_format" 49 | value { 50 | s: "NHWC" 51 | } 52 | } 53 | attr { 54 | key: "dilations" 55 | value { 56 | list { 57 | i: 1 58 | i: 1 59 | i: 1 60 | i: 1 61 | } 62 | } 63 | } 64 | attr { 65 | key: "padding" 66 | value { 67 | s: "SAME" 68 | } 69 | } 70 | attr { 71 | key: "strides" 72 | value { 73 | list { 74 | i: 1 75 | i: 2 76 | i: 2 77 | i: 1 78 | } 79 | } 80 | } 81 | } 82 | node { 83 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/FusedBatchNorm" 84 | op: "FusedBatchNorm" 85 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Conv2D" 86 | input: "FeatureExtractor/MobilenetV1/Conv2d_0/BatchNorm/gamma" 87 | input: "FeatureExtractor/MobilenetV1/Conv2d_0/BatchNorm/beta" 88 | input: "FeatureExtractor/MobilenetV1/Conv2d_0/BatchNorm/moving_mean" 89 | input: "FeatureExtractor/MobilenetV1/Conv2d_0/BatchNorm/moving_variance" 90 | attr { 91 | key: "data_format" 92 | value { 93 | s: "NHWC" 94 | } 95 | } 96 | attr { 97 | key: "epsilon" 98 | value { 99 | f: 0.001 100 | } 101 | } 102 | } 103 | node { 104 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Relu6" 105 | op: "Relu6" 106 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/FusedBatchNorm" 107 | } 108 | node { 109 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/depthwise" 110 | op: "DepthwiseConv2dNative" 111 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Relu6" 112 | input: "FeatureExtractor/MobilenetV1/Conv2d_1_depthwise/depthwise_weights" 113 | attr { 114 | key: "data_format" 115 | value { 116 | s: "NHWC" 117 | } 118 | } 119 | attr { 120 | key: "dilations" 121 | value { 122 | list { 123 | i: 1 124 | i: 1 125 | i: 1 126 | i: 1 127 | } 128 | } 129 | } 130 | attr { 131 | key: "padding" 132 | value { 133 | s: "SAME" 134 | } 135 | } 136 | attr { 137 | key: "strides" 138 | value { 139 | list { 140 | i: 1 141 | i: 1 142 | i: 1 143 | i: 1 144 | } 145 | } 146 | } 147 | } 148 | node { 149 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/FusedBatchNorm" 150 | op: "FusedBatchNorm" 151 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/depthwise" 152 | input: "FeatureExtractor/MobilenetV1/Conv2d_1_depthwise/BatchNorm/gamma" 153 | input: "FeatureExtractor/MobilenetV1/Conv2d_1_depthwise/BatchNorm/beta" 154 | input: "FeatureExtractor/MobilenetV1/Conv2d_1_depthwise/BatchNorm/moving_mean" 155 | input: "FeatureExtractor/MobilenetV1/Conv2d_1_depthwise/BatchNorm/moving_variance" 156 | attr { 157 | key: "data_format" 158 | value { 159 | s: "NHWC" 160 | } 161 | } 162 | attr { 163 | key: "epsilon" 164 | value { 165 | f: 0.001 166 | } 167 | } 168 | } 169 | node { 170 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/Relu6" 171 | op: "Relu6" 172 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/FusedBatchNorm" 173 | } 174 | node { 175 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Conv2D" 176 | op: "Conv2D" 177 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/Relu6" 178 | input: "FeatureExtractor/MobilenetV1/Conv2d_1_pointwise/weights" 179 | attr { 180 | key: "data_format" 181 | value { 182 | s: "NHWC" 183 | } 184 | } 185 | attr { 186 | key: "dilations" 187 | value { 188 | list { 189 | i: 1 190 | i: 1 191 | i: 1 192 | i: 1 193 | } 194 | } 195 | } 196 | attr { 197 | key: "padding" 198 | value { 199 | s: "SAME" 200 | } 201 | } 202 | attr { 203 | key: "strides" 204 | value { 205 | list { 206 | i: 1 207 | i: 1 208 | i: 1 209 | i: 1 210 | } 211 | } 212 | } 213 | } 214 | node { 215 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/FusedBatchNorm" 216 | op: "FusedBatchNorm" 217 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Conv2D" 218 | input: "FeatureExtractor/MobilenetV1/Conv2d_1_pointwise/BatchNorm/gamma" 219 | input: "FeatureExtractor/MobilenetV1/Conv2d_1_pointwise/BatchNorm/beta" 220 | input: "FeatureExtractor/MobilenetV1/Conv2d_1_pointwise/BatchNorm/moving_mean" 221 | input: "FeatureExtractor/MobilenetV1/Conv2d_1_pointwise/BatchNorm/moving_variance" 222 | attr { 223 | key: "data_format" 224 | value { 225 | s: "NHWC" 226 | } 227 | } 228 | attr { 229 | key: "epsilon" 230 | value { 231 | f: 0.001 232 | } 233 | } 234 | } 235 | node { 236 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Relu6" 237 | op: "Relu6" 238 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/FusedBatchNorm" 239 | } 240 | node { 241 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/depthwise" 242 | op: "DepthwiseConv2dNative" 243 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Relu6" 244 | input: "FeatureExtractor/MobilenetV1/Conv2d_2_depthwise/depthwise_weights" 245 | attr { 246 | key: "data_format" 247 | value { 248 | s: "NHWC" 249 | } 250 | } 251 | attr { 252 | key: "dilations" 253 | value { 254 | list { 255 | i: 1 256 | i: 1 257 | i: 1 258 | i: 1 259 | } 260 | } 261 | } 262 | attr { 263 | key: "padding" 264 | value { 265 | s: "SAME" 266 | } 267 | } 268 | attr { 269 | key: "strides" 270 | value { 271 | list { 272 | i: 1 273 | i: 2 274 | i: 2 275 | i: 1 276 | } 277 | } 278 | } 279 | } 280 | node { 281 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/FusedBatchNorm" 282 | op: "FusedBatchNorm" 283 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/depthwise" 284 | input: "FeatureExtractor/MobilenetV1/Conv2d_2_depthwise/BatchNorm/gamma" 285 | input: "FeatureExtractor/MobilenetV1/Conv2d_2_depthwise/BatchNorm/beta" 286 | input: "FeatureExtractor/MobilenetV1/Conv2d_2_depthwise/BatchNorm/moving_mean" 287 | input: "FeatureExtractor/MobilenetV1/Conv2d_2_depthwise/BatchNorm/moving_variance" 288 | attr { 289 | key: "data_format" 290 | value { 291 | s: "NHWC" 292 | } 293 | } 294 | attr { 295 | key: "epsilon" 296 | value { 297 | f: 0.001 298 | } 299 | } 300 | } 301 | node { 302 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/Relu6" 303 | op: "Relu6" 304 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/FusedBatchNorm" 305 | } 306 | node { 307 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Conv2D" 308 | op: "Conv2D" 309 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/Relu6" 310 | input: "FeatureExtractor/MobilenetV1/Conv2d_2_pointwise/weights" 311 | attr { 312 | key: "data_format" 313 | value { 314 | s: "NHWC" 315 | } 316 | } 317 | attr { 318 | key: "dilations" 319 | value { 320 | list { 321 | i: 1 322 | i: 1 323 | i: 1 324 | i: 1 325 | } 326 | } 327 | } 328 | attr { 329 | key: "padding" 330 | value { 331 | s: "SAME" 332 | } 333 | } 334 | attr { 335 | key: "strides" 336 | value { 337 | list { 338 | i: 1 339 | i: 1 340 | i: 1 341 | i: 1 342 | } 343 | } 344 | } 345 | } 346 | node { 347 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/FusedBatchNorm" 348 | op: "FusedBatchNorm" 349 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Conv2D" 350 | input: "FeatureExtractor/MobilenetV1/Conv2d_2_pointwise/BatchNorm/gamma" 351 | input: "FeatureExtractor/MobilenetV1/Conv2d_2_pointwise/BatchNorm/beta" 352 | input: "FeatureExtractor/MobilenetV1/Conv2d_2_pointwise/BatchNorm/moving_mean" 353 | input: "FeatureExtractor/MobilenetV1/Conv2d_2_pointwise/BatchNorm/moving_variance" 354 | attr { 355 | key: "data_format" 356 | value { 357 | s: "NHWC" 358 | } 359 | } 360 | attr { 361 | key: "epsilon" 362 | value { 363 | f: 0.001 364 | } 365 | } 366 | } 367 | node { 368 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Relu6" 369 | op: "Relu6" 370 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/FusedBatchNorm" 371 | } 372 | node { 373 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/depthwise" 374 | op: "DepthwiseConv2dNative" 375 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Relu6" 376 | input: "FeatureExtractor/MobilenetV1/Conv2d_3_depthwise/depthwise_weights" 377 | attr { 378 | key: "data_format" 379 | value { 380 | s: "NHWC" 381 | } 382 | } 383 | attr { 384 | key: "dilations" 385 | value { 386 | list { 387 | i: 1 388 | i: 1 389 | i: 1 390 | i: 1 391 | } 392 | } 393 | } 394 | attr { 395 | key: "padding" 396 | value { 397 | s: "SAME" 398 | } 399 | } 400 | attr { 401 | key: "strides" 402 | value { 403 | list { 404 | i: 1 405 | i: 1 406 | i: 1 407 | i: 1 408 | } 409 | } 410 | } 411 | } 412 | node { 413 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/FusedBatchNorm" 414 | op: "FusedBatchNorm" 415 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/depthwise" 416 | input: "FeatureExtractor/MobilenetV1/Conv2d_3_depthwise/BatchNorm/gamma" 417 | input: "FeatureExtractor/MobilenetV1/Conv2d_3_depthwise/BatchNorm/beta" 418 | input: "FeatureExtractor/MobilenetV1/Conv2d_3_depthwise/BatchNorm/moving_mean" 419 | input: "FeatureExtractor/MobilenetV1/Conv2d_3_depthwise/BatchNorm/moving_variance" 420 | attr { 421 | key: "data_format" 422 | value { 423 | s: "NHWC" 424 | } 425 | } 426 | attr { 427 | key: "epsilon" 428 | value { 429 | f: 0.001 430 | } 431 | } 432 | } 433 | node { 434 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/Relu6" 435 | op: "Relu6" 436 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/FusedBatchNorm" 437 | } 438 | node { 439 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Conv2D" 440 | op: "Conv2D" 441 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/Relu6" 442 | input: "FeatureExtractor/MobilenetV1/Conv2d_3_pointwise/weights" 443 | attr { 444 | key: "data_format" 445 | value { 446 | s: "NHWC" 447 | } 448 | } 449 | attr { 450 | key: "dilations" 451 | value { 452 | list { 453 | i: 1 454 | i: 1 455 | i: 1 456 | i: 1 457 | } 458 | } 459 | } 460 | attr { 461 | key: "padding" 462 | value { 463 | s: "SAME" 464 | } 465 | } 466 | attr { 467 | key: "strides" 468 | value { 469 | list { 470 | i: 1 471 | i: 1 472 | i: 1 473 | i: 1 474 | } 475 | } 476 | } 477 | } 478 | node { 479 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/FusedBatchNorm" 480 | op: "FusedBatchNorm" 481 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Conv2D" 482 | input: "FeatureExtractor/MobilenetV1/Conv2d_3_pointwise/BatchNorm/gamma" 483 | input: "FeatureExtractor/MobilenetV1/Conv2d_3_pointwise/BatchNorm/beta" 484 | input: "FeatureExtractor/MobilenetV1/Conv2d_3_pointwise/BatchNorm/moving_mean" 485 | input: "FeatureExtractor/MobilenetV1/Conv2d_3_pointwise/BatchNorm/moving_variance" 486 | attr { 487 | key: "data_format" 488 | value { 489 | s: "NHWC" 490 | } 491 | } 492 | attr { 493 | key: "epsilon" 494 | value { 495 | f: 0.001 496 | } 497 | } 498 | } 499 | node { 500 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Relu6" 501 | op: "Relu6" 502 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/FusedBatchNorm" 503 | } 504 | node { 505 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/depthwise" 506 | op: "DepthwiseConv2dNative" 507 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Relu6" 508 | input: "FeatureExtractor/MobilenetV1/Conv2d_4_depthwise/depthwise_weights" 509 | attr { 510 | key: "data_format" 511 | value { 512 | s: "NHWC" 513 | } 514 | } 515 | attr { 516 | key: "dilations" 517 | value { 518 | list { 519 | i: 1 520 | i: 1 521 | i: 1 522 | i: 1 523 | } 524 | } 525 | } 526 | attr { 527 | key: "padding" 528 | value { 529 | s: "SAME" 530 | } 531 | } 532 | attr { 533 | key: "strides" 534 | value { 535 | list { 536 | i: 1 537 | i: 2 538 | i: 2 539 | i: 1 540 | } 541 | } 542 | } 543 | } 544 | node { 545 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/FusedBatchNorm" 546 | op: "FusedBatchNorm" 547 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/depthwise" 548 | input: "FeatureExtractor/MobilenetV1/Conv2d_4_depthwise/BatchNorm/gamma" 549 | input: "FeatureExtractor/MobilenetV1/Conv2d_4_depthwise/BatchNorm/beta" 550 | input: "FeatureExtractor/MobilenetV1/Conv2d_4_depthwise/BatchNorm/moving_mean" 551 | input: "FeatureExtractor/MobilenetV1/Conv2d_4_depthwise/BatchNorm/moving_variance" 552 | attr { 553 | key: "data_format" 554 | value { 555 | s: "NHWC" 556 | } 557 | } 558 | attr { 559 | key: "epsilon" 560 | value { 561 | f: 0.001 562 | } 563 | } 564 | } 565 | node { 566 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/Relu6" 567 | op: "Relu6" 568 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/FusedBatchNorm" 569 | } 570 | node { 571 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Conv2D" 572 | op: "Conv2D" 573 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/Relu6" 574 | input: "FeatureExtractor/MobilenetV1/Conv2d_4_pointwise/weights" 575 | attr { 576 | key: "data_format" 577 | value { 578 | s: "NHWC" 579 | } 580 | } 581 | attr { 582 | key: "dilations" 583 | value { 584 | list { 585 | i: 1 586 | i: 1 587 | i: 1 588 | i: 1 589 | } 590 | } 591 | } 592 | attr { 593 | key: "padding" 594 | value { 595 | s: "SAME" 596 | } 597 | } 598 | attr { 599 | key: "strides" 600 | value { 601 | list { 602 | i: 1 603 | i: 1 604 | i: 1 605 | i: 1 606 | } 607 | } 608 | } 609 | } 610 | node { 611 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/FusedBatchNorm" 612 | op: "FusedBatchNorm" 613 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Conv2D" 614 | input: "FeatureExtractor/MobilenetV1/Conv2d_4_pointwise/BatchNorm/gamma" 615 | input: "FeatureExtractor/MobilenetV1/Conv2d_4_pointwise/BatchNorm/beta" 616 | input: "FeatureExtractor/MobilenetV1/Conv2d_4_pointwise/BatchNorm/moving_mean" 617 | input: "FeatureExtractor/MobilenetV1/Conv2d_4_pointwise/BatchNorm/moving_variance" 618 | attr { 619 | key: "data_format" 620 | value { 621 | s: "NHWC" 622 | } 623 | } 624 | attr { 625 | key: "epsilon" 626 | value { 627 | f: 0.001 628 | } 629 | } 630 | } 631 | node { 632 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Relu6" 633 | op: "Relu6" 634 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/FusedBatchNorm" 635 | } 636 | node { 637 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/depthwise" 638 | op: "DepthwiseConv2dNative" 639 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Relu6" 640 | input: "FeatureExtractor/MobilenetV1/Conv2d_5_depthwise/depthwise_weights" 641 | attr { 642 | key: "data_format" 643 | value { 644 | s: "NHWC" 645 | } 646 | } 647 | attr { 648 | key: "dilations" 649 | value { 650 | list { 651 | i: 1 652 | i: 1 653 | i: 1 654 | i: 1 655 | } 656 | } 657 | } 658 | attr { 659 | key: "padding" 660 | value { 661 | s: "SAME" 662 | } 663 | } 664 | attr { 665 | key: "strides" 666 | value { 667 | list { 668 | i: 1 669 | i: 1 670 | i: 1 671 | i: 1 672 | } 673 | } 674 | } 675 | } 676 | node { 677 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/FusedBatchNorm" 678 | op: "FusedBatchNorm" 679 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/depthwise" 680 | input: "FeatureExtractor/MobilenetV1/Conv2d_5_depthwise/BatchNorm/gamma" 681 | input: "FeatureExtractor/MobilenetV1/Conv2d_5_depthwise/BatchNorm/beta" 682 | input: "FeatureExtractor/MobilenetV1/Conv2d_5_depthwise/BatchNorm/moving_mean" 683 | input: "FeatureExtractor/MobilenetV1/Conv2d_5_depthwise/BatchNorm/moving_variance" 684 | attr { 685 | key: "data_format" 686 | value { 687 | s: "NHWC" 688 | } 689 | } 690 | attr { 691 | key: "epsilon" 692 | value { 693 | f: 0.001 694 | } 695 | } 696 | } 697 | node { 698 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/Relu6" 699 | op: "Relu6" 700 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/FusedBatchNorm" 701 | } 702 | node { 703 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Conv2D" 704 | op: "Conv2D" 705 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/Relu6" 706 | input: "FeatureExtractor/MobilenetV1/Conv2d_5_pointwise/weights" 707 | attr { 708 | key: "data_format" 709 | value { 710 | s: "NHWC" 711 | } 712 | } 713 | attr { 714 | key: "dilations" 715 | value { 716 | list { 717 | i: 1 718 | i: 1 719 | i: 1 720 | i: 1 721 | } 722 | } 723 | } 724 | attr { 725 | key: "padding" 726 | value { 727 | s: "SAME" 728 | } 729 | } 730 | attr { 731 | key: "strides" 732 | value { 733 | list { 734 | i: 1 735 | i: 1 736 | i: 1 737 | i: 1 738 | } 739 | } 740 | } 741 | } 742 | node { 743 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/FusedBatchNorm" 744 | op: "FusedBatchNorm" 745 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Conv2D" 746 | input: "FeatureExtractor/MobilenetV1/Conv2d_5_pointwise/BatchNorm/gamma" 747 | input: "FeatureExtractor/MobilenetV1/Conv2d_5_pointwise/BatchNorm/beta" 748 | input: "FeatureExtractor/MobilenetV1/Conv2d_5_pointwise/BatchNorm/moving_mean" 749 | input: "FeatureExtractor/MobilenetV1/Conv2d_5_pointwise/BatchNorm/moving_variance" 750 | attr { 751 | key: "data_format" 752 | value { 753 | s: "NHWC" 754 | } 755 | } 756 | attr { 757 | key: "epsilon" 758 | value { 759 | f: 0.001 760 | } 761 | } 762 | } 763 | node { 764 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Relu6" 765 | op: "Relu6" 766 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/FusedBatchNorm" 767 | } 768 | node { 769 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/depthwise" 770 | op: "DepthwiseConv2dNative" 771 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Relu6" 772 | input: "FeatureExtractor/MobilenetV1/Conv2d_6_depthwise/depthwise_weights" 773 | attr { 774 | key: "data_format" 775 | value { 776 | s: "NHWC" 777 | } 778 | } 779 | attr { 780 | key: "dilations" 781 | value { 782 | list { 783 | i: 1 784 | i: 1 785 | i: 1 786 | i: 1 787 | } 788 | } 789 | } 790 | attr { 791 | key: "padding" 792 | value { 793 | s: "SAME" 794 | } 795 | } 796 | attr { 797 | key: "strides" 798 | value { 799 | list { 800 | i: 1 801 | i: 2 802 | i: 2 803 | i: 1 804 | } 805 | } 806 | } 807 | } 808 | node { 809 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/FusedBatchNorm" 810 | op: "FusedBatchNorm" 811 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/depthwise" 812 | input: "FeatureExtractor/MobilenetV1/Conv2d_6_depthwise/BatchNorm/gamma" 813 | input: "FeatureExtractor/MobilenetV1/Conv2d_6_depthwise/BatchNorm/beta" 814 | input: "FeatureExtractor/MobilenetV1/Conv2d_6_depthwise/BatchNorm/moving_mean" 815 | input: "FeatureExtractor/MobilenetV1/Conv2d_6_depthwise/BatchNorm/moving_variance" 816 | attr { 817 | key: "data_format" 818 | value { 819 | s: "NHWC" 820 | } 821 | } 822 | attr { 823 | key: "epsilon" 824 | value { 825 | f: 0.001 826 | } 827 | } 828 | } 829 | node { 830 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/Relu6" 831 | op: "Relu6" 832 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/FusedBatchNorm" 833 | } 834 | node { 835 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Conv2D" 836 | op: "Conv2D" 837 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/Relu6" 838 | input: "FeatureExtractor/MobilenetV1/Conv2d_6_pointwise/weights" 839 | attr { 840 | key: "data_format" 841 | value { 842 | s: "NHWC" 843 | } 844 | } 845 | attr { 846 | key: "dilations" 847 | value { 848 | list { 849 | i: 1 850 | i: 1 851 | i: 1 852 | i: 1 853 | } 854 | } 855 | } 856 | attr { 857 | key: "padding" 858 | value { 859 | s: "SAME" 860 | } 861 | } 862 | attr { 863 | key: "strides" 864 | value { 865 | list { 866 | i: 1 867 | i: 1 868 | i: 1 869 | i: 1 870 | } 871 | } 872 | } 873 | } 874 | node { 875 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/FusedBatchNorm" 876 | op: "FusedBatchNorm" 877 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Conv2D" 878 | input: "FeatureExtractor/MobilenetV1/Conv2d_6_pointwise/BatchNorm/gamma" 879 | input: "FeatureExtractor/MobilenetV1/Conv2d_6_pointwise/BatchNorm/beta" 880 | input: "FeatureExtractor/MobilenetV1/Conv2d_6_pointwise/BatchNorm/moving_mean" 881 | input: "FeatureExtractor/MobilenetV1/Conv2d_6_pointwise/BatchNorm/moving_variance" 882 | attr { 883 | key: "data_format" 884 | value { 885 | s: "NHWC" 886 | } 887 | } 888 | attr { 889 | key: "epsilon" 890 | value { 891 | f: 0.001 892 | } 893 | } 894 | } 895 | node { 896 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Relu6" 897 | op: "Relu6" 898 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/FusedBatchNorm" 899 | } 900 | node { 901 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/depthwise" 902 | op: "DepthwiseConv2dNative" 903 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Relu6" 904 | input: "FeatureExtractor/MobilenetV1/Conv2d_7_depthwise/depthwise_weights" 905 | attr { 906 | key: "data_format" 907 | value { 908 | s: "NHWC" 909 | } 910 | } 911 | attr { 912 | key: "dilations" 913 | value { 914 | list { 915 | i: 1 916 | i: 1 917 | i: 1 918 | i: 1 919 | } 920 | } 921 | } 922 | attr { 923 | key: "padding" 924 | value { 925 | s: "SAME" 926 | } 927 | } 928 | attr { 929 | key: "strides" 930 | value { 931 | list { 932 | i: 1 933 | i: 1 934 | i: 1 935 | i: 1 936 | } 937 | } 938 | } 939 | } 940 | node { 941 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/FusedBatchNorm" 942 | op: "FusedBatchNorm" 943 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/depthwise" 944 | input: "FeatureExtractor/MobilenetV1/Conv2d_7_depthwise/BatchNorm/gamma" 945 | input: "FeatureExtractor/MobilenetV1/Conv2d_7_depthwise/BatchNorm/beta" 946 | input: "FeatureExtractor/MobilenetV1/Conv2d_7_depthwise/BatchNorm/moving_mean" 947 | input: "FeatureExtractor/MobilenetV1/Conv2d_7_depthwise/BatchNorm/moving_variance" 948 | attr { 949 | key: "data_format" 950 | value { 951 | s: "NHWC" 952 | } 953 | } 954 | attr { 955 | key: "epsilon" 956 | value { 957 | f: 0.001 958 | } 959 | } 960 | } 961 | node { 962 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/Relu6" 963 | op: "Relu6" 964 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/FusedBatchNorm" 965 | } 966 | node { 967 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Conv2D" 968 | op: "Conv2D" 969 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/Relu6" 970 | input: "FeatureExtractor/MobilenetV1/Conv2d_7_pointwise/weights" 971 | attr { 972 | key: "data_format" 973 | value { 974 | s: "NHWC" 975 | } 976 | } 977 | attr { 978 | key: "dilations" 979 | value { 980 | list { 981 | i: 1 982 | i: 1 983 | i: 1 984 | i: 1 985 | } 986 | } 987 | } 988 | attr { 989 | key: "padding" 990 | value { 991 | s: "SAME" 992 | } 993 | } 994 | attr { 995 | key: "strides" 996 | value { 997 | list { 998 | i: 1 999 | i: 1 1000 | i: 1 1001 | i: 1 1002 | } 1003 | } 1004 | } 1005 | } 1006 | node { 1007 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/FusedBatchNorm" 1008 | op: "FusedBatchNorm" 1009 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Conv2D" 1010 | input: "FeatureExtractor/MobilenetV1/Conv2d_7_pointwise/BatchNorm/gamma" 1011 | input: "FeatureExtractor/MobilenetV1/Conv2d_7_pointwise/BatchNorm/beta" 1012 | input: "FeatureExtractor/MobilenetV1/Conv2d_7_pointwise/BatchNorm/moving_mean" 1013 | input: "FeatureExtractor/MobilenetV1/Conv2d_7_pointwise/BatchNorm/moving_variance" 1014 | attr { 1015 | key: "data_format" 1016 | value { 1017 | s: "NHWC" 1018 | } 1019 | } 1020 | attr { 1021 | key: "epsilon" 1022 | value { 1023 | f: 0.001 1024 | } 1025 | } 1026 | } 1027 | node { 1028 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Relu6" 1029 | op: "Relu6" 1030 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/FusedBatchNorm" 1031 | } 1032 | node { 1033 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/depthwise" 1034 | op: "DepthwiseConv2dNative" 1035 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Relu6" 1036 | input: "FeatureExtractor/MobilenetV1/Conv2d_8_depthwise/depthwise_weights" 1037 | attr { 1038 | key: "data_format" 1039 | value { 1040 | s: "NHWC" 1041 | } 1042 | } 1043 | attr { 1044 | key: "dilations" 1045 | value { 1046 | list { 1047 | i: 1 1048 | i: 1 1049 | i: 1 1050 | i: 1 1051 | } 1052 | } 1053 | } 1054 | attr { 1055 | key: "padding" 1056 | value { 1057 | s: "SAME" 1058 | } 1059 | } 1060 | attr { 1061 | key: "strides" 1062 | value { 1063 | list { 1064 | i: 1 1065 | i: 1 1066 | i: 1 1067 | i: 1 1068 | } 1069 | } 1070 | } 1071 | } 1072 | node { 1073 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/FusedBatchNorm" 1074 | op: "FusedBatchNorm" 1075 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/depthwise" 1076 | input: "FeatureExtractor/MobilenetV1/Conv2d_8_depthwise/BatchNorm/gamma" 1077 | input: "FeatureExtractor/MobilenetV1/Conv2d_8_depthwise/BatchNorm/beta" 1078 | input: "FeatureExtractor/MobilenetV1/Conv2d_8_depthwise/BatchNorm/moving_mean" 1079 | input: "FeatureExtractor/MobilenetV1/Conv2d_8_depthwise/BatchNorm/moving_variance" 1080 | attr { 1081 | key: "data_format" 1082 | value { 1083 | s: "NHWC" 1084 | } 1085 | } 1086 | attr { 1087 | key: "epsilon" 1088 | value { 1089 | f: 0.001 1090 | } 1091 | } 1092 | } 1093 | node { 1094 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/Relu6" 1095 | op: "Relu6" 1096 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/FusedBatchNorm" 1097 | } 1098 | node { 1099 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Conv2D" 1100 | op: "Conv2D" 1101 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/Relu6" 1102 | input: "FeatureExtractor/MobilenetV1/Conv2d_8_pointwise/weights" 1103 | attr { 1104 | key: "data_format" 1105 | value { 1106 | s: "NHWC" 1107 | } 1108 | } 1109 | attr { 1110 | key: "dilations" 1111 | value { 1112 | list { 1113 | i: 1 1114 | i: 1 1115 | i: 1 1116 | i: 1 1117 | } 1118 | } 1119 | } 1120 | attr { 1121 | key: "padding" 1122 | value { 1123 | s: "SAME" 1124 | } 1125 | } 1126 | attr { 1127 | key: "strides" 1128 | value { 1129 | list { 1130 | i: 1 1131 | i: 1 1132 | i: 1 1133 | i: 1 1134 | } 1135 | } 1136 | } 1137 | } 1138 | node { 1139 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/FusedBatchNorm" 1140 | op: "FusedBatchNorm" 1141 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Conv2D" 1142 | input: "FeatureExtractor/MobilenetV1/Conv2d_8_pointwise/BatchNorm/gamma" 1143 | input: "FeatureExtractor/MobilenetV1/Conv2d_8_pointwise/BatchNorm/beta" 1144 | input: "FeatureExtractor/MobilenetV1/Conv2d_8_pointwise/BatchNorm/moving_mean" 1145 | input: "FeatureExtractor/MobilenetV1/Conv2d_8_pointwise/BatchNorm/moving_variance" 1146 | attr { 1147 | key: "data_format" 1148 | value { 1149 | s: "NHWC" 1150 | } 1151 | } 1152 | attr { 1153 | key: "epsilon" 1154 | value { 1155 | f: 0.001 1156 | } 1157 | } 1158 | } 1159 | node { 1160 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Relu6" 1161 | op: "Relu6" 1162 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/FusedBatchNorm" 1163 | } 1164 | node { 1165 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/depthwise" 1166 | op: "DepthwiseConv2dNative" 1167 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Relu6" 1168 | input: "FeatureExtractor/MobilenetV1/Conv2d_9_depthwise/depthwise_weights" 1169 | attr { 1170 | key: "data_format" 1171 | value { 1172 | s: "NHWC" 1173 | } 1174 | } 1175 | attr { 1176 | key: "dilations" 1177 | value { 1178 | list { 1179 | i: 1 1180 | i: 1 1181 | i: 1 1182 | i: 1 1183 | } 1184 | } 1185 | } 1186 | attr { 1187 | key: "padding" 1188 | value { 1189 | s: "SAME" 1190 | } 1191 | } 1192 | attr { 1193 | key: "strides" 1194 | value { 1195 | list { 1196 | i: 1 1197 | i: 1 1198 | i: 1 1199 | i: 1 1200 | } 1201 | } 1202 | } 1203 | } 1204 | node { 1205 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/FusedBatchNorm" 1206 | op: "FusedBatchNorm" 1207 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/depthwise" 1208 | input: "FeatureExtractor/MobilenetV1/Conv2d_9_depthwise/BatchNorm/gamma" 1209 | input: "FeatureExtractor/MobilenetV1/Conv2d_9_depthwise/BatchNorm/beta" 1210 | input: "FeatureExtractor/MobilenetV1/Conv2d_9_depthwise/BatchNorm/moving_mean" 1211 | input: "FeatureExtractor/MobilenetV1/Conv2d_9_depthwise/BatchNorm/moving_variance" 1212 | attr { 1213 | key: "data_format" 1214 | value { 1215 | s: "NHWC" 1216 | } 1217 | } 1218 | attr { 1219 | key: "epsilon" 1220 | value { 1221 | f: 0.001 1222 | } 1223 | } 1224 | } 1225 | node { 1226 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/Relu6" 1227 | op: "Relu6" 1228 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/FusedBatchNorm" 1229 | } 1230 | node { 1231 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Conv2D" 1232 | op: "Conv2D" 1233 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/Relu6" 1234 | input: "FeatureExtractor/MobilenetV1/Conv2d_9_pointwise/weights" 1235 | attr { 1236 | key: "data_format" 1237 | value { 1238 | s: "NHWC" 1239 | } 1240 | } 1241 | attr { 1242 | key: "dilations" 1243 | value { 1244 | list { 1245 | i: 1 1246 | i: 1 1247 | i: 1 1248 | i: 1 1249 | } 1250 | } 1251 | } 1252 | attr { 1253 | key: "padding" 1254 | value { 1255 | s: "SAME" 1256 | } 1257 | } 1258 | attr { 1259 | key: "strides" 1260 | value { 1261 | list { 1262 | i: 1 1263 | i: 1 1264 | i: 1 1265 | i: 1 1266 | } 1267 | } 1268 | } 1269 | } 1270 | node { 1271 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/FusedBatchNorm" 1272 | op: "FusedBatchNorm" 1273 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Conv2D" 1274 | input: "FeatureExtractor/MobilenetV1/Conv2d_9_pointwise/BatchNorm/gamma" 1275 | input: "FeatureExtractor/MobilenetV1/Conv2d_9_pointwise/BatchNorm/beta" 1276 | input: "FeatureExtractor/MobilenetV1/Conv2d_9_pointwise/BatchNorm/moving_mean" 1277 | input: "FeatureExtractor/MobilenetV1/Conv2d_9_pointwise/BatchNorm/moving_variance" 1278 | attr { 1279 | key: "data_format" 1280 | value { 1281 | s: "NHWC" 1282 | } 1283 | } 1284 | attr { 1285 | key: "epsilon" 1286 | value { 1287 | f: 0.001 1288 | } 1289 | } 1290 | } 1291 | node { 1292 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Relu6" 1293 | op: "Relu6" 1294 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/FusedBatchNorm" 1295 | } 1296 | node { 1297 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/depthwise" 1298 | op: "DepthwiseConv2dNative" 1299 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Relu6" 1300 | input: "FeatureExtractor/MobilenetV1/Conv2d_10_depthwise/depthwise_weights" 1301 | attr { 1302 | key: "data_format" 1303 | value { 1304 | s: "NHWC" 1305 | } 1306 | } 1307 | attr { 1308 | key: "dilations" 1309 | value { 1310 | list { 1311 | i: 1 1312 | i: 1 1313 | i: 1 1314 | i: 1 1315 | } 1316 | } 1317 | } 1318 | attr { 1319 | key: "padding" 1320 | value { 1321 | s: "SAME" 1322 | } 1323 | } 1324 | attr { 1325 | key: "strides" 1326 | value { 1327 | list { 1328 | i: 1 1329 | i: 1 1330 | i: 1 1331 | i: 1 1332 | } 1333 | } 1334 | } 1335 | } 1336 | node { 1337 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/FusedBatchNorm" 1338 | op: "FusedBatchNorm" 1339 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/depthwise" 1340 | input: "FeatureExtractor/MobilenetV1/Conv2d_10_depthwise/BatchNorm/gamma" 1341 | input: "FeatureExtractor/MobilenetV1/Conv2d_10_depthwise/BatchNorm/beta" 1342 | input: "FeatureExtractor/MobilenetV1/Conv2d_10_depthwise/BatchNorm/moving_mean" 1343 | input: "FeatureExtractor/MobilenetV1/Conv2d_10_depthwise/BatchNorm/moving_variance" 1344 | attr { 1345 | key: "data_format" 1346 | value { 1347 | s: "NHWC" 1348 | } 1349 | } 1350 | attr { 1351 | key: "epsilon" 1352 | value { 1353 | f: 0.001 1354 | } 1355 | } 1356 | } 1357 | node { 1358 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/Relu6" 1359 | op: "Relu6" 1360 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/FusedBatchNorm" 1361 | } 1362 | node { 1363 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Conv2D" 1364 | op: "Conv2D" 1365 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/Relu6" 1366 | input: "FeatureExtractor/MobilenetV1/Conv2d_10_pointwise/weights" 1367 | attr { 1368 | key: "data_format" 1369 | value { 1370 | s: "NHWC" 1371 | } 1372 | } 1373 | attr { 1374 | key: "dilations" 1375 | value { 1376 | list { 1377 | i: 1 1378 | i: 1 1379 | i: 1 1380 | i: 1 1381 | } 1382 | } 1383 | } 1384 | attr { 1385 | key: "padding" 1386 | value { 1387 | s: "SAME" 1388 | } 1389 | } 1390 | attr { 1391 | key: "strides" 1392 | value { 1393 | list { 1394 | i: 1 1395 | i: 1 1396 | i: 1 1397 | i: 1 1398 | } 1399 | } 1400 | } 1401 | } 1402 | node { 1403 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/FusedBatchNorm" 1404 | op: "FusedBatchNorm" 1405 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Conv2D" 1406 | input: "FeatureExtractor/MobilenetV1/Conv2d_10_pointwise/BatchNorm/gamma" 1407 | input: "FeatureExtractor/MobilenetV1/Conv2d_10_pointwise/BatchNorm/beta" 1408 | input: "FeatureExtractor/MobilenetV1/Conv2d_10_pointwise/BatchNorm/moving_mean" 1409 | input: "FeatureExtractor/MobilenetV1/Conv2d_10_pointwise/BatchNorm/moving_variance" 1410 | attr { 1411 | key: "data_format" 1412 | value { 1413 | s: "NHWC" 1414 | } 1415 | } 1416 | attr { 1417 | key: "epsilon" 1418 | value { 1419 | f: 0.001 1420 | } 1421 | } 1422 | } 1423 | node { 1424 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Relu6" 1425 | op: "Relu6" 1426 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/FusedBatchNorm" 1427 | } 1428 | node { 1429 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/depthwise" 1430 | op: "DepthwiseConv2dNative" 1431 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Relu6" 1432 | input: "FeatureExtractor/MobilenetV1/Conv2d_11_depthwise/depthwise_weights" 1433 | attr { 1434 | key: "data_format" 1435 | value { 1436 | s: "NHWC" 1437 | } 1438 | } 1439 | attr { 1440 | key: "dilations" 1441 | value { 1442 | list { 1443 | i: 1 1444 | i: 1 1445 | i: 1 1446 | i: 1 1447 | } 1448 | } 1449 | } 1450 | attr { 1451 | key: "padding" 1452 | value { 1453 | s: "SAME" 1454 | } 1455 | } 1456 | attr { 1457 | key: "strides" 1458 | value { 1459 | list { 1460 | i: 1 1461 | i: 1 1462 | i: 1 1463 | i: 1 1464 | } 1465 | } 1466 | } 1467 | } 1468 | node { 1469 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/FusedBatchNorm" 1470 | op: "FusedBatchNorm" 1471 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/depthwise" 1472 | input: "FeatureExtractor/MobilenetV1/Conv2d_11_depthwise/BatchNorm/gamma" 1473 | input: "FeatureExtractor/MobilenetV1/Conv2d_11_depthwise/BatchNorm/beta" 1474 | input: "FeatureExtractor/MobilenetV1/Conv2d_11_depthwise/BatchNorm/moving_mean" 1475 | input: "FeatureExtractor/MobilenetV1/Conv2d_11_depthwise/BatchNorm/moving_variance" 1476 | attr { 1477 | key: "data_format" 1478 | value { 1479 | s: "NHWC" 1480 | } 1481 | } 1482 | attr { 1483 | key: "epsilon" 1484 | value { 1485 | f: 0.001 1486 | } 1487 | } 1488 | } 1489 | node { 1490 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/Relu6" 1491 | op: "Relu6" 1492 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/FusedBatchNorm" 1493 | } 1494 | node { 1495 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Conv2D" 1496 | op: "Conv2D" 1497 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/Relu6" 1498 | input: "FeatureExtractor/MobilenetV1/Conv2d_11_pointwise/weights" 1499 | attr { 1500 | key: "data_format" 1501 | value { 1502 | s: "NHWC" 1503 | } 1504 | } 1505 | attr { 1506 | key: "dilations" 1507 | value { 1508 | list { 1509 | i: 1 1510 | i: 1 1511 | i: 1 1512 | i: 1 1513 | } 1514 | } 1515 | } 1516 | attr { 1517 | key: "padding" 1518 | value { 1519 | s: "SAME" 1520 | } 1521 | } 1522 | attr { 1523 | key: "strides" 1524 | value { 1525 | list { 1526 | i: 1 1527 | i: 1 1528 | i: 1 1529 | i: 1 1530 | } 1531 | } 1532 | } 1533 | } 1534 | node { 1535 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/FusedBatchNorm" 1536 | op: "FusedBatchNorm" 1537 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Conv2D" 1538 | input: "FeatureExtractor/MobilenetV1/Conv2d_11_pointwise/BatchNorm/gamma" 1539 | input: "FeatureExtractor/MobilenetV1/Conv2d_11_pointwise/BatchNorm/beta" 1540 | input: "FeatureExtractor/MobilenetV1/Conv2d_11_pointwise/BatchNorm/moving_mean" 1541 | input: "FeatureExtractor/MobilenetV1/Conv2d_11_pointwise/BatchNorm/moving_variance" 1542 | attr { 1543 | key: "data_format" 1544 | value { 1545 | s: "NHWC" 1546 | } 1547 | } 1548 | attr { 1549 | key: "epsilon" 1550 | value { 1551 | f: 0.001 1552 | } 1553 | } 1554 | } 1555 | node { 1556 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6" 1557 | op: "Relu6" 1558 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/FusedBatchNorm" 1559 | } 1560 | node { 1561 | name: "BoxPredictor_0/ClassPredictor/Conv2D" 1562 | op: "Conv2D" 1563 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6" 1564 | input: "BoxPredictor_0/ClassPredictor/weights" 1565 | attr { 1566 | key: "data_format" 1567 | value { 1568 | s: "NHWC" 1569 | } 1570 | } 1571 | attr { 1572 | key: "dilations" 1573 | value { 1574 | list { 1575 | i: 1 1576 | i: 1 1577 | i: 1 1578 | i: 1 1579 | } 1580 | } 1581 | } 1582 | attr { 1583 | key: "padding" 1584 | value { 1585 | s: "SAME" 1586 | } 1587 | } 1588 | attr { 1589 | key: "strides" 1590 | value { 1591 | list { 1592 | i: 1 1593 | i: 1 1594 | i: 1 1595 | i: 1 1596 | } 1597 | } 1598 | } 1599 | } 1600 | node { 1601 | name: "BoxPredictor_0/ClassPredictor/BiasAdd" 1602 | op: "BiasAdd" 1603 | input: "BoxPredictor_0/ClassPredictor/Conv2D" 1604 | input: "BoxPredictor_0/ClassPredictor/biases" 1605 | attr { 1606 | key: "data_format" 1607 | value { 1608 | s: "NHWC" 1609 | } 1610 | } 1611 | } 1612 | node { 1613 | name: "BoxPredictor_0/BoxEncodingPredictor/Conv2D" 1614 | op: "Conv2D" 1615 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6" 1616 | input: "BoxPredictor_0/BoxEncodingPredictor/weights" 1617 | attr { 1618 | key: "data_format" 1619 | value { 1620 | s: "NHWC" 1621 | } 1622 | } 1623 | attr { 1624 | key: "dilations" 1625 | value { 1626 | list { 1627 | i: 1 1628 | i: 1 1629 | i: 1 1630 | i: 1 1631 | } 1632 | } 1633 | } 1634 | attr { 1635 | key: "loc_pred_transposed" 1636 | value { 1637 | b: true 1638 | } 1639 | } 1640 | attr { 1641 | key: "padding" 1642 | value { 1643 | s: "SAME" 1644 | } 1645 | } 1646 | attr { 1647 | key: "strides" 1648 | value { 1649 | list { 1650 | i: 1 1651 | i: 1 1652 | i: 1 1653 | i: 1 1654 | } 1655 | } 1656 | } 1657 | } 1658 | node { 1659 | name: "BoxPredictor_0/BoxEncodingPredictor/BiasAdd" 1660 | op: "BiasAdd" 1661 | input: "BoxPredictor_0/BoxEncodingPredictor/Conv2D" 1662 | input: "BoxPredictor_0/BoxEncodingPredictor/biases" 1663 | attr { 1664 | key: "data_format" 1665 | value { 1666 | s: "NHWC" 1667 | } 1668 | } 1669 | } 1670 | node { 1671 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/depthwise" 1672 | op: "DepthwiseConv2dNative" 1673 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6" 1674 | input: "FeatureExtractor/MobilenetV1/Conv2d_12_depthwise/depthwise_weights" 1675 | attr { 1676 | key: "data_format" 1677 | value { 1678 | s: "NHWC" 1679 | } 1680 | } 1681 | attr { 1682 | key: "dilations" 1683 | value { 1684 | list { 1685 | i: 1 1686 | i: 1 1687 | i: 1 1688 | i: 1 1689 | } 1690 | } 1691 | } 1692 | attr { 1693 | key: "padding" 1694 | value { 1695 | s: "SAME" 1696 | } 1697 | } 1698 | attr { 1699 | key: "strides" 1700 | value { 1701 | list { 1702 | i: 1 1703 | i: 2 1704 | i: 2 1705 | i: 1 1706 | } 1707 | } 1708 | } 1709 | } 1710 | node { 1711 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/FusedBatchNorm" 1712 | op: "FusedBatchNorm" 1713 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/depthwise" 1714 | input: "FeatureExtractor/MobilenetV1/Conv2d_12_depthwise/BatchNorm/gamma" 1715 | input: "FeatureExtractor/MobilenetV1/Conv2d_12_depthwise/BatchNorm/beta" 1716 | input: "FeatureExtractor/MobilenetV1/Conv2d_12_depthwise/BatchNorm/moving_mean" 1717 | input: "FeatureExtractor/MobilenetV1/Conv2d_12_depthwise/BatchNorm/moving_variance" 1718 | attr { 1719 | key: "data_format" 1720 | value { 1721 | s: "NHWC" 1722 | } 1723 | } 1724 | attr { 1725 | key: "epsilon" 1726 | value { 1727 | f: 0.001 1728 | } 1729 | } 1730 | } 1731 | node { 1732 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/Relu6" 1733 | op: "Relu6" 1734 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/FusedBatchNorm" 1735 | } 1736 | node { 1737 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Conv2D" 1738 | op: "Conv2D" 1739 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/Relu6" 1740 | input: "FeatureExtractor/MobilenetV1/Conv2d_12_pointwise/weights" 1741 | attr { 1742 | key: "data_format" 1743 | value { 1744 | s: "NHWC" 1745 | } 1746 | } 1747 | attr { 1748 | key: "dilations" 1749 | value { 1750 | list { 1751 | i: 1 1752 | i: 1 1753 | i: 1 1754 | i: 1 1755 | } 1756 | } 1757 | } 1758 | attr { 1759 | key: "padding" 1760 | value { 1761 | s: "SAME" 1762 | } 1763 | } 1764 | attr { 1765 | key: "strides" 1766 | value { 1767 | list { 1768 | i: 1 1769 | i: 1 1770 | i: 1 1771 | i: 1 1772 | } 1773 | } 1774 | } 1775 | } 1776 | node { 1777 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/FusedBatchNorm" 1778 | op: "FusedBatchNorm" 1779 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Conv2D" 1780 | input: "FeatureExtractor/MobilenetV1/Conv2d_12_pointwise/BatchNorm/gamma" 1781 | input: "FeatureExtractor/MobilenetV1/Conv2d_12_pointwise/BatchNorm/beta" 1782 | input: "FeatureExtractor/MobilenetV1/Conv2d_12_pointwise/BatchNorm/moving_mean" 1783 | input: "FeatureExtractor/MobilenetV1/Conv2d_12_pointwise/BatchNorm/moving_variance" 1784 | attr { 1785 | key: "data_format" 1786 | value { 1787 | s: "NHWC" 1788 | } 1789 | } 1790 | attr { 1791 | key: "epsilon" 1792 | value { 1793 | f: 0.001 1794 | } 1795 | } 1796 | } 1797 | node { 1798 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Relu6" 1799 | op: "Relu6" 1800 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/FusedBatchNorm" 1801 | } 1802 | node { 1803 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/depthwise" 1804 | op: "DepthwiseConv2dNative" 1805 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Relu6" 1806 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_depthwise/depthwise_weights" 1807 | attr { 1808 | key: "data_format" 1809 | value { 1810 | s: "NHWC" 1811 | } 1812 | } 1813 | attr { 1814 | key: "dilations" 1815 | value { 1816 | list { 1817 | i: 1 1818 | i: 1 1819 | i: 1 1820 | i: 1 1821 | } 1822 | } 1823 | } 1824 | attr { 1825 | key: "padding" 1826 | value { 1827 | s: "SAME" 1828 | } 1829 | } 1830 | attr { 1831 | key: "strides" 1832 | value { 1833 | list { 1834 | i: 1 1835 | i: 1 1836 | i: 1 1837 | i: 1 1838 | } 1839 | } 1840 | } 1841 | } 1842 | node { 1843 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/FusedBatchNorm" 1844 | op: "FusedBatchNorm" 1845 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/depthwise" 1846 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_depthwise/BatchNorm/gamma" 1847 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_depthwise/BatchNorm/beta" 1848 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_depthwise/BatchNorm/moving_mean" 1849 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_depthwise/BatchNorm/moving_variance" 1850 | attr { 1851 | key: "data_format" 1852 | value { 1853 | s: "NHWC" 1854 | } 1855 | } 1856 | attr { 1857 | key: "epsilon" 1858 | value { 1859 | f: 0.001 1860 | } 1861 | } 1862 | } 1863 | node { 1864 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/Relu6" 1865 | op: "Relu6" 1866 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/FusedBatchNorm" 1867 | } 1868 | node { 1869 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Conv2D" 1870 | op: "Conv2D" 1871 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/Relu6" 1872 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise/weights" 1873 | attr { 1874 | key: "data_format" 1875 | value { 1876 | s: "NHWC" 1877 | } 1878 | } 1879 | attr { 1880 | key: "dilations" 1881 | value { 1882 | list { 1883 | i: 1 1884 | i: 1 1885 | i: 1 1886 | i: 1 1887 | } 1888 | } 1889 | } 1890 | attr { 1891 | key: "padding" 1892 | value { 1893 | s: "SAME" 1894 | } 1895 | } 1896 | attr { 1897 | key: "strides" 1898 | value { 1899 | list { 1900 | i: 1 1901 | i: 1 1902 | i: 1 1903 | i: 1 1904 | } 1905 | } 1906 | } 1907 | } 1908 | node { 1909 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/FusedBatchNorm" 1910 | op: "FusedBatchNorm" 1911 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Conv2D" 1912 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise/BatchNorm/gamma" 1913 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise/BatchNorm/beta" 1914 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise/BatchNorm/moving_mean" 1915 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise/BatchNorm/moving_variance" 1916 | attr { 1917 | key: "data_format" 1918 | value { 1919 | s: "NHWC" 1920 | } 1921 | } 1922 | attr { 1923 | key: "epsilon" 1924 | value { 1925 | f: 0.001 1926 | } 1927 | } 1928 | } 1929 | node { 1930 | name: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6" 1931 | op: "Relu6" 1932 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/FusedBatchNorm" 1933 | } 1934 | node { 1935 | name: "BoxPredictor_1/ClassPredictor/Conv2D" 1936 | op: "Conv2D" 1937 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6" 1938 | input: "BoxPredictor_1/ClassPredictor/weights" 1939 | attr { 1940 | key: "data_format" 1941 | value { 1942 | s: "NHWC" 1943 | } 1944 | } 1945 | attr { 1946 | key: "dilations" 1947 | value { 1948 | list { 1949 | i: 1 1950 | i: 1 1951 | i: 1 1952 | i: 1 1953 | } 1954 | } 1955 | } 1956 | attr { 1957 | key: "padding" 1958 | value { 1959 | s: "SAME" 1960 | } 1961 | } 1962 | attr { 1963 | key: "strides" 1964 | value { 1965 | list { 1966 | i: 1 1967 | i: 1 1968 | i: 1 1969 | i: 1 1970 | } 1971 | } 1972 | } 1973 | } 1974 | node { 1975 | name: "BoxPredictor_1/ClassPredictor/BiasAdd" 1976 | op: "BiasAdd" 1977 | input: "BoxPredictor_1/ClassPredictor/Conv2D" 1978 | input: "BoxPredictor_1/ClassPredictor/biases" 1979 | attr { 1980 | key: "data_format" 1981 | value { 1982 | s: "NHWC" 1983 | } 1984 | } 1985 | } 1986 | node { 1987 | name: "BoxPredictor_1/BoxEncodingPredictor/Conv2D" 1988 | op: "Conv2D" 1989 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6" 1990 | input: "BoxPredictor_1/BoxEncodingPredictor/weights" 1991 | attr { 1992 | key: "data_format" 1993 | value { 1994 | s: "NHWC" 1995 | } 1996 | } 1997 | attr { 1998 | key: "dilations" 1999 | value { 2000 | list { 2001 | i: 1 2002 | i: 1 2003 | i: 1 2004 | i: 1 2005 | } 2006 | } 2007 | } 2008 | attr { 2009 | key: "loc_pred_transposed" 2010 | value { 2011 | b: true 2012 | } 2013 | } 2014 | attr { 2015 | key: "padding" 2016 | value { 2017 | s: "SAME" 2018 | } 2019 | } 2020 | attr { 2021 | key: "strides" 2022 | value { 2023 | list { 2024 | i: 1 2025 | i: 1 2026 | i: 1 2027 | i: 1 2028 | } 2029 | } 2030 | } 2031 | } 2032 | node { 2033 | name: "BoxPredictor_1/BoxEncodingPredictor/BiasAdd" 2034 | op: "BiasAdd" 2035 | input: "BoxPredictor_1/BoxEncodingPredictor/Conv2D" 2036 | input: "BoxPredictor_1/BoxEncodingPredictor/biases" 2037 | attr { 2038 | key: "data_format" 2039 | value { 2040 | s: "NHWC" 2041 | } 2042 | } 2043 | } 2044 | node { 2045 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Conv2D" 2046 | op: "Conv2D" 2047 | input: "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6" 2048 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/weights" 2049 | attr { 2050 | key: "data_format" 2051 | value { 2052 | s: "NHWC" 2053 | } 2054 | } 2055 | attr { 2056 | key: "dilations" 2057 | value { 2058 | list { 2059 | i: 1 2060 | i: 1 2061 | i: 1 2062 | i: 1 2063 | } 2064 | } 2065 | } 2066 | attr { 2067 | key: "padding" 2068 | value { 2069 | s: "SAME" 2070 | } 2071 | } 2072 | attr { 2073 | key: "strides" 2074 | value { 2075 | list { 2076 | i: 1 2077 | i: 1 2078 | i: 1 2079 | i: 1 2080 | } 2081 | } 2082 | } 2083 | } 2084 | node { 2085 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/FusedBatchNorm" 2086 | op: "FusedBatchNorm" 2087 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Conv2D" 2088 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/gamma" 2089 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/beta" 2090 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/moving_mean" 2091 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/moving_variance" 2092 | attr { 2093 | key: "data_format" 2094 | value { 2095 | s: "NHWC" 2096 | } 2097 | } 2098 | attr { 2099 | key: "epsilon" 2100 | value { 2101 | f: 0.001 2102 | } 2103 | } 2104 | } 2105 | node { 2106 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Relu6" 2107 | op: "Relu6" 2108 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/FusedBatchNorm" 2109 | } 2110 | node { 2111 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Conv2D" 2112 | op: "Conv2D" 2113 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Relu6" 2114 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/weights" 2115 | attr { 2116 | key: "data_format" 2117 | value { 2118 | s: "NHWC" 2119 | } 2120 | } 2121 | attr { 2122 | key: "dilations" 2123 | value { 2124 | list { 2125 | i: 1 2126 | i: 1 2127 | i: 1 2128 | i: 1 2129 | } 2130 | } 2131 | } 2132 | attr { 2133 | key: "padding" 2134 | value { 2135 | s: "SAME" 2136 | } 2137 | } 2138 | attr { 2139 | key: "strides" 2140 | value { 2141 | list { 2142 | i: 1 2143 | i: 2 2144 | i: 2 2145 | i: 1 2146 | } 2147 | } 2148 | } 2149 | } 2150 | node { 2151 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/FusedBatchNorm" 2152 | op: "FusedBatchNorm" 2153 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Conv2D" 2154 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/gamma" 2155 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/beta" 2156 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/moving_mean" 2157 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/moving_variance" 2158 | attr { 2159 | key: "data_format" 2160 | value { 2161 | s: "NHWC" 2162 | } 2163 | } 2164 | attr { 2165 | key: "epsilon" 2166 | value { 2167 | f: 0.001 2168 | } 2169 | } 2170 | } 2171 | node { 2172 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Relu6" 2173 | op: "Relu6" 2174 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/FusedBatchNorm" 2175 | } 2176 | node { 2177 | name: "BoxPredictor_2/ClassPredictor/Conv2D" 2178 | op: "Conv2D" 2179 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Relu6" 2180 | input: "BoxPredictor_2/ClassPredictor/weights" 2181 | attr { 2182 | key: "data_format" 2183 | value { 2184 | s: "NHWC" 2185 | } 2186 | } 2187 | attr { 2188 | key: "dilations" 2189 | value { 2190 | list { 2191 | i: 1 2192 | i: 1 2193 | i: 1 2194 | i: 1 2195 | } 2196 | } 2197 | } 2198 | attr { 2199 | key: "padding" 2200 | value { 2201 | s: "SAME" 2202 | } 2203 | } 2204 | attr { 2205 | key: "strides" 2206 | value { 2207 | list { 2208 | i: 1 2209 | i: 1 2210 | i: 1 2211 | i: 1 2212 | } 2213 | } 2214 | } 2215 | } 2216 | node { 2217 | name: "BoxPredictor_2/ClassPredictor/BiasAdd" 2218 | op: "BiasAdd" 2219 | input: "BoxPredictor_2/ClassPredictor/Conv2D" 2220 | input: "BoxPredictor_2/ClassPredictor/biases" 2221 | attr { 2222 | key: "data_format" 2223 | value { 2224 | s: "NHWC" 2225 | } 2226 | } 2227 | } 2228 | node { 2229 | name: "BoxPredictor_2/BoxEncodingPredictor/Conv2D" 2230 | op: "Conv2D" 2231 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Relu6" 2232 | input: "BoxPredictor_2/BoxEncodingPredictor/weights" 2233 | attr { 2234 | key: "data_format" 2235 | value { 2236 | s: "NHWC" 2237 | } 2238 | } 2239 | attr { 2240 | key: "dilations" 2241 | value { 2242 | list { 2243 | i: 1 2244 | i: 1 2245 | i: 1 2246 | i: 1 2247 | } 2248 | } 2249 | } 2250 | attr { 2251 | key: "loc_pred_transposed" 2252 | value { 2253 | b: true 2254 | } 2255 | } 2256 | attr { 2257 | key: "padding" 2258 | value { 2259 | s: "SAME" 2260 | } 2261 | } 2262 | attr { 2263 | key: "strides" 2264 | value { 2265 | list { 2266 | i: 1 2267 | i: 1 2268 | i: 1 2269 | i: 1 2270 | } 2271 | } 2272 | } 2273 | } 2274 | node { 2275 | name: "BoxPredictor_2/BoxEncodingPredictor/BiasAdd" 2276 | op: "BiasAdd" 2277 | input: "BoxPredictor_2/BoxEncodingPredictor/Conv2D" 2278 | input: "BoxPredictor_2/BoxEncodingPredictor/biases" 2279 | attr { 2280 | key: "data_format" 2281 | value { 2282 | s: "NHWC" 2283 | } 2284 | } 2285 | } 2286 | node { 2287 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Conv2D" 2288 | op: "Conv2D" 2289 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Relu6" 2290 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/weights" 2291 | attr { 2292 | key: "data_format" 2293 | value { 2294 | s: "NHWC" 2295 | } 2296 | } 2297 | attr { 2298 | key: "dilations" 2299 | value { 2300 | list { 2301 | i: 1 2302 | i: 1 2303 | i: 1 2304 | i: 1 2305 | } 2306 | } 2307 | } 2308 | attr { 2309 | key: "padding" 2310 | value { 2311 | s: "SAME" 2312 | } 2313 | } 2314 | attr { 2315 | key: "strides" 2316 | value { 2317 | list { 2318 | i: 1 2319 | i: 1 2320 | i: 1 2321 | i: 1 2322 | } 2323 | } 2324 | } 2325 | } 2326 | node { 2327 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/FusedBatchNorm" 2328 | op: "FusedBatchNorm" 2329 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Conv2D" 2330 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/gamma" 2331 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/beta" 2332 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/moving_mean" 2333 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/moving_variance" 2334 | attr { 2335 | key: "data_format" 2336 | value { 2337 | s: "NHWC" 2338 | } 2339 | } 2340 | attr { 2341 | key: "epsilon" 2342 | value { 2343 | f: 0.001 2344 | } 2345 | } 2346 | } 2347 | node { 2348 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Relu6" 2349 | op: "Relu6" 2350 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/FusedBatchNorm" 2351 | } 2352 | node { 2353 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Conv2D" 2354 | op: "Conv2D" 2355 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Relu6" 2356 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/weights" 2357 | attr { 2358 | key: "data_format" 2359 | value { 2360 | s: "NHWC" 2361 | } 2362 | } 2363 | attr { 2364 | key: "dilations" 2365 | value { 2366 | list { 2367 | i: 1 2368 | i: 1 2369 | i: 1 2370 | i: 1 2371 | } 2372 | } 2373 | } 2374 | attr { 2375 | key: "padding" 2376 | value { 2377 | s: "SAME" 2378 | } 2379 | } 2380 | attr { 2381 | key: "strides" 2382 | value { 2383 | list { 2384 | i: 1 2385 | i: 2 2386 | i: 2 2387 | i: 1 2388 | } 2389 | } 2390 | } 2391 | } 2392 | node { 2393 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/FusedBatchNorm" 2394 | op: "FusedBatchNorm" 2395 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Conv2D" 2396 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/gamma" 2397 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/beta" 2398 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/moving_mean" 2399 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/moving_variance" 2400 | attr { 2401 | key: "data_format" 2402 | value { 2403 | s: "NHWC" 2404 | } 2405 | } 2406 | attr { 2407 | key: "epsilon" 2408 | value { 2409 | f: 0.001 2410 | } 2411 | } 2412 | } 2413 | node { 2414 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Relu6" 2415 | op: "Relu6" 2416 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/FusedBatchNorm" 2417 | } 2418 | node { 2419 | name: "BoxPredictor_3/ClassPredictor/Conv2D" 2420 | op: "Conv2D" 2421 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Relu6" 2422 | input: "BoxPredictor_3/ClassPredictor/weights" 2423 | attr { 2424 | key: "data_format" 2425 | value { 2426 | s: "NHWC" 2427 | } 2428 | } 2429 | attr { 2430 | key: "dilations" 2431 | value { 2432 | list { 2433 | i: 1 2434 | i: 1 2435 | i: 1 2436 | i: 1 2437 | } 2438 | } 2439 | } 2440 | attr { 2441 | key: "padding" 2442 | value { 2443 | s: "SAME" 2444 | } 2445 | } 2446 | attr { 2447 | key: "strides" 2448 | value { 2449 | list { 2450 | i: 1 2451 | i: 1 2452 | i: 1 2453 | i: 1 2454 | } 2455 | } 2456 | } 2457 | } 2458 | node { 2459 | name: "BoxPredictor_3/ClassPredictor/BiasAdd" 2460 | op: "BiasAdd" 2461 | input: "BoxPredictor_3/ClassPredictor/Conv2D" 2462 | input: "BoxPredictor_3/ClassPredictor/biases" 2463 | attr { 2464 | key: "data_format" 2465 | value { 2466 | s: "NHWC" 2467 | } 2468 | } 2469 | } 2470 | node { 2471 | name: "BoxPredictor_3/BoxEncodingPredictor/Conv2D" 2472 | op: "Conv2D" 2473 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Relu6" 2474 | input: "BoxPredictor_3/BoxEncodingPredictor/weights" 2475 | attr { 2476 | key: "data_format" 2477 | value { 2478 | s: "NHWC" 2479 | } 2480 | } 2481 | attr { 2482 | key: "dilations" 2483 | value { 2484 | list { 2485 | i: 1 2486 | i: 1 2487 | i: 1 2488 | i: 1 2489 | } 2490 | } 2491 | } 2492 | attr { 2493 | key: "loc_pred_transposed" 2494 | value { 2495 | b: true 2496 | } 2497 | } 2498 | attr { 2499 | key: "padding" 2500 | value { 2501 | s: "SAME" 2502 | } 2503 | } 2504 | attr { 2505 | key: "strides" 2506 | value { 2507 | list { 2508 | i: 1 2509 | i: 1 2510 | i: 1 2511 | i: 1 2512 | } 2513 | } 2514 | } 2515 | } 2516 | node { 2517 | name: "BoxPredictor_3/BoxEncodingPredictor/BiasAdd" 2518 | op: "BiasAdd" 2519 | input: "BoxPredictor_3/BoxEncodingPredictor/Conv2D" 2520 | input: "BoxPredictor_3/BoxEncodingPredictor/biases" 2521 | attr { 2522 | key: "data_format" 2523 | value { 2524 | s: "NHWC" 2525 | } 2526 | } 2527 | } 2528 | node { 2529 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Conv2D" 2530 | op: "Conv2D" 2531 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Relu6" 2532 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/weights" 2533 | attr { 2534 | key: "data_format" 2535 | value { 2536 | s: "NHWC" 2537 | } 2538 | } 2539 | attr { 2540 | key: "dilations" 2541 | value { 2542 | list { 2543 | i: 1 2544 | i: 1 2545 | i: 1 2546 | i: 1 2547 | } 2548 | } 2549 | } 2550 | attr { 2551 | key: "padding" 2552 | value { 2553 | s: "SAME" 2554 | } 2555 | } 2556 | attr { 2557 | key: "strides" 2558 | value { 2559 | list { 2560 | i: 1 2561 | i: 1 2562 | i: 1 2563 | i: 1 2564 | } 2565 | } 2566 | } 2567 | } 2568 | node { 2569 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/FusedBatchNorm" 2570 | op: "FusedBatchNorm" 2571 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Conv2D" 2572 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/gamma" 2573 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/beta" 2574 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/moving_mean" 2575 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/moving_variance" 2576 | attr { 2577 | key: "data_format" 2578 | value { 2579 | s: "NHWC" 2580 | } 2581 | } 2582 | attr { 2583 | key: "epsilon" 2584 | value { 2585 | f: 0.001 2586 | } 2587 | } 2588 | } 2589 | node { 2590 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Relu6" 2591 | op: "Relu6" 2592 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/FusedBatchNorm" 2593 | } 2594 | node { 2595 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Conv2D" 2596 | op: "Conv2D" 2597 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Relu6" 2598 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/weights" 2599 | attr { 2600 | key: "data_format" 2601 | value { 2602 | s: "NHWC" 2603 | } 2604 | } 2605 | attr { 2606 | key: "dilations" 2607 | value { 2608 | list { 2609 | i: 1 2610 | i: 1 2611 | i: 1 2612 | i: 1 2613 | } 2614 | } 2615 | } 2616 | attr { 2617 | key: "padding" 2618 | value { 2619 | s: "SAME" 2620 | } 2621 | } 2622 | attr { 2623 | key: "strides" 2624 | value { 2625 | list { 2626 | i: 1 2627 | i: 2 2628 | i: 2 2629 | i: 1 2630 | } 2631 | } 2632 | } 2633 | } 2634 | node { 2635 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/FusedBatchNorm" 2636 | op: "FusedBatchNorm" 2637 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Conv2D" 2638 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/gamma" 2639 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/beta" 2640 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/moving_mean" 2641 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/moving_variance" 2642 | attr { 2643 | key: "data_format" 2644 | value { 2645 | s: "NHWC" 2646 | } 2647 | } 2648 | attr { 2649 | key: "epsilon" 2650 | value { 2651 | f: 0.001 2652 | } 2653 | } 2654 | } 2655 | node { 2656 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Relu6" 2657 | op: "Relu6" 2658 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/FusedBatchNorm" 2659 | } 2660 | node { 2661 | name: "BoxPredictor_4/ClassPredictor/Conv2D" 2662 | op: "Conv2D" 2663 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Relu6" 2664 | input: "BoxPredictor_4/ClassPredictor/weights" 2665 | attr { 2666 | key: "data_format" 2667 | value { 2668 | s: "NHWC" 2669 | } 2670 | } 2671 | attr { 2672 | key: "dilations" 2673 | value { 2674 | list { 2675 | i: 1 2676 | i: 1 2677 | i: 1 2678 | i: 1 2679 | } 2680 | } 2681 | } 2682 | attr { 2683 | key: "padding" 2684 | value { 2685 | s: "SAME" 2686 | } 2687 | } 2688 | attr { 2689 | key: "strides" 2690 | value { 2691 | list { 2692 | i: 1 2693 | i: 1 2694 | i: 1 2695 | i: 1 2696 | } 2697 | } 2698 | } 2699 | } 2700 | node { 2701 | name: "BoxPredictor_4/ClassPredictor/BiasAdd" 2702 | op: "BiasAdd" 2703 | input: "BoxPredictor_4/ClassPredictor/Conv2D" 2704 | input: "BoxPredictor_4/ClassPredictor/biases" 2705 | attr { 2706 | key: "data_format" 2707 | value { 2708 | s: "NHWC" 2709 | } 2710 | } 2711 | } 2712 | node { 2713 | name: "BoxPredictor_4/BoxEncodingPredictor/Conv2D" 2714 | op: "Conv2D" 2715 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Relu6" 2716 | input: "BoxPredictor_4/BoxEncodingPredictor/weights" 2717 | attr { 2718 | key: "data_format" 2719 | value { 2720 | s: "NHWC" 2721 | } 2722 | } 2723 | attr { 2724 | key: "dilations" 2725 | value { 2726 | list { 2727 | i: 1 2728 | i: 1 2729 | i: 1 2730 | i: 1 2731 | } 2732 | } 2733 | } 2734 | attr { 2735 | key: "loc_pred_transposed" 2736 | value { 2737 | b: true 2738 | } 2739 | } 2740 | attr { 2741 | key: "padding" 2742 | value { 2743 | s: "SAME" 2744 | } 2745 | } 2746 | attr { 2747 | key: "strides" 2748 | value { 2749 | list { 2750 | i: 1 2751 | i: 1 2752 | i: 1 2753 | i: 1 2754 | } 2755 | } 2756 | } 2757 | } 2758 | node { 2759 | name: "BoxPredictor_4/BoxEncodingPredictor/BiasAdd" 2760 | op: "BiasAdd" 2761 | input: "BoxPredictor_4/BoxEncodingPredictor/Conv2D" 2762 | input: "BoxPredictor_4/BoxEncodingPredictor/biases" 2763 | attr { 2764 | key: "data_format" 2765 | value { 2766 | s: "NHWC" 2767 | } 2768 | } 2769 | } 2770 | node { 2771 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Conv2D" 2772 | op: "Conv2D" 2773 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Relu6" 2774 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/weights" 2775 | attr { 2776 | key: "data_format" 2777 | value { 2778 | s: "NHWC" 2779 | } 2780 | } 2781 | attr { 2782 | key: "dilations" 2783 | value { 2784 | list { 2785 | i: 1 2786 | i: 1 2787 | i: 1 2788 | i: 1 2789 | } 2790 | } 2791 | } 2792 | attr { 2793 | key: "padding" 2794 | value { 2795 | s: "SAME" 2796 | } 2797 | } 2798 | attr { 2799 | key: "strides" 2800 | value { 2801 | list { 2802 | i: 1 2803 | i: 1 2804 | i: 1 2805 | i: 1 2806 | } 2807 | } 2808 | } 2809 | } 2810 | node { 2811 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/FusedBatchNorm" 2812 | op: "FusedBatchNorm" 2813 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Conv2D" 2814 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/gamma" 2815 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/beta" 2816 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/moving_mean" 2817 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/moving_variance" 2818 | attr { 2819 | key: "data_format" 2820 | value { 2821 | s: "NHWC" 2822 | } 2823 | } 2824 | attr { 2825 | key: "epsilon" 2826 | value { 2827 | f: 0.001 2828 | } 2829 | } 2830 | } 2831 | node { 2832 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Relu6" 2833 | op: "Relu6" 2834 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/FusedBatchNorm" 2835 | } 2836 | node { 2837 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Conv2D" 2838 | op: "Conv2D" 2839 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Relu6" 2840 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/weights" 2841 | attr { 2842 | key: "data_format" 2843 | value { 2844 | s: "NHWC" 2845 | } 2846 | } 2847 | attr { 2848 | key: "dilations" 2849 | value { 2850 | list { 2851 | i: 1 2852 | i: 1 2853 | i: 1 2854 | i: 1 2855 | } 2856 | } 2857 | } 2858 | attr { 2859 | key: "padding" 2860 | value { 2861 | s: "SAME" 2862 | } 2863 | } 2864 | attr { 2865 | key: "strides" 2866 | value { 2867 | list { 2868 | i: 1 2869 | i: 2 2870 | i: 2 2871 | i: 1 2872 | } 2873 | } 2874 | } 2875 | } 2876 | node { 2877 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/FusedBatchNorm" 2878 | op: "FusedBatchNorm" 2879 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Conv2D" 2880 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/gamma" 2881 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/beta" 2882 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/moving_mean" 2883 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/moving_variance" 2884 | attr { 2885 | key: "data_format" 2886 | value { 2887 | s: "NHWC" 2888 | } 2889 | } 2890 | attr { 2891 | key: "epsilon" 2892 | value { 2893 | f: 0.001 2894 | } 2895 | } 2896 | } 2897 | node { 2898 | name: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Relu6" 2899 | op: "Relu6" 2900 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/FusedBatchNorm" 2901 | } 2902 | node { 2903 | name: "BoxPredictor_5/ClassPredictor/Conv2D" 2904 | op: "Conv2D" 2905 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Relu6" 2906 | input: "BoxPredictor_5/ClassPredictor/weights" 2907 | attr { 2908 | key: "data_format" 2909 | value { 2910 | s: "NHWC" 2911 | } 2912 | } 2913 | attr { 2914 | key: "dilations" 2915 | value { 2916 | list { 2917 | i: 1 2918 | i: 1 2919 | i: 1 2920 | i: 1 2921 | } 2922 | } 2923 | } 2924 | attr { 2925 | key: "padding" 2926 | value { 2927 | s: "SAME" 2928 | } 2929 | } 2930 | attr { 2931 | key: "strides" 2932 | value { 2933 | list { 2934 | i: 1 2935 | i: 1 2936 | i: 1 2937 | i: 1 2938 | } 2939 | } 2940 | } 2941 | } 2942 | node { 2943 | name: "BoxPredictor_5/ClassPredictor/BiasAdd" 2944 | op: "BiasAdd" 2945 | input: "BoxPredictor_5/ClassPredictor/Conv2D" 2946 | input: "BoxPredictor_5/ClassPredictor/biases" 2947 | attr { 2948 | key: "data_format" 2949 | value { 2950 | s: "NHWC" 2951 | } 2952 | } 2953 | } 2954 | node { 2955 | name: "BoxPredictor_5/BoxEncodingPredictor/Conv2D" 2956 | op: "Conv2D" 2957 | input: "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Relu6" 2958 | input: "BoxPredictor_5/BoxEncodingPredictor/weights" 2959 | attr { 2960 | key: "data_format" 2961 | value { 2962 | s: "NHWC" 2963 | } 2964 | } 2965 | attr { 2966 | key: "dilations" 2967 | value { 2968 | list { 2969 | i: 1 2970 | i: 1 2971 | i: 1 2972 | i: 1 2973 | } 2974 | } 2975 | } 2976 | attr { 2977 | key: "loc_pred_transposed" 2978 | value { 2979 | b: true 2980 | } 2981 | } 2982 | attr { 2983 | key: "padding" 2984 | value { 2985 | s: "SAME" 2986 | } 2987 | } 2988 | attr { 2989 | key: "strides" 2990 | value { 2991 | list { 2992 | i: 1 2993 | i: 1 2994 | i: 1 2995 | i: 1 2996 | } 2997 | } 2998 | } 2999 | } 3000 | node { 3001 | name: "BoxPredictor_5/BoxEncodingPredictor/BiasAdd" 3002 | op: "BiasAdd" 3003 | input: "BoxPredictor_5/BoxEncodingPredictor/Conv2D" 3004 | input: "BoxPredictor_5/BoxEncodingPredictor/biases" 3005 | attr { 3006 | key: "data_format" 3007 | value { 3008 | s: "NHWC" 3009 | } 3010 | } 3011 | } 3012 | node { 3013 | name: "concat/axis_flatten" 3014 | op: "Const" 3015 | attr { 3016 | key: "value" 3017 | value { 3018 | tensor { 3019 | dtype: DT_INT32 3020 | int_val: -1 3021 | tensor_shape { 3022 | dim { 3023 | size: 1 3024 | } 3025 | } 3026 | } 3027 | } 3028 | } 3029 | } 3030 | node { 3031 | name: "BoxPredictor_0/ClassPredictor/BiasAdd/Flatten" 3032 | op: "Flatten" 3033 | input: "BoxPredictor_0/ClassPredictor/BiasAdd" 3034 | } 3035 | node { 3036 | name: "BoxPredictor_1/ClassPredictor/BiasAdd/Flatten" 3037 | op: "Flatten" 3038 | input: "BoxPredictor_1/ClassPredictor/BiasAdd" 3039 | } 3040 | node { 3041 | name: "BoxPredictor_2/ClassPredictor/BiasAdd/Flatten" 3042 | op: "Flatten" 3043 | input: "BoxPredictor_2/ClassPredictor/BiasAdd" 3044 | } 3045 | node { 3046 | name: "BoxPredictor_3/ClassPredictor/BiasAdd/Flatten" 3047 | op: "Flatten" 3048 | input: "BoxPredictor_3/ClassPredictor/BiasAdd" 3049 | } 3050 | node { 3051 | name: "BoxPredictor_4/ClassPredictor/BiasAdd/Flatten" 3052 | op: "Flatten" 3053 | input: "BoxPredictor_4/ClassPredictor/BiasAdd" 3054 | } 3055 | node { 3056 | name: "BoxPredictor_5/ClassPredictor/BiasAdd/Flatten" 3057 | op: "Flatten" 3058 | input: "BoxPredictor_5/ClassPredictor/BiasAdd" 3059 | } 3060 | node { 3061 | name: "ClassPredictor/concat" 3062 | op: "ConcatV2" 3063 | input: "BoxPredictor_0/ClassPredictor/BiasAdd/Flatten" 3064 | input: "BoxPredictor_1/ClassPredictor/BiasAdd/Flatten" 3065 | input: "BoxPredictor_2/ClassPredictor/BiasAdd/Flatten" 3066 | input: "BoxPredictor_3/ClassPredictor/BiasAdd/Flatten" 3067 | input: "BoxPredictor_4/ClassPredictor/BiasAdd/Flatten" 3068 | input: "BoxPredictor_5/ClassPredictor/BiasAdd/Flatten" 3069 | input: "concat/axis_flatten" 3070 | } 3071 | node { 3072 | name: "BoxPredictor_0/BoxEncodingPredictor/BiasAdd/Flatten" 3073 | op: "Flatten" 3074 | input: "BoxPredictor_0/BoxEncodingPredictor/BiasAdd" 3075 | } 3076 | node { 3077 | name: "BoxPredictor_1/BoxEncodingPredictor/BiasAdd/Flatten" 3078 | op: "Flatten" 3079 | input: "BoxPredictor_1/BoxEncodingPredictor/BiasAdd" 3080 | } 3081 | node { 3082 | name: "BoxPredictor_2/BoxEncodingPredictor/BiasAdd/Flatten" 3083 | op: "Flatten" 3084 | input: "BoxPredictor_2/BoxEncodingPredictor/BiasAdd" 3085 | } 3086 | node { 3087 | name: "BoxPredictor_3/BoxEncodingPredictor/BiasAdd/Flatten" 3088 | op: "Flatten" 3089 | input: "BoxPredictor_3/BoxEncodingPredictor/BiasAdd" 3090 | } 3091 | node { 3092 | name: "BoxPredictor_4/BoxEncodingPredictor/BiasAdd/Flatten" 3093 | op: "Flatten" 3094 | input: "BoxPredictor_4/BoxEncodingPredictor/BiasAdd" 3095 | } 3096 | node { 3097 | name: "BoxPredictor_5/BoxEncodingPredictor/BiasAdd/Flatten" 3098 | op: "Flatten" 3099 | input: "BoxPredictor_5/BoxEncodingPredictor/BiasAdd" 3100 | } 3101 | node { 3102 | name: "BoxEncodingPredictor/concat" 3103 | op: "ConcatV2" 3104 | input: "BoxPredictor_0/BoxEncodingPredictor/BiasAdd/Flatten" 3105 | input: "BoxPredictor_1/BoxEncodingPredictor/BiasAdd/Flatten" 3106 | input: "BoxPredictor_2/BoxEncodingPredictor/BiasAdd/Flatten" 3107 | input: "BoxPredictor_3/BoxEncodingPredictor/BiasAdd/Flatten" 3108 | input: "BoxPredictor_4/BoxEncodingPredictor/BiasAdd/Flatten" 3109 | input: "BoxPredictor_5/BoxEncodingPredictor/BiasAdd/Flatten" 3110 | input: "concat/axis_flatten" 3111 | } 3112 | node { 3113 | name: "PriorBox_0" 3114 | op: "PriorBox" 3115 | input: "BoxPredictor_0/BoxEncodingPredictor/BiasAdd" 3116 | input: "image_tensor" 3117 | attr { 3118 | key: "clip" 3119 | value { 3120 | b: false 3121 | } 3122 | } 3123 | attr { 3124 | key: "flip" 3125 | value { 3126 | b: false 3127 | } 3128 | } 3129 | attr { 3130 | key: "height" 3131 | value { 3132 | tensor { 3133 | dtype: DT_FLOAT 3134 | float_val: 30.0 3135 | float_val: 42.42640687119285 3136 | float_val: 84.8528137423857 3137 | tensor_shape { 3138 | dim { 3139 | size: 3 3140 | } 3141 | } 3142 | } 3143 | } 3144 | } 3145 | attr { 3146 | key: "variance" 3147 | value { 3148 | tensor { 3149 | dtype: DT_FLOAT 3150 | float_val: 0.1 3151 | float_val: 0.1 3152 | float_val: 0.2 3153 | float_val: 0.2 3154 | tensor_shape { 3155 | dim { 3156 | size: 4 3157 | } 3158 | } 3159 | } 3160 | } 3161 | } 3162 | attr { 3163 | key: "width" 3164 | value { 3165 | tensor { 3166 | dtype: DT_FLOAT 3167 | float_val: 30.0 3168 | float_val: 84.85281374238572 3169 | float_val: 42.42640687119286 3170 | tensor_shape { 3171 | dim { 3172 | size: 3 3173 | } 3174 | } 3175 | } 3176 | } 3177 | } 3178 | } 3179 | node { 3180 | name: "PriorBox_1" 3181 | op: "PriorBox" 3182 | input: "BoxPredictor_1/BoxEncodingPredictor/BiasAdd" 3183 | input: "image_tensor" 3184 | attr { 3185 | key: "clip" 3186 | value { 3187 | b: false 3188 | } 3189 | } 3190 | attr { 3191 | key: "flip" 3192 | value { 3193 | b: false 3194 | } 3195 | } 3196 | attr { 3197 | key: "height" 3198 | value { 3199 | tensor { 3200 | dtype: DT_FLOAT 3201 | float_val: 105.0 3202 | float_val: 74.24621202458748 3203 | float_val: 148.49242404917496 3204 | float_val: 60.62177826491071 3205 | float_val: 181.87442874352365 3206 | float_val: 125.49900398011134 3207 | tensor_shape { 3208 | dim { 3209 | size: 6 3210 | } 3211 | } 3212 | } 3213 | } 3214 | } 3215 | attr { 3216 | key: "variance" 3217 | value { 3218 | tensor { 3219 | dtype: DT_FLOAT 3220 | float_val: 0.1 3221 | float_val: 0.1 3222 | float_val: 0.2 3223 | float_val: 0.2 3224 | tensor_shape { 3225 | dim { 3226 | size: 4 3227 | } 3228 | } 3229 | } 3230 | } 3231 | } 3232 | attr { 3233 | key: "width" 3234 | value { 3235 | tensor { 3236 | dtype: DT_FLOAT 3237 | float_val: 105.0 3238 | float_val: 148.49242404917499 3239 | float_val: 74.24621202458749 3240 | float_val: 181.8653347947321 3241 | float_val: 60.618747100216446 3242 | float_val: 125.49900398011134 3243 | tensor_shape { 3244 | dim { 3245 | size: 6 3246 | } 3247 | } 3248 | } 3249 | } 3250 | } 3251 | } 3252 | node { 3253 | name: "PriorBox_2" 3254 | op: "PriorBox" 3255 | input: "BoxPredictor_2/BoxEncodingPredictor/BiasAdd" 3256 | input: "image_tensor" 3257 | attr { 3258 | key: "clip" 3259 | value { 3260 | b: false 3261 | } 3262 | } 3263 | attr { 3264 | key: "flip" 3265 | value { 3266 | b: false 3267 | } 3268 | } 3269 | attr { 3270 | key: "height" 3271 | value { 3272 | tensor { 3273 | dtype: DT_FLOAT 3274 | float_val: 150.0 3275 | float_val: 106.06601717798212 3276 | float_val: 212.13203435596424 3277 | float_val: 86.60254037844388 3278 | float_val: 259.8206124907481 3279 | float_val: 171.0263137648707 3280 | tensor_shape { 3281 | dim { 3282 | size: 6 3283 | } 3284 | } 3285 | } 3286 | } 3287 | } 3288 | attr { 3289 | key: "variance" 3290 | value { 3291 | tensor { 3292 | dtype: DT_FLOAT 3293 | float_val: 0.1 3294 | float_val: 0.1 3295 | float_val: 0.2 3296 | float_val: 0.2 3297 | tensor_shape { 3298 | dim { 3299 | size: 4 3300 | } 3301 | } 3302 | } 3303 | } 3304 | } 3305 | attr { 3306 | key: "width" 3307 | value { 3308 | tensor { 3309 | dtype: DT_FLOAT 3310 | float_val: 150.0 3311 | float_val: 212.13203435596427 3312 | float_val: 106.06601717798213 3313 | float_val: 259.8076211353316 3314 | float_val: 86.59821014316636 3315 | float_val: 171.0263137648707 3316 | tensor_shape { 3317 | dim { 3318 | size: 6 3319 | } 3320 | } 3321 | } 3322 | } 3323 | } 3324 | } 3325 | node { 3326 | name: "PriorBox_3" 3327 | op: "PriorBox" 3328 | input: "BoxPredictor_3/BoxEncodingPredictor/BiasAdd" 3329 | input: "image_tensor" 3330 | attr { 3331 | key: "clip" 3332 | value { 3333 | b: false 3334 | } 3335 | } 3336 | attr { 3337 | key: "flip" 3338 | value { 3339 | b: false 3340 | } 3341 | } 3342 | attr { 3343 | key: "height" 3344 | value { 3345 | tensor { 3346 | dtype: DT_FLOAT 3347 | float_val: 195.0 3348 | float_val: 137.88582233137677 3349 | float_val: 275.77164466275354 3350 | float_val: 112.58330249197702 3351 | float_val: 337.7667962379726 3352 | float_val: 216.33307652783938 3353 | tensor_shape { 3354 | dim { 3355 | size: 6 3356 | } 3357 | } 3358 | } 3359 | } 3360 | } 3361 | attr { 3362 | key: "variance" 3363 | value { 3364 | tensor { 3365 | dtype: DT_FLOAT 3366 | float_val: 0.1 3367 | float_val: 0.1 3368 | float_val: 0.2 3369 | float_val: 0.2 3370 | tensor_shape { 3371 | dim { 3372 | size: 4 3373 | } 3374 | } 3375 | } 3376 | } 3377 | } 3378 | attr { 3379 | key: "width" 3380 | value { 3381 | tensor { 3382 | dtype: DT_FLOAT 3383 | float_val: 195.0 3384 | float_val: 275.77164466275354 3385 | float_val: 137.88582233137677 3386 | float_val: 337.749907475931 3387 | float_val: 112.57767318611627 3388 | float_val: 216.33307652783938 3389 | tensor_shape { 3390 | dim { 3391 | size: 6 3392 | } 3393 | } 3394 | } 3395 | } 3396 | } 3397 | } 3398 | node { 3399 | name: "PriorBox_4" 3400 | op: "PriorBox" 3401 | input: "BoxPredictor_4/BoxEncodingPredictor/BiasAdd" 3402 | input: "image_tensor" 3403 | attr { 3404 | key: "clip" 3405 | value { 3406 | b: false 3407 | } 3408 | } 3409 | attr { 3410 | key: "flip" 3411 | value { 3412 | b: false 3413 | } 3414 | } 3415 | attr { 3416 | key: "height" 3417 | value { 3418 | tensor { 3419 | dtype: DT_FLOAT 3420 | float_val: 240.0 3421 | float_val: 169.7056274847714 3422 | float_val: 339.4112549695428 3423 | float_val: 138.5640646055102 3424 | float_val: 415.71297998519697 3425 | float_val: 261.5339366124404 3426 | tensor_shape { 3427 | dim { 3428 | size: 6 3429 | } 3430 | } 3431 | } 3432 | } 3433 | } 3434 | attr { 3435 | key: "variance" 3436 | value { 3437 | tensor { 3438 | dtype: DT_FLOAT 3439 | float_val: 0.1 3440 | float_val: 0.1 3441 | float_val: 0.2 3442 | float_val: 0.2 3443 | tensor_shape { 3444 | dim { 3445 | size: 4 3446 | } 3447 | } 3448 | } 3449 | } 3450 | } 3451 | attr { 3452 | key: "width" 3453 | value { 3454 | tensor { 3455 | dtype: DT_FLOAT 3456 | float_val: 240.0 3457 | float_val: 339.4112549695429 3458 | float_val: 169.70562748477144 3459 | float_val: 415.69219381653056 3460 | float_val: 138.55713622906617 3461 | float_val: 261.5339366124404 3462 | tensor_shape { 3463 | dim { 3464 | size: 6 3465 | } 3466 | } 3467 | } 3468 | } 3469 | } 3470 | } 3471 | node { 3472 | name: "PriorBox_5" 3473 | op: "PriorBox" 3474 | input: "BoxPredictor_5/BoxEncodingPredictor/BiasAdd" 3475 | input: "image_tensor" 3476 | attr { 3477 | key: "clip" 3478 | value { 3479 | b: false 3480 | } 3481 | } 3482 | attr { 3483 | key: "flip" 3484 | value { 3485 | b: false 3486 | } 3487 | } 3488 | attr { 3489 | key: "height" 3490 | value { 3491 | tensor { 3492 | dtype: DT_FLOAT 3493 | float_val: 285.0 3494 | float_val: 201.52543263816602 3495 | float_val: 403.05086527633205 3496 | float_val: 164.54482671904336 3497 | float_val: 493.6591637324214 3498 | float_val: 292.4038303442689 3499 | tensor_shape { 3500 | dim { 3501 | size: 6 3502 | } 3503 | } 3504 | } 3505 | } 3506 | } 3507 | attr { 3508 | key: "variance" 3509 | value { 3510 | tensor { 3511 | dtype: DT_FLOAT 3512 | float_val: 0.1 3513 | float_val: 0.1 3514 | float_val: 0.2 3515 | float_val: 0.2 3516 | tensor_shape { 3517 | dim { 3518 | size: 4 3519 | } 3520 | } 3521 | } 3522 | } 3523 | } 3524 | attr { 3525 | key: "width" 3526 | value { 3527 | tensor { 3528 | dtype: DT_FLOAT 3529 | float_val: 285.0 3530 | float_val: 403.0508652763321 3531 | float_val: 201.52543263816605 3532 | float_val: 493.63448015713 3533 | float_val: 164.53659927201608 3534 | float_val: 292.4038303442689 3535 | tensor_shape { 3536 | dim { 3537 | size: 6 3538 | } 3539 | } 3540 | } 3541 | } 3542 | } 3543 | } 3544 | node { 3545 | name: "PriorBox/concat" 3546 | op: "ConcatV2" 3547 | input: "PriorBox_0" 3548 | input: "PriorBox_1" 3549 | input: "PriorBox_2" 3550 | input: "PriorBox_3" 3551 | input: "PriorBox_4" 3552 | input: "PriorBox_5" 3553 | input: "concat/axis_flatten" 3554 | } 3555 | node { 3556 | name: "ClassPredictor/concat/sigmoid" 3557 | op: "Sigmoid" 3558 | input: "ClassPredictor/concat" 3559 | } 3560 | node { 3561 | name: "detection_out" 3562 | op: "DetectionOutput" 3563 | input: "BoxEncodingPredictor/concat" 3564 | input: "ClassPredictor/concat/sigmoid" 3565 | input: "PriorBox/concat" 3566 | attr { 3567 | key: "background_label_id" 3568 | value { 3569 | i: 0 3570 | } 3571 | } 3572 | attr { 3573 | key: "code_type" 3574 | value { 3575 | s: "CENTER_SIZE" 3576 | } 3577 | } 3578 | attr { 3579 | key: "confidence_threshold" 3580 | value { 3581 | f: 0.01 3582 | } 3583 | } 3584 | attr { 3585 | key: "keep_top_k" 3586 | value { 3587 | i: 100 3588 | } 3589 | } 3590 | attr { 3591 | key: "nms_threshold" 3592 | value { 3593 | f: 0.6 3594 | } 3595 | } 3596 | attr { 3597 | key: "num_classes" 3598 | value { 3599 | i: 2 3600 | } 3601 | } 3602 | attr { 3603 | key: "share_location" 3604 | value { 3605 | b: true 3606 | } 3607 | } 3608 | attr { 3609 | key: "top_k" 3610 | value { 3611 | i: 100 3612 | } 3613 | } 3614 | } 3615 | -------------------------------------------------------------------------------- /StreamingAssets/palm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 20 20 7 | 8 | <_> 9 | 10 | 11 | <_> 12 | 13 | <_> 14 | 15 | 16 | 17 | <_> 18 | 14 0 6 16 -1. 19 | <_> 20 | 17 0 3 16 2. 21 | 0 22 | 3.8681671023368835e-002 23 | -9.8028910160064697e-001 24 | 1 25 | <_> 26 | 27 | 28 | 29 | <_> 30 | 6 4 7 8 -1. 31 | <_> 32 | 6 8 7 4 2. 33 | 0 34 | -2.6647120714187622e-002 35 | -1. 36 | 9.4076812267303467e-001 37 | <_> 38 | 39 | <_> 40 | 41 | 42 | 43 | <_> 44 | 12 0 8 17 -1. 45 | <_> 46 | 16 0 4 17 2. 47 | 0 48 | 6.1131078749895096e-002 49 | -9.0244722366333008e-001 50 | 1 51 | <_> 52 | 53 | 54 | 55 | <_> 56 | 7 6 9 5 -1. 57 | <_> 58 | 10 9 3 5 3. 59 | 1 60 | -3.3309649676084518e-002 61 | -5.8893251419067383e-001 62 | 9.1832017898559570e-001 63 | <_> 64 | 65 | <_> 66 | 67 | 68 | 69 | <_> 70 | 1 0 18 4 -1. 71 | <_> 72 | 7 0 6 4 3. 73 | 0 74 | -5.0153050571680069e-002 75 | 7.9939717054367065e-001 76 | 1 77 | <_> 78 | 79 | 80 | 81 | <_> 82 | 6 6 6 3 -1. 83 | <_> 84 | 8 6 2 3 3. 85 | 0 86 | -1.8358040601015091e-002 87 | 8.4302067756652832e-001 88 | -9.3710541725158691e-001 89 | <_> 90 | 91 | <_> 92 | 93 | 94 | 95 | <_> 96 | 0 3 6 8 -1. 97 | <_> 98 | 3 3 3 8 2. 99 | 0 100 | -3.6677200347185135e-002 101 | 8.2961827516555786e-001 102 | 1 103 | <_> 104 | 105 | 106 | 107 | <_> 108 | 11 3 6 14 -1. 109 | <_> 110 | 11 3 3 7 2. 111 | <_> 112 | 14 10 3 7 2. 113 | 0 114 | -4.3658491224050522e-002 115 | 8.0457127094268799e-001 116 | -8.9302337169647217e-001 117 | <_> 118 | 119 | <_> 120 | 121 | 122 | 123 | <_> 124 | 16 3 4 16 -1. 125 | <_> 126 | 18 3 2 16 2. 127 | 0 128 | 2.5138080120086670e-002 129 | 1 130 | 7.4585878849029541e-001 131 | <_> 132 | 133 | 134 | 135 | <_> 136 | 0 1 9 6 -1. 137 | <_> 138 | 3 3 3 2 9. 139 | 0 140 | -6.6900141537189484e-002 141 | 8.4059208631515503e-001 142 | -8.8331997394561768e-001 143 | <_> 144 | 145 | <_> 146 | 147 | 148 | 149 | <_> 150 | 10 9 3 3 -1. 151 | <_> 152 | 11 9 1 3 3. 153 | 0 154 | 1.7255060374736786e-003 155 | 1 156 | 7.7119922637939453e-001 157 | <_> 158 | 159 | 160 | 161 | <_> 162 | 12 1 4 4 -1. 163 | <_> 164 | 14 1 2 4 2. 165 | 0 166 | 8.4419725462794304e-003 167 | -8.4468692541122437e-001 168 | 7.2725939750671387e-001 169 | <_> 170 | 171 | <_> 172 | 173 | 174 | 175 | <_> 176 | 13 7 6 6 -1. 177 | <_> 178 | 16 7 3 6 2. 179 | 0 180 | 3.2117430120706558e-002 181 | 1 182 | 6.4971947669982910e-001 183 | <_> 184 | 185 | 186 | 187 | <_> 188 | 13 5 4 14 -1. 189 | <_> 190 | 13 5 2 7 2. 191 | <_> 192 | 15 12 2 7 2. 193 | 0 194 | 2.6627309620380402e-002 195 | -8.6625558137893677e-001 196 | 8.9164018630981445e-001 197 | 4.6676799654960632e-001 198 | -1 199 | -1 200 | <_> 201 | 202 | 203 | <_> 204 | 205 | <_> 206 | 207 | 208 | 209 | <_> 210 | 1 2 4 11 -1. 211 | <_> 212 | 3 2 2 11 2. 213 | 0 214 | -2.6734400540590286e-002 215 | 1 216 | -6.5627342462539673e-001 217 | <_> 218 | 219 | 220 | 221 | <_> 222 | 14 0 6 19 -1. 223 | <_> 224 | 17 0 3 19 2. 225 | 0 226 | 7.8886173665523529e-002 227 | -6.7220860719680786e-001 228 | 8.6547261476516724e-001 229 | <_> 230 | 231 | <_> 232 | 233 | 234 | 235 | <_> 236 | 0 3 2 12 -1. 237 | <_> 238 | 1 3 1 12 2. 239 | 0 240 | -2.2544919047504663e-003 241 | 1 242 | -5.3239947557449341e-001 243 | <_> 244 | 245 | 246 | 247 | <_> 248 | 2 9 10 10 -1. 249 | <_> 250 | 7 9 5 10 2. 251 | 0 252 | -4.5755971223115921e-002 253 | -9.6904259920120239e-001 254 | 7.0433187484741211e-001 255 | <_> 256 | 257 | <_> 258 | 259 | 260 | 261 | <_> 262 | 7 6 3 5 -1. 263 | <_> 264 | 8 6 1 5 3. 265 | 0 266 | 5.2909408695995808e-003 267 | 1 268 | 6.8145847320556641e-001 269 | <_> 270 | 271 | 272 | 273 | <_> 274 | 7 0 4 12 -1. 275 | <_> 276 | 8 0 2 12 2. 277 | 0 278 | -1.3724939897656441e-002 279 | 6.2345337867736816e-001 280 | -6.6262710094451904e-001 281 | <_> 282 | 283 | <_> 284 | 285 | 286 | 287 | <_> 288 | 12 4 8 10 -1. 289 | <_> 290 | 16 4 4 10 2. 291 | 0 292 | 1.1801239848136902e-001 293 | 1 294 | 5.4585951566696167e-001 295 | <_> 296 | 297 | 298 | 299 | <_> 300 | 10 6 4 12 -1. 301 | <_> 302 | 10 6 2 6 2. 303 | <_> 304 | 12 12 2 6 2. 305 | 0 306 | -3.9759848266839981e-002 307 | 7.7439647912979126e-001 308 | -6.9461721181869507e-001 309 | <_> 310 | 311 | <_> 312 | 313 | 314 | 315 | <_> 316 | 5 6 5 14 -1. 317 | <_> 318 | 5 13 5 7 2. 319 | 0 320 | 1.7409030115231872e-003 321 | -8.0978208780288696e-001 322 | 1 323 | <_> 324 | 325 | 326 | 327 | <_> 328 | 6 6 12 14 -1. 329 | <_> 330 | 6 13 12 7 2. 331 | 0 332 | 1.6339950263500214e-001 333 | 4.9990290403366089e-001 334 | -9.4595247507095337e-001 335 | <_> 336 | 337 | <_> 338 | 339 | 340 | 341 | <_> 342 | 6 0 4 1 -1. 343 | <_> 344 | 6 0 2 1 2. 345 | 1 346 | 7.5461310334503651e-003 347 | 1 348 | 6.3170629739761353e-001 349 | <_> 350 | 351 | 352 | 353 | <_> 354 | 5 3 4 10 -1. 355 | <_> 356 | 5 3 2 5 2. 357 | <_> 358 | 7 8 2 5 2. 359 | 0 360 | -2.2127110511064529e-002 361 | 6.1635309457778931e-001 362 | -6.7650932073593140e-001 363 | <_> 364 | 365 | <_> 366 | 367 | 368 | 369 | <_> 370 | 10 8 4 4 -1. 371 | <_> 372 | 11 8 2 4 2. 373 | 0 374 | 7.2129550389945507e-003 375 | 1 376 | 6.0694038867950439e-001 377 | <_> 378 | 379 | 380 | 381 | <_> 382 | 9 7 3 4 -1. 383 | <_> 384 | 10 7 1 4 3. 385 | 0 386 | 5.9658549726009369e-003 387 | -7.1250128746032715e-001 388 | 5.0982707738876343e-001 389 | <_> 390 | 391 | <_> 392 | 393 | 394 | 395 | <_> 396 | 13 1 4 10 -1. 397 | <_> 398 | 13 1 2 10 2. 399 | 1 400 | -1.3171000173315406e-003 401 | 1 402 | -7.0088720321655273e-001 403 | <_> 404 | 405 | 406 | 407 | <_> 408 | 12 7 2 10 -1. 409 | <_> 410 | 12 7 2 5 2. 411 | 1 412 | 1.0129069909453392e-002 413 | 6.0936927795410156e-001 414 | -9.5784842967987061e-001 415 | <_> 416 | 417 | <_> 418 | 419 | 420 | 421 | <_> 422 | 1 6 2 11 -1. 423 | <_> 424 | 2 6 1 11 2. 425 | 0 426 | -2.3017649073153734e-003 427 | 4.1956830024719238e-001 428 | 1 429 | <_> 430 | 431 | 432 | 433 | <_> 434 | 2 5 3 6 -1. 435 | <_> 436 | 3 5 1 6 3. 437 | 0 438 | 4.4859871268272400e-003 439 | -8.9829748868942261e-001 440 | 5.8359438180923462e-001 441 | <_> 442 | 443 | <_> 444 | 445 | 446 | 447 | <_> 448 | 18 4 2 1 -1. 449 | <_> 450 | 19 4 1 1 2. 451 | 0 452 | 9.6589370514266193e-005 453 | 1 454 | 3.0583730340003967e-001 455 | <_> 456 | 457 | 458 | 459 | <_> 460 | 16 12 4 2 -1. 461 | <_> 462 | 17 12 2 2 2. 463 | 0 464 | -7.5696231797337532e-003 465 | 8.4811502695083618e-001 466 | -8.0426692962646484e-001 467 | <_> 468 | 469 | <_> 470 | 471 | 472 | 473 | <_> 474 | 8 5 3 4 -1. 475 | <_> 476 | 9 5 1 4 3. 477 | 0 478 | 5.9972028248012066e-003 479 | 1 480 | 6.7728942632675171e-001 481 | <_> 482 | 483 | 484 | 485 | <_> 486 | 6 1 3 15 -1. 487 | <_> 488 | 7 6 1 5 9. 489 | 0 490 | 2.7960389852523804e-002 491 | -6.5531158447265625e-001 492 | 5.2915072441101074e-001 493 | <_> 494 | 495 | <_> 496 | 497 | 498 | 499 | <_> 500 | 12 0 8 19 -1. 501 | <_> 502 | 16 0 4 19 2. 503 | 0 504 | 1.0068819671869278e-001 505 | -9.0510547161102295e-001 506 | 1 507 | <_> 508 | 509 | 510 | 511 | <_> 512 | 0 0 9 18 -1. 513 | <_> 514 | 0 6 9 6 3. 515 | 0 516 | -1.3593779876828194e-002 517 | 4.7082710266113281e-001 518 | -8.6754322052001953e-001 519 | <_> 520 | 521 | <_> 522 | 523 | 524 | 525 | <_> 526 | 7 2 5 16 -1. 527 | <_> 528 | 7 10 5 8 2. 529 | 0 530 | 4.1386592201888561e-003 531 | 1 532 | 3.7525629997253418e-001 533 | <_> 534 | 535 | 536 | 537 | <_> 538 | 6 1 8 4 -1. 539 | <_> 540 | 6 1 4 2 2. 541 | <_> 542 | 10 3 4 2 2. 543 | 0 544 | 4.4159390963613987e-003 545 | -8.9145201444625854e-001 546 | 3.3699101209640503e-001 547 | <_> 548 | 549 | <_> 550 | 551 | 552 | 553 | <_> 554 | 15 3 3 4 -1. 555 | <_> 556 | 16 3 1 4 3. 557 | 0 558 | 1.1704630014719442e-004 559 | 1 560 | 3.1077799201011658e-001 561 | <_> 562 | 563 | 564 | 565 | <_> 566 | 13 5 3 4 -1. 567 | <_> 568 | 14 5 1 4 3. 569 | 0 570 | 5.5624791420996189e-003 571 | -8.1615281105041504e-001 572 | 5.3901451826095581e-001 573 | <_> 574 | 575 | <_> 576 | 577 | 578 | 579 | <_> 580 | 14 9 6 5 -1. 581 | <_> 582 | 17 9 3 5 2. 583 | 0 584 | 3.4512840211391449e-002 585 | 1 586 | 2.6539298892021179e-001 587 | <_> 588 | 589 | 590 | 591 | <_> 592 | 8 5 4 3 -1. 593 | <_> 594 | 9 5 2 3 2. 595 | 0 596 | 9.8612513393163681e-003 597 | -7.9879987239837646e-001 598 | 7.1010297536849976e-001 599 | <_> 600 | 601 | <_> 602 | 603 | 604 | 605 | <_> 606 | 7 2 6 3 -1. 607 | <_> 608 | 9 2 2 3 3. 609 | 0 610 | -1.7420940101146698e-002 611 | 7.8878182172775269e-001 612 | 1 613 | <_> 614 | 615 | 616 | 617 | <_> 618 | 8 1 4 6 -1. 619 | <_> 620 | 9 1 2 6 2. 621 | 0 622 | 9.4648143276572227e-003 623 | -8.6975818872451782e-001 624 | 6.4330947399139404e-001 625 | <_> 626 | 627 | <_> 628 | 629 | 630 | 631 | <_> 632 | 4 3 16 9 -1. 633 | <_> 634 | 12 3 8 9 2. 635 | 0 636 | 1.5069990418851376e-002 637 | 1 638 | 3.4470221400260925e-001 639 | <_> 640 | 641 | 642 | 643 | <_> 644 | 6 3 4 8 -1. 645 | <_> 646 | 6 3 2 4 2. 647 | <_> 648 | 8 7 2 4 2. 649 | 0 650 | 2.7276139706373215e-002 651 | -8.8079357147216797e-001 652 | 7.6766937971115112e-001 653 | <_> 654 | 655 | <_> 656 | 657 | 658 | 659 | <_> 660 | 1 1 4 19 -1. 661 | <_> 662 | 3 1 2 19 2. 663 | 0 664 | -1.2894829735159874e-002 665 | 3.7631559371948242e-001 666 | 1 667 | <_> 668 | 669 | 670 | 671 | <_> 672 | 1 11 4 2 -1. 673 | <_> 674 | 2 11 2 2 2. 675 | 0 676 | -5.7455319911241531e-003 677 | 8.3922427892684937e-001 678 | -9.8424279689788818e-001 679 | 1.5381850004196167e+000 680 | 0 681 | -1 682 | <_> 683 | 684 | 685 | <_> 686 | 687 | <_> 688 | 689 | 690 | 691 | <_> 692 | 0 0 11 15 -1. 693 | <_> 694 | 0 5 11 5 3. 695 | 0 696 | -2.5208670645952225e-002 697 | 1 698 | -7.3783451318740845e-001 699 | <_> 700 | 701 | 702 | 703 | <_> 704 | 0 1 1 18 -1. 705 | <_> 706 | 0 10 1 9 2. 707 | 0 708 | -3.5002389922738075e-003 709 | 6.0456407070159912e-001 710 | -5.2267402410507202e-001 711 | <_> 712 | 713 | <_> 714 | 715 | 716 | 717 | <_> 718 | 4 5 8 15 -1. 719 | <_> 720 | 8 5 4 15 2. 721 | 0 722 | 3.2608121633529663e-002 723 | 1 724 | -8.9341151714324951e-001 725 | <_> 726 | 727 | 728 | 729 | <_> 730 | 2 9 10 11 -1. 731 | <_> 732 | 7 9 5 11 2. 733 | 0 734 | -5.2253220230340958e-002 735 | -9.2110282182693481e-001 736 | 5.5714380741119385e-001 737 | <_> 738 | 739 | <_> 740 | 741 | 742 | 743 | <_> 744 | 7 17 3 2 -1. 745 | <_> 746 | 8 17 1 2 3. 747 | 0 748 | 2.2503470536321402e-003 749 | 1 750 | -8.8232368230819702e-001 751 | <_> 752 | 753 | 754 | 755 | <_> 756 | 4 16 10 3 -1. 757 | <_> 758 | 9 16 5 3 2. 759 | 0 760 | 1.1138039641082287e-002 761 | 4.5365229249000549e-001 762 | -8.7354677915573120e-001 763 | <_> 764 | 765 | <_> 766 | 767 | 768 | 769 | <_> 770 | 5 16 6 2 -1. 771 | <_> 772 | 8 16 3 2 2. 773 | 0 774 | -5.7771787978708744e-003 775 | -8.0953860282897949e-001 776 | 1 777 | <_> 778 | 779 | 780 | 781 | <_> 782 | 2 16 9 3 -1. 783 | <_> 784 | 5 17 3 1 9. 785 | 0 786 | -1.3786350376904011e-002 787 | -6.6583162546157837e-001 788 | 4.9925059080123901e-001 789 | <_> 790 | 791 | <_> 792 | 793 | 794 | 795 | <_> 796 | 19 0 1 4 -1. 797 | <_> 798 | 19 2 1 2 2. 799 | 0 800 | 8.4821821656078100e-004 801 | 1 802 | -7.2904092073440552e-001 803 | <_> 804 | 805 | 806 | 807 | <_> 808 | 6 4 8 13 -1. 809 | <_> 810 | 10 4 4 13 2. 811 | 0 812 | -6.0129031538963318e-002 813 | -9.4193089008331299e-001 814 | 4.8614209890365601e-001 815 | <_> 816 | 817 | <_> 818 | 819 | 820 | 821 | <_> 822 | 11 4 4 4 -1. 823 | <_> 824 | 12 4 2 4 2. 825 | 0 826 | 6.3089472241699696e-003 827 | 1 828 | 5.6043982505798340e-001 829 | <_> 830 | 831 | 832 | 833 | <_> 834 | 5 6 3 3 -1. 835 | <_> 836 | 6 6 1 3 3. 837 | 0 838 | 4.8291720449924469e-003 839 | -6.1950987577438354e-001 840 | 3.2476270198822021e-001 841 | <_> 842 | 843 | <_> 844 | 845 | 846 | 847 | <_> 848 | 9 2 7 9 -1. 849 | <_> 850 | 6 5 7 3 3. 851 | 1 852 | -7.1375720202922821e-002 853 | -9.0404188632965088e-001 854 | 1 855 | <_> 856 | 857 | 858 | 859 | <_> 860 | 3 19 6 1 -1. 861 | <_> 862 | 6 19 3 1 2. 863 | 0 864 | 3.4400189761072397e-003 865 | 3.8457119464874268e-001 866 | -8.8946622610092163e-001 867 | <_> 868 | 869 | <_> 870 | 871 | 872 | 873 | <_> 874 | 3 19 9 1 -1. 875 | <_> 876 | 6 19 3 1 3. 877 | 0 878 | -4.9882400780916214e-003 879 | -8.6565148830413818e-001 880 | 1 881 | <_> 882 | 883 | 884 | 885 | <_> 886 | 5 11 5 4 -1. 887 | <_> 888 | 5 11 5 2 2. 889 | 1 890 | 1.0913630016148090e-002 891 | 4.5251420140266418e-001 892 | -6.9369602203369141e-001 893 | <_> 894 | 895 | <_> 896 | 897 | 898 | 899 | <_> 900 | 7 5 3 2 -1. 901 | <_> 902 | 8 5 1 2 3. 903 | 0 904 | 2.4461629800498486e-003 905 | 1 906 | 5.2243071794509888e-001 907 | <_> 908 | 909 | 910 | 911 | <_> 912 | 14 0 1 12 -1. 913 | <_> 914 | 14 6 1 6 2. 915 | 0 916 | -3.0945599079132080e-002 917 | 8.5188317298889160e-001 918 | -5.3872317075729370e-001 919 | <_> 920 | 921 | <_> 922 | 923 | 924 | 925 | <_> 926 | 2 13 8 4 -1. 927 | <_> 928 | 6 13 4 4 2. 929 | 0 930 | -1.4446619898080826e-002 931 | -8.6957198381423950e-001 932 | 1 933 | <_> 934 | 935 | 936 | 937 | <_> 938 | 3 13 8 5 -1. 939 | <_> 940 | 7 13 4 5 2. 941 | 0 942 | 1.5233219601213932e-002 943 | 4.5263200998306274e-001 944 | -8.1135600805282593e-001 945 | <_> 946 | 947 | <_> 948 | 949 | 950 | 951 | <_> 952 | 4 19 12 1 -1. 953 | <_> 954 | 8 19 4 1 3. 955 | 0 956 | -2.5891559198498726e-003 957 | -5.7905787229537964e-001 958 | 1 959 | <_> 960 | 961 | 962 | 963 | <_> 964 | 7 19 2 1 -1. 965 | <_> 966 | 8 19 1 1 2. 967 | 0 968 | 1.0837919544428587e-003 969 | 5.3870928287506104e-001 970 | -9.7009569406509399e-001 971 | <_> 972 | 973 | <_> 974 | 975 | 976 | 977 | <_> 978 | 4 5 8 6 -1. 979 | <_> 980 | 8 5 4 6 2. 981 | 0 982 | 1.7036350443959236e-002 983 | 1 984 | -8.4595912694931030e-001 985 | <_> 986 | 987 | 988 | 989 | <_> 990 | 6 4 10 5 -1. 991 | <_> 992 | 11 4 5 5 2. 993 | 0 994 | -2.2440670058131218e-002 995 | -9.3406337499618530e-001 996 | 4.2693048715591431e-001 997 | -1.3793849945068359e-001 998 | 1 999 | -1 1000 | <_> 1001 | 1002 | 1003 | <_> 1004 | 1005 | <_> 1006 | 1007 | 1008 | 1009 | <_> 1010 | 4 4 12 16 -1. 1011 | <_> 1012 | 8 4 4 16 3. 1013 | 0 1014 | -6.7628182470798492e-002 1015 | -7.4111908674240112e-001 1016 | 1 1017 | <_> 1018 | 1019 | 1020 | 1021 | <_> 1022 | 7 17 3 3 -1. 1023 | <_> 1024 | 8 18 1 1 9. 1025 | 0 1026 | -6.5513071604073048e-003 1027 | -8.7756520509719849e-001 1028 | 5.7063782215118408e-001 1029 | <_> 1030 | 1031 | <_> 1032 | 1033 | 1034 | 1035 | <_> 1036 | 4 5 4 4 -1. 1037 | <_> 1038 | 5 5 2 4 2. 1039 | 0 1040 | -1.0421309620141983e-002 1041 | 7.8666269779205322e-001 1042 | 1 1043 | <_> 1044 | 1045 | 1046 | 1047 | <_> 1048 | 8 2 3 15 -1. 1049 | <_> 1050 | 9 7 1 5 9. 1051 | 0 1052 | 3.5120330750942230e-002 1053 | -5.1232081651687622e-001 1054 | 5.7854127883911133e-001 1055 | <_> 1056 | 1057 | <_> 1058 | 1059 | 1060 | 1061 | <_> 1062 | 3 19 6 1 -1. 1063 | <_> 1064 | 6 19 3 1 2. 1065 | 0 1066 | 2.3085731081664562e-003 1067 | 1 1068 | -7.6840782165527344e-001 1069 | <_> 1070 | 1071 | 1072 | 1073 | <_> 1074 | 10 5 6 6 -1. 1075 | <_> 1076 | 10 5 3 6 2. 1077 | 1 1078 | -3.6485549062490463e-002 1079 | -5.9415107965469360e-001 1080 | 4.8120400309562683e-001 1081 | <_> 1082 | 1083 | <_> 1084 | 1085 | 1086 | 1087 | <_> 1088 | 10 7 4 4 -1. 1089 | <_> 1090 | 11 7 2 4 2. 1091 | 0 1092 | 3.8993770722299814e-003 1093 | 1 1094 | 4.4938841462135315e-001 1095 | <_> 1096 | 1097 | 1098 | 1099 | <_> 1100 | 12 12 4 6 -1. 1101 | <_> 1102 | 14 12 2 6 2. 1103 | 0 1104 | -1.7095550894737244e-002 1105 | 5.8982378244400024e-001 1106 | -6.3544249534606934e-001 1107 | <_> 1108 | 1109 | <_> 1110 | 1111 | 1112 | 1113 | <_> 1114 | 8 16 2 2 -1. 1115 | <_> 1116 | 8 16 2 1 2. 1117 | 1 1118 | -2.6509580202400684e-003 1119 | -7.4674302339553833e-001 1120 | 1 1121 | <_> 1122 | 1123 | 1124 | 1125 | <_> 1126 | 16 0 4 1 -1. 1127 | <_> 1128 | 18 0 2 1 2. 1129 | 0 1130 | -1.0701370192691684e-003 1131 | -7.6775008440017700e-001 1132 | 4.3917599320411682e-001 1133 | <_> 1134 | 1135 | <_> 1136 | 1137 | 1138 | 1139 | <_> 1140 | 9 8 4 2 -1. 1141 | <_> 1142 | 10 8 2 2 2. 1143 | 0 1144 | 4.8490660265088081e-003 1145 | 1 1146 | 6.1948227882385254e-001 1147 | <_> 1148 | 1149 | 1150 | 1151 | <_> 1152 | 3 8 6 3 -1. 1153 | <_> 1154 | 5 8 2 3 3. 1155 | 0 1156 | -2.1174849942326546e-002 1157 | 6.9238477945327759e-001 1158 | -5.7607620954513550e-001 1159 | <_> 1160 | 1161 | <_> 1162 | 1163 | 1164 | 1165 | <_> 1166 | 12 2 6 18 -1. 1167 | <_> 1168 | 12 2 3 9 2. 1169 | <_> 1170 | 15 11 3 9 2. 1171 | 0 1172 | -9.1728113591670990e-002 1173 | 7.8373330831527710e-001 1174 | 1 1175 | <_> 1176 | 1177 | 1178 | 1179 | <_> 1180 | 8 4 12 14 -1. 1181 | <_> 1182 | 8 4 6 7 2. 1183 | <_> 1184 | 14 11 6 7 2. 1185 | 0 1186 | 6.3391521573066711e-002 1187 | -4.9195569753646851e-001 1188 | 6.5842992067337036e-001 1189 | <_> 1190 | 1191 | <_> 1192 | 1193 | 1194 | 1195 | <_> 1196 | 0 0 11 12 -1. 1197 | <_> 1198 | 0 4 11 4 3. 1199 | 0 1200 | -2.4108730256557465e-002 1201 | 1 1202 | -6.2276291847229004e-001 1203 | <_> 1204 | 1205 | 1206 | 1207 | <_> 1208 | 0 5 14 10 -1. 1209 | <_> 1210 | 0 10 14 5 2. 1211 | 0 1212 | 5.2185848355293274e-002 1213 | 5.4080730676651001e-001 1214 | -6.3984328508377075e-001 1215 | <_> 1216 | 1217 | <_> 1218 | 1219 | 1220 | 1221 | <_> 1222 | 8 5 3 2 -1. 1223 | <_> 1224 | 9 5 1 2 3. 1225 | 0 1226 | 3.9632301777601242e-003 1227 | 1 1228 | 6.6911828517913818e-001 1229 | <_> 1230 | 1231 | 1232 | 1233 | <_> 1234 | 7 4 3 3 -1. 1235 | <_> 1236 | 8 5 1 1 9. 1237 | 0 1238 | 3.7253440823405981e-003 1239 | -6.4084410667419434e-001 1240 | 4.2938518524169922e-001 1241 | <_> 1242 | 1243 | <_> 1244 | 1245 | 1246 | 1247 | <_> 1248 | 19 0 1 4 -1. 1249 | <_> 1250 | 19 1 1 2 2. 1251 | 0 1252 | 4.5805040281265974e-004 1253 | 1 1254 | -7.0981818437576294e-001 1255 | <_> 1256 | 1257 | 1258 | 1259 | <_> 1260 | 19 0 1 4 -1. 1261 | <_> 1262 | 19 1 1 2 2. 1263 | 0 1264 | -4.3362649739719927e-004 1265 | -4.2568281292915344e-001 1266 | 6.4837968349456787e-001 1267 | <_> 1268 | 1269 | <_> 1270 | 1271 | 1272 | 1273 | <_> 1274 | 3 5 2 7 -1. 1275 | <_> 1276 | 4 5 1 7 2. 1277 | 0 1278 | -8.8344682008028030e-003 1279 | 5.6010240316390991e-001 1280 | 1 1281 | <_> 1282 | 1283 | 1284 | 1285 | <_> 1286 | 7 0 6 7 -1. 1287 | <_> 1288 | 7 0 3 7 2. 1289 | 1 1290 | 1.0024249553680420e-002 1291 | 4.0823331475257874e-001 1292 | -6.0941112041473389e-001 1293 | <_> 1294 | 1295 | <_> 1296 | 1297 | 1298 | 1299 | <_> 1300 | 0 18 4 2 -1. 1301 | <_> 1302 | 2 18 2 2 2. 1303 | 0 1304 | -2.7991709066554904e-004 1305 | -4.4562909007072449e-001 1306 | 1 1307 | <_> 1308 | 1309 | 1310 | 1311 | <_> 1312 | 8 8 12 8 -1. 1313 | <_> 1314 | 12 8 4 8 3. 1315 | 0 1316 | -4.0251381695270538e-002 1317 | 6.8400329351425171e-001 1318 | -5.5093038082122803e-001 1319 | <_> 1320 | 1321 | <_> 1322 | 1323 | 1324 | 1325 | <_> 1326 | 0 14 1 3 -1. 1327 | <_> 1328 | 0 15 1 1 3. 1329 | 0 1330 | 1.1060229735448956e-003 1331 | 1 1332 | -8.7556070089340210e-001 1333 | <_> 1334 | 1335 | 1336 | 1337 | <_> 1338 | 5 18 6 1 -1. 1339 | <_> 1340 | 8 18 3 1 2. 1341 | 0 1342 | -2.9391210991889238e-003 1343 | -6.4071631431579590e-001 1344 | 4.2237558960914612e-001 1345 | <_> 1346 | 1347 | <_> 1348 | 1349 | 1350 | 1351 | <_> 1352 | 14 11 2 2 -1. 1353 | <_> 1354 | 14 11 1 2 2. 1355 | 1 1356 | 5.3266989998519421e-003 1357 | 1 1358 | 6.7434668540954590e-001 1359 | <_> 1360 | 1361 | 1362 | 1363 | <_> 1364 | 13 11 3 4 -1. 1365 | <_> 1366 | 14 11 1 4 3. 1367 | 0 1368 | 1.9711100321728736e-004 1369 | -7.0805662870407104e-001 1370 | 2.7415850758552551e-001 1371 | -1.4657120406627655e-001 1372 | 2 1373 | -1 1374 | <_> 1375 | 1376 | 1377 | <_> 1378 | 1379 | <_> 1380 | 1381 | 1382 | 1383 | <_> 1384 | 10 4 7 10 -1. 1385 | <_> 1386 | 10 9 7 5 2. 1387 | 0 1388 | 6.1874971725046635e-003 1389 | 1 1390 | 1.0000289678573608e+000 1391 | <_> 1392 | 1393 | 1394 | 1395 | <_> 1396 | 8 5 12 12 -1. 1397 | <_> 1398 | 8 5 6 6 2. 1399 | <_> 1400 | 14 11 6 6 2. 1401 | 0 1402 | -1.6684630513191223e-001 1403 | 1. 1404 | -6.4018201828002930e-001 1405 | <_> 1406 | 1407 | <_> 1408 | 1409 | 1410 | 1411 | <_> 1412 | 10 3 4 12 -1. 1413 | <_> 1414 | 10 9 4 6 2. 1415 | 0 1416 | -4.3528191745281219e-003 1417 | -4.7489950060844421e-001 1418 | 1 1419 | <_> 1420 | 1421 | 1422 | 1423 | <_> 1424 | 11 17 1 2 -1. 1425 | <_> 1426 | 11 17 1 1 2. 1427 | 1 1428 | 2.4391049519181252e-003 1429 | 9.2672532796859741e-001 1430 | -9.3789821863174438e-001 1431 | <_> 1432 | 1433 | <_> 1434 | 1435 | 1436 | 1437 | <_> 1438 | 3 5 2 3 -1. 1439 | <_> 1440 | 2 6 2 1 3. 1441 | 1 1442 | -6.1387829482555389e-003 1443 | -7.3620361089706421e-001 1444 | 1 1445 | <_> 1446 | 1447 | 1448 | 1449 | <_> 1450 | 14 3 2 3 -1. 1451 | <_> 1452 | 14 4 2 1 3. 1453 | 0 1454 | 2.7482500299811363e-003 1455 | 8.0812031030654907e-001 1456 | -7.5801301002502441e-001 1457 | <_> 1458 | 1459 | <_> 1460 | 1461 | 1462 | 1463 | <_> 1464 | 2 6 3 3 -1. 1465 | <_> 1466 | 2 7 3 1 3. 1467 | 0 1468 | -6.8063312210142612e-004 1469 | -4.8606950044631958e-001 1470 | 1 1471 | <_> 1472 | 1473 | 1474 | 1475 | <_> 1476 | 7 18 3 2 -1. 1477 | <_> 1478 | 8 18 1 2 3. 1479 | 0 1480 | -3.4882400650531054e-003 1481 | -9.6335417032241821e-001 1482 | 9.3141609430313110e-001 1483 | <_> 1484 | 1485 | <_> 1486 | 1487 | 1488 | 1489 | <_> 1490 | 6 9 3 1 -1. 1491 | <_> 1492 | 7 10 1 1 3. 1493 | 1 1494 | 3.7412709207274020e-004 1495 | 1 1496 | 7.7949160337448120e-001 1497 | <_> 1498 | 1499 | 1500 | 1501 | <_> 1502 | 1 12 6 2 -1. 1503 | <_> 1504 | 3 12 2 2 3. 1505 | 0 1506 | -2.1708080021198839e-004 1507 | -7.3272567987442017e-001 1508 | 7.3104548454284668e-001 1509 | -6.0141628980636597e-001 1510 | 3 1511 | -1 1512 | 1513 | -------------------------------------------------------------------------------- /WebCamOperation.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using UnityEngine; 4 | using UnityEngine.UI; 5 | using System.Collections.Generic; 6 | 7 | 8 | /// 9 | /// WebCamTexture Example 10 | /// An example of detecting face landmarks in WebCamTexture images. 11 | /// 12 | public class WebCamOperation : MonoBehaviour 13 | { 14 | //public RawImage rawImage; 15 | 16 | [SerializeField, TooltipAttribute("Hide the image or not")] 17 | public bool isHideCameraImage = true; 18 | 19 | /// 20 | /// Set the name of the device to use. 21 | /// 22 | //[SerializeField, TooltipAttribute("Set the name of the device to use.")] 23 | private string requestedDeviceName = null; 24 | 25 | /// 26 | /// Set the width of WebCamTexture. 27 | /// 28 | [SerializeField, TooltipAttribute("Set the width of WebCamTexture.")] 29 | public int requestedWidth = 1280; 30 | 31 | /// 32 | /// Set the height of WebCamTexture. 33 | /// 34 | [SerializeField, TooltipAttribute("Set the height of WebCamTexture.")] 35 | public int requestedHeight = 760; 36 | 37 | /// 38 | /// Set FPS of WebCamTexture. 39 | /// 40 | [SerializeField, TooltipAttribute("Set FPS of WebCamTexture.")] 41 | public int requestedFPS = 30; 42 | 43 | /// 44 | /// Set whether to use the front facing camera. 45 | /// 46 | private bool requestedIsFrontFacing = true; 47 | 48 | ///// 49 | ///// Determines if adjust pixels direction. 50 | ///// 51 | //[SerializeField, TooltipAttribute("Determines if adjust pixels direction.")] 52 | private bool adjustPixelsDirection = true; 53 | 54 | /// 55 | /// The webcam texture. 56 | /// 57 | WebCamTexture webCamTexture; 58 | 59 | /// 60 | /// The webcam device. 61 | /// 62 | WebCamDevice webCamDevice; 63 | 64 | /// 65 | /// The colors. 66 | /// 67 | Color32[] colors; 68 | 69 | /// 70 | /// Indicates whether this instance is waiting for initialization to complete. 71 | /// 72 | bool isInitWaiting = false; 73 | 74 | /// 75 | /// Indicates whether this instance has been initialized. 76 | /// 77 | bool hasInitDone = false; 78 | 79 | /// 80 | /// The width of the screen. 81 | /// 82 | int screenWidth; 83 | 84 | /// 85 | /// The height of the screen. 86 | /// 87 | int screenHeight; 88 | 89 | /// 90 | /// The texture. 91 | /// 92 | Texture2D texture; 93 | 94 | OpenCVForUnity.CoreModule.Mat mat; 95 | 96 | // Use this for initialization 97 | void Awake() 98 | { 99 | Initialize(); 100 | } 101 | 102 | void Initialize() 103 | { 104 | if (isInitWaiting) 105 | return; 106 | StartCoroutine(_Initialize()); 107 | } 108 | 109 | public WebCamTexture GetWebCamTexture() 110 | { 111 | return webCamTexture; 112 | } 113 | 114 | public bool WebCamRunning() 115 | { 116 | return hasInitDone && webCamTexture.isPlaying; 117 | } 118 | /// 119 | /// Initializes webcam texture by coroutine. 120 | /// 121 | private IEnumerator _Initialize() 122 | { 123 | if (hasInitDone) 124 | Dispose(); 125 | 126 | isInitWaiting = true; 127 | 128 | // Creates the camera 129 | 130 | webCamDevice = WebCamTexture.devices[0]; 131 | webCamTexture = new WebCamTexture(webCamDevice.name, requestedWidth, requestedHeight, requestedFPS); 132 | 133 | if (webCamTexture == null) 134 | { 135 | Debug.Log("Cannot find camera device " + requestedDeviceName + "."); 136 | } 137 | 138 | if (webCamTexture == null) 139 | { 140 | // Checks how many and which cameras are available on the device 141 | for (int cameraIndex = 0; cameraIndex < WebCamTexture.devices.Length; cameraIndex++) 142 | { 143 | if (WebCamTexture.devices[cameraIndex].isFrontFacing == requestedIsFrontFacing) 144 | { 145 | webCamDevice = WebCamTexture.devices[cameraIndex]; 146 | webCamTexture = new WebCamTexture(webCamDevice.name, requestedWidth, requestedHeight, requestedFPS); 147 | break; 148 | } 149 | } 150 | } 151 | 152 | if (webCamTexture == null) 153 | { 154 | if (WebCamTexture.devices.Length > 0) 155 | { 156 | webCamDevice = WebCamTexture.devices[0]; 157 | webCamTexture = new WebCamTexture(webCamDevice.name, requestedWidth, requestedHeight, requestedFPS); 158 | } 159 | else 160 | { 161 | Debug.LogError("Camera device does not exist."); 162 | isInitWaiting = false; 163 | yield break; 164 | } 165 | } 166 | 167 | //rawImage.material.mainTexture = webCamTexture; 168 | 169 | // Starts the camera 170 | webCamTexture.Play(); 171 | 172 | while (true) 173 | { 174 | if (webCamTexture.didUpdateThisFrame) 175 | { 176 | 177 | Debug.Log("name:" + webCamTexture.deviceName + " width:" + webCamTexture.width + " height:" + webCamTexture.height + " fps:" + webCamTexture.requestedFPS); 178 | Debug.Log("videoRotationAngle:" + webCamTexture.videoRotationAngle + " videoVerticallyMirrored:" + webCamTexture.videoVerticallyMirrored + " isFrongFacing:" + webCamDevice.isFrontFacing); 179 | 180 | screenWidth = Screen.width; 181 | screenHeight = Screen.height; 182 | isInitWaiting = false; 183 | hasInitDone = true; 184 | 185 | OnInited(); 186 | 187 | break; 188 | } 189 | else 190 | { 191 | yield return 0; 192 | } 193 | } 194 | } 195 | 196 | /// 197 | /// Releases all resource. 198 | /// 199 | private void Dispose() 200 | { 201 | isInitWaiting = false; 202 | hasInitDone = false; 203 | 204 | if (webCamTexture != null) 205 | { 206 | webCamTexture.Stop(); 207 | WebCamTexture.Destroy(webCamTexture); 208 | webCamTexture = null; 209 | } 210 | if (texture != null) 211 | { 212 | Texture2D.Destroy(texture); 213 | texture = null; 214 | } 215 | } 216 | 217 | /// 218 | /// Raises the webcam texture initialized event. 219 | /// 220 | private void OnInited() 221 | { 222 | if (colors == null || colors.Length != webCamTexture.width * webCamTexture.height) 223 | { 224 | colors = new Color32[webCamTexture.width * webCamTexture.height]; 225 | } 226 | 227 | texture = new Texture2D(webCamTexture.width, webCamTexture.height, TextureFormat.RGBA32, false); 228 | mat = new OpenCVForUnity.CoreModule.Mat(webCamTexture.height, webCamTexture.width, OpenCVForUnity.CoreModule.CvType.CV_8UC3); 229 | //rawImage.texture = texture; 230 | 231 | gameObject.transform.localScale = new Vector3(texture.width, texture.height, 1); 232 | Debug.Log("Screen.width " + Screen.width + " Screen.height " + Screen.height + " Screen.orientation " + Screen.orientation); 233 | 234 | float width = texture.width; 235 | float height = texture.height; 236 | 237 | float widthScale = (float)Screen.width / width; 238 | float heightScale = (float)Screen.height / height; 239 | } 240 | 241 | // Update is called once per frame 242 | void Update() 243 | { 244 | if (adjustPixelsDirection) 245 | { 246 | // Catch the orientation change of the screen. 247 | if (screenWidth != Screen.width || screenHeight != Screen.height) 248 | { 249 | Initialize(); 250 | } 251 | else 252 | { 253 | screenWidth = Screen.width; 254 | screenHeight = Screen.height; 255 | } 256 | } 257 | 258 | if (hasInitDone && webCamTexture.isPlaying && webCamTexture.didUpdateThisFrame) 259 | { 260 | int webCamTexture_width = webCamTexture.width; 261 | int webCamTexture_height = webCamTexture.height; 262 | 263 | // Color32 format 264 | Color32[] colors = GetColors(); 265 | 266 | if (colors != null && colors.Length != 0) 267 | { 268 | texture.SetPixels32(colors); 269 | texture.Apply(false); 270 | // Convert the texture2d to mat format 271 | OpenCVForUnity.UnityUtils.Utils.texture2DToMat(texture, mat); 272 | return; 273 | } 274 | } 275 | } 276 | 277 | /// 278 | /// Gets the current WebCameraTexture frame that converted to the correct direction. 279 | /// 280 | public Color32[] GetColors() 281 | { 282 | webCamTexture.GetPixels32(colors); 283 | 284 | if (adjustPixelsDirection) 285 | { 286 | //Adjust an array of color pixels according to screen orientation and WebCamDevice parameter. 287 | FlipColors(colors, webCamTexture.width, webCamTexture.height); 288 | return colors; 289 | } 290 | return colors; 291 | } 292 | 293 | /// 294 | /// Gets the current WebCameraTexture frame that converted to the correct direction. 295 | /// 296 | public Color[] GetColors(int x, int y, int width, int height) 297 | { 298 | // The (0,0) coordinate of unity is right-bottom corner 299 | int x_RightBottom = webCamTexture.width - width - x; 300 | int y_RightBottom = webCamTexture.height - height - y; 301 | 302 | Color[] tempColors = webCamTexture.GetPixels(x_RightBottom, y_RightBottom, width, height); 303 | 304 | if (adjustPixelsDirection) 305 | { 306 | //Adjust an array of color pixels according to screen orientation and WebCamDevice parameter. 307 | FlipColors(tempColors, width, height); 308 | return tempColors; 309 | } 310 | return tempColors; 311 | } 312 | 313 | public OpenCVForUnity.CoreModule.Mat GetMat() 314 | { 315 | // Get the full image 316 | var colors = GetColors(); 317 | var texture = new Texture2D(webCamTexture.width, webCamTexture.height); 318 | texture.SetPixels32(colors); 319 | 320 | // Convert the texture2d to mat format 321 | var dst = new OpenCVForUnity.CoreModule.Mat(webCamTexture.height, webCamTexture.width, OpenCVForUnity.CoreModule.CvType.CV_8UC3); 322 | OpenCVForUnity.UnityUtils.Utils.texture2DToMat(texture, dst); 323 | 324 | // Validate the mat object 325 | if (dst == null || dst.getNativeObjAddr() == System.IntPtr.Zero) 326 | return null; 327 | 328 | return dst; 329 | } 330 | 331 | public OpenCVForUnity.CoreModule.Mat GetMat(int x, int y, int width, int height) 332 | { 333 | if (mat == null || mat.getNativeObjAddr() == System.IntPtr.Zero) 334 | return null; 335 | 336 | // Crop the image by using opencv 337 | var rect = new OpenCVForUnity.CoreModule.Rect(x, y, width, height); 338 | var dst = new OpenCVForUnity.CoreModule.Mat(mat, rect); 339 | 340 | // Validate the mat object 341 | if (dst == null || dst.getNativeObjAddr() == System.IntPtr.Zero) 342 | return null; 343 | 344 | return dst; 345 | } 346 | 347 | /// 348 | /// Raises the destroy event. 349 | /// 350 | void OnDestroy() 351 | { 352 | Dispose(); 353 | } 354 | 355 | /// 356 | /// Flips the colors. 357 | /// 358 | /// Colors. 359 | /// Width. 360 | /// Height. 361 | void FlipColors(IList colors, int width, int height) 362 | { 363 | int flipCode = int.MinValue; 364 | 365 | if (webCamDevice.isFrontFacing) 366 | { 367 | if (webCamTexture.videoRotationAngle == 0) 368 | { 369 | flipCode = 1; 370 | } 371 | else if (webCamTexture.videoRotationAngle == 90) 372 | { 373 | flipCode = 1; 374 | } 375 | if (webCamTexture.videoRotationAngle == 180) 376 | { 377 | flipCode = 0; 378 | } 379 | else if (webCamTexture.videoRotationAngle == 270) 380 | { 381 | flipCode = 0; 382 | } 383 | } 384 | else 385 | { 386 | if (webCamTexture.videoRotationAngle == 180) 387 | { 388 | flipCode = -1; 389 | } 390 | else if (webCamTexture.videoRotationAngle == 270) 391 | { 392 | flipCode = -1; 393 | } 394 | } 395 | 396 | if (flipCode > int.MinValue) 397 | { 398 | if (flipCode == 0) 399 | { 400 | FlipVertical(colors, colors, width, height); 401 | } 402 | else if (flipCode == 1) 403 | { 404 | FlipHorizontal(colors, colors, width, height); 405 | } 406 | else if (flipCode < 0) 407 | { 408 | Rotate180(colors, colors, height, width); 409 | } 410 | } 411 | } 412 | 413 | /// 414 | /// Flips vertical. 415 | /// 416 | /// Src colors. 417 | /// Dst colors. 418 | /// Width. 419 | /// Height. 420 | void FlipVertical(IList src, IList dst, int width, int height) 421 | { 422 | for (var i = 0; i < height / 2; i++) 423 | { 424 | var y = i * width; 425 | var x = (height - i - 1) * width; 426 | for (var j = 0; j < width; j++) 427 | { 428 | int s = y + j; 429 | int t = x + j; 430 | var c = src[s]; 431 | dst[s] = src[t]; 432 | dst[t] = c; 433 | } 434 | } 435 | } 436 | 437 | /// 438 | /// Flips horizontal. 439 | /// 440 | /// Src colors. 441 | /// Dst colors. 442 | /// Width. 443 | /// Height. 444 | void FlipHorizontal(IList src, IList dst, int width, int height) 445 | { 446 | for (int i = 0; i < height; i++) 447 | { 448 | int y = i * width; 449 | int x = y + width - 1; 450 | for (var j = 0; j < width / 2; j++) 451 | { 452 | int s = y + j; 453 | int t = x - j; 454 | var c = src[s]; 455 | dst[s] = src[t]; 456 | dst[t] = c; 457 | } 458 | } 459 | } 460 | 461 | /// 462 | /// Rotates 180 degrees. 463 | /// 464 | /// Src colors. 465 | /// Dst colors. 466 | /// Width. 467 | /// Height. 468 | void Rotate180(IList src, IList dst, int height, int width) 469 | { 470 | int i = src.Count; 471 | for (int x = 0; x < i / 2; x++) 472 | { 473 | var t = src[x]; 474 | dst[x] = src[i - x - 1]; 475 | dst[i - x - 1] = t; 476 | } 477 | } 478 | } 479 | 480 | --------------------------------------------------------------------------------