├── src ├── components │ ├── App.css │ ├── staticImage │ │ ├── ImageCloseButton.css │ │ ├── ImageSelectorButton.css │ │ ├── StaticImage.css │ │ ├── ImageCloseButton.tsx │ │ ├── ImageSelectorButton.tsx │ │ └── StaticImage.tsx │ ├── prediction │ │ ├── Prediction.css │ │ ├── PredictionEntry.css │ │ ├── PredictionEntry.tsx │ │ └── Prediction.tsx │ ├── camera │ │ ├── Camera.css │ │ ├── SourceSelectorItem.css │ │ ├── SourceSelectorItem.tsx │ │ ├── SourceSelector.css │ │ ├── SourceSelector.tsx │ │ └── Camera.tsx │ ├── BlurContainer.css │ ├── SquareButton.css │ ├── BlurContainer.tsx │ ├── SquareButton.tsx │ └── App.tsx ├── react-app-env.d.ts ├── setupTests.ts ├── index.css ├── reportWebVitals.ts ├── index.tsx ├── Icons │ ├── close.svg │ ├── no-check.svg │ ├── check.svg │ ├── gear.svg │ └── gallery.svg └── model │ ├── worker.ts │ └── imageClassificationModel.ts ├── assets └── header.jpg ├── public ├── favicon.ico ├── logo192.png ├── logo512.png ├── robots.txt ├── model │ ├── group1-shard1of4.bin │ ├── group1-shard2of4.bin │ ├── group1-shard3of4.bin │ ├── group1-shard4of4.bin │ ├── signature.json │ └── model.json ├── manifest.json └── index.html ├── .gitignore ├── tsconfig.json ├── LICENSE ├── package.json └── README.md /src/components/App.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /assets/header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lobe/web-bootstrap/HEAD/assets/header.jpg -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lobe/web-bootstrap/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lobe/web-bootstrap/HEAD/public/logo192.png -------------------------------------------------------------------------------- /public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lobe/web-bootstrap/HEAD/public/logo512.png -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /public/model/group1-shard1of4.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lobe/web-bootstrap/HEAD/public/model/group1-shard1of4.bin -------------------------------------------------------------------------------- /public/model/group1-shard2of4.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lobe/web-bootstrap/HEAD/public/model/group1-shard2of4.bin -------------------------------------------------------------------------------- /public/model/group1-shard3of4.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lobe/web-bootstrap/HEAD/public/model/group1-shard3of4.bin -------------------------------------------------------------------------------- /public/model/group1-shard4of4.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lobe/web-bootstrap/HEAD/public/model/group1-shard4of4.bin -------------------------------------------------------------------------------- /src/components/staticImage/ImageCloseButton.css: -------------------------------------------------------------------------------- 1 | #image-close-button { 2 | position: absolute; 3 | z-index: 1; 4 | top: 20px; 5 | right: 20px; 6 | } 7 | -------------------------------------------------------------------------------- /src/components/staticImage/ImageSelectorButton.css: -------------------------------------------------------------------------------- 1 | #image-select-button { 2 | position: absolute; 3 | z-index: 1; 4 | top: 20px; 5 | left: 20px; 6 | } 7 | -------------------------------------------------------------------------------- /src/components/staticImage/StaticImage.css: -------------------------------------------------------------------------------- 1 | #static-image { 2 | width: 100vw; 3 | height: 100vh; 4 | background-position: center; 5 | background-size: contain; 6 | background-repeat: no-repeat; 7 | } 8 | -------------------------------------------------------------------------------- /src/components/prediction/Prediction.css: -------------------------------------------------------------------------------- 1 | .prediction-container { 2 | border-radius: 39px; 3 | position: absolute; 4 | z-index: 1; 5 | bottom: 40px; 6 | left: 40px; 7 | font-size: 38px; 8 | font-weight: 500; 9 | } -------------------------------------------------------------------------------- /src/components/camera/Camera.css: -------------------------------------------------------------------------------- 1 | #video-container { 2 | width: 100vw; 3 | height: 100vh; 4 | } 5 | 6 | video { 7 | width: 100%; 8 | height: 100%; 9 | object-fit: cover; 10 | object-position: center; 11 | } 12 | -------------------------------------------------------------------------------- /src/components/BlurContainer.css: -------------------------------------------------------------------------------- 1 | .blur-container { 2 | color: #ffffff; 3 | padding: 16px; 4 | -webkit-backdrop-filter: blur(40px); 5 | backdrop-filter: blur(40px); 6 | background-color: rgba(51, 51, 51, 0.32); 7 | min-width: 80px; 8 | } 9 | -------------------------------------------------------------------------------- /src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /src/components/SquareButton.css: -------------------------------------------------------------------------------- 1 | .square-button { 2 | border-radius: 16px; 3 | overflow: hidden; 4 | width: 45px; 5 | min-width: auto; 6 | height: 45px; 7 | margin-bottom: 10px; 8 | padding: 0!important; 9 | display: flex; 10 | justify-content: center; 11 | align-items: center; 12 | } 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | 25 | .idea 26 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: SFProDisplay, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /src/reportWebVitals.ts: -------------------------------------------------------------------------------- 1 | import { ReportHandler } from 'web-vitals'; 2 | 3 | const reportWebVitals = (onPerfEntry?: ReportHandler) => { 4 | if (onPerfEntry && onPerfEntry instanceof Function) { 5 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 6 | getCLS(onPerfEntry); 7 | getFID(onPerfEntry); 8 | getFCP(onPerfEntry); 9 | getLCP(onPerfEntry); 10 | getTTFB(onPerfEntry); 11 | }); 12 | } 13 | }; 14 | 15 | export default reportWebVitals; 16 | -------------------------------------------------------------------------------- /public/model/signature.json: -------------------------------------------------------------------------------- 1 | {"doc_id": "62cfdd88-22bb-4601-8fbf-dc96ae2dcd12", "doc_name": "Web Thumbs", "doc_version": "7a8180a232ab91e6f673f6808f47db92", "format": "tf_js", "version": 37, "inputs": {"Image": {"dtype": "float32", "shape": [null, 224, 224, 3], "name": "Image:0"}}, "outputs": {"Confidences": {"dtype": "float32", "shape": [null, 3], "name": "62cfdd88-22bb-4601-8fbf-dc96ae2dcd12.cc3455b9-54e6-4a06-a65d-97205ca63ce4/dense_2/Softmax:0"}}, "tags": null, "classes": {"Label": ["None", "Thumb Down", "Thumb Up"]}, "filename": "model.json", "export_model_version": 1} -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './components/App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById('root') 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Lobe Web", 3 | "name": "Lobe Web Sample App", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "module": "esnext", 17 | "moduleResolution": "node", 18 | "resolveJsonModule": true, 19 | "isolatedModules": true, 20 | "noEmit": true, 21 | "jsx": "react-jsx" 22 | }, 23 | "include": [ 24 | "src" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/components/BlurContainer.tsx: -------------------------------------------------------------------------------- 1 | import React, {FunctionComponent} from "react"; 2 | import './BlurContainer.css'; 3 | 4 | type BlurContainerType = { 5 | additionalClassname?: string 6 | } 7 | 8 | const BlurContainer: FunctionComponent = ({ additionalClassname, children }) => { 9 | // simple container with rounded corners and a blurred translucent background 10 | let className = "blur-container"; 11 | if (!!additionalClassname) { 12 | className = className + ` ${additionalClassname}`; 13 | } 14 | return ( 15 |
16 | { children } 17 |
18 | ); 19 | } 20 | 21 | export default BlurContainer; 22 | -------------------------------------------------------------------------------- /src/components/prediction/PredictionEntry.css: -------------------------------------------------------------------------------- 1 | .prediction-entry { 2 | position: relative; 3 | padding: 0 144px 0 16px; 4 | margin-bottom: 12px; 5 | line-height: 58px; 6 | height: 58px; 7 | } 8 | .prediction-entry:last-child { 9 | margin-bottom: 0; 10 | } 11 | 12 | .prediction-bar { 13 | position: absolute; 14 | z-index: -1; 15 | left: 0; 16 | top: 0; 17 | height: 58px; 18 | -webkit-backdrop-filter: blur(10px); 19 | backdrop-filter: blur(10px); 20 | background-color: rgba(255, 255, 255, 0.2); 21 | border-radius: 23px; 22 | min-width: 46px; 23 | transition: width .3s linear; 24 | } 25 | 26 | .prediction-green { 27 | background-color: #00ddb3; 28 | } -------------------------------------------------------------------------------- /src/components/camera/SourceSelectorItem.css: -------------------------------------------------------------------------------- 1 | .source-item-container { 2 | display: flex; 3 | flex-direction: row; 4 | align-items: center; 5 | justify-content: space-between; 6 | margin-bottom: 18px; 7 | } 8 | .source-item-container:first-child { 9 | margin-top: 10px; 10 | } 11 | 12 | .source-device { 13 | font-size: 16px; 14 | font-weight: 500; 15 | font-stretch: normal; 16 | font-style: normal; 17 | line-height: 1.31; 18 | letter-spacing: normal; 19 | color: #ffffff; 20 | opacity: 0.6; 21 | margin-left: 8px; 22 | margin-right: 44px; 23 | } 24 | 25 | .source-selected { 26 | opacity: 1; 27 | } 28 | 29 | .source-radio-button { 30 | margin-right: 8px; 31 | height: 24px; 32 | width: 24px; 33 | } 34 | -------------------------------------------------------------------------------- /src/components/staticImage/ImageCloseButton.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import SquareButton from "../SquareButton"; 3 | import close from "../../Icons/close.svg"; 4 | 5 | import "./ImageCloseButton.css"; 6 | 7 | type ImageCloseButtonProps = { 8 | setImageFile: (image: File | null) => void; 9 | }; 10 | 11 | // Component for clearing the static image and going back to the webcam view 12 | function ImageCloseButton({setImageFile}: ImageCloseButtonProps) { 13 | 14 | const onClick = () => { 15 | setImageFile(null); 16 | }; 17 | 18 | return ( 19 |
20 | 21 | {"Close"} 22 | 23 |
24 | ) 25 | } 26 | 27 | export default ImageCloseButton; 28 | -------------------------------------------------------------------------------- /src/Icons/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | close 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/components/prediction/PredictionEntry.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import "./PredictionEntry.css"; 3 | 4 | type PredictionEntryProps = { 5 | label: string 6 | confidence?: number 7 | top?: boolean 8 | } 9 | 10 | function PredictionEntry({label, confidence, top}: PredictionEntryProps) { 11 | // render the predicted label and a bar representing the confidence value 12 | // make the top confidence value green 13 | return ( 14 |
15 | {label} 16 | {!!confidence ? 17 |
21 | : null} 22 |
23 | ); 24 | } 25 | 26 | export default PredictionEntry; 27 | -------------------------------------------------------------------------------- /src/components/SquareButton.tsx: -------------------------------------------------------------------------------- 1 | import React, {FunctionComponent} from "react"; 2 | import BlurContainer from "./BlurContainer"; 3 | import "./SquareButton.css"; 4 | 5 | type SquareButtonProps = { 6 | onClick?: () => void, 7 | setHover?: (hovering: boolean) => void 8 | }; 9 | 10 | const SquareButton: FunctionComponent = ({ onClick, setHover, children }) => { 11 | // Square button that is inside the blur container 12 | return ( 13 |
onClick() : undefined} 15 | onMouseEnter={setHover ? () => setHover(true) : undefined} 16 | onMouseLeave={setHover ? () => setHover(false) : undefined} 17 | > 18 | 19 | { children } 20 | 21 |
22 | 23 | ); 24 | } 25 | 26 | export default SquareButton; 27 | -------------------------------------------------------------------------------- /src/model/worker.ts: -------------------------------------------------------------------------------- 1 | /* 2 | This file is our web worker to run the TensorFlow.js models asynchronously and not block the UI thread. 3 | */ 4 | import ImageClassificationModel from "./imageClassificationModel"; 5 | 6 | let model: ImageClassificationModel; 7 | 8 | export async function loadModel(signaturePath: string, modelPath: string) { 9 | // loads our exported Lobe model from the signature and model files 10 | disposeModel(); 11 | model = new ImageClassificationModel(signaturePath, modelPath); 12 | await model.load(); 13 | } 14 | 15 | export function disposeModel() { 16 | // frees up memory used by the model 17 | if (model) { 18 | model.dispose(); 19 | } 20 | } 21 | 22 | export async function predict(data: ImageData) { 23 | // run the input data through the model 24 | if (model) { 25 | return model.predict(data); 26 | } else { 27 | console.log('Predict called without model loaded.') 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/components/camera/SourceSelectorItem.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import check from "../../Icons/check.svg"; 3 | import noCheck from "../../Icons/no-check.svg"; 4 | 5 | import "./SourceSelectorItem.css"; 6 | 7 | 8 | type SourceSelectorItemProps = { 9 | name: string, 10 | selected: boolean, 11 | onSelect: () => void 12 | } 13 | 14 | // Component for selecting the webcam source and flipping the image horizontally 15 | function SourceSelectorItem({selected, onSelect, name}: SourceSelectorItemProps) { 16 | 17 | return ( 18 |
19 |
20 | {name} 21 |
22 |
onSelect()} className="source-radio-button"> 23 | {'Select 24 |
25 |
26 | ) 27 | } 28 | 29 | export default SourceSelectorItem; 30 | -------------------------------------------------------------------------------- /src/Icons/no-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | no-check 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Microsoft 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lobe-web-sample", 3 | "version": "0.2.0", 4 | "private": true, 5 | "dependencies": { 6 | "@tensorflow/tfjs": "^3.11.0", 7 | "@testing-library/jest-dom": "^5.15.0", 8 | "@testing-library/react": "^12.1.2", 9 | "@testing-library/user-event": "^13.5.0", 10 | "@types/jest": "^27.0.2", 11 | "@types/node": "^16.11.7", 12 | "@types/react": "^17.0.34", 13 | "@types/react-dom": "^17.0.11", 14 | "react": "^17.0.2", 15 | "react-dom": "^17.0.2", 16 | "react-scripts": "4.0.3", 17 | "react-webcam": "^6.0.0", 18 | "typescript": "^4.4.4", 19 | "web-vitals": "^2.1.2", 20 | "workerize-loader": "^1.3.0" 21 | }, 22 | "scripts": { 23 | "start": "react-scripts start", 24 | "build": "react-scripts build", 25 | "test": "react-scripts test", 26 | "eject": "react-scripts eject", 27 | "svgr": "svgr -d src/Icons/ assets/svg/" 28 | }, 29 | "eslintConfig": { 30 | "extends": [ 31 | "react-app", 32 | "react-app/jest" 33 | ] 34 | }, 35 | "browserslist": { 36 | "production": [ 37 | ">0.2%", 38 | "not dead", 39 | "not op_mini all" 40 | ], 41 | "development": [ 42 | "last 1 chrome version", 43 | "last 1 firefox version", 44 | "last 1 safari version" 45 | ] 46 | }, 47 | "devDependencies": {} 48 | } 49 | -------------------------------------------------------------------------------- /src/components/prediction/Prediction.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import BlurContainer from "../BlurContainer"; 3 | import PredictionEntry from "./PredictionEntry"; 4 | import "./Prediction.css"; 5 | 6 | type PredictionProps = { 7 | predictions?: { [label: string]: number }, 8 | top?: number 9 | } 10 | 11 | function Prediction({predictions, top=3}: PredictionProps) { 12 | // display the top N (default 3) predictions returned from the model 13 | let sortedPredictions: Array<[string, number]> | undefined; 14 | if (!!predictions) { 15 | // sort our predictions by the confidence value and take the top N 16 | sortedPredictions = Object.entries(predictions) 17 | .sort((a, b) => b[1] - a[1]) 18 | .slice(0, top); 19 | } 20 | return ( 21 |
22 | 23 | {!!sortedPredictions ? 24 | sortedPredictions.map(([label, confidence], idx) => ( 25 | 26 | )) 27 | : 28 | } 29 | 30 |
31 | ); 32 | } 33 | 34 | export default Prediction; 35 | -------------------------------------------------------------------------------- /src/components/camera/SourceSelector.css: -------------------------------------------------------------------------------- 1 | #camera-select-button { 2 | position: absolute; 3 | z-index: 1; 4 | top: 20px; 5 | right: 20px; 6 | display: flex; 7 | flex-direction: column; 8 | align-items: flex-end; 9 | } 10 | 11 | #gear-icon { 12 | height: 24px; 13 | width: 24px; 14 | transition: transform 0.3s; 15 | } 16 | 17 | .gear-rotated { 18 | transform: rotate(90deg); 19 | } 20 | 21 | .source-selector { 22 | border-radius: 24px; 23 | transition: all 0.3s; 24 | transform-origin: top right; 25 | transform: scaleY(0) scaleX(0.1); 26 | opacity: 0; 27 | } 28 | 29 | .source-expanded { 30 | transform: scaleY(1) scaleX(1); 31 | opacity: 1; 32 | } 33 | 34 | .toggle-container { 35 | margin-left: -4px; 36 | margin-right: -4px; 37 | padding: 15px 12px 14px; 38 | border-radius: 14px; 39 | background-color: rgba(255,255,255,.1); 40 | } 41 | 42 | .toggle-item-container { 43 | display: flex; 44 | flex-direction: row; 45 | align-items: center; 46 | justify-content: space-between; 47 | margin-bottom: 18px; 48 | } 49 | .toggle-item-container:last-child { 50 | margin-bottom: 0; 51 | } 52 | 53 | .toggle-item { 54 | margin-left: 0!important; 55 | margin-right: 52px!important; 56 | } 57 | 58 | .toggle-radio-button { 59 | height: 24px; 60 | width: 24px; 61 | } -------------------------------------------------------------------------------- /src/Icons/check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | check 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | Lobe Web 28 | 29 | 30 | 31 |
32 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /src/components/staticImage/ImageSelectorButton.tsx: -------------------------------------------------------------------------------- 1 | import React, {useEffect, useRef} from "react"; 2 | import SquareButton from "../SquareButton"; 3 | import gallery from "../../Icons/gallery.svg"; 4 | 5 | import "./ImageSelectorButton.css"; 6 | 7 | type ImageSelectorButtonProps = { 8 | setImageFile: (image: File | null) => void; 9 | imageFile: File | null; 10 | }; 11 | 12 | // Component for selecting an image file for prediction 13 | function ImageSelectorButton({setImageFile, imageFile}: ImageSelectorButtonProps) { 14 | // ref to the hidden file input element 15 | const fileInput = useRef(null); 16 | 17 | // if we have a null file (from clearing the image), clear the file input value 18 | useEffect( 19 | () => { 20 | if (!imageFile && fileInput.current) { 21 | fileInput.current.value = ""; 22 | } 23 | }, 24 | [imageFile, fileInput] 25 | ) 26 | 27 | // make an onclick that will open the file dialog 28 | const onClick = () => { 29 | if (fileInput.current) { 30 | fileInput.current.click(); 31 | } 32 | } 33 | 34 | // set our image file from the picker 35 | const onChange = (e: React.ChangeEvent) => { 36 | const files = e.target.files; 37 | if (files && files.length > 0) { 38 | setImageFile(files[0]); 39 | } 40 | } 41 | 42 | return ( 43 |
47 | 48 | {"File 49 | 50 | 51 |
52 | ) 53 | } 54 | 55 | export default ImageSelectorButton; 56 | -------------------------------------------------------------------------------- /src/components/staticImage/StaticImage.tsx: -------------------------------------------------------------------------------- 1 | import React, {useEffect, useRef} from "react"; 2 | import ImageCloseButton from "./ImageCloseButton"; 3 | 4 | import "./StaticImage.css"; 5 | 6 | type StaticImageProps = { 7 | predictCanvas: (canvas: HTMLCanvasElement) => void; 8 | image: File; 9 | setImageFile: (image: File | null) => void; 10 | } 11 | 12 | // Component for displaying our selected image file for prediction 13 | function StaticImage({ predictCanvas, image, setImageFile }: StaticImageProps) { 14 | // display our image file on a canvas and call the predict function with that canvas 15 | const canvas = useRef(null); 16 | const display = useRef(null); 17 | 18 | useEffect(() => { 19 | const reader = new FileReader(); 20 | reader.onload = (e) => { 21 | // make an image to draw on the canvas 22 | const img = new Image(); 23 | img.onload = () => { 24 | if (canvas.current) { 25 | // draw the image on our canvas 26 | canvas.current.width = img.width; 27 | canvas.current.height = img.height; 28 | const ctx = canvas.current.getContext("2d"); 29 | if (!!ctx) { 30 | // draw our image on the context 31 | ctx.drawImage(img,0,0); 32 | // drawing is finished, run the prediction! 33 | predictCanvas(canvas.current); 34 | } 35 | } 36 | } 37 | 38 | // load the image from our reader 39 | if (e.target) { 40 | img.src = e.target.result as string; 41 | if (display.current) { 42 | display.current.style.backgroundImage = `url(${e.target.result})`; 43 | } 44 | } 45 | } 46 | // read our image file and process it! 47 | reader.readAsDataURL(image); 48 | }, [image, predictCanvas, display]); 49 | 50 | return ( 51 |
52 | 53 | 54 |
55 | ) 56 | } 57 | 58 | export default StaticImage; 59 | -------------------------------------------------------------------------------- /src/Icons/gear.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | gear 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/components/App.tsx: -------------------------------------------------------------------------------- 1 | import React, {useCallback, useEffect, useState} from 'react'; 2 | import Camera from './camera/Camera'; 3 | import Prediction from './prediction/Prediction'; 4 | import ImageSelectorButton from './staticImage/ImageSelectorButton'; 5 | import StaticImage from './staticImage/StaticImage'; 6 | 7 | // @ts-ignore 8 | // eslint-disable-next-line import/no-webpack-loader-syntax 9 | import ModelWorker from "workerize-loader!../model/worker"; 10 | 11 | // create our web worker instance for running the tfjs model without blocking the UI thread 12 | const modelWorker = ModelWorker(); 13 | // the filepaths to our exported signature.json and model.json files (in the public/model folder) 14 | const signatureFile = process.env.PUBLIC_URL + `/model/signature.json`; 15 | const modelFile = process.env.PUBLIC_URL + `/model/model.json`; 16 | 17 | 18 | function App() { 19 | // state for keeping track of our predictions -- map of {label: confidence} from running the model on an image 20 | const [predictions, setPredictions] = useState<{[key: string]: number} | undefined>(undefined); 21 | // state for using a static image from file picker 22 | const [imageFile, setImageFile] = useState(null); 23 | 24 | // useEffect callback to load our model 25 | useEffect(() => { 26 | modelWorker.loadModel(signatureFile, modelFile); 27 | return () => { 28 | modelWorker.disposeModel(); 29 | }; 30 | }, []); 31 | 32 | // function to run the image from an html canvas element through our model 33 | const predictCanvas = useCallback((canvas: HTMLCanvasElement) => { 34 | // get the canvas context 35 | const ctx = canvas.getContext('2d'); 36 | if (ctx) { 37 | // get the pixel data from the full canvas 38 | const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); 39 | // run the async predict function and set the values to our state 40 | modelWorker.predict(imageData).then((results: {Confidences: {[label: string]: number}}) => { 41 | if (results) { 42 | setPredictions(results.Confidences); 43 | } 44 | }); 45 | } 46 | }, []); 47 | 48 | return ( 49 |
50 | 51 | { 52 | !imageFile ? 53 | : 54 | 55 | } 56 | 57 |
58 | ); 59 | } 60 | 61 | export default App; 62 | -------------------------------------------------------------------------------- /src/components/camera/SourceSelector.tsx: -------------------------------------------------------------------------------- 1 | import React, {useState} from "react"; 2 | import SquareButton from "../SquareButton"; 3 | import BlurContainer from "../BlurContainer"; 4 | import SourceSelectorItem from "./SourceSelectorItem"; 5 | import gear from "../../Icons/gear.svg"; 6 | 7 | import "./SourceSelector.css"; 8 | import check from "../../Icons/check.svg"; 9 | import noCheck from "../../Icons/no-check.svg"; 10 | 11 | 12 | type SourceSelectorProps = { 13 | devices: MediaDeviceInfo[] 14 | deviceId?: string, 15 | setDeviceId: (deviceId: string) => void, 16 | imageFlip: boolean, 17 | setImageFlip: (imageFlip: boolean) => void, 18 | selectorVisible: boolean, 19 | setSelectorVisible: (visible: boolean) => void 20 | } 21 | 22 | // Component for selecting the webcam source and flipping the image horizontally 23 | function SourceSelector({devices, deviceId, setDeviceId, imageFlip, setImageFlip, selectorVisible, setSelectorVisible}: SourceSelectorProps) { 24 | const [hovering, setHover] = useState(false); 25 | 26 | return ( 27 |
e.stopPropagation()} 30 | onMouseLeave={() => {setSelectorVisible(false)}} 31 | > 32 | {setHover(hovering); if (hovering) setSelectorVisible(true);}}> 33 | {"Gear 34 | 35 | 36 | {devices.map((device, key) => ( 37 | setDeviceId(device.deviceId)} 40 | selected={device.deviceId === deviceId} 41 | key={device.deviceId} 42 | /> 43 | ))} 44 |
45 |
46 |
47 | {"Flip Image"} 48 |
49 |
setImageFlip(!imageFlip)} className="toggle-radio-button"> 50 | {'Flip 51 |
52 |
53 |
54 |
55 |
56 | ) 57 | } 58 | 59 | export default SourceSelector; 60 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Web Bootstrap header](assets/header.jpg) 2 | 3 | [Lobe](http://lobe.ai/) is a free, easy to use app that has everything you need to bring your machine learning ideas to life. 4 | Web Bootstrap takes the machine learning model created in Lobe, and adds it to a project in the browser that uses 5 | [React](https://reactjs.org), [Create React App](https://github.com/facebook/create-react-app), [TypeScript](https://www.typescriptlang.org/), and [TensorFlow.js](https://www.tensorflow.org/js). 6 | 7 | ## Get Started 8 | 9 | 1. Clone or download the project on your computer and install [Yarn](https://yarnpkg.com/). Yarn is the software package that will install all the dependencies and make sure the code automatically reloads when changes are made. 10 | 11 | 2. Run `yarn install` to install required dependencies and run `yarn start` to start the server in development mode. This will open a web browser to 12 | `localhost:3000`. By default, this project is using the TensorFlow.js exported model from Lobe found in the `public/model/` folder. 13 | 14 | 3. To use your own model file, open your Lobe project, go to the Use tab, select Export, and click on the TensorFlow.js model file. 15 | When exported, drag the `model.json`, `signature.json`, and all the `*.bin` files to the `public/model/` folder. 16 | 17 | ## Additional Information 18 | 19 | Check out the [Create React App documentation](https://create-react-app.dev/docs/getting-started) 20 | for more information on React and the project structure. 21 | 22 | There are three main components: Camera, Prediction, and StaticImage. 23 | The Camera, which runs in `components/camera/Camera.tsx` is responsible for displaying a live full screen view of the user's selected webcam. 24 | The Prediction component `components/prediction/Prediction.tsx` is the box in the lower left hand corner, and is responsible for displaying the top prediction results and their confidences. 25 | The StaticImage component `components/staticImage/StaticImage.tsx` displays an image selected from the file picker and runs it through the model from a canvas element. 26 | 27 | ### Known Issues 28 | TensorFlow.js on Safari may have problems initializing the WebGL backend for acceleration and will fall back to the CPU. 29 | You can use the WebAssembly (wasm) backend as an alternative to WebGL: 30 | https://www.tensorflow.org/js/guide/platform_environment#wasm_backend 31 | 32 | ## Contributing 33 | 34 | GitHub Issues are for reporting bugs, discussing features and general feedback on the Web Bootstrap project. Be sure to check our documentation, FAQ and past issues before opening any new ones. 35 | 36 | To share your project, get feedback on it, and learn more about Lobe, please visit our community on [Reddit](https://www.reddit.com/r/Lobe/). 37 | We look forward to seeing the amazing projects that can be built, when machine learning is made accessible to you. 38 | -------------------------------------------------------------------------------- /src/components/camera/Camera.tsx: -------------------------------------------------------------------------------- 1 | import React, {useEffect, useState, useRef, useCallback} from "react"; 2 | import Webcam from "react-webcam"; 3 | import SourceSelector from "./SourceSelector"; 4 | import "./Camera.css"; 5 | 6 | type CameraProps = { 7 | predictCanvas: (canvas: HTMLCanvasElement) => void; 8 | predictions?: { [label: string]: number }; 9 | } 10 | 11 | // Our webcam display and capture component 12 | function Camera({ predictCanvas, predictions }: CameraProps) { 13 | const [devices, setDevices] = useState([]); 14 | const [deviceId, setDeviceId] = useState(undefined); 15 | const [imageFlip, setImageFlip] = useState(true); 16 | const webcamRef = useRef(null); 17 | const [selectorVisible, setSelectorVisible] = useState(false); 18 | 19 | // handle any webcam plugged into the computer 20 | // https://github.com/mozmorris/react-webcam#show-all-cameras-by-deviceid 21 | const handleDevices = useCallback( 22 | (mediaDevices: MediaDeviceInfo[]) => { 23 | // find all the webcams 24 | const videoDevices = mediaDevices.filter(({kind}) => kind === "videoinput"); 25 | setDevices(videoDevices); 26 | // set our initial webcam to be the first in the list 27 | if (videoDevices.length > 0) { 28 | setDeviceId(videoDevices[0].deviceId); 29 | } 30 | },[setDevices, setDeviceId] 31 | ); 32 | useEffect(() => { 33 | navigator.mediaDevices.enumerateDevices().then(handleDevices); 34 | }, [handleDevices]); 35 | 36 | // function to grab the current frame drawn on canvas from the webcam 37 | const getCanvas: () => Promise = useCallback(async () => { 38 | let newImage; 39 | if (webcamRef.current) { 40 | newImage = webcamRef.current.getCanvas(); 41 | if (newImage) { 42 | return newImage; 43 | } 44 | } 45 | }, [webcamRef]); 46 | 47 | // helper for waiting in our loop when the camera is loading (getting the image) 48 | const sleep = useCallback((ms: number) => { 49 | return new Promise(function (resolve, reject) { 50 | setTimeout(resolve, ms); 51 | }); 52 | }, []); 53 | 54 | // while we have the webcam mounted, predict frames as fast as we get new predictions back from the model 55 | useEffect(() => { 56 | getCanvas().then(async (canvas: HTMLCanvasElement | undefined) => { 57 | let currentCanvas = canvas; 58 | while (!currentCanvas) { 59 | // if no canvas, wait 500ms and try again 60 | await sleep(500); 61 | currentCanvas = await getCanvas(); 62 | } 63 | if (currentCanvas) { 64 | predictCanvas(currentCanvas); 65 | } 66 | }) 67 | }, [sleep, predictions, deviceId, getCanvas, predictCanvas]) 68 | 69 | return ( 70 |
setSelectorVisible(false)}> 71 | 80 | 93 |
94 | ); 95 | } 96 | 97 | export default Camera; 98 | -------------------------------------------------------------------------------- /src/Icons/gallery.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | gallery 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/model/imageClassificationModel.ts: -------------------------------------------------------------------------------- 1 | import * as tf from '@tensorflow/tfjs'; 2 | 3 | const LEGACY_VERSION = -1; 4 | const SUPPORTED_VERSIONS = [LEGACY_VERSION, 1]; // use -1 for legacy Lobe exports without the version property 5 | 6 | class ImageClassificationModel { 7 | signaturePath: string; 8 | signature: any; 9 | modelPath: string; 10 | height: number = 224; 11 | width: number = 224; 12 | outputName: string = ''; 13 | inputKey = "Image"; 14 | outputKey = "Confidences"; 15 | labelKey = "Label"; 16 | labels: string[] = []; 17 | version?: number; 18 | model?: tf.GraphModel; 19 | 20 | constructor(signaturePath: string, modelPath: string) { 21 | /* Construct our model from the path to Lobe's exported signature.json and model.json files */ 22 | this.signaturePath = signaturePath; 23 | this.modelPath = modelPath; 24 | } 25 | 26 | async load() { 27 | /* Load our TensorFlow.js GraphModel if it we haven't yet */ 28 | if (!this.model) { 29 | console.log("Loading our model..."); 30 | const signatureFile = await fetch(this.signaturePath); 31 | this.signature = await signatureFile.json(); 32 | [this.width, this.height] = this.signature.inputs[this.inputKey].shape.slice(1,3); 33 | this.outputName = this.signature.outputs[this.outputKey].name; 34 | this.labels = this.signature.classes[this.labelKey]; 35 | this.version = this.signature.export_model_version || LEGACY_VERSION; 36 | if (!this.version || !SUPPORTED_VERSIONS.includes(this.version)) { 37 | const versionMessage = `The model version ${this.version} you are using for this starter project may not be compatible with the supported versions ${SUPPORTED_VERSIONS}. Please update both this starter project and Lobe to latest versions, and try exporting your model again. If the issue persists, please contact us at lobesupport@microsoft.com`; 38 | console.error(versionMessage); 39 | throw new Error(versionMessage); 40 | } 41 | this.model = await tf.loadGraphModel(this.modelPath); 42 | console.log("Model loaded!"); 43 | } 44 | } 45 | 46 | dispose() { 47 | /* Free up the memory used by the TensorFlow.js GraphModel */ 48 | if (this.model) { 49 | console.log("Clearing our model."); 50 | this.model.dispose(); 51 | this.model = undefined; 52 | } 53 | } 54 | 55 | async predict(imageData: ImageData) { 56 | /* 57 | Given an input image data from a Canvas, 58 | preprocess the image into a tensor with pixel values of [0,1], center crop to a square 59 | and resize to the image input size, then run the prediction! 60 | */ 61 | // load our model if we don't have it yet 62 | if(!this.model) { 63 | await this.load(); 64 | } 65 | // use tf tidy to dispose of intermediate tensors automatically 66 | const confidencesTensor = tf.tidy(() => { 67 | // create a tensor from the canvas image data 68 | const image = tf.browser.fromPixels(imageData); 69 | const [imgHeight, imgWidth] = image.shape.slice(0,2); 70 | // convert image to 0-1 71 | const normalizedImage = tf.div(image, tf.scalar(255)); 72 | // make into a batch of 1 so it is shaped [1, height, width, 3] 73 | const batchImage: tf.Tensor4D = tf.expandDims(normalizedImage); 74 | // center crop and resize 75 | /* 76 | Instead of center cropping, you can use any number of methods for making the image square and the right shape. 77 | You can resize (squeeze or expand height/width to fit), pad with 0's so that the whole image is square and has black bars, 78 | or pad with different pixel values like mirroring. We recommend using the same resize function here that was used during 79 | training or the creation of your dataset. Lobe by default with center crop to the square. 80 | */ 81 | let top = 0; 82 | let left = 0; 83 | let bottom = 1; 84 | let right = 1; 85 | if (imgHeight !== imgWidth) { 86 | // the crops are normalized 0-1 percentage of the image dimension 87 | const size = Math.min(imgHeight, imgWidth); 88 | left = (imgWidth - size) / 2 / imgWidth; 89 | top = (imgHeight - size) / 2 / imgHeight; 90 | right = (imgWidth + size) / 2 / imgWidth; 91 | bottom = (imgHeight + size) / 2 / imgHeight; 92 | } 93 | // center crop our image and resize it to the size found in signature.json 94 | const croppedImage = tf.image.cropAndResize( 95 | batchImage, [[top, left, bottom, right]], [0], [this.height, this.width] 96 | ); 97 | // run the model on our image and await the results as an array 98 | if (this.model) { 99 | return this.model.execute( 100 | {[this.signature.inputs[this.inputKey].name]: croppedImage}, this.outputName 101 | ); 102 | } 103 | }) as (tf.Tensor | undefined); 104 | if (confidencesTensor) { 105 | // grab the array of values from the tensor data 106 | const confidencesArray = await confidencesTensor.data(); 107 | // now that we have the array values, we can dispose the tensor and free memory 108 | confidencesTensor.dispose(); 109 | // return a map of [label]: confidence computed by the model 110 | // the list of labels maps in the same index order as the outputs from the results 111 | return { 112 | [this.outputKey]: this.labels.reduce( 113 | (returnConfidences, label, idx) => { 114 | return {[label]: confidencesArray[idx], ...returnConfidences} 115 | }, {} 116 | ) 117 | } 118 | } 119 | } 120 | } 121 | 122 | export default ImageClassificationModel 123 | -------------------------------------------------------------------------------- /public/model/model.json: -------------------------------------------------------------------------------- 1 | {"format": "graph-model", "generatedBy": "1.15.4", "convertedBy": "TensorFlow.js Converter v2.7.0", "userDefinedMetadata": {"signature": {"inputs": {"Image:0": {"name": "Image:0", "dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "-1"}, {"size": "224"}, {"size": "224"}, {"size": "3"}]}}}, "outputs": {"62cfdd88-22bb-4601-8fbf-dc96ae2dcd12.cc3455b9-54e6-4a06-a65d-97205ca63ce4/dense_2/Softmax:0": {"name": "62cfdd88-22bb-4601-8fbf-dc96ae2dcd12.cc3455b9-54e6-4a06-a65d-97205ca63ce4/dense_2/Softmax:0", "dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "-1"}, {"size": "3"}]}}}}}, "modelTopology": {"node": [{"name": "Image", "op": "Placeholder", "attr": {"shape": {"shape": {"dim": [{"size": "-1"}, {"size": "224"}, {"size": "224"}, {"size": "3"}]}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/global_max_pooling2d/Max/reduction_indices", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "dense_2/kernel", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "512"}, {"size": "3"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "dense/kernel", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1280"}, {"size": "1024"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "dense/bias", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1024"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "dense_1/kernel", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1024"}, {"size": "512"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "dense_2/bias", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "dense_1/bias", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "512"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/tf_op_layer_Mul/Mul/y", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/tf_op_layer_Sub/Sub/y", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/Conv1_pad/Pad/paddings", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_INT32", "tensorShape": {"dim": [{"size": "4"}, {"size": "2"}]}}}, "dtype": {"type": "DT_INT32"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/Conv_1/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "320"}, {"size": "1280"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/Conv1/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "3"}, {"size": "32"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "960"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/Conv1/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "32"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "32"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "32"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "32"}, {"size": "16"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "16"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "16"}, {"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "960"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "96"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "960"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "144"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "144"}, {"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "960"}, {"size": "160"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "24"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "24"}, {"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/Conv_1/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1280"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "160"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "144"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "144"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "144"}, {"size": "32"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "32"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "32"}, {"size": "192"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "192"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "160"}, {"size": "960"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "192"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "192"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "192"}, {"size": "32"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "32"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "32"}, {"size": "192"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "960"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "192"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "192"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "192"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "192"}, {"size": "32"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "32"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "32"}, {"size": "192"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "960"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "192"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "192"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "192"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "192"}, {"size": "64"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "960"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "64"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "64"}, {"size": "384"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "384"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "384"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "384"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "384"}, {"size": "64"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "960"}, {"size": "160"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "64"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "64"}, {"size": "384"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "384"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "160"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "384"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "384"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "384"}, {"size": "64"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "64"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "64"}, {"size": "384"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "384"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "160"}, {"size": "960"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "384"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "384"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "384"}, {"size": "64"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "64"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "64"}, {"size": "384"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "960"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "384"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "384"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "384"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "384"}, {"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "576"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "960"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "576"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "576"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "576"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "576"}, {"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "960"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "576"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "576"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "576"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "576"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "576"}, {"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "960"}, {"size": "320"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "96"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "96"}, {"size": "576"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_expand/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "576"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "320"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_depthwise/depthwise_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "3"}, {"size": "3"}, {"size": "576"}, {"size": "1"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_depthwise/depthwise_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "576"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_project/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "576"}, {"size": "160"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_project/Conv2D_bn_offset", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "160"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_expand/Conv2D_weights", "op": "Const", "attr": {"value": {"tensor": {"dtype": "DT_FLOAT", "tensorShape": {"dim": [{"size": "1"}, {"size": "1"}, {"size": "160"}, {"size": "960"}]}}}, "dtype": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/tf_op_layer_Mul/Mul", "op": "Mul", "input": ["Image", "saved_mobilenet_model/tf_op_layer_Mul/Mul/y"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/tf_op_layer_Sub/Sub", "op": "Sub", "input": ["saved_mobilenet_model/tf_op_layer_Mul/Mul", "saved_mobilenet_model/tf_op_layer_Sub/Sub/y"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/Conv1_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/tf_op_layer_Sub/Sub", "saved_mobilenet_model/mobilenetv2_1.00_224/Conv1/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/Conv1/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "explicit_paddings": {"list": {"i": ["0", "0", "0", "1", "0", "1", "0", "0"]}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "RVhQTElDSVQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/Conv1_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_project_BN/FusedBatchNormV3", "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_pad/Pad", "op": "Pad", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_1_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/Conv1_pad/Pad/paddings"], "attr": {"T": {"type": "DT_FLOAT"}, "Tpaddings": {"type": "DT_INT32"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_1_pad/Pad", "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_1_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_1_project_BN/FusedBatchNormV3", "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_2_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_2_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_add/add", "op": "AddV2", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_1_project_BN/FusedBatchNormV3", "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_project_BN/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_2_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_pad/Pad", "op": "Pad", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_3_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/Conv1_pad/Pad/paddings"], "attr": {"T": {"type": "DT_FLOAT"}, "Tpaddings": {"type": "DT_INT32"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_3_pad/Pad", "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_3_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_3_project_BN/FusedBatchNormV3", "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_4_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_4_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_add/add", "op": "AddV2", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_3_project_BN/FusedBatchNormV3", "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_project_BN/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_4_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_5_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_5_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_add/add", "op": "AddV2", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_4_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_project_BN/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_5_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_pad/Pad", "op": "Pad", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_6_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/Conv1_pad/Pad/paddings"], "attr": {"T": {"type": "DT_FLOAT"}, "Tpaddings": {"type": "DT_INT32"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_6_pad/Pad", "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_6_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_6_project_BN/FusedBatchNormV3", "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_7_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_7_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_add/add", "op": "AddV2", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_6_project_BN/FusedBatchNormV3", "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_project_BN/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_7_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_8_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_8_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_add/add", "op": "AddV2", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_7_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_project_BN/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_8_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_9_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_9_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_add/add", "op": "AddV2", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_8_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_project_BN/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_9_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_10_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_10_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_10_project_BN/FusedBatchNormV3", "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_11_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_11_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_add/add", "op": "AddV2", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_10_project_BN/FusedBatchNormV3", "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_project_BN/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_11_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_12_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_12_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_add/add", "op": "AddV2", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_11_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_project_BN/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_12_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_pad/Pad", "op": "Pad", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_13_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/Conv1_pad/Pad/paddings"], "attr": {"T": {"type": "DT_FLOAT"}, "Tpaddings": {"type": "DT_INT32"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_13_pad/Pad", "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "2", "2", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_13_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_13_project_BN/FusedBatchNormV3", "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_14_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_14_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_add/add", "op": "AddV2", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_13_project_BN/FusedBatchNormV3", "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_project_BN/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_14_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_15_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_15_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_add/add", "op": "AddV2", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_14_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_project_BN/FusedBatchNormV3"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_expand_relu/Relu6", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_15_add/add", "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_expand/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_expand/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_depthwise/depthwise", "op": "FusedDepthwiseConv2dNative", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_16_expand_relu/Relu6", "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_depthwise/depthwise_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_depthwise/depthwise_bn_offset"], "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "data_format": {"s": "TkhXQw=="}, "num_args": {"i": "1"}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "UmVsdTY="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_project_BN/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_16_depthwise/depthwise", "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_project/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_project/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "U0FNRQ=="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/Conv_1_bn/FusedBatchNormV3", "op": "_FusedConv2D", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/block_16_project_BN/FusedBatchNormV3", "saved_mobilenet_model/mobilenetv2_1.00_224/Conv_1/Conv2D_weights", "saved_mobilenet_model/mobilenetv2_1.00_224/Conv_1/Conv2D_bn_offset"], "device": "/device:CPU:0", "attr": {"dilations": {"list": {"i": ["1", "1", "1", "1"]}}, "T": {"type": "DT_FLOAT"}, "data_format": {"s": "TkhXQw=="}, "strides": {"list": {"i": ["1", "1", "1", "1"]}}, "explicit_paddings": {"list": {}}, "use_cudnn_on_gpu": {"b": true}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "padding": {"s": "VkFMSUQ="}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/global_max_pooling2d/Max", "op": "Max", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/Conv_1_bn/FusedBatchNormV3", "saved_mobilenet_model/mobilenetv2_1.00_224/global_max_pooling2d/Max/reduction_indices"], "attr": {"keep_dims": {"b": false}, "Tidx": {"type": "DT_INT32"}, "T": {"type": "DT_FLOAT"}}}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/out_relu/Relu6", "op": "Relu6", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/global_max_pooling2d/Max"], "attr": {"T": {"type": "DT_FLOAT"}}}, {"name": "62cfdd88-22bb-4601-8fbf-dc96ae2dcd12.cc3455b9-54e6-4a06-a65d-97205ca63ce4/dense/Elu", "op": "_FusedMatMul", "input": ["saved_mobilenet_model/mobilenetv2_1.00_224/out_relu/Relu6", "dense/kernel", "dense/bias"], "device": "/device:CPU:0", "attr": {"transpose_b": {"b": false}, "T": {"type": "DT_FLOAT"}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "RWx1"]}}, "transpose_a": {"b": false}}}, {"name": "62cfdd88-22bb-4601-8fbf-dc96ae2dcd12.cc3455b9-54e6-4a06-a65d-97205ca63ce4/dense_1/Elu", "op": "_FusedMatMul", "input": ["62cfdd88-22bb-4601-8fbf-dc96ae2dcd12.cc3455b9-54e6-4a06-a65d-97205ca63ce4/dense/Elu", "dense_1/kernel", "dense_1/bias"], "device": "/device:CPU:0", "attr": {"transpose_b": {"b": false}, "T": {"type": "DT_FLOAT"}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA==", "RWx1"]}}, "transpose_a": {"b": false}}}, {"name": "62cfdd88-22bb-4601-8fbf-dc96ae2dcd12.cc3455b9-54e6-4a06-a65d-97205ca63ce4/dense_2/BiasAdd", "op": "_FusedMatMul", "input": ["62cfdd88-22bb-4601-8fbf-dc96ae2dcd12.cc3455b9-54e6-4a06-a65d-97205ca63ce4/dense_1/Elu", "dense_2/kernel", "dense_2/bias"], "device": "/device:CPU:0", "attr": {"transpose_b": {"b": false}, "T": {"type": "DT_FLOAT"}, "num_args": {"i": "1"}, "epsilon": {"f": 0.0}, "fused_ops": {"list": {"s": ["Qmlhc0FkZA=="]}}, "transpose_a": {"b": false}}}, {"name": "62cfdd88-22bb-4601-8fbf-dc96ae2dcd12.cc3455b9-54e6-4a06-a65d-97205ca63ce4/dense_2/Softmax", "op": "Softmax", "input": ["62cfdd88-22bb-4601-8fbf-dc96ae2dcd12.cc3455b9-54e6-4a06-a65d-97205ca63ce4/dense_2/BiasAdd"], "attr": {"T": {"type": "DT_FLOAT"}}}], "library": {}, "versions": {}}, "modelInitializer": {"versions": {}}, "weightsManifest": [{"paths": ["group1-shard1of4.bin", "group1-shard2of4.bin", "group1-shard3of4.bin", "group1-shard4of4.bin"], "weights": [{"name": "saved_mobilenet_model/mobilenetv2_1.00_224/global_max_pooling2d/Max/reduction_indices", "shape": [2], "dtype": "int32"}, {"name": "dense_2/kernel", "shape": [512, 3], "dtype": "float32"}, {"name": "dense/kernel", "shape": [1280, 1024], "dtype": "float32"}, {"name": "dense/bias", "shape": [1024], "dtype": "float32"}, {"name": "dense_1/kernel", "shape": [1024, 512], "dtype": "float32"}, {"name": "dense_2/bias", "shape": [3], "dtype": "float32"}, {"name": "dense_1/bias", "shape": [512], "dtype": "float32"}, {"name": "saved_mobilenet_model/tf_op_layer_Mul/Mul/y", "shape": [], "dtype": "float32"}, {"name": "saved_mobilenet_model/tf_op_layer_Sub/Sub/y", "shape": [], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/Conv1_pad/Pad/paddings", "shape": [4, 2], "dtype": "int32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/Conv_1/Conv2D_weights", "shape": [1, 1, 320, 1280], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/Conv1/Conv2D_weights", "shape": [3, 3, 3, 32], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_expand/Conv2D_bn_offset", "shape": [960], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/Conv1/Conv2D_bn_offset", "shape": [32], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_depthwise/depthwise_weights", "shape": [3, 3, 32, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_depthwise/depthwise_bn_offset", "shape": [32], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_project/Conv2D_weights", "shape": [1, 1, 32, 16], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/expanded_conv_project/Conv2D_bn_offset", "shape": [16], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_expand/Conv2D_weights", "shape": [1, 1, 16, 96], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_depthwise/depthwise_weights", "shape": [3, 3, 960, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_expand/Conv2D_bn_offset", "shape": [96], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_depthwise/depthwise_weights", "shape": [3, 3, 96, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_depthwise/depthwise_bn_offset", "shape": [96], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_project/Conv2D_weights", "shape": [1, 1, 96, 24], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_depthwise/depthwise_bn_offset", "shape": [960], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_1_project/Conv2D_bn_offset", "shape": [24], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_expand/Conv2D_weights", "shape": [1, 1, 24, 144], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_expand/Conv2D_bn_offset", "shape": [144], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_depthwise/depthwise_weights", "shape": [3, 3, 144, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_depthwise/depthwise_bn_offset", "shape": [144], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_project/Conv2D_weights", "shape": [1, 1, 144, 24], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_project/Conv2D_weights", "shape": [1, 1, 960, 160], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_2_project/Conv2D_bn_offset", "shape": [24], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_expand/Conv2D_weights", "shape": [1, 1, 24, 144], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/Conv_1/Conv2D_bn_offset", "shape": [1280], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_expand/Conv2D_bn_offset", "shape": [144], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_project/Conv2D_bn_offset", "shape": [160], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_depthwise/depthwise_weights", "shape": [3, 3, 144, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_depthwise/depthwise_bn_offset", "shape": [144], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_project/Conv2D_weights", "shape": [1, 1, 144, 32], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_3_project/Conv2D_bn_offset", "shape": [32], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_expand/Conv2D_weights", "shape": [1, 1, 32, 192], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_expand/Conv2D_bn_offset", "shape": [192], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_expand/Conv2D_weights", "shape": [1, 1, 160, 960], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_depthwise/depthwise_weights", "shape": [3, 3, 192, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_depthwise/depthwise_bn_offset", "shape": [192], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_project/Conv2D_weights", "shape": [1, 1, 192, 32], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_4_project/Conv2D_bn_offset", "shape": [32], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_expand/Conv2D_weights", "shape": [1, 1, 32, 192], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_expand/Conv2D_bn_offset", "shape": [960], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_expand/Conv2D_bn_offset", "shape": [192], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_depthwise/depthwise_weights", "shape": [3, 3, 192, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_depthwise/depthwise_bn_offset", "shape": [192], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_project/Conv2D_weights", "shape": [1, 1, 192, 32], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_5_project/Conv2D_bn_offset", "shape": [32], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_expand/Conv2D_weights", "shape": [1, 1, 32, 192], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_depthwise/depthwise_weights", "shape": [3, 3, 960, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_expand/Conv2D_bn_offset", "shape": [192], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_depthwise/depthwise_weights", "shape": [3, 3, 192, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_depthwise/depthwise_bn_offset", "shape": [192], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_project/Conv2D_weights", "shape": [1, 1, 192, 64], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_depthwise/depthwise_bn_offset", "shape": [960], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_6_project/Conv2D_bn_offset", "shape": [64], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_expand/Conv2D_weights", "shape": [1, 1, 64, 384], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_expand/Conv2D_bn_offset", "shape": [384], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_depthwise/depthwise_weights", "shape": [3, 3, 384, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_depthwise/depthwise_bn_offset", "shape": [384], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_project/Conv2D_weights", "shape": [1, 1, 384, 64], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_project/Conv2D_weights", "shape": [1, 1, 960, 160], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_7_project/Conv2D_bn_offset", "shape": [64], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_expand/Conv2D_weights", "shape": [1, 1, 64, 384], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_expand/Conv2D_bn_offset", "shape": [384], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_15_project/Conv2D_bn_offset", "shape": [160], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_depthwise/depthwise_weights", "shape": [3, 3, 384, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_depthwise/depthwise_bn_offset", "shape": [384], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_project/Conv2D_weights", "shape": [1, 1, 384, 64], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_8_project/Conv2D_bn_offset", "shape": [64], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_expand/Conv2D_weights", "shape": [1, 1, 64, 384], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_expand/Conv2D_bn_offset", "shape": [384], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_expand/Conv2D_weights", "shape": [1, 1, 160, 960], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_depthwise/depthwise_weights", "shape": [3, 3, 384, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_depthwise/depthwise_bn_offset", "shape": [384], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_project/Conv2D_weights", "shape": [1, 1, 384, 64], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_9_project/Conv2D_bn_offset", "shape": [64], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_expand/Conv2D_weights", "shape": [1, 1, 64, 384], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_expand/Conv2D_bn_offset", "shape": [960], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_expand/Conv2D_bn_offset", "shape": [384], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_depthwise/depthwise_weights", "shape": [3, 3, 384, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_depthwise/depthwise_bn_offset", "shape": [384], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_project/Conv2D_weights", "shape": [1, 1, 384, 96], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_10_project/Conv2D_bn_offset", "shape": [96], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_expand/Conv2D_weights", "shape": [1, 1, 96, 576], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_depthwise/depthwise_weights", "shape": [3, 3, 960, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_expand/Conv2D_bn_offset", "shape": [576], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_depthwise/depthwise_weights", "shape": [3, 3, 576, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_depthwise/depthwise_bn_offset", "shape": [576], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_project/Conv2D_weights", "shape": [1, 1, 576, 96], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_depthwise/depthwise_bn_offset", "shape": [960], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_11_project/Conv2D_bn_offset", "shape": [96], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_expand/Conv2D_weights", "shape": [1, 1, 96, 576], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_expand/Conv2D_bn_offset", "shape": [576], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_depthwise/depthwise_weights", "shape": [3, 3, 576, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_depthwise/depthwise_bn_offset", "shape": [576], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_project/Conv2D_weights", "shape": [1, 1, 576, 96], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_project/Conv2D_weights", "shape": [1, 1, 960, 320], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_12_project/Conv2D_bn_offset", "shape": [96], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_expand/Conv2D_weights", "shape": [1, 1, 96, 576], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_expand/Conv2D_bn_offset", "shape": [576], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_16_project/Conv2D_bn_offset", "shape": [320], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_depthwise/depthwise_weights", "shape": [3, 3, 576, 1], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_depthwise/depthwise_bn_offset", "shape": [576], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_project/Conv2D_weights", "shape": [1, 1, 576, 160], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_13_project/Conv2D_bn_offset", "shape": [160], "dtype": "float32"}, {"name": "saved_mobilenet_model/mobilenetv2_1.00_224/block_14_expand/Conv2D_weights", "shape": [1, 1, 160, 960], "dtype": "float32"}]}]} --------------------------------------------------------------------------------