├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── TrafficLightApp.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── CaffeApp.xcscmblueprint │ │ ├── TrafficLightApp.xcscmblueprint │ │ └── TrafficLightDetector.xcscmblueprint └── xcuserdata │ └── avihayassouline.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ ├── CaffeApp.xcscheme │ └── xcschememanagement.plist ├── TrafficLightApp ├── AppDelegate.h ├── AppDelegate.m ├── Assets │ ├── greenLight.png │ ├── noLight.png │ └── redLight.png ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Classifier.h ├── Classifier.mm ├── Info.plist ├── ViewController.h ├── ViewController.mm └── main.m ├── download_dependencies.sh ├── model ├── deploy.prototxt ├── labels.txt └── mean.binaryproto └── screenshots └── screenshot.png /.gitignore: -------------------------------------------------------------------------------- 1 | model/model.caffemodel 2 | TrafficLightApp/opencv2.framework 3 | TrafficLightApp.xcodeproj/project.xcworkspace/xcuserdata/* 4 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "caffe"] 2 | path = caffe 3 | url = https://github.com/aleph7/caffe.git 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015, Takuya Matsuyama 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 15 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 18 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 20 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 21 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 22 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TrafficLights-DeepLearning-iOS 2 | Bringing Magic To Your Mobile App With Deep Learning - Teaching Your App To Detect Traffic Lights From 18,000 Images Is The First Step In Building Your Own Self Driving Car 3 | 4 | Code for the following [blog post](https://medium.com/@avihay/bring-magic-to-your-mobile-app-with-deep-learning-184d9062d7fc) 5 | 6 | ![TrafficLights](https://raw.githubusercontent.com/asavihay/TrafficLights-DeepLearning-iOS/master/screenshots/screenshot.png) 7 | 8 | ## Get started 9 | 10 | Clone the project (recursivly) to get Caffe as well: 11 | 12 | ``` 13 | $ git clone --recursive https://github.com/asavihay/TrafficLights-DeepLearning-iOS.git 14 | ``` 15 | Fetch OpenCV2 and our model file by running the script: 16 | ``` 17 | ./download_dependencies.sh 18 | ``` 19 | 20 | Open the XCode project and run it 21 | 22 | ## DIGITS Models 23 | Using your own model is simple. Simply replace the files under the model directory with the ones your downloaded from DIGITS 24 | 25 | ## Some Tips Before Trying It Yourself 26 | * Caffe can be installed on various operating systems with or without a virtual environment. I do however recommend you to install it on a Ubuntu 14.04 machine without any virtualization (e.g. Docker/VirtualBox). It is quite complex to make it happen and you will be wasting time solving compilation problems instead of having fun. 27 | 28 | * Under normal project setup, the optimization flag for your DEBUG build setting is set to None. This will cause the prediction code to run significantly slower than your production build. If you are testing your applications performance, make sure you change the optimization flag to Fastest [-Os]. On my iPhone 7 device I experienced a X3 performance increase. 29 | 30 | ## Thanks 31 | Thanks to Aleph7 and noradaiko for the preliminary work that powered this example. 32 | -------------------------------------------------------------------------------- /TrafficLightApp.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 3C03A53F1DEDC706007B0DF7 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C03A53E1DEDC706007B0DF7 /* AVFoundation.framework */; }; 11 | 3C2B16131DEE24DE00783EC4 /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C2B16121DEE24DE00783EC4 /* CoreMedia.framework */; }; 12 | 3CC225A21E1E9974006309BF /* opencv2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CC225A11E1E9974006309BF /* opencv2.framework */; }; 13 | 3CED68021E1E4CF800EF2437 /* greenLight.png in Resources */ = {isa = PBXBuildFile; fileRef = 3CED67FF1E1E4CF800EF2437 /* greenLight.png */; }; 14 | 3CED68031E1E4CF800EF2437 /* noLight.png in Resources */ = {isa = PBXBuildFile; fileRef = 3CED68001E1E4CF800EF2437 /* noLight.png */; }; 15 | 3CED68041E1E4CF800EF2437 /* redLight.png in Resources */ = {isa = PBXBuildFile; fileRef = 3CED68011E1E4CF800EF2437 /* redLight.png */; }; 16 | 3CED68071E1E4D1500EF2437 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3CED68051E1E4D1500EF2437 /* LaunchScreen.storyboard */; }; 17 | 8824C7A11B505B940016CC3D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8824C7A01B505B940016CC3D /* main.m */; }; 18 | 8824C7A41B505B940016CC3D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8824C7A31B505B940016CC3D /* AppDelegate.m */; }; 19 | 8824C7AA1B505B940016CC3D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8824C7A81B505B940016CC3D /* Main.storyboard */; }; 20 | 8824C88D1B506D520016CC3D /* ViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8824C7A61B505B940016CC3D /* ViewController.mm */; }; 21 | 8824C88E1B506D530016CC3D /* ViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8824C7A61B505B940016CC3D /* ViewController.mm */; }; 22 | 885E90F31B507651003B736E /* blob.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90251B507650003B736E /* blob.cpp */; }; 23 | 885E90F51B507651003B736E /* common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90271B507650003B736E /* common.cpp */; }; 24 | 885E90F61B507651003B736E /* data_transformer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90281B507650003B736E /* data_transformer.cpp */; }; 25 | 885E90F71B507651003B736E /* internal_thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90291B507650003B736E /* internal_thread.cpp */; }; 26 | 885E90F81B507651003B736E /* layer_factory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E902A1B507650003B736E /* layer_factory.cpp */; }; 27 | 885E90F91B507651003B736E /* absval_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E902C1B507650003B736E /* absval_layer.cpp */; }; 28 | 885E90FB1B507651003B736E /* accuracy_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E902E1B507650003B736E /* accuracy_layer.cpp */; }; 29 | 885E90FC1B507651003B736E /* argmax_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E902F1B507650003B736E /* argmax_layer.cpp */; }; 30 | 885E90FE1B507651003B736E /* base_conv_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90311B507650003B736E /* base_conv_layer.cpp */; }; 31 | 885E90FF1B507651003B736E /* base_data_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90321B507650003B736E /* base_data_layer.cpp */; }; 32 | 885E91011B507651003B736E /* bnll_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90341B507650003B736E /* bnll_layer.cpp */; }; 33 | 885E91031B507651003B736E /* concat_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90361B507650003B736E /* concat_layer.cpp */; }; 34 | 885E91051B507651003B736E /* contrastive_loss_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90381B507650003B736E /* contrastive_loss_layer.cpp */; }; 35 | 885E91071B507651003B736E /* conv_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E903A1B507650003B736E /* conv_layer.cpp */; }; 36 | 885E91091B507651003B736E /* cudnn_conv_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E903C1B507650003B736E /* cudnn_conv_layer.cpp */; }; 37 | 885E910B1B507651003B736E /* cudnn_pooling_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E903E1B507650003B736E /* cudnn_pooling_layer.cpp */; }; 38 | 885E910D1B507651003B736E /* cudnn_relu_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90401B507650003B736E /* cudnn_relu_layer.cpp */; }; 39 | 885E910F1B507651003B736E /* cudnn_sigmoid_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90421B507650003B736E /* cudnn_sigmoid_layer.cpp */; }; 40 | 885E91111B507651003B736E /* cudnn_softmax_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90441B507650003B736E /* cudnn_softmax_layer.cpp */; }; 41 | 885E91131B507651003B736E /* cudnn_tanh_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90461B507650003B736E /* cudnn_tanh_layer.cpp */; }; 42 | 885E91151B507651003B736E /* data_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90481B507650003B736E /* data_layer.cpp */; }; 43 | 885E91161B507651003B736E /* deconv_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90491B507650003B736E /* deconv_layer.cpp */; }; 44 | 885E91181B507651003B736E /* dropout_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E904B1B507650003B736E /* dropout_layer.cpp */; }; 45 | 885E911A1B507651003B736E /* dummy_data_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E904D1B507650003B736E /* dummy_data_layer.cpp */; }; 46 | 885E911B1B507651003B736E /* eltwise_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E904E1B507650003B736E /* eltwise_layer.cpp */; }; 47 | 885E911D1B507651003B736E /* euclidean_loss_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90501B507650003B736E /* euclidean_loss_layer.cpp */; }; 48 | 885E911F1B507651003B736E /* exp_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90521B507650003B736E /* exp_layer.cpp */; }; 49 | 885E91211B507651003B736E /* filter_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90541B507650003B736E /* filter_layer.cpp */; }; 50 | 885E91231B507651003B736E /* flatten_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90561B507650003B736E /* flatten_layer.cpp */; }; 51 | 885E91281B507651003B736E /* hinge_loss_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E905B1B507650003B736E /* hinge_loss_layer.cpp */; }; 52 | 885E91291B507651003B736E /* im2col_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E905C1B507650003B736E /* im2col_layer.cpp */; }; 53 | 885E912C1B507651003B736E /* infogain_loss_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E905F1B507650003B736E /* infogain_loss_layer.cpp */; }; 54 | 885E912D1B507651003B736E /* inner_product_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90601B507650003B736E /* inner_product_layer.cpp */; }; 55 | 885E912F1B507651003B736E /* log_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90621B507650003B736E /* log_layer.cpp */; }; 56 | 885E91311B507651003B736E /* loss_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90641B507650003B736E /* loss_layer.cpp */; }; 57 | 885E91321B507651003B736E /* lrn_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90651B507650003B736E /* lrn_layer.cpp */; }; 58 | 885E91341B507651003B736E /* memory_data_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90671B507650003B736E /* memory_data_layer.cpp */; }; 59 | 885E91351B507651003B736E /* multinomial_logistic_loss_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90681B507650003B736E /* multinomial_logistic_loss_layer.cpp */; }; 60 | 885E91361B507651003B736E /* mvn_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90691B507650003B736E /* mvn_layer.cpp */; }; 61 | 885E91381B507651003B736E /* neuron_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E906B1B507650003B736E /* neuron_layer.cpp */; }; 62 | 885E91391B507651003B736E /* pooling_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E906C1B507650003B736E /* pooling_layer.cpp */; }; 63 | 885E913B1B507651003B736E /* power_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E906E1B507650003B736E /* power_layer.cpp */; }; 64 | 885E913D1B507651003B736E /* prelu_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90701B507650003B736E /* prelu_layer.cpp */; }; 65 | 885E913F1B507651003B736E /* reduction_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90721B507651003B736E /* reduction_layer.cpp */; }; 66 | 885E91411B507651003B736E /* relu_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90741B507651003B736E /* relu_layer.cpp */; }; 67 | 885E91431B507651003B736E /* reshape_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90761B507651003B736E /* reshape_layer.cpp */; }; 68 | 885E91441B507651003B736E /* sigmoid_cross_entropy_loss_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90771B507651003B736E /* sigmoid_cross_entropy_loss_layer.cpp */; }; 69 | 885E91461B507651003B736E /* sigmoid_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90791B507651003B736E /* sigmoid_layer.cpp */; }; 70 | 885E91481B507651003B736E /* silence_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E907B1B507651003B736E /* silence_layer.cpp */; }; 71 | 885E914A1B507651003B736E /* slice_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E907D1B507651003B736E /* slice_layer.cpp */; }; 72 | 885E914C1B507651003B736E /* softmax_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E907F1B507651003B736E /* softmax_layer.cpp */; }; 73 | 885E914E1B507651003B736E /* softmax_loss_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90811B507651003B736E /* softmax_loss_layer.cpp */; }; 74 | 885E91501B507651003B736E /* split_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90831B507651003B736E /* split_layer.cpp */; }; 75 | 885E91521B507651003B736E /* spp_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90851B507651003B736E /* spp_layer.cpp */; }; 76 | 885E91531B507651003B736E /* tanh_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90861B507651003B736E /* tanh_layer.cpp */; }; 77 | 885E91551B507651003B736E /* threshold_layer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90881B507651003B736E /* threshold_layer.cpp */; }; 78 | 885E91581B507651003B736E /* net.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E908B1B507651003B736E /* net.cpp */; }; 79 | 885E915A1B507651003B736E /* solver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E908E1B507651003B736E /* solver.cpp */; }; 80 | 885E915B1B507651003B736E /* syncedmem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E908F1B507651003B736E /* syncedmem.cpp */; }; 81 | 885E919C1B507651003B736E /* benchmark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90D31B507651003B736E /* benchmark.cpp */; }; 82 | 885E919D1B507651003B736E /* cudnn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90D41B507651003B736E /* cudnn.cpp */; }; 83 | 885E919E1B507651003B736E /* db.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90D51B507651003B736E /* db.cpp */; }; 84 | 885E919F1B507651003B736E /* db_leveldb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90D61B507651003B736E /* db_leveldb.cpp */; }; 85 | 885E91A01B507651003B736E /* db_lmdb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90D71B507651003B736E /* db_lmdb.cpp */; }; 86 | 885E91A21B507651003B736E /* im2col.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90D91B507651003B736E /* im2col.cpp */; }; 87 | 885E91A31B507651003B736E /* im2col.cu in Resources */ = {isa = PBXBuildFile; fileRef = 885E90DA1B507651003B736E /* im2col.cu */; }; 88 | 885E91A41B507651003B736E /* insert_splits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90DB1B507651003B736E /* insert_splits.cpp */; }; 89 | 885E91A51B507651003B736E /* io.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90DC1B507651003B736E /* io.cpp */; }; 90 | 885E91A61B507651003B736E /* math_functions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90DD1B507651003B736E /* math_functions.cpp */; }; 91 | 885E91A71B507651003B736E /* math_functions.cu in Resources */ = {isa = PBXBuildFile; fileRef = 885E90DE1B507651003B736E /* math_functions.cu */; }; 92 | 885E91A91B507651003B736E /* upgrade_proto.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 885E90E01B507651003B736E /* upgrade_proto.cpp */; }; 93 | 885E91AA1B507651003B736E /* gflags.cc in Sources */ = {isa = PBXBuildFile; fileRef = 885E90E31B507651003B736E /* gflags.cc */; }; 94 | 885E91AB1B507651003B736E /* gflags_completions.cc in Sources */ = {isa = PBXBuildFile; fileRef = 885E90E51B507651003B736E /* gflags_completions.cc */; }; 95 | 885E91AC1B507651003B736E /* gflags_reporting.cc in Sources */ = {isa = PBXBuildFile; fileRef = 885E90E91B507651003B736E /* gflags_reporting.cc */; }; 96 | 885E91B21B507664003B736E /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 885E91B11B507664003B736E /* Accelerate.framework */; }; 97 | 885E91B41B50766D003B736E /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 885E91B31B50766D003B736E /* AudioToolbox.framework */; }; 98 | 885E91BA1B507693003B736E /* libglog.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 885E91B61B507693003B736E /* libglog.a */; }; 99 | 885E91BC1B507693003B736E /* libprotobuf.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 885E91B81B507693003B736E /* libprotobuf.a */; }; 100 | 885E91BD1B507693003B736E /* libprotoc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 885E91B91B507693003B736E /* libprotoc.a */; }; 101 | 8870DA491B5920FC0053CB1B /* libleveldb.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8870DA481B5920FC0053CB1B /* libleveldb.a */; }; 102 | 8870DA4A1B5921060053CB1B /* libleveldb.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8870DA481B5920FC0053CB1B /* libleveldb.a */; }; 103 | 888C36AC1B508D300012410E /* caffe.proto in Resources */ = {isa = PBXBuildFile; fileRef = 888C36AB1B508D300012410E /* caffe.proto */; }; 104 | 888C36B01B5091220012410E /* caffe.proto in Sources */ = {isa = PBXBuildFile; fileRef = 888C36AB1B508D300012410E /* caffe.proto */; }; 105 | 889BC3381B506EE700F4EB41 /* Classifier.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8824C88A1B506B8D0016CC3D /* Classifier.mm */; }; 106 | 889BC3391B506EE800F4EB41 /* Classifier.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8824C88A1B506B8D0016CC3D /* Classifier.mm */; }; 107 | 88BE9ED41B5749060076137A /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 885E91B31B50766D003B736E /* AudioToolbox.framework */; }; 108 | 88BE9ED51B5749090076137A /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 885E91B11B507664003B736E /* Accelerate.framework */; }; 109 | 88BE9ED61B5749E60076137A /* libglog.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 885E91B61B507693003B736E /* libglog.a */; }; 110 | 88BE9ED81B5749E60076137A /* libprotobuf.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 885E91B81B507693003B736E /* libprotobuf.a */; }; 111 | 88BE9ED91B5749E60076137A /* libprotoc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 885E91B91B507693003B736E /* libprotoc.a */; }; 112 | 88BE9EE21B5763C70076137A /* model in Resources */ = {isa = PBXBuildFile; fileRef = 88BE9EE11B5763C70076137A /* model */; }; 113 | 88BE9EE31B5763C70076137A /* model in Resources */ = {isa = PBXBuildFile; fileRef = 88BE9EE11B5763C70076137A /* model */; }; 114 | /* End PBXBuildFile section */ 115 | 116 | /* Begin PBXBuildRule section */ 117 | 888C36AD1B508D590012410E /* PBXBuildRule */ = { 118 | isa = PBXBuildRule; 119 | compilerSpec = com.apple.compilers.proxy.script; 120 | filePatterns = "*.proto"; 121 | fileType = pattern.proxy; 122 | isEditable = 1; 123 | name = "Generate protobuf files"; 124 | outputFiles = ( 125 | "$(DERIVED_FILE_DIR)/caffe/proto/$(INPUT_FILE_BASE).pb.h", 126 | "$(DERIVED_FILE_DIR)/caffe/proto/$(INPUT_FILE_BASE).pb.cc", 127 | ); 128 | script = "mkdir -p \"$DERIVED_FILE_DIR/caffe/proto\"\nmkdir -p \"$PROJECT_DIR/caffe/include/caffe/proto\"\n\n\"$PROJECT_DIR/caffe/bin/protoc\" --proto_path=\"$INPUT_FILE_DIR\" --cpp_out=\"$DERIVED_FILE_DIR/caffe/proto\" \"$INPUT_FILE_PATH\"\n\ncp \"$DERIVED_FILE_DIR/caffe/proto/$INPUT_FILE_BASE.pb.h\" \"$PROJECT_DIR/caffe/include/caffe/proto\""; 129 | }; 130 | /* End PBXBuildRule section */ 131 | 132 | /* Begin PBXContainerItemProxy section */ 133 | 8824C7B51B505B940016CC3D /* PBXContainerItemProxy */ = { 134 | isa = PBXContainerItemProxy; 135 | containerPortal = 8824C7931B505B940016CC3D /* Project object */; 136 | proxyType = 1; 137 | remoteGlobalIDString = 8824C79A1B505B940016CC3D; 138 | remoteInfo = CaffeApp; 139 | }; 140 | /* End PBXContainerItemProxy section */ 141 | 142 | /* Begin PBXCopyFilesBuildPhase section */ 143 | 888C36AE1B508FB80012410E /* CopyFiles */ = { 144 | isa = PBXCopyFilesBuildPhase; 145 | buildActionMask = 2147483647; 146 | dstPath = "include/$(PRODUCT_NAME)"; 147 | dstSubfolderSpec = 16; 148 | files = ( 149 | ); 150 | runOnlyForDeploymentPostprocessing = 0; 151 | }; 152 | /* End PBXCopyFilesBuildPhase section */ 153 | 154 | /* Begin PBXFileReference section */ 155 | 3C03A53E1DEDC706007B0DF7 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; 156 | 3C2B16121DEE24DE00783EC4 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; 157 | 3CC225A11E1E9974006309BF /* opencv2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = opencv2.framework; sourceTree = ""; }; 158 | 3CED67FF1E1E4CF800EF2437 /* greenLight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = greenLight.png; sourceTree = ""; }; 159 | 3CED68001E1E4CF800EF2437 /* noLight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = noLight.png; sourceTree = ""; }; 160 | 3CED68011E1E4CF800EF2437 /* redLight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = redLight.png; sourceTree = ""; }; 161 | 3CED68061E1E4D1500EF2437 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 162 | 8824C79B1B505B940016CC3D /* TrafficLightApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TrafficLightApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 163 | 8824C79F1B505B940016CC3D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 164 | 8824C7A01B505B940016CC3D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 165 | 8824C7A21B505B940016CC3D /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 166 | 8824C7A31B505B940016CC3D /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 167 | 8824C7A51B505B940016CC3D /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 168 | 8824C7A61B505B940016CC3D /* ViewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ViewController.mm; sourceTree = ""; }; 169 | 8824C7A91B505B940016CC3D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 170 | 8824C7B41B505B940016CC3D /* TrafficLightAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TrafficLightAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 171 | 8824C8891B506B8D0016CC3D /* Classifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Classifier.h; path = ../TrafficLightApp/Classifier.h; sourceTree = ""; }; 172 | 8824C88A1B506B8D0016CC3D /* Classifier.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Classifier.mm; path = ../TrafficLightApp/Classifier.mm; sourceTree = ""; }; 173 | 885E90251B507650003B736E /* blob.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = blob.cpp; sourceTree = ""; }; 174 | 885E90271B507650003B736E /* common.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = common.cpp; sourceTree = ""; }; 175 | 885E90281B507650003B736E /* data_transformer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = data_transformer.cpp; sourceTree = ""; }; 176 | 885E90291B507650003B736E /* internal_thread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = internal_thread.cpp; sourceTree = ""; }; 177 | 885E902A1B507650003B736E /* layer_factory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = layer_factory.cpp; sourceTree = ""; }; 178 | 885E902C1B507650003B736E /* absval_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = absval_layer.cpp; sourceTree = ""; }; 179 | 885E902D1B507650003B736E /* absval_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = absval_layer.cu; sourceTree = ""; }; 180 | 885E902E1B507650003B736E /* accuracy_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = accuracy_layer.cpp; sourceTree = ""; }; 181 | 885E902F1B507650003B736E /* argmax_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = argmax_layer.cpp; sourceTree = ""; }; 182 | 885E90311B507650003B736E /* base_conv_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = base_conv_layer.cpp; sourceTree = ""; }; 183 | 885E90321B507650003B736E /* base_data_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = base_data_layer.cpp; sourceTree = ""; }; 184 | 885E90331B507650003B736E /* base_data_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = base_data_layer.cu; sourceTree = ""; }; 185 | 885E90341B507650003B736E /* bnll_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bnll_layer.cpp; sourceTree = ""; }; 186 | 885E90351B507650003B736E /* bnll_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bnll_layer.cu; sourceTree = ""; }; 187 | 885E90361B507650003B736E /* concat_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = concat_layer.cpp; sourceTree = ""; }; 188 | 885E90371B507650003B736E /* concat_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = concat_layer.cu; sourceTree = ""; }; 189 | 885E90381B507650003B736E /* contrastive_loss_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = contrastive_loss_layer.cpp; sourceTree = ""; }; 190 | 885E90391B507650003B736E /* contrastive_loss_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = contrastive_loss_layer.cu; sourceTree = ""; }; 191 | 885E903A1B507650003B736E /* conv_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = conv_layer.cpp; sourceTree = ""; }; 192 | 885E903B1B507650003B736E /* conv_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = conv_layer.cu; sourceTree = ""; }; 193 | 885E903C1B507650003B736E /* cudnn_conv_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cudnn_conv_layer.cpp; sourceTree = ""; }; 194 | 885E903D1B507650003B736E /* cudnn_conv_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cudnn_conv_layer.cu; sourceTree = ""; }; 195 | 885E903E1B507650003B736E /* cudnn_pooling_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cudnn_pooling_layer.cpp; sourceTree = ""; }; 196 | 885E903F1B507650003B736E /* cudnn_pooling_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cudnn_pooling_layer.cu; sourceTree = ""; }; 197 | 885E90401B507650003B736E /* cudnn_relu_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cudnn_relu_layer.cpp; sourceTree = ""; }; 198 | 885E90411B507650003B736E /* cudnn_relu_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cudnn_relu_layer.cu; sourceTree = ""; }; 199 | 885E90421B507650003B736E /* cudnn_sigmoid_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cudnn_sigmoid_layer.cpp; sourceTree = ""; }; 200 | 885E90431B507650003B736E /* cudnn_sigmoid_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cudnn_sigmoid_layer.cu; sourceTree = ""; }; 201 | 885E90441B507650003B736E /* cudnn_softmax_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cudnn_softmax_layer.cpp; sourceTree = ""; }; 202 | 885E90451B507650003B736E /* cudnn_softmax_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cudnn_softmax_layer.cu; sourceTree = ""; }; 203 | 885E90461B507650003B736E /* cudnn_tanh_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cudnn_tanh_layer.cpp; sourceTree = ""; }; 204 | 885E90471B507650003B736E /* cudnn_tanh_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cudnn_tanh_layer.cu; sourceTree = ""; }; 205 | 885E90481B507650003B736E /* data_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = data_layer.cpp; sourceTree = ""; }; 206 | 885E90491B507650003B736E /* deconv_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = deconv_layer.cpp; sourceTree = ""; }; 207 | 885E904A1B507650003B736E /* deconv_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = deconv_layer.cu; sourceTree = ""; }; 208 | 885E904B1B507650003B736E /* dropout_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dropout_layer.cpp; sourceTree = ""; }; 209 | 885E904C1B507650003B736E /* dropout_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dropout_layer.cu; sourceTree = ""; }; 210 | 885E904D1B507650003B736E /* dummy_data_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dummy_data_layer.cpp; sourceTree = ""; }; 211 | 885E904E1B507650003B736E /* eltwise_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eltwise_layer.cpp; sourceTree = ""; }; 212 | 885E904F1B507650003B736E /* eltwise_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = eltwise_layer.cu; sourceTree = ""; }; 213 | 885E90501B507650003B736E /* euclidean_loss_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = euclidean_loss_layer.cpp; sourceTree = ""; }; 214 | 885E90511B507650003B736E /* euclidean_loss_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = euclidean_loss_layer.cu; sourceTree = ""; }; 215 | 885E90521B507650003B736E /* exp_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = exp_layer.cpp; sourceTree = ""; }; 216 | 885E90531B507650003B736E /* exp_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = exp_layer.cu; sourceTree = ""; }; 217 | 885E90541B507650003B736E /* filter_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = filter_layer.cpp; sourceTree = ""; }; 218 | 885E90551B507650003B736E /* filter_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = filter_layer.cu; sourceTree = ""; }; 219 | 885E90561B507650003B736E /* flatten_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flatten_layer.cpp; sourceTree = ""; }; 220 | 885E90571B507650003B736E /* hdf5_data_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hdf5_data_layer.cpp; sourceTree = ""; }; 221 | 885E90581B507650003B736E /* hdf5_data_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hdf5_data_layer.cu; sourceTree = ""; }; 222 | 885E90591B507650003B736E /* hdf5_output_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hdf5_output_layer.cpp; sourceTree = ""; }; 223 | 885E905A1B507650003B736E /* hdf5_output_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hdf5_output_layer.cu; sourceTree = ""; }; 224 | 885E905B1B507650003B736E /* hinge_loss_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hinge_loss_layer.cpp; sourceTree = ""; }; 225 | 885E905C1B507650003B736E /* im2col_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = im2col_layer.cpp; sourceTree = ""; }; 226 | 885E905D1B507650003B736E /* im2col_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = im2col_layer.cu; sourceTree = ""; }; 227 | 885E905E1B507650003B736E /* image_data_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = image_data_layer.cpp; sourceTree = ""; }; 228 | 885E905F1B507650003B736E /* infogain_loss_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = infogain_loss_layer.cpp; sourceTree = ""; }; 229 | 885E90601B507650003B736E /* inner_product_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = inner_product_layer.cpp; sourceTree = ""; }; 230 | 885E90611B507650003B736E /* inner_product_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = inner_product_layer.cu; sourceTree = ""; }; 231 | 885E90621B507650003B736E /* log_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = log_layer.cpp; sourceTree = ""; }; 232 | 885E90631B507650003B736E /* log_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = log_layer.cu; sourceTree = ""; }; 233 | 885E90641B507650003B736E /* loss_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loss_layer.cpp; sourceTree = ""; }; 234 | 885E90651B507650003B736E /* lrn_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lrn_layer.cpp; sourceTree = ""; }; 235 | 885E90661B507650003B736E /* lrn_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = lrn_layer.cu; sourceTree = ""; }; 236 | 885E90671B507650003B736E /* memory_data_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = memory_data_layer.cpp; sourceTree = ""; }; 237 | 885E90681B507650003B736E /* multinomial_logistic_loss_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = multinomial_logistic_loss_layer.cpp; sourceTree = ""; }; 238 | 885E90691B507650003B736E /* mvn_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mvn_layer.cpp; sourceTree = ""; }; 239 | 885E906A1B507650003B736E /* mvn_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mvn_layer.cu; sourceTree = ""; }; 240 | 885E906B1B507650003B736E /* neuron_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = neuron_layer.cpp; sourceTree = ""; }; 241 | 885E906C1B507650003B736E /* pooling_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pooling_layer.cpp; sourceTree = ""; }; 242 | 885E906D1B507650003B736E /* pooling_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = pooling_layer.cu; sourceTree = ""; }; 243 | 885E906E1B507650003B736E /* power_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = power_layer.cpp; sourceTree = ""; }; 244 | 885E906F1B507650003B736E /* power_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = power_layer.cu; sourceTree = ""; }; 245 | 885E90701B507650003B736E /* prelu_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = prelu_layer.cpp; sourceTree = ""; }; 246 | 885E90711B507651003B736E /* prelu_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = prelu_layer.cu; sourceTree = ""; }; 247 | 885E90721B507651003B736E /* reduction_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reduction_layer.cpp; sourceTree = ""; }; 248 | 885E90731B507651003B736E /* reduction_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = reduction_layer.cu; sourceTree = ""; }; 249 | 885E90741B507651003B736E /* relu_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = relu_layer.cpp; sourceTree = ""; }; 250 | 885E90751B507651003B736E /* relu_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = relu_layer.cu; sourceTree = ""; }; 251 | 885E90761B507651003B736E /* reshape_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reshape_layer.cpp; sourceTree = ""; }; 252 | 885E90771B507651003B736E /* sigmoid_cross_entropy_loss_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sigmoid_cross_entropy_loss_layer.cpp; sourceTree = ""; }; 253 | 885E90781B507651003B736E /* sigmoid_cross_entropy_loss_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sigmoid_cross_entropy_loss_layer.cu; sourceTree = ""; }; 254 | 885E90791B507651003B736E /* sigmoid_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sigmoid_layer.cpp; sourceTree = ""; }; 255 | 885E907A1B507651003B736E /* sigmoid_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sigmoid_layer.cu; sourceTree = ""; }; 256 | 885E907B1B507651003B736E /* silence_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = silence_layer.cpp; sourceTree = ""; }; 257 | 885E907C1B507651003B736E /* silence_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = silence_layer.cu; sourceTree = ""; }; 258 | 885E907D1B507651003B736E /* slice_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = slice_layer.cpp; sourceTree = ""; }; 259 | 885E907E1B507651003B736E /* slice_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = slice_layer.cu; sourceTree = ""; }; 260 | 885E907F1B507651003B736E /* softmax_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = softmax_layer.cpp; sourceTree = ""; }; 261 | 885E90801B507651003B736E /* softmax_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = softmax_layer.cu; sourceTree = ""; }; 262 | 885E90811B507651003B736E /* softmax_loss_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = softmax_loss_layer.cpp; sourceTree = ""; }; 263 | 885E90821B507651003B736E /* softmax_loss_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = softmax_loss_layer.cu; sourceTree = ""; }; 264 | 885E90831B507651003B736E /* split_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = split_layer.cpp; sourceTree = ""; }; 265 | 885E90841B507651003B736E /* split_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = split_layer.cu; sourceTree = ""; }; 266 | 885E90851B507651003B736E /* spp_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spp_layer.cpp; sourceTree = ""; }; 267 | 885E90861B507651003B736E /* tanh_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tanh_layer.cpp; sourceTree = ""; }; 268 | 885E90871B507651003B736E /* tanh_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tanh_layer.cu; sourceTree = ""; }; 269 | 885E90881B507651003B736E /* threshold_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = threshold_layer.cpp; sourceTree = ""; }; 270 | 885E90891B507651003B736E /* threshold_layer.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = threshold_layer.cu; sourceTree = ""; }; 271 | 885E908A1B507651003B736E /* window_data_layer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = window_data_layer.cpp; sourceTree = ""; }; 272 | 885E908B1B507651003B736E /* net.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = net.cpp; sourceTree = ""; }; 273 | 885E908E1B507651003B736E /* solver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = solver.cpp; sourceTree = ""; }; 274 | 885E908F1B507651003B736E /* syncedmem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = syncedmem.cpp; sourceTree = ""; }; 275 | 885E90D31B507651003B736E /* benchmark.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = benchmark.cpp; sourceTree = ""; }; 276 | 885E90D41B507651003B736E /* cudnn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cudnn.cpp; sourceTree = ""; }; 277 | 885E90D51B507651003B736E /* db.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = db.cpp; sourceTree = ""; }; 278 | 885E90D61B507651003B736E /* db_leveldb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = db_leveldb.cpp; sourceTree = ""; }; 279 | 885E90D71B507651003B736E /* db_lmdb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = db_lmdb.cpp; sourceTree = ""; }; 280 | 885E90D91B507651003B736E /* im2col.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = im2col.cpp; sourceTree = ""; }; 281 | 885E90DA1B507651003B736E /* im2col.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = im2col.cu; sourceTree = ""; }; 282 | 885E90DB1B507651003B736E /* insert_splits.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = insert_splits.cpp; sourceTree = ""; }; 283 | 885E90DC1B507651003B736E /* io.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = io.cpp; sourceTree = ""; }; 284 | 885E90DD1B507651003B736E /* math_functions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = math_functions.cpp; sourceTree = ""; }; 285 | 885E90DE1B507651003B736E /* math_functions.cu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = math_functions.cu; sourceTree = ""; }; 286 | 885E90E01B507651003B736E /* upgrade_proto.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = upgrade_proto.cpp; sourceTree = ""; }; 287 | 885E90E31B507651003B736E /* gflags.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gflags.cc; sourceTree = ""; }; 288 | 885E90E51B507651003B736E /* gflags_completions.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gflags_completions.cc; sourceTree = ""; }; 289 | 885E90E91B507651003B736E /* gflags_reporting.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gflags_reporting.cc; sourceTree = ""; }; 290 | 885E90EA1B507651003B736E /* mutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mutex.h; sourceTree = ""; }; 291 | 885E90EB1B507651003B736E /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; 292 | 885E91B11B507664003B736E /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; 293 | 885E91B31B50766D003B736E /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; 294 | 885E91B61B507693003B736E /* libglog.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libglog.a; sourceTree = ""; }; 295 | 885E91B81B507693003B736E /* libprotobuf.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libprotobuf.a; sourceTree = ""; }; 296 | 885E91B91B507693003B736E /* libprotoc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libprotoc.a; sourceTree = ""; }; 297 | 885E91C01B507D71003B736E /* blob.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = blob.hpp; sourceTree = ""; }; 298 | 885E91C11B507D71003B736E /* caffe.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = caffe.hpp; sourceTree = ""; }; 299 | 885E91C21B507D71003B736E /* common.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = common.hpp; sourceTree = ""; }; 300 | 885E91C31B507D71003B736E /* common_layers.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = common_layers.hpp; sourceTree = ""; }; 301 | 885E91C41B507D71003B736E /* data_layers.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = data_layers.hpp; sourceTree = ""; }; 302 | 885E91C51B507D71003B736E /* data_transformer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = data_transformer.hpp; sourceTree = ""; }; 303 | 885E91C61B507D71003B736E /* filler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = filler.hpp; sourceTree = ""; }; 304 | 885E91C71B507D71003B736E /* internal_thread.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = internal_thread.hpp; sourceTree = ""; }; 305 | 885E91C81B507D71003B736E /* layer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = layer.hpp; sourceTree = ""; }; 306 | 885E91C91B507D71003B736E /* layer_factory.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = layer_factory.hpp; sourceTree = ""; }; 307 | 885E91CA1B507D71003B736E /* loss_layers.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = loss_layers.hpp; sourceTree = ""; }; 308 | 885E91CB1B507D71003B736E /* net.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = net.hpp; sourceTree = ""; }; 309 | 885E91CC1B507D71003B736E /* neuron_layers.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = neuron_layers.hpp; sourceTree = ""; }; 310 | 885E91CE1B507D71003B736E /* caffe.pb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = caffe.pb.h; sourceTree = ""; }; 311 | 885E91CF1B507D71003B736E /* python_layer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = python_layer.hpp; sourceTree = ""; }; 312 | 885E91D01B507D71003B736E /* solver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = solver.hpp; sourceTree = ""; }; 313 | 885E91D11B507D71003B736E /* syncedmem.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = syncedmem.hpp; sourceTree = ""; }; 314 | 885E91D31B507D71003B736E /* test_caffe_main.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = test_caffe_main.hpp; sourceTree = ""; }; 315 | 885E91D41B507D71003B736E /* test_gradient_check_util.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = test_gradient_check_util.hpp; sourceTree = ""; }; 316 | 885E91D61B507D71003B736E /* benchmark.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = benchmark.hpp; sourceTree = ""; }; 317 | 885E91D71B507D71003B736E /* cudnn.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cudnn.hpp; sourceTree = ""; }; 318 | 885E91D81B507D71003B736E /* db.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = db.hpp; sourceTree = ""; }; 319 | 885E91D91B507D71003B736E /* db_leveldb.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = db_leveldb.hpp; sourceTree = ""; }; 320 | 885E91DA1B507D71003B736E /* db_lmdb.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = db_lmdb.hpp; sourceTree = ""; }; 321 | 885E91DB1B507D71003B736E /* device_alternate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = device_alternate.hpp; sourceTree = ""; }; 322 | 885E91DD1B507D71003B736E /* im2col.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = im2col.hpp; sourceTree = ""; }; 323 | 885E91DE1B507D71003B736E /* insert_splits.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = insert_splits.hpp; sourceTree = ""; }; 324 | 885E91DF1B507D71003B736E /* io.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = io.hpp; sourceTree = ""; }; 325 | 885E91E01B507D71003B736E /* math_functions.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = math_functions.hpp; sourceTree = ""; }; 326 | 885E91E11B507D71003B736E /* mkl_alternate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = mkl_alternate.hpp; sourceTree = ""; }; 327 | 885E91E31B507D71003B736E /* rng.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = rng.hpp; sourceTree = ""; }; 328 | 885E91E41B507D71003B736E /* upgrade_proto.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = upgrade_proto.hpp; sourceTree = ""; }; 329 | 885E91E51B507D71003B736E /* vision_layers.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = vision_layers.hpp; sourceTree = ""; }; 330 | 8870DA481B5920FC0053CB1B /* libleveldb.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libleveldb.a; path = caffe/ios/lib/libleveldb.a; sourceTree = SOURCE_ROOT; }; 331 | 888C36AB1B508D300012410E /* caffe.proto */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = caffe.proto; sourceTree = ""; }; 332 | 88BE9EE11B5763C70076137A /* model */ = {isa = PBXFileReference; lastKnownFileType = folder; path = model; sourceTree = SOURCE_ROOT; }; 333 | /* End PBXFileReference section */ 334 | 335 | /* Begin PBXFrameworksBuildPhase section */ 336 | 8824C7981B505B940016CC3D /* Frameworks */ = { 337 | isa = PBXFrameworksBuildPhase; 338 | buildActionMask = 2147483647; 339 | files = ( 340 | 3C2B16131DEE24DE00783EC4 /* CoreMedia.framework in Frameworks */, 341 | 3C03A53F1DEDC706007B0DF7 /* AVFoundation.framework in Frameworks */, 342 | 8870DA491B5920FC0053CB1B /* libleveldb.a in Frameworks */, 343 | 3CC225A21E1E9974006309BF /* opencv2.framework in Frameworks */, 344 | 885E91BA1B507693003B736E /* libglog.a in Frameworks */, 345 | 885E91B41B50766D003B736E /* AudioToolbox.framework in Frameworks */, 346 | 885E91B21B507664003B736E /* Accelerate.framework in Frameworks */, 347 | 885E91BC1B507693003B736E /* libprotobuf.a in Frameworks */, 348 | 885E91BD1B507693003B736E /* libprotoc.a in Frameworks */, 349 | ); 350 | runOnlyForDeploymentPostprocessing = 0; 351 | }; 352 | 8824C7B11B505B940016CC3D /* Frameworks */ = { 353 | isa = PBXFrameworksBuildPhase; 354 | buildActionMask = 2147483647; 355 | files = ( 356 | 88BE9ED41B5749060076137A /* AudioToolbox.framework in Frameworks */, 357 | 8870DA4A1B5921060053CB1B /* libleveldb.a in Frameworks */, 358 | 88BE9ED51B5749090076137A /* Accelerate.framework in Frameworks */, 359 | 88BE9ED61B5749E60076137A /* libglog.a in Frameworks */, 360 | 88BE9ED81B5749E60076137A /* libprotobuf.a in Frameworks */, 361 | 88BE9ED91B5749E60076137A /* libprotoc.a in Frameworks */, 362 | ); 363 | runOnlyForDeploymentPostprocessing = 0; 364 | }; 365 | /* End PBXFrameworksBuildPhase section */ 366 | 367 | /* Begin PBXGroup section */ 368 | 3C03A53D1DEDC706007B0DF7 /* Frameworks */ = { 369 | isa = PBXGroup; 370 | children = ( 371 | 3C2B16121DEE24DE00783EC4 /* CoreMedia.framework */, 372 | 3C03A53E1DEDC706007B0DF7 /* AVFoundation.framework */, 373 | ); 374 | name = Frameworks; 375 | sourceTree = ""; 376 | }; 377 | 3CED67FE1E1E4CF800EF2437 /* assets */ = { 378 | isa = PBXGroup; 379 | children = ( 380 | 3CED67FF1E1E4CF800EF2437 /* greenLight.png */, 381 | 3CED68001E1E4CF800EF2437 /* noLight.png */, 382 | 3CED68011E1E4CF800EF2437 /* redLight.png */, 383 | ); 384 | name = assets; 385 | path = Assets; 386 | sourceTree = ""; 387 | }; 388 | 8824C7921B505B940016CC3D = { 389 | isa = PBXGroup; 390 | children = ( 391 | 8824C79D1B505B940016CC3D /* TrafficLightApp */, 392 | 8824C79C1B505B940016CC3D /* Products */, 393 | 3C03A53D1DEDC706007B0DF7 /* Frameworks */, 394 | ); 395 | sourceTree = ""; 396 | }; 397 | 8824C79C1B505B940016CC3D /* Products */ = { 398 | isa = PBXGroup; 399 | children = ( 400 | 8824C79B1B505B940016CC3D /* TrafficLightApp.app */, 401 | 8824C7B41B505B940016CC3D /* TrafficLightAppTests.xctest */, 402 | ); 403 | name = Products; 404 | sourceTree = ""; 405 | }; 406 | 8824C79D1B505B940016CC3D /* TrafficLightApp */ = { 407 | isa = PBXGroup; 408 | children = ( 409 | 8824C7A21B505B940016CC3D /* AppDelegate.h */, 410 | 8824C7A31B505B940016CC3D /* AppDelegate.m */, 411 | 8824C7A51B505B940016CC3D /* ViewController.h */, 412 | 8824C7A61B505B940016CC3D /* ViewController.mm */, 413 | 8824C7A81B505B940016CC3D /* Main.storyboard */, 414 | 3CED68051E1E4D1500EF2437 /* LaunchScreen.storyboard */, 415 | 88BE9EE11B5763C70076137A /* model */, 416 | 3CED67FE1E1E4CF800EF2437 /* assets */, 417 | 885E90231B507632003B736E /* caffe */, 418 | 885E91BE1B507D71003B736E /* include */, 419 | 885E91B51B507693003B736E /* lib */, 420 | 8824C79E1B505B940016CC3D /* Supporting Files */, 421 | 3CC225A11E1E9974006309BF /* opencv2.framework */, 422 | 885E91B31B50766D003B736E /* AudioToolbox.framework */, 423 | 885E91B11B507664003B736E /* Accelerate.framework */, 424 | ); 425 | path = TrafficLightApp; 426 | sourceTree = ""; 427 | }; 428 | 8824C79E1B505B940016CC3D /* Supporting Files */ = { 429 | isa = PBXGroup; 430 | children = ( 431 | 8824C79F1B505B940016CC3D /* Info.plist */, 432 | 8824C7A01B505B940016CC3D /* main.m */, 433 | ); 434 | name = "Supporting Files"; 435 | sourceTree = ""; 436 | }; 437 | 885E90231B507632003B736E /* caffe */ = { 438 | isa = PBXGroup; 439 | children = ( 440 | 8824C8891B506B8D0016CC3D /* Classifier.h */, 441 | 8824C88A1B506B8D0016CC3D /* Classifier.mm */, 442 | 885E90241B507650003B736E /* caffe */, 443 | 885E90E11B507651003B736E /* gflags */, 444 | ); 445 | path = caffe; 446 | sourceTree = SOURCE_ROOT; 447 | }; 448 | 885E90241B507650003B736E /* caffe */ = { 449 | isa = PBXGroup; 450 | children = ( 451 | 885E90251B507650003B736E /* blob.cpp */, 452 | 885E90271B507650003B736E /* common.cpp */, 453 | 885E90281B507650003B736E /* data_transformer.cpp */, 454 | 885E90291B507650003B736E /* internal_thread.cpp */, 455 | 885E902A1B507650003B736E /* layer_factory.cpp */, 456 | 885E902B1B507650003B736E /* layers */, 457 | 885E908B1B507651003B736E /* net.cpp */, 458 | 885E908C1B507651003B736E /* proto */, 459 | 885E908E1B507651003B736E /* solver.cpp */, 460 | 885E908F1B507651003B736E /* syncedmem.cpp */, 461 | 885E90D21B507651003B736E /* util */, 462 | ); 463 | name = caffe; 464 | path = src/caffe; 465 | sourceTree = ""; 466 | }; 467 | 885E902B1B507650003B736E /* layers */ = { 468 | isa = PBXGroup; 469 | children = ( 470 | 885E902C1B507650003B736E /* absval_layer.cpp */, 471 | 885E902D1B507650003B736E /* absval_layer.cu */, 472 | 885E902E1B507650003B736E /* accuracy_layer.cpp */, 473 | 885E902F1B507650003B736E /* argmax_layer.cpp */, 474 | 885E90311B507650003B736E /* base_conv_layer.cpp */, 475 | 885E90321B507650003B736E /* base_data_layer.cpp */, 476 | 885E90331B507650003B736E /* base_data_layer.cu */, 477 | 885E90341B507650003B736E /* bnll_layer.cpp */, 478 | 885E90351B507650003B736E /* bnll_layer.cu */, 479 | 885E90361B507650003B736E /* concat_layer.cpp */, 480 | 885E90371B507650003B736E /* concat_layer.cu */, 481 | 885E90381B507650003B736E /* contrastive_loss_layer.cpp */, 482 | 885E90391B507650003B736E /* contrastive_loss_layer.cu */, 483 | 885E903A1B507650003B736E /* conv_layer.cpp */, 484 | 885E903B1B507650003B736E /* conv_layer.cu */, 485 | 885E903C1B507650003B736E /* cudnn_conv_layer.cpp */, 486 | 885E903D1B507650003B736E /* cudnn_conv_layer.cu */, 487 | 885E903E1B507650003B736E /* cudnn_pooling_layer.cpp */, 488 | 885E903F1B507650003B736E /* cudnn_pooling_layer.cu */, 489 | 885E90401B507650003B736E /* cudnn_relu_layer.cpp */, 490 | 885E90411B507650003B736E /* cudnn_relu_layer.cu */, 491 | 885E90421B507650003B736E /* cudnn_sigmoid_layer.cpp */, 492 | 885E90431B507650003B736E /* cudnn_sigmoid_layer.cu */, 493 | 885E90441B507650003B736E /* cudnn_softmax_layer.cpp */, 494 | 885E90451B507650003B736E /* cudnn_softmax_layer.cu */, 495 | 885E90461B507650003B736E /* cudnn_tanh_layer.cpp */, 496 | 885E90471B507650003B736E /* cudnn_tanh_layer.cu */, 497 | 885E90481B507650003B736E /* data_layer.cpp */, 498 | 885E90491B507650003B736E /* deconv_layer.cpp */, 499 | 885E904A1B507650003B736E /* deconv_layer.cu */, 500 | 885E904B1B507650003B736E /* dropout_layer.cpp */, 501 | 885E904C1B507650003B736E /* dropout_layer.cu */, 502 | 885E904D1B507650003B736E /* dummy_data_layer.cpp */, 503 | 885E904E1B507650003B736E /* eltwise_layer.cpp */, 504 | 885E904F1B507650003B736E /* eltwise_layer.cu */, 505 | 885E90501B507650003B736E /* euclidean_loss_layer.cpp */, 506 | 885E90511B507650003B736E /* euclidean_loss_layer.cu */, 507 | 885E90521B507650003B736E /* exp_layer.cpp */, 508 | 885E90531B507650003B736E /* exp_layer.cu */, 509 | 885E90541B507650003B736E /* filter_layer.cpp */, 510 | 885E90551B507650003B736E /* filter_layer.cu */, 511 | 885E90561B507650003B736E /* flatten_layer.cpp */, 512 | 885E90571B507650003B736E /* hdf5_data_layer.cpp */, 513 | 885E90581B507650003B736E /* hdf5_data_layer.cu */, 514 | 885E90591B507650003B736E /* hdf5_output_layer.cpp */, 515 | 885E905A1B507650003B736E /* hdf5_output_layer.cu */, 516 | 885E905B1B507650003B736E /* hinge_loss_layer.cpp */, 517 | 885E905C1B507650003B736E /* im2col_layer.cpp */, 518 | 885E905D1B507650003B736E /* im2col_layer.cu */, 519 | 885E905E1B507650003B736E /* image_data_layer.cpp */, 520 | 885E905F1B507650003B736E /* infogain_loss_layer.cpp */, 521 | 885E90601B507650003B736E /* inner_product_layer.cpp */, 522 | 885E90611B507650003B736E /* inner_product_layer.cu */, 523 | 885E90621B507650003B736E /* log_layer.cpp */, 524 | 885E90631B507650003B736E /* log_layer.cu */, 525 | 885E90641B507650003B736E /* loss_layer.cpp */, 526 | 885E90651B507650003B736E /* lrn_layer.cpp */, 527 | 885E90661B507650003B736E /* lrn_layer.cu */, 528 | 885E90671B507650003B736E /* memory_data_layer.cpp */, 529 | 885E90681B507650003B736E /* multinomial_logistic_loss_layer.cpp */, 530 | 885E90691B507650003B736E /* mvn_layer.cpp */, 531 | 885E906A1B507650003B736E /* mvn_layer.cu */, 532 | 885E906B1B507650003B736E /* neuron_layer.cpp */, 533 | 885E906C1B507650003B736E /* pooling_layer.cpp */, 534 | 885E906D1B507650003B736E /* pooling_layer.cu */, 535 | 885E906E1B507650003B736E /* power_layer.cpp */, 536 | 885E906F1B507650003B736E /* power_layer.cu */, 537 | 885E90701B507650003B736E /* prelu_layer.cpp */, 538 | 885E90711B507651003B736E /* prelu_layer.cu */, 539 | 885E90721B507651003B736E /* reduction_layer.cpp */, 540 | 885E90731B507651003B736E /* reduction_layer.cu */, 541 | 885E90741B507651003B736E /* relu_layer.cpp */, 542 | 885E90751B507651003B736E /* relu_layer.cu */, 543 | 885E90761B507651003B736E /* reshape_layer.cpp */, 544 | 885E90771B507651003B736E /* sigmoid_cross_entropy_loss_layer.cpp */, 545 | 885E90781B507651003B736E /* sigmoid_cross_entropy_loss_layer.cu */, 546 | 885E90791B507651003B736E /* sigmoid_layer.cpp */, 547 | 885E907A1B507651003B736E /* sigmoid_layer.cu */, 548 | 885E907B1B507651003B736E /* silence_layer.cpp */, 549 | 885E907C1B507651003B736E /* silence_layer.cu */, 550 | 885E907D1B507651003B736E /* slice_layer.cpp */, 551 | 885E907E1B507651003B736E /* slice_layer.cu */, 552 | 885E907F1B507651003B736E /* softmax_layer.cpp */, 553 | 885E90801B507651003B736E /* softmax_layer.cu */, 554 | 885E90811B507651003B736E /* softmax_loss_layer.cpp */, 555 | 885E90821B507651003B736E /* softmax_loss_layer.cu */, 556 | 885E90831B507651003B736E /* split_layer.cpp */, 557 | 885E90841B507651003B736E /* split_layer.cu */, 558 | 885E90851B507651003B736E /* spp_layer.cpp */, 559 | 885E90861B507651003B736E /* tanh_layer.cpp */, 560 | 885E90871B507651003B736E /* tanh_layer.cu */, 561 | 885E90881B507651003B736E /* threshold_layer.cpp */, 562 | 885E90891B507651003B736E /* threshold_layer.cu */, 563 | 885E908A1B507651003B736E /* window_data_layer.cpp */, 564 | ); 565 | path = layers; 566 | sourceTree = ""; 567 | }; 568 | 885E908C1B507651003B736E /* proto */ = { 569 | isa = PBXGroup; 570 | children = ( 571 | 888C36AB1B508D300012410E /* caffe.proto */, 572 | ); 573 | path = proto; 574 | sourceTree = ""; 575 | }; 576 | 885E90D21B507651003B736E /* util */ = { 577 | isa = PBXGroup; 578 | children = ( 579 | 885E90D31B507651003B736E /* benchmark.cpp */, 580 | 885E90D41B507651003B736E /* cudnn.cpp */, 581 | 885E90D51B507651003B736E /* db.cpp */, 582 | 885E90D61B507651003B736E /* db_leveldb.cpp */, 583 | 885E90D71B507651003B736E /* db_lmdb.cpp */, 584 | 885E90D91B507651003B736E /* im2col.cpp */, 585 | 885E90DA1B507651003B736E /* im2col.cu */, 586 | 885E90DB1B507651003B736E /* insert_splits.cpp */, 587 | 885E90DC1B507651003B736E /* io.cpp */, 588 | 885E90DD1B507651003B736E /* math_functions.cpp */, 589 | 885E90DE1B507651003B736E /* math_functions.cu */, 590 | 885E90E01B507651003B736E /* upgrade_proto.cpp */, 591 | ); 592 | path = util; 593 | sourceTree = ""; 594 | }; 595 | 885E90E11B507651003B736E /* gflags */ = { 596 | isa = PBXGroup; 597 | children = ( 598 | 885E90E31B507651003B736E /* gflags.cc */, 599 | 885E90E51B507651003B736E /* gflags_completions.cc */, 600 | 885E90E91B507651003B736E /* gflags_reporting.cc */, 601 | 885E90EA1B507651003B736E /* mutex.h */, 602 | 885E90EB1B507651003B736E /* util.h */, 603 | ); 604 | name = gflags; 605 | path = src/gflags; 606 | sourceTree = ""; 607 | }; 608 | 885E91B51B507693003B736E /* lib */ = { 609 | isa = PBXGroup; 610 | children = ( 611 | 885E91B61B507693003B736E /* libglog.a */, 612 | 8870DA481B5920FC0053CB1B /* libleveldb.a */, 613 | 885E91B81B507693003B736E /* libprotobuf.a */, 614 | 885E91B91B507693003B736E /* libprotoc.a */, 615 | ); 616 | name = lib; 617 | path = caffe/lib; 618 | sourceTree = SOURCE_ROOT; 619 | }; 620 | 885E91BE1B507D71003B736E /* include */ = { 621 | isa = PBXGroup; 622 | children = ( 623 | 885E91BF1B507D71003B736E /* caffe */, 624 | ); 625 | path = include; 626 | sourceTree = SOURCE_ROOT; 627 | }; 628 | 885E91BF1B507D71003B736E /* caffe */ = { 629 | isa = PBXGroup; 630 | children = ( 631 | 885E91C01B507D71003B736E /* blob.hpp */, 632 | 885E91C11B507D71003B736E /* caffe.hpp */, 633 | 885E91C21B507D71003B736E /* common.hpp */, 634 | 885E91C31B507D71003B736E /* common_layers.hpp */, 635 | 885E91C41B507D71003B736E /* data_layers.hpp */, 636 | 885E91C51B507D71003B736E /* data_transformer.hpp */, 637 | 885E91C61B507D71003B736E /* filler.hpp */, 638 | 885E91C71B507D71003B736E /* internal_thread.hpp */, 639 | 885E91C81B507D71003B736E /* layer.hpp */, 640 | 885E91C91B507D71003B736E /* layer_factory.hpp */, 641 | 885E91CA1B507D71003B736E /* loss_layers.hpp */, 642 | 885E91CB1B507D71003B736E /* net.hpp */, 643 | 885E91CC1B507D71003B736E /* neuron_layers.hpp */, 644 | 885E91CD1B507D71003B736E /* proto */, 645 | 885E91CF1B507D71003B736E /* python_layer.hpp */, 646 | 885E91D01B507D71003B736E /* solver.hpp */, 647 | 885E91D11B507D71003B736E /* syncedmem.hpp */, 648 | 885E91D21B507D71003B736E /* test */, 649 | 885E91D51B507D71003B736E /* util */, 650 | 885E91E51B507D71003B736E /* vision_layers.hpp */, 651 | ); 652 | name = caffe; 653 | path = caffe/include/caffe; 654 | sourceTree = ""; 655 | }; 656 | 885E91CD1B507D71003B736E /* proto */ = { 657 | isa = PBXGroup; 658 | children = ( 659 | 885E91CE1B507D71003B736E /* caffe.pb.h */, 660 | ); 661 | path = proto; 662 | sourceTree = ""; 663 | }; 664 | 885E91D21B507D71003B736E /* test */ = { 665 | isa = PBXGroup; 666 | children = ( 667 | 885E91D31B507D71003B736E /* test_caffe_main.hpp */, 668 | 885E91D41B507D71003B736E /* test_gradient_check_util.hpp */, 669 | ); 670 | path = test; 671 | sourceTree = ""; 672 | }; 673 | 885E91D51B507D71003B736E /* util */ = { 674 | isa = PBXGroup; 675 | children = ( 676 | 885E91D61B507D71003B736E /* benchmark.hpp */, 677 | 885E91D71B507D71003B736E /* cudnn.hpp */, 678 | 885E91D81B507D71003B736E /* db.hpp */, 679 | 885E91D91B507D71003B736E /* db_leveldb.hpp */, 680 | 885E91DA1B507D71003B736E /* db_lmdb.hpp */, 681 | 885E91DB1B507D71003B736E /* device_alternate.hpp */, 682 | 885E91DD1B507D71003B736E /* im2col.hpp */, 683 | 885E91DE1B507D71003B736E /* insert_splits.hpp */, 684 | 885E91DF1B507D71003B736E /* io.hpp */, 685 | 885E91E01B507D71003B736E /* math_functions.hpp */, 686 | 885E91E11B507D71003B736E /* mkl_alternate.hpp */, 687 | 885E91E31B507D71003B736E /* rng.hpp */, 688 | 885E91E41B507D71003B736E /* upgrade_proto.hpp */, 689 | ); 690 | path = util; 691 | sourceTree = ""; 692 | }; 693 | /* End PBXGroup section */ 694 | 695 | /* Begin PBXNativeTarget section */ 696 | 8824C79A1B505B940016CC3D /* TrafficLightApp */ = { 697 | isa = PBXNativeTarget; 698 | buildConfigurationList = 8824C7BE1B505B940016CC3D /* Build configuration list for PBXNativeTarget "TrafficLightApp" */; 699 | buildPhases = ( 700 | 8824C7971B505B940016CC3D /* Sources */, 701 | 8824C7981B505B940016CC3D /* Frameworks */, 702 | 8824C7991B505B940016CC3D /* Resources */, 703 | 888C36AE1B508FB80012410E /* CopyFiles */, 704 | ); 705 | buildRules = ( 706 | 888C36AD1B508D590012410E /* PBXBuildRule */, 707 | ); 708 | dependencies = ( 709 | ); 710 | name = TrafficLightApp; 711 | productName = CaffeApp; 712 | productReference = 8824C79B1B505B940016CC3D /* TrafficLightApp.app */; 713 | productType = "com.apple.product-type.application"; 714 | }; 715 | 8824C7B31B505B940016CC3D /* TrafficLightAppTests */ = { 716 | isa = PBXNativeTarget; 717 | buildConfigurationList = 8824C7C11B505B940016CC3D /* Build configuration list for PBXNativeTarget "TrafficLightAppTests" */; 718 | buildPhases = ( 719 | 8824C7B01B505B940016CC3D /* Sources */, 720 | 8824C7B11B505B940016CC3D /* Frameworks */, 721 | 8824C7B21B505B940016CC3D /* Resources */, 722 | ); 723 | buildRules = ( 724 | ); 725 | dependencies = ( 726 | 8824C7B61B505B940016CC3D /* PBXTargetDependency */, 727 | ); 728 | name = TrafficLightAppTests; 729 | productName = CaffeAppTests; 730 | productReference = 8824C7B41B505B940016CC3D /* TrafficLightAppTests.xctest */; 731 | productType = "com.apple.product-type.bundle.unit-test"; 732 | }; 733 | /* End PBXNativeTarget section */ 734 | 735 | /* Begin PBXProject section */ 736 | 8824C7931B505B940016CC3D /* Project object */ = { 737 | isa = PBXProject; 738 | attributes = { 739 | LastUpgradeCheck = 0630; 740 | ORGANIZATIONNAME = "Takuya Matsuyama"; 741 | TargetAttributes = { 742 | 8824C79A1B505B940016CC3D = { 743 | CreatedOnToolsVersion = 6.3.2; 744 | DevelopmentTeam = LFEXX25NFN; 745 | }; 746 | 8824C7B31B505B940016CC3D = { 747 | CreatedOnToolsVersion = 6.3.2; 748 | TestTargetID = 8824C79A1B505B940016CC3D; 749 | }; 750 | }; 751 | }; 752 | buildConfigurationList = 8824C7961B505B940016CC3D /* Build configuration list for PBXProject "TrafficLightApp" */; 753 | compatibilityVersion = "Xcode 3.2"; 754 | developmentRegion = English; 755 | hasScannedForEncodings = 0; 756 | knownRegions = ( 757 | en, 758 | Base, 759 | ); 760 | mainGroup = 8824C7921B505B940016CC3D; 761 | productRefGroup = 8824C79C1B505B940016CC3D /* Products */; 762 | projectDirPath = ""; 763 | projectRoot = ""; 764 | targets = ( 765 | 8824C79A1B505B940016CC3D /* TrafficLightApp */, 766 | 8824C7B31B505B940016CC3D /* TrafficLightAppTests */, 767 | ); 768 | }; 769 | /* End PBXProject section */ 770 | 771 | /* Begin PBXResourcesBuildPhase section */ 772 | 8824C7991B505B940016CC3D /* Resources */ = { 773 | isa = PBXResourcesBuildPhase; 774 | buildActionMask = 2147483647; 775 | files = ( 776 | 3CED68031E1E4CF800EF2437 /* noLight.png in Resources */, 777 | 885E91A31B507651003B736E /* im2col.cu in Resources */, 778 | 885E91A71B507651003B736E /* math_functions.cu in Resources */, 779 | 3CED68071E1E4D1500EF2437 /* LaunchScreen.storyboard in Resources */, 780 | 3CED68021E1E4CF800EF2437 /* greenLight.png in Resources */, 781 | 3CED68041E1E4CF800EF2437 /* redLight.png in Resources */, 782 | 888C36AC1B508D300012410E /* caffe.proto in Resources */, 783 | 8824C7AA1B505B940016CC3D /* Main.storyboard in Resources */, 784 | 88BE9EE21B5763C70076137A /* model in Resources */, 785 | ); 786 | runOnlyForDeploymentPostprocessing = 0; 787 | }; 788 | 8824C7B21B505B940016CC3D /* Resources */ = { 789 | isa = PBXResourcesBuildPhase; 790 | buildActionMask = 2147483647; 791 | files = ( 792 | 88BE9EE31B5763C70076137A /* model in Resources */, 793 | ); 794 | runOnlyForDeploymentPostprocessing = 0; 795 | }; 796 | /* End PBXResourcesBuildPhase section */ 797 | 798 | /* Begin PBXSourcesBuildPhase section */ 799 | 8824C7971B505B940016CC3D /* Sources */ = { 800 | isa = PBXSourcesBuildPhase; 801 | buildActionMask = 2147483647; 802 | files = ( 803 | 888C36B01B5091220012410E /* caffe.proto in Sources */, 804 | 885E90FE1B507651003B736E /* base_conv_layer.cpp in Sources */, 805 | 885E91501B507651003B736E /* split_layer.cpp in Sources */, 806 | 885E91281B507651003B736E /* hinge_loss_layer.cpp in Sources */, 807 | 885E91531B507651003B736E /* tanh_layer.cpp in Sources */, 808 | 885E91461B507651003B736E /* sigmoid_layer.cpp in Sources */, 809 | 885E91341B507651003B736E /* memory_data_layer.cpp in Sources */, 810 | 885E91071B507651003B736E /* conv_layer.cpp in Sources */, 811 | 885E919C1B507651003B736E /* benchmark.cpp in Sources */, 812 | 885E91091B507651003B736E /* cudnn_conv_layer.cpp in Sources */, 813 | 885E91151B507651003B736E /* data_layer.cpp in Sources */, 814 | 885E919D1B507651003B736E /* cudnn.cpp in Sources */, 815 | 885E90F71B507651003B736E /* internal_thread.cpp in Sources */, 816 | 885E91311B507651003B736E /* loss_layer.cpp in Sources */, 817 | 885E91391B507651003B736E /* pooling_layer.cpp in Sources */, 818 | 885E915A1B507651003B736E /* solver.cpp in Sources */, 819 | 885E91A61B507651003B736E /* math_functions.cpp in Sources */, 820 | 885E91361B507651003B736E /* mvn_layer.cpp in Sources */, 821 | 885E91A21B507651003B736E /* im2col.cpp in Sources */, 822 | 885E91551B507651003B736E /* threshold_layer.cpp in Sources */, 823 | 885E90FC1B507651003B736E /* argmax_layer.cpp in Sources */, 824 | 885E91111B507651003B736E /* cudnn_softmax_layer.cpp in Sources */, 825 | 885E914A1B507651003B736E /* slice_layer.cpp in Sources */, 826 | 885E919E1B507651003B736E /* db.cpp in Sources */, 827 | 885E913B1B507651003B736E /* power_layer.cpp in Sources */, 828 | 885E911F1B507651003B736E /* exp_layer.cpp in Sources */, 829 | 885E91481B507651003B736E /* silence_layer.cpp in Sources */, 830 | 885E91051B507651003B736E /* contrastive_loss_layer.cpp in Sources */, 831 | 885E91011B507651003B736E /* bnll_layer.cpp in Sources */, 832 | 885E91A01B507651003B736E /* db_lmdb.cpp in Sources */, 833 | 8824C7A41B505B940016CC3D /* AppDelegate.m in Sources */, 834 | 885E910B1B507651003B736E /* cudnn_pooling_layer.cpp in Sources */, 835 | 885E911D1B507651003B736E /* euclidean_loss_layer.cpp in Sources */, 836 | 885E913D1B507651003B736E /* prelu_layer.cpp in Sources */, 837 | 885E913F1B507651003B736E /* reduction_layer.cpp in Sources */, 838 | 885E91131B507651003B736E /* cudnn_tanh_layer.cpp in Sources */, 839 | 8824C7A11B505B940016CC3D /* main.m in Sources */, 840 | 885E91381B507651003B736E /* neuron_layer.cpp in Sources */, 841 | 885E91AA1B507651003B736E /* gflags.cc in Sources */, 842 | 885E91AB1B507651003B736E /* gflags_completions.cc in Sources */, 843 | 885E90F61B507651003B736E /* data_transformer.cpp in Sources */, 844 | 885E910F1B507651003B736E /* cudnn_sigmoid_layer.cpp in Sources */, 845 | 885E91521B507651003B736E /* spp_layer.cpp in Sources */, 846 | 885E90F91B507651003B736E /* absval_layer.cpp in Sources */, 847 | 885E91351B507651003B736E /* multinomial_logistic_loss_layer.cpp in Sources */, 848 | 889BC3381B506EE700F4EB41 /* Classifier.mm in Sources */, 849 | 885E91441B507651003B736E /* sigmoid_cross_entropy_loss_layer.cpp in Sources */, 850 | 885E91431B507651003B736E /* reshape_layer.cpp in Sources */, 851 | 885E911A1B507651003B736E /* dummy_data_layer.cpp in Sources */, 852 | 885E90FB1B507651003B736E /* accuracy_layer.cpp in Sources */, 853 | 885E91181B507651003B736E /* dropout_layer.cpp in Sources */, 854 | 885E90FF1B507651003B736E /* base_data_layer.cpp in Sources */, 855 | 885E91581B507651003B736E /* net.cpp in Sources */, 856 | 885E91291B507651003B736E /* im2col_layer.cpp in Sources */, 857 | 885E91411B507651003B736E /* relu_layer.cpp in Sources */, 858 | 885E90F31B507651003B736E /* blob.cpp in Sources */, 859 | 885E90F51B507651003B736E /* common.cpp in Sources */, 860 | 885E91161B507651003B736E /* deconv_layer.cpp in Sources */, 861 | 885E91A91B507651003B736E /* upgrade_proto.cpp in Sources */, 862 | 885E912C1B507651003B736E /* infogain_loss_layer.cpp in Sources */, 863 | 885E914C1B507651003B736E /* softmax_layer.cpp in Sources */, 864 | 885E915B1B507651003B736E /* syncedmem.cpp in Sources */, 865 | 885E910D1B507651003B736E /* cudnn_relu_layer.cpp in Sources */, 866 | 885E914E1B507651003B736E /* softmax_loss_layer.cpp in Sources */, 867 | 8824C88D1B506D520016CC3D /* ViewController.mm in Sources */, 868 | 885E91211B507651003B736E /* filter_layer.cpp in Sources */, 869 | 885E91231B507651003B736E /* flatten_layer.cpp in Sources */, 870 | 885E91A41B507651003B736E /* insert_splits.cpp in Sources */, 871 | 885E911B1B507651003B736E /* eltwise_layer.cpp in Sources */, 872 | 885E91AC1B507651003B736E /* gflags_reporting.cc in Sources */, 873 | 885E912D1B507651003B736E /* inner_product_layer.cpp in Sources */, 874 | 885E90F81B507651003B736E /* layer_factory.cpp in Sources */, 875 | 885E919F1B507651003B736E /* db_leveldb.cpp in Sources */, 876 | 885E912F1B507651003B736E /* log_layer.cpp in Sources */, 877 | 885E91321B507651003B736E /* lrn_layer.cpp in Sources */, 878 | 885E91A51B507651003B736E /* io.cpp in Sources */, 879 | 885E91031B507651003B736E /* concat_layer.cpp in Sources */, 880 | ); 881 | runOnlyForDeploymentPostprocessing = 0; 882 | }; 883 | 8824C7B01B505B940016CC3D /* Sources */ = { 884 | isa = PBXSourcesBuildPhase; 885 | buildActionMask = 2147483647; 886 | files = ( 887 | 889BC3391B506EE800F4EB41 /* Classifier.mm in Sources */, 888 | 8824C88E1B506D530016CC3D /* ViewController.mm in Sources */, 889 | ); 890 | runOnlyForDeploymentPostprocessing = 0; 891 | }; 892 | /* End PBXSourcesBuildPhase section */ 893 | 894 | /* Begin PBXTargetDependency section */ 895 | 8824C7B61B505B940016CC3D /* PBXTargetDependency */ = { 896 | isa = PBXTargetDependency; 897 | target = 8824C79A1B505B940016CC3D /* TrafficLightApp */; 898 | targetProxy = 8824C7B51B505B940016CC3D /* PBXContainerItemProxy */; 899 | }; 900 | /* End PBXTargetDependency section */ 901 | 902 | /* Begin PBXVariantGroup section */ 903 | 3CED68051E1E4D1500EF2437 /* LaunchScreen.storyboard */ = { 904 | isa = PBXVariantGroup; 905 | children = ( 906 | 3CED68061E1E4D1500EF2437 /* Base */, 907 | ); 908 | name = LaunchScreen.storyboard; 909 | sourceTree = ""; 910 | }; 911 | 8824C7A81B505B940016CC3D /* Main.storyboard */ = { 912 | isa = PBXVariantGroup; 913 | children = ( 914 | 8824C7A91B505B940016CC3D /* Base */, 915 | ); 916 | name = Main.storyboard; 917 | sourceTree = ""; 918 | }; 919 | /* End PBXVariantGroup section */ 920 | 921 | /* Begin XCBuildConfiguration section */ 922 | 8824C7BC1B505B940016CC3D /* Debug */ = { 923 | isa = XCBuildConfiguration; 924 | buildSettings = { 925 | ALWAYS_SEARCH_USER_PATHS = NO; 926 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 927 | CLANG_CXX_LIBRARY = "libc++"; 928 | CLANG_ENABLE_MODULES = YES; 929 | CLANG_ENABLE_OBJC_ARC = YES; 930 | CLANG_WARN_BOOL_CONVERSION = YES; 931 | CLANG_WARN_CONSTANT_CONVERSION = YES; 932 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 933 | CLANG_WARN_EMPTY_BODY = YES; 934 | CLANG_WARN_ENUM_CONVERSION = YES; 935 | CLANG_WARN_INT_CONVERSION = YES; 936 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 937 | CLANG_WARN_UNREACHABLE_CODE = YES; 938 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 939 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 940 | COPY_PHASE_STRIP = NO; 941 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 942 | ENABLE_STRICT_OBJC_MSGSEND = YES; 943 | GCC_C_LANGUAGE_STANDARD = gnu99; 944 | GCC_DYNAMIC_NO_PIC = NO; 945 | GCC_NO_COMMON_BLOCKS = YES; 946 | GCC_OPTIMIZATION_LEVEL = 0; 947 | GCC_PREPROCESSOR_DEFINITIONS = ( 948 | "DEBUG=1", 949 | "$(inherited)", 950 | ); 951 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 952 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 953 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 954 | GCC_WARN_UNDECLARED_SELECTOR = YES; 955 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 956 | GCC_WARN_UNUSED_FUNCTION = YES; 957 | GCC_WARN_UNUSED_VARIABLE = YES; 958 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 959 | MTL_ENABLE_DEBUG_INFO = YES; 960 | ONLY_ACTIVE_ARCH = YES; 961 | SDKROOT = iphoneos; 962 | }; 963 | name = Debug; 964 | }; 965 | 8824C7BD1B505B940016CC3D /* Release */ = { 966 | isa = XCBuildConfiguration; 967 | buildSettings = { 968 | ALWAYS_SEARCH_USER_PATHS = NO; 969 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 970 | CLANG_CXX_LIBRARY = "libc++"; 971 | CLANG_ENABLE_MODULES = YES; 972 | CLANG_ENABLE_OBJC_ARC = YES; 973 | CLANG_WARN_BOOL_CONVERSION = YES; 974 | CLANG_WARN_CONSTANT_CONVERSION = YES; 975 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 976 | CLANG_WARN_EMPTY_BODY = YES; 977 | CLANG_WARN_ENUM_CONVERSION = YES; 978 | CLANG_WARN_INT_CONVERSION = YES; 979 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 980 | CLANG_WARN_UNREACHABLE_CODE = YES; 981 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 982 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 983 | COPY_PHASE_STRIP = NO; 984 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 985 | ENABLE_NS_ASSERTIONS = NO; 986 | ENABLE_STRICT_OBJC_MSGSEND = YES; 987 | GCC_C_LANGUAGE_STANDARD = gnu99; 988 | GCC_NO_COMMON_BLOCKS = YES; 989 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 990 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 991 | GCC_WARN_UNDECLARED_SELECTOR = YES; 992 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 993 | GCC_WARN_UNUSED_FUNCTION = YES; 994 | GCC_WARN_UNUSED_VARIABLE = YES; 995 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 996 | MTL_ENABLE_DEBUG_INFO = NO; 997 | SDKROOT = iphoneos; 998 | VALIDATE_PRODUCT = YES; 999 | }; 1000 | name = Release; 1001 | }; 1002 | 8824C7BF1B505B940016CC3D /* Debug */ = { 1003 | isa = XCBuildConfiguration; 1004 | buildSettings = { 1005 | ALWAYS_SEARCH_USER_PATHS = YES; 1006 | CLANG_CXX_LIBRARY = "libc++"; 1007 | DEVELOPMENT_TEAM = LFEXX25NFN; 1008 | ENABLE_BITCODE = NO; 1009 | FRAMEWORK_SEARCH_PATHS = ( 1010 | "$(inherited)", 1011 | "$(PROJECT_DIR)/CaffeApp", 1012 | "$(PROJECT_DIR)/TrafficLightApp", 1013 | ); 1014 | GCC_OPTIMIZATION_LEVEL = s; 1015 | GCC_PREPROCESSOR_DEFINITIONS = ( 1016 | "DEBUG=1", 1017 | "$(inherited)", 1018 | "CPU_ONLY=1", 1019 | ); 1020 | HEADER_SEARCH_PATHS = ( 1021 | "$(inherited)", 1022 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 1023 | ); 1024 | INFOPLIST_FILE = "$(SRCROOT)/TrafficLightApp/Info.plist"; 1025 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 1026 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 1027 | LIBRARY_SEARCH_PATHS = ( 1028 | "$(inherited)", 1029 | "$(PROJECT_DIR)/caffe/lib", 1030 | "$(PROJECT_DIR)/caffe/ios/lib", 1031 | ); 1032 | PRODUCT_BUNDLE_IDENTIFIER = com.avihay.testapp; 1033 | PRODUCT_NAME = "$(TARGET_NAME)"; 1034 | USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/caffe/include $(SRCROOT)/caffe/ios/include"; 1035 | }; 1036 | name = Debug; 1037 | }; 1038 | 8824C7C01B505B940016CC3D /* Release */ = { 1039 | isa = XCBuildConfiguration; 1040 | buildSettings = { 1041 | ALWAYS_SEARCH_USER_PATHS = YES; 1042 | CLANG_CXX_LIBRARY = "libc++"; 1043 | DEVELOPMENT_TEAM = LFEXX25NFN; 1044 | ENABLE_BITCODE = NO; 1045 | FRAMEWORK_SEARCH_PATHS = ( 1046 | "$(inherited)", 1047 | "$(PROJECT_DIR)/CaffeApp", 1048 | "$(PROJECT_DIR)/TrafficLightApp", 1049 | ); 1050 | GCC_OPTIMIZATION_LEVEL = s; 1051 | GCC_PREPROCESSOR_DEFINITIONS = "CPU_ONLY=1"; 1052 | HEADER_SEARCH_PATHS = ( 1053 | "$(inherited)", 1054 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 1055 | ); 1056 | INFOPLIST_FILE = "$(SRCROOT)/TrafficLightApp/Info.plist"; 1057 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 1058 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 1059 | LIBRARY_SEARCH_PATHS = ( 1060 | "$(inherited)", 1061 | "$(PROJECT_DIR)/caffe/lib", 1062 | "$(PROJECT_DIR)/caffe/ios/lib", 1063 | ); 1064 | PRODUCT_BUNDLE_IDENTIFIER = com.avihay.testapp; 1065 | PRODUCT_NAME = "$(TARGET_NAME)"; 1066 | USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/caffe/include $(SRCROOT)/caffe/ios/include"; 1067 | }; 1068 | name = Release; 1069 | }; 1070 | 8824C7C21B505B940016CC3D /* Debug */ = { 1071 | isa = XCBuildConfiguration; 1072 | buildSettings = { 1073 | ALWAYS_SEARCH_USER_PATHS = YES; 1074 | BUNDLE_LOADER = "$(TEST_HOST)"; 1075 | FRAMEWORK_SEARCH_PATHS = ( 1076 | "$(SDKROOT)/Developer/Library/Frameworks", 1077 | "$(inherited)", 1078 | "$(PROJECT_DIR)/CaffeApp", 1079 | ); 1080 | GCC_PREPROCESSOR_DEFINITIONS = ( 1081 | "DEBUG=1", 1082 | "$(inherited)", 1083 | "CPU_ONLY=1", 1084 | ); 1085 | INFOPLIST_FILE = CaffeAppTests/Info.plist; 1086 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1087 | LIBRARY_SEARCH_PATHS = ( 1088 | "$(inherited)", 1089 | "$(PROJECT_DIR)/lib", 1090 | "$(PROJECT_DIR)/caffe/lib", 1091 | "$(PROJECT_DIR)/caffe/ios/lib", 1092 | ); 1093 | PRODUCT_NAME = "$(TARGET_NAME)"; 1094 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TrafficLightApp.app/TrafficLightApp"; 1095 | USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/caffe/include $(SRCROOT)/include"; 1096 | }; 1097 | name = Debug; 1098 | }; 1099 | 8824C7C31B505B940016CC3D /* Release */ = { 1100 | isa = XCBuildConfiguration; 1101 | buildSettings = { 1102 | ALWAYS_SEARCH_USER_PATHS = YES; 1103 | BUNDLE_LOADER = "$(TEST_HOST)"; 1104 | FRAMEWORK_SEARCH_PATHS = ( 1105 | "$(SDKROOT)/Developer/Library/Frameworks", 1106 | "$(inherited)", 1107 | "$(PROJECT_DIR)/CaffeApp", 1108 | ); 1109 | GCC_PREPROCESSOR_DEFINITIONS = "CPU_ONLY=1"; 1110 | INFOPLIST_FILE = CaffeAppTests/Info.plist; 1111 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1112 | LIBRARY_SEARCH_PATHS = ( 1113 | "$(inherited)", 1114 | "$(PROJECT_DIR)/lib", 1115 | "$(PROJECT_DIR)/caffe/lib", 1116 | "$(PROJECT_DIR)/caffe/ios/lib", 1117 | ); 1118 | PRODUCT_NAME = "$(TARGET_NAME)"; 1119 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TrafficLightApp.app/TrafficLightApp"; 1120 | USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/caffe/include $(SRCROOT)/include"; 1121 | }; 1122 | name = Release; 1123 | }; 1124 | /* End XCBuildConfiguration section */ 1125 | 1126 | /* Begin XCConfigurationList section */ 1127 | 8824C7961B505B940016CC3D /* Build configuration list for PBXProject "TrafficLightApp" */ = { 1128 | isa = XCConfigurationList; 1129 | buildConfigurations = ( 1130 | 8824C7BC1B505B940016CC3D /* Debug */, 1131 | 8824C7BD1B505B940016CC3D /* Release */, 1132 | ); 1133 | defaultConfigurationIsVisible = 0; 1134 | defaultConfigurationName = Release; 1135 | }; 1136 | 8824C7BE1B505B940016CC3D /* Build configuration list for PBXNativeTarget "TrafficLightApp" */ = { 1137 | isa = XCConfigurationList; 1138 | buildConfigurations = ( 1139 | 8824C7BF1B505B940016CC3D /* Debug */, 1140 | 8824C7C01B505B940016CC3D /* Release */, 1141 | ); 1142 | defaultConfigurationIsVisible = 0; 1143 | defaultConfigurationName = Release; 1144 | }; 1145 | 8824C7C11B505B940016CC3D /* Build configuration list for PBXNativeTarget "TrafficLightAppTests" */ = { 1146 | isa = XCConfigurationList; 1147 | buildConfigurations = ( 1148 | 8824C7C21B505B940016CC3D /* Debug */, 1149 | 8824C7C31B505B940016CC3D /* Release */, 1150 | ); 1151 | defaultConfigurationIsVisible = 0; 1152 | defaultConfigurationName = Release; 1153 | }; 1154 | /* End XCConfigurationList section */ 1155 | }; 1156 | rootObject = 8824C7931B505B940016CC3D /* Project object */; 1157 | } 1158 | -------------------------------------------------------------------------------- /TrafficLightApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /TrafficLightApp.xcodeproj/project.xcworkspace/xcshareddata/CaffeApp.xcscmblueprint: -------------------------------------------------------------------------------- 1 | { 2 | "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "DD6A2D0E59282EA7BBECE5A55FBB43065F9444EC", 3 | "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { 4 | 5 | }, 6 | "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { 7 | "DD6A2D0E59282EA7BBECE5A55FBB43065F9444EC" : 9223372036854775807, 8 | "4CD8186CE66A0AD46BD21DF2E9F43E65780546D2" : 9223372036854775807, 9 | "6647C67748EFC882CB1F245D9B8ABF39B63B8E2D" : 9223372036854775807 10 | }, 11 | "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "36A754AD-E00E-4C68-AD75-4642B582DE4C", 12 | "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { 13 | "DD6A2D0E59282EA7BBECE5A55FBB43065F9444EC" : "TrafficLights-DeepLearning-iOS\/", 14 | "4CD8186CE66A0AD46BD21DF2E9F43E65780546D2" : "TrafficLights-DeepLearning-iOS\/caffe\/", 15 | "6647C67748EFC882CB1F245D9B8ABF39B63B8E2D" : "caffe-ios-sample\/" 16 | }, 17 | "DVTSourceControlWorkspaceBlueprintNameKey" : "CaffeApp", 18 | "DVTSourceControlWorkspaceBlueprintVersion" : 204, 19 | "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "CaffeApp.xcodeproj", 20 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ 21 | { 22 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/aleph7\/caffe.git", 23 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 24 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "4CD8186CE66A0AD46BD21DF2E9F43E65780546D2" 25 | }, 26 | { 27 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/noradaiko\/caffe-ios-sample.git", 28 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 29 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "6647C67748EFC882CB1F245D9B8ABF39B63B8E2D" 30 | }, 31 | { 32 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/asavihay\/TrafficLights-DeepLearning-iOS", 33 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 34 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "DD6A2D0E59282EA7BBECE5A55FBB43065F9444EC" 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /TrafficLightApp.xcodeproj/project.xcworkspace/xcshareddata/TrafficLightApp.xcscmblueprint: -------------------------------------------------------------------------------- 1 | { 2 | "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "DD6A2D0E59282EA7BBECE5A55FBB43065F9444EC", 3 | "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { 4 | 5 | }, 6 | "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { 7 | "DD6A2D0E59282EA7BBECE5A55FBB43065F9444EC" : 9223372036854775807, 8 | "4CD8186CE66A0AD46BD21DF2E9F43E65780546D2" : 9223372036854775807, 9 | "6647C67748EFC882CB1F245D9B8ABF39B63B8E2D" : 9223372036854775807 10 | }, 11 | "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "09A5FA33-D0FD-4AD6-BDF9-2FD3C5AC16DC", 12 | "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { 13 | "DD6A2D0E59282EA7BBECE5A55FBB43065F9444EC" : "TrafficLights-DeepLearning-iOS\/", 14 | "4CD8186CE66A0AD46BD21DF2E9F43E65780546D2" : "TrafficLights-DeepLearning-iOS\/caffe\/", 15 | "6647C67748EFC882CB1F245D9B8ABF39B63B8E2D" : "caffe-ios-sample\/" 16 | }, 17 | "DVTSourceControlWorkspaceBlueprintNameKey" : "TrafficLightApp", 18 | "DVTSourceControlWorkspaceBlueprintVersion" : 204, 19 | "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "TrafficLightApp.xcodeproj", 20 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ 21 | { 22 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/aleph7\/caffe.git", 23 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 24 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "4CD8186CE66A0AD46BD21DF2E9F43E65780546D2" 25 | }, 26 | { 27 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/noradaiko\/caffe-ios-sample.git", 28 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 29 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "6647C67748EFC882CB1F245D9B8ABF39B63B8E2D" 30 | }, 31 | { 32 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/asavihay\/TrafficLights-DeepLearning-iOS.git", 33 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 34 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "DD6A2D0E59282EA7BBECE5A55FBB43065F9444EC" 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /TrafficLightApp.xcodeproj/project.xcworkspace/xcshareddata/TrafficLightDetector.xcscmblueprint: -------------------------------------------------------------------------------- 1 | { 2 | "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "DD6A2D0E59282EA7BBECE5A55FBB43065F9444EC", 3 | "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { 4 | 5 | }, 6 | "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { 7 | "DD6A2D0E59282EA7BBECE5A55FBB43065F9444EC" : 9223372036854775807, 8 | "4CD8186CE66A0AD46BD21DF2E9F43E65780546D2" : 9223372036854775807, 9 | "6647C67748EFC882CB1F245D9B8ABF39B63B8E2D" : 9223372036854775807 10 | }, 11 | "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "6C77AFB7-E376-46D0-AC8D-EB8D4F229506", 12 | "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { 13 | "DD6A2D0E59282EA7BBECE5A55FBB43065F9444EC" : "TrafficLights-DeepLearning-iOS\/", 14 | "4CD8186CE66A0AD46BD21DF2E9F43E65780546D2" : "TrafficLights-DeepLearning-iOS\/caffe\/", 15 | "6647C67748EFC882CB1F245D9B8ABF39B63B8E2D" : "caffe-ios-sample\/" 16 | }, 17 | "DVTSourceControlWorkspaceBlueprintNameKey" : "TrafficLightDetector", 18 | "DVTSourceControlWorkspaceBlueprintVersion" : 204, 19 | "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "TrafficLightDetector.xcodeproj", 20 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ 21 | { 22 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/aleph7\/caffe.git", 23 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 24 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "4CD8186CE66A0AD46BD21DF2E9F43E65780546D2" 25 | }, 26 | { 27 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/noradaiko\/caffe-ios-sample.git", 28 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 29 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "6647C67748EFC882CB1F245D9B8ABF39B63B8E2D" 30 | }, 31 | { 32 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/asavihay\/TrafficLights-DeepLearning-iOS", 33 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 34 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "DD6A2D0E59282EA7BBECE5A55FBB43065F9444EC" 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /TrafficLightApp.xcodeproj/xcuserdata/avihayassouline.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /TrafficLightApp.xcodeproj/xcuserdata/avihayassouline.xcuserdatad/xcschemes/CaffeApp.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /TrafficLightApp.xcodeproj/xcuserdata/avihayassouline.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | CaffeApp.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 8824C79A1B505B940016CC3D 16 | 17 | primary 18 | 19 | 20 | 8824C7B31B505B940016CC3D 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /TrafficLightApp/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // CaffeApp 4 | // 5 | // Created by Takuya Matsuyama on 7/11/15. 6 | // Copyright (c) 2015 Takuya Matsuyama. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /TrafficLightApp/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // CaffeApp 4 | // 5 | // Created by Takuya Matsuyama on 7/11/15. 6 | // Copyright (c) 2015 Takuya Matsuyama. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | - (void)applicationWillResignActive:(UIApplication *)application { 24 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 25 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 26 | } 27 | 28 | - (void)applicationDidEnterBackground:(UIApplication *)application { 29 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 30 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 31 | } 32 | 33 | - (void)applicationWillEnterForeground:(UIApplication *)application { 34 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 35 | } 36 | 37 | - (void)applicationDidBecomeActive:(UIApplication *)application { 38 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 39 | } 40 | 41 | - (void)applicationWillTerminate:(UIApplication *)application { 42 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /TrafficLightApp/Assets/greenLight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asavihay/TrafficLights-DeepLearning-iOS/037f5d7a921deff206b8fc8a8bdd01ba88ece099/TrafficLightApp/Assets/greenLight.png -------------------------------------------------------------------------------- /TrafficLightApp/Assets/noLight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asavihay/TrafficLights-DeepLearning-iOS/037f5d7a921deff206b8fc8a8bdd01ba88ece099/TrafficLightApp/Assets/noLight.png -------------------------------------------------------------------------------- /TrafficLightApp/Assets/redLight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asavihay/TrafficLights-DeepLearning-iOS/037f5d7a921deff206b8fc8a8bdd01ba88ece099/TrafficLightApp/Assets/redLight.png -------------------------------------------------------------------------------- /TrafficLightApp/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /TrafficLightApp/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /TrafficLightApp/Classifier.h: -------------------------------------------------------------------------------- 1 | // 2 | // Classifier.h 3 | // CaffeApp 4 | // 5 | // Created by Takuya Matsuyama on 7/11/15. 6 | // Copyright (c) 2015 Takuya Matsuyama. All rights reserved. 7 | // 8 | 9 | #import "caffe/caffe.hpp" 10 | #import 11 | #import 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | /* Pair (label, confidence) representing a prediction. */ 20 | typedef std::pair Prediction; 21 | 22 | class Classifier { 23 | public: 24 | Classifier(const std::string& model_file, 25 | const std::string& trained_file, 26 | const std::string& mean_file, 27 | const std::string& label_file); 28 | 29 | std::vector Classify(const cv::Mat& img, int N = 5); 30 | 31 | private: 32 | void SetMean(const std::string& mean_file); 33 | 34 | std::vector Predict(const cv::Mat& img); 35 | 36 | void WrapInputLayer(std::vector* input_channels); 37 | 38 | void Preprocess(const cv::Mat& img, 39 | std::vector* input_channels); 40 | 41 | private: 42 | caffe::shared_ptr< caffe::Net > net_; 43 | cv::Size input_geometry_; 44 | int num_channels_; 45 | cv::Mat mean_; 46 | std::vector labels_; 47 | std::vector input_channels_; 48 | }; 49 | -------------------------------------------------------------------------------- /TrafficLightApp/Classifier.mm: -------------------------------------------------------------------------------- 1 | // 2 | // Classifier.m 3 | // CaffeApp 4 | // 5 | // Created by Takuya Matsuyama on 7/11/15. 6 | // Copyright (c) 2015 Takuya Matsuyama. All rights reserved. 7 | // 8 | 9 | #import "Classifier.h" 10 | 11 | using namespace caffe; 12 | using std::string; 13 | 14 | Classifier::Classifier(const string& model_file, 15 | const string& trained_file, 16 | const string& mean_file, 17 | const string& label_file) { 18 | Caffe::set_mode(Caffe::CPU); 19 | 20 | /* Load the network. */ 21 | net_.reset(new Net(model_file, TEST)); 22 | net_->CopyTrainedLayersFrom(trained_file); 23 | 24 | CHECK_EQ(net_->num_inputs(), 1) << "Network should have exactly one input."; 25 | 26 | Blob* input_layer = net_->input_blobs()[0]; 27 | num_channels_ = input_layer->channels(); 28 | CHECK(num_channels_ == 3 || num_channels_ == 1) 29 | << "Input layer should have 1 or 3 channels."; 30 | input_geometry_ = cv::Size(input_layer->width(), input_layer->height()); 31 | 32 | /* Load the binaryproto mean file. */ 33 | SetMean(mean_file); 34 | 35 | /* Load labels. */ 36 | std::ifstream labels(label_file.c_str()); 37 | CHECK(labels) << "Unable to open labels file " << label_file; 38 | string line; 39 | while (std::getline(labels, line)) 40 | labels_.push_back(string(line)); 41 | 42 | Blob* output_layer = net_->output_blobs()[0]; 43 | CHECK_EQ(labels_.size(), output_layer->channels()) 44 | << "Number of labels is different from the output layer dimension."; 45 | 46 | 47 | 48 | input_layer->Reshape(1, num_channels_, 49 | input_geometry_.height, input_geometry_.width); 50 | /* Forward dimension change to all layers. */ 51 | net_->Reshape(); 52 | 53 | WrapInputLayer(&input_channels_); 54 | } 55 | 56 | static bool PairCompare(const std::pair& lhs, 57 | const std::pair& rhs) { 58 | return lhs.first > rhs.first; 59 | } 60 | 61 | /* Return the indices of the top N values of vector v. */ 62 | static std::vector Argmax(const std::vector& v, int N) { 63 | std::vector > pairs; 64 | for (size_t i = 0; i < v.size(); ++i) 65 | pairs.push_back(std::make_pair(v[i], i)); 66 | std::partial_sort(pairs.begin(), pairs.begin() + N, pairs.end(), PairCompare); 67 | 68 | std::vector result; 69 | for (int i = 0; i < N; ++i) 70 | result.push_back(pairs[i].second); 71 | return result; 72 | } 73 | 74 | /* Return the top N predictions. */ 75 | std::vector Classifier::Classify(const cv::Mat& img, int N) { 76 | std::vector output = Predict(img); 77 | 78 | std::vector maxN = Argmax(output, N); 79 | std::vector predictions; 80 | for (int i = 0; i < N; ++i) { 81 | int idx = maxN[i]; 82 | predictions.push_back(std::make_pair(labels_[idx], output[idx])); 83 | } 84 | 85 | return predictions; 86 | } 87 | 88 | /* Load the mean file in binaryproto format. */ 89 | void Classifier::SetMean(const string& mean_file) { 90 | BlobProto blob_proto; 91 | ReadProtoFromBinaryFileOrDie(mean_file.c_str(), &blob_proto); 92 | 93 | /* Convert from BlobProto to Blob */ 94 | Blob mean_blob; 95 | mean_blob.FromProto(blob_proto); 96 | CHECK_EQ(mean_blob.channels(), num_channels_) 97 | << "Number of channels of mean file doesn't match input layer."; 98 | 99 | /* The format of the mean file is planar 32-bit float BGR or grayscale. */ 100 | std::vector channels; 101 | float* data = mean_blob.mutable_cpu_data(); 102 | for (int i = 0; i < num_channels_; ++i) { 103 | /* Extract an individual channel. */ 104 | cv::Mat channel(mean_blob.height(), mean_blob.width(), CV_32FC1, data); 105 | channels.push_back(channel); 106 | data += mean_blob.height() * mean_blob.width(); 107 | } 108 | 109 | /* Merge the separate channels into a single image. */ 110 | cv::Mat mean; 111 | cv::merge(channels, mean); 112 | 113 | /* Compute the global mean pixel value and create a mean image 114 | * filled with this value. */ 115 | cv::Scalar channel_mean = cv::mean(mean); 116 | mean_ = cv::Mat(input_geometry_, mean.type(), channel_mean); 117 | } 118 | 119 | std::vector Classifier::Predict(const cv::Mat& img) { 120 | 121 | 122 | Preprocess(img, &input_channels_); 123 | 124 | net_->ForwardPrefilled(); 125 | 126 | /* Copy the output layer to a std::vector */ 127 | Blob* output_layer = net_->output_blobs()[0]; 128 | const float* begin = output_layer->cpu_data(); 129 | const float* end = begin + output_layer->channels(); 130 | return std::vector(begin, end); 131 | } 132 | 133 | /* Wrap the input layer of the network in separate cv::Mat objects 134 | * (one per channel). This way we save one memcpy operation and we 135 | * don't need to rely on cudaMemcpy2D. The last preprocessing 136 | * operation will write the separate channels directly to the input 137 | * layer. */ 138 | void Classifier::WrapInputLayer(std::vector* input_channels) { 139 | Blob* input_layer = net_->input_blobs()[0]; 140 | 141 | int width = input_layer->width(); 142 | int height = input_layer->height(); 143 | float* input_data = input_layer->mutable_cpu_data(); 144 | for (int i = 0; i < input_layer->channels(); ++i) { 145 | cv::Mat channel(height, width, CV_32FC1, input_data); 146 | input_channels->push_back(channel); 147 | input_data += width * height; 148 | } 149 | } 150 | 151 | void Classifier::Preprocess(const cv::Mat& img, 152 | std::vector* input_channels) { 153 | /* Convert the input image to the input image format of the network. */ 154 | cv::Mat sample; 155 | if (img.channels() == 3 && num_channels_ == 1) 156 | cv::cvtColor(img, sample, CV_BGR2GRAY); 157 | else if (img.channels() == 4 && num_channels_ == 1) 158 | cv::cvtColor(img, sample, CV_BGRA2GRAY); 159 | else if (img.channels() == 4 && num_channels_ == 3) 160 | cv::cvtColor(img, sample, CV_BGRA2BGR); 161 | else if (img.channels() == 1 && num_channels_ == 3) 162 | cv::cvtColor(img, sample, CV_GRAY2BGR); 163 | else 164 | sample = img; 165 | 166 | cv::Mat sample_resized; 167 | if (sample.size() != input_geometry_) 168 | cv::resize(sample, sample_resized, input_geometry_); 169 | else 170 | sample_resized = sample; 171 | 172 | cv::Mat sample_float; 173 | if (num_channels_ == 3) 174 | sample_resized.convertTo(sample_float, CV_32FC3); 175 | else 176 | sample_resized.convertTo(sample_float, CV_32FC1); 177 | 178 | cv::Mat sample_normalized; 179 | cv::subtract(sample_float, mean_, sample_normalized); 180 | 181 | /* This operation will write the separate BGR planes directly to the 182 | * input layer of the network because it is wrapped by the cv::Mat 183 | * objects in input_channels. */ 184 | cv::split(sample_normalized, *input_channels); 185 | 186 | CHECK(reinterpret_cast(input_channels->at(0).data) 187 | == net_->input_blobs()[0]->cpu_data()) 188 | << "Input channels are not wrapping the input layer of the network."; 189 | } 190 | -------------------------------------------------------------------------------- /TrafficLightApp/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSCameraUsageDescription 26 | Traffic Light Detection Requires Access To Your Camera 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UIRequiredDeviceCapabilities 32 | 33 | armv7 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /TrafficLightApp/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // CaffeApp 4 | // 5 | // Created by Takuya Matsuyama on 7/11/15. 6 | // Copyright (c) 2015 Takuya Matsuyama. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | #import "Classifier.h" 13 | 14 | @interface ViewController : UIViewController 15 | 16 | @property (weak, nonatomic) IBOutlet UIImageView *lightImage; 17 | 18 | @end 19 | 20 | -------------------------------------------------------------------------------- /TrafficLightApp/ViewController.mm: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // CaffeApp 4 | // 5 | // Created by Avihay Assouline 6 | // Copyright (c) 2016 Avihay Assouline. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | 11 | using namespace std; 12 | 13 | @interface ViewController () 14 | { 15 | Classifier *classifier; 16 | AVCaptureSession *captureSession; 17 | AVCaptureVideoPreviewLayer *previewLayer; 18 | bool isProcessing; 19 | } 20 | @end 21 | 22 | @implementation ViewController 23 | 24 | NSDictionary* const labelToImage = @{ 25 | @"background": @"noLight.png", 26 | @"green": @"greenLight.png", 27 | @"red": @"redLight.png" 28 | }; 29 | 30 | ////////////////////////////////////////////////////////////////////// 31 | 32 | - (void)viewDidLoad 33 | { 34 | [super viewDidLoad]; 35 | 36 | NSString *netDefinition = [NSBundle.mainBundle pathForResource:@"deploy" 37 | ofType:@"prototxt" 38 | inDirectory:@"model"]; 39 | 40 | NSString *netWeights = [NSBundle.mainBundle pathForResource:@"model" 41 | ofType:@"caffemodel" 42 | inDirectory:@"model"]; 43 | 44 | NSString *datasetMean = [NSBundle.mainBundle pathForResource:@"mean" 45 | ofType:@"binaryproto" 46 | inDirectory:@"model"]; 47 | 48 | 49 | NSString *netLabels = [NSBundle.mainBundle pathForResource:@"labels" 50 | ofType:@"txt" 51 | inDirectory:@"model"]; 52 | 53 | string net_definition = string([netDefinition UTF8String]); 54 | string net_weights = string([netWeights UTF8String]); 55 | string dataset_mean = string([datasetMean UTF8String]); 56 | string net_labels = string([netLabels UTF8String]); 57 | 58 | classifier = new Classifier(net_definition, 59 | net_weights, 60 | dataset_mean, 61 | net_labels); 62 | 63 | [self setupCaptureSession]; 64 | 65 | } 66 | 67 | ////////////////////////////////////////////////////////////////////// 68 | 69 | - (void)predictWithImage:(UIImage*)image; 70 | { 71 | if (!image) 72 | return; 73 | 74 | cv::Mat src_img, bgra_img; 75 | UIImageToMat(image, src_img); 76 | 77 | // needs to convert to BGRA because the image loaded from UIImage is in RGBA 78 | cv::resize(src_img, src_img, cv::Size(224, 224)); 79 | cv::cvtColor(src_img, bgra_img, CV_RGBA2BGR); 80 | 81 | vector result = classifier->Classify(bgra_img, 3); 82 | 83 | for (vector::iterator it = result.begin(); it != result.end(); ++it) { 84 | NSString* mylabel = [NSString stringWithUTF8String:it->first.c_str()]; 85 | NSNumber* probability = [NSNumber numberWithFloat:it->second]; 86 | if (it == result.begin() && probability.floatValue > 0.6) { 87 | _lightImage.image = [UIImage imageNamed:[labelToImage valueForKey:mylabel]]; 88 | } 89 | } 90 | } 91 | 92 | ////////////////////////////////////////////////////////////////////// 93 | 94 | // Create and configure a capture session and start it running 95 | - (void)setupCaptureSession 96 | { 97 | NSError *error = nil; 98 | 99 | // Create the session 100 | captureSession = [[AVCaptureSession alloc] init]; 101 | 102 | // Configure the session to produce lower resolution video frames, if your 103 | // processing algorithm can cope. We'll specify medium quality for the 104 | // chosen device. 105 | captureSession.sessionPreset = AVCaptureSessionPresetHigh; 106 | 107 | // Find a suitable AVCaptureDevice 108 | NSArray *cameras=[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; 109 | AVCaptureDevice *device = [cameras objectAtIndex:0]; 110 | 111 | // Create a device input with the device and add it to the session. 112 | AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; 113 | if (!input) 114 | { 115 | return; 116 | } 117 | [captureSession addInput:input]; 118 | 119 | // Create a VideoDataOutput and add it to the session 120 | AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init]; 121 | [captureSession addOutput:output]; 122 | 123 | // Configure your output. 124 | dispatch_queue_t queue = dispatch_queue_create("myQueue", NULL); 125 | [output setSampleBufferDelegate:self queue:queue]; 126 | 127 | // Specify the pixel format 128 | output.videoSettings = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey]; 129 | 130 | // Setup the display layer 131 | previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession]; 132 | [previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; 133 | previewLayer.frame = self.view.bounds; // Assume you want the preview layer to fill the view. 134 | previewLayer.connection.videoOrientation = AVCaptureVideoOrientationLandscapeRight; 135 | [previewLayer setBackgroundColor:[[UIColor blackColor] CGColor]]; 136 | [self.view.layer insertSublayer:previewLayer atIndex:0]; 137 | 138 | [captureSession startRunning]; 139 | } 140 | 141 | 142 | ////////////////////////////////////////////////////////////////////// 143 | 144 | - (void)captureOutput:(AVCaptureOutput *)captureOutput 145 | didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 146 | fromConnection:(AVCaptureConnection *)connection 147 | { 148 | // Using a boolean flag as a patch to process the latest 149 | // frame when running on device. This could have been solved much 150 | // cleaner but with a bit more code - We'll keep it this way 151 | if (isProcessing) 152 | return; 153 | 154 | UIImage *im = [self imageFromSampleBuffer:sampleBuffer]; 155 | dispatch_async(dispatch_get_main_queue(), ^{ 156 | isProcessing = YES; 157 | [self predictWithImage:im]; 158 | isProcessing = NO; 159 | }); 160 | } 161 | 162 | ////////////////////////////////////////////////////////////////////// 163 | 164 | // Create a UIImage from sample buffer data 165 | - (UIImage *) imageFromSampleBuffer:(CMSampleBufferRef) sampleBuffer 166 | { 167 | //NSLog(@"imageFromSampleBuffer: called"); 168 | // Get a CMSampleBuffer's Core Video image buffer for the media data 169 | CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 170 | // Lock the base address of the pixel buffer 171 | CVPixelBufferLockBaseAddress(imageBuffer, 0); 172 | 173 | // Get the number of bytes per row for the pixel buffer 174 | void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer); 175 | 176 | // Get the number of bytes per row for the pixel buffer 177 | size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); 178 | // Get the pixel buffer width and height 179 | size_t width = CVPixelBufferGetWidth(imageBuffer); 180 | size_t height = CVPixelBufferGetHeight(imageBuffer); 181 | 182 | // Create a device-dependent RGB color space 183 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 184 | 185 | // Create a bitmap graphics context with the sample buffer data 186 | CGContextRef context = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); 187 | // Create a Quartz image from the pixel data in the bitmap graphics context 188 | CGImageRef quartzImage = CGBitmapContextCreateImage(context); 189 | // Unlock the pixel buffer 190 | CVPixelBufferUnlockBaseAddress(imageBuffer,0); 191 | 192 | 193 | // Free up the context and color space 194 | CGContextRelease(context); 195 | CGColorSpaceRelease(colorSpace); 196 | 197 | // Create an image object from the Quartz image 198 | UIImage *image = [UIImage imageWithCGImage:quartzImage]; 199 | 200 | // Release the Quartz image 201 | CGImageRelease(quartzImage); 202 | 203 | return (image); 204 | } 205 | 206 | ////////////////////////////////////////////////////////////////////// 207 | 208 | - (void)didReceiveMemoryWarning { 209 | [super didReceiveMemoryWarning]; 210 | } 211 | 212 | ////////////////////////////////////////////////////////////////////// 213 | 214 | -(NSUInteger)supportedInterfaceOrientations{ 215 | return UIInterfaceOrientationMaskLandscapeRight; 216 | } 217 | 218 | ////////////////////////////////////////////////////////////////////// 219 | 220 | -(BOOL)shouldAutorotate { 221 | return NO; 222 | } 223 | 224 | @end 225 | 226 | -------------------------------------------------------------------------------- /TrafficLightApp/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CaffeApp 4 | // 5 | // Created by Takuya Matsuyama on 7/11/15. 6 | // Copyright (c) 2015 Takuya Matsuyama. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /download_dependencies.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ## Download Caffe Model 4 | curl -L https://www.dropbox.com/s/05u4e10s0dysg7c/model.caffemodel?dl=1 -o ./model/model.caffemodel 5 | 6 | ## Download OpenCV2 extract it and remove the zipped source 7 | curl -L0k https://www.dropbox.com/s/2nyxzmacqg71luz/opencv2.framework.zip?dl=1 -o opencv2.framework.zip 8 | unzip opencv2.framework.zip -d TrafficLightApp/ 9 | rm opencv2.framework.zip 10 | -------------------------------------------------------------------------------- /model/deploy.prototxt: -------------------------------------------------------------------------------- 1 | input: "data" 2 | input_shape { 3 | dim: 1 4 | dim: 3 5 | dim: 224 6 | dim: 224 7 | } 8 | layer { 9 | name: "conv1/7x7_s2" 10 | type: "Convolution" 11 | bottom: "data" 12 | top: "conv1/7x7_s2" 13 | param { 14 | lr_mult: 1.0 15 | decay_mult: 1.0 16 | } 17 | param { 18 | lr_mult: 2.0 19 | decay_mult: 0.0 20 | } 21 | convolution_param { 22 | num_output: 64 23 | pad: 3 24 | kernel_size: 7 25 | stride: 2 26 | weight_filler { 27 | type: "xavier" 28 | std: 0.1 29 | } 30 | bias_filler { 31 | type: "constant" 32 | value: 0.2 33 | } 34 | } 35 | } 36 | layer { 37 | name: "conv1/relu_7x7" 38 | type: "ReLU" 39 | bottom: "conv1/7x7_s2" 40 | top: "conv1/7x7_s2" 41 | } 42 | layer { 43 | name: "pool1/3x3_s2" 44 | type: "Pooling" 45 | bottom: "conv1/7x7_s2" 46 | top: "pool1/3x3_s2" 47 | pooling_param { 48 | pool: MAX 49 | kernel_size: 3 50 | stride: 2 51 | } 52 | } 53 | layer { 54 | name: "pool1/norm1" 55 | type: "LRN" 56 | bottom: "pool1/3x3_s2" 57 | top: "pool1/norm1" 58 | lrn_param { 59 | local_size: 5 60 | alpha: 0.0001 61 | beta: 0.75 62 | } 63 | } 64 | layer { 65 | name: "conv2/3x3_reduce" 66 | type: "Convolution" 67 | bottom: "pool1/norm1" 68 | top: "conv2/3x3_reduce" 69 | param { 70 | lr_mult: 1.0 71 | decay_mult: 1.0 72 | } 73 | param { 74 | lr_mult: 2.0 75 | decay_mult: 0.0 76 | } 77 | convolution_param { 78 | num_output: 64 79 | kernel_size: 1 80 | weight_filler { 81 | type: "xavier" 82 | std: 0.1 83 | } 84 | bias_filler { 85 | type: "constant" 86 | value: 0.2 87 | } 88 | } 89 | } 90 | layer { 91 | name: "conv2/relu_3x3_reduce" 92 | type: "ReLU" 93 | bottom: "conv2/3x3_reduce" 94 | top: "conv2/3x3_reduce" 95 | } 96 | layer { 97 | name: "conv2/3x3" 98 | type: "Convolution" 99 | bottom: "conv2/3x3_reduce" 100 | top: "conv2/3x3" 101 | param { 102 | lr_mult: 1.0 103 | decay_mult: 1.0 104 | } 105 | param { 106 | lr_mult: 2.0 107 | decay_mult: 0.0 108 | } 109 | convolution_param { 110 | num_output: 192 111 | pad: 1 112 | kernel_size: 3 113 | weight_filler { 114 | type: "xavier" 115 | std: 0.03 116 | } 117 | bias_filler { 118 | type: "constant" 119 | value: 0.2 120 | } 121 | } 122 | } 123 | layer { 124 | name: "conv2/relu_3x3" 125 | type: "ReLU" 126 | bottom: "conv2/3x3" 127 | top: "conv2/3x3" 128 | } 129 | layer { 130 | name: "conv2/norm2" 131 | type: "LRN" 132 | bottom: "conv2/3x3" 133 | top: "conv2/norm2" 134 | lrn_param { 135 | local_size: 5 136 | alpha: 0.0001 137 | beta: 0.75 138 | } 139 | } 140 | layer { 141 | name: "pool2/3x3_s2" 142 | type: "Pooling" 143 | bottom: "conv2/norm2" 144 | top: "pool2/3x3_s2" 145 | pooling_param { 146 | pool: MAX 147 | kernel_size: 3 148 | stride: 2 149 | } 150 | } 151 | layer { 152 | name: "inception_3a/1x1" 153 | type: "Convolution" 154 | bottom: "pool2/3x3_s2" 155 | top: "inception_3a/1x1" 156 | param { 157 | lr_mult: 1.0 158 | decay_mult: 1.0 159 | } 160 | param { 161 | lr_mult: 2.0 162 | decay_mult: 0.0 163 | } 164 | convolution_param { 165 | num_output: 64 166 | kernel_size: 1 167 | weight_filler { 168 | type: "xavier" 169 | std: 0.03 170 | } 171 | bias_filler { 172 | type: "constant" 173 | value: 0.2 174 | } 175 | } 176 | } 177 | layer { 178 | name: "inception_3a/relu_1x1" 179 | type: "ReLU" 180 | bottom: "inception_3a/1x1" 181 | top: "inception_3a/1x1" 182 | } 183 | layer { 184 | name: "inception_3a/3x3_reduce" 185 | type: "Convolution" 186 | bottom: "pool2/3x3_s2" 187 | top: "inception_3a/3x3_reduce" 188 | param { 189 | lr_mult: 1.0 190 | decay_mult: 1.0 191 | } 192 | param { 193 | lr_mult: 2.0 194 | decay_mult: 0.0 195 | } 196 | convolution_param { 197 | num_output: 96 198 | kernel_size: 1 199 | weight_filler { 200 | type: "xavier" 201 | std: 0.09 202 | } 203 | bias_filler { 204 | type: "constant" 205 | value: 0.2 206 | } 207 | } 208 | } 209 | layer { 210 | name: "inception_3a/relu_3x3_reduce" 211 | type: "ReLU" 212 | bottom: "inception_3a/3x3_reduce" 213 | top: "inception_3a/3x3_reduce" 214 | } 215 | layer { 216 | name: "inception_3a/3x3" 217 | type: "Convolution" 218 | bottom: "inception_3a/3x3_reduce" 219 | top: "inception_3a/3x3" 220 | param { 221 | lr_mult: 1.0 222 | decay_mult: 1.0 223 | } 224 | param { 225 | lr_mult: 2.0 226 | decay_mult: 0.0 227 | } 228 | convolution_param { 229 | num_output: 128 230 | pad: 1 231 | kernel_size: 3 232 | weight_filler { 233 | type: "xavier" 234 | std: 0.03 235 | } 236 | bias_filler { 237 | type: "constant" 238 | value: 0.2 239 | } 240 | } 241 | } 242 | layer { 243 | name: "inception_3a/relu_3x3" 244 | type: "ReLU" 245 | bottom: "inception_3a/3x3" 246 | top: "inception_3a/3x3" 247 | } 248 | layer { 249 | name: "inception_3a/5x5_reduce" 250 | type: "Convolution" 251 | bottom: "pool2/3x3_s2" 252 | top: "inception_3a/5x5_reduce" 253 | param { 254 | lr_mult: 1.0 255 | decay_mult: 1.0 256 | } 257 | param { 258 | lr_mult: 2.0 259 | decay_mult: 0.0 260 | } 261 | convolution_param { 262 | num_output: 16 263 | kernel_size: 1 264 | weight_filler { 265 | type: "xavier" 266 | std: 0.2 267 | } 268 | bias_filler { 269 | type: "constant" 270 | value: 0.2 271 | } 272 | } 273 | } 274 | layer { 275 | name: "inception_3a/relu_5x5_reduce" 276 | type: "ReLU" 277 | bottom: "inception_3a/5x5_reduce" 278 | top: "inception_3a/5x5_reduce" 279 | } 280 | layer { 281 | name: "inception_3a/5x5" 282 | type: "Convolution" 283 | bottom: "inception_3a/5x5_reduce" 284 | top: "inception_3a/5x5" 285 | param { 286 | lr_mult: 1.0 287 | decay_mult: 1.0 288 | } 289 | param { 290 | lr_mult: 2.0 291 | decay_mult: 0.0 292 | } 293 | convolution_param { 294 | num_output: 32 295 | pad: 2 296 | kernel_size: 5 297 | weight_filler { 298 | type: "xavier" 299 | std: 0.03 300 | } 301 | bias_filler { 302 | type: "constant" 303 | value: 0.2 304 | } 305 | } 306 | } 307 | layer { 308 | name: "inception_3a/relu_5x5" 309 | type: "ReLU" 310 | bottom: "inception_3a/5x5" 311 | top: "inception_3a/5x5" 312 | } 313 | layer { 314 | name: "inception_3a/pool" 315 | type: "Pooling" 316 | bottom: "pool2/3x3_s2" 317 | top: "inception_3a/pool" 318 | pooling_param { 319 | pool: MAX 320 | kernel_size: 3 321 | stride: 1 322 | pad: 1 323 | } 324 | } 325 | layer { 326 | name: "inception_3a/pool_proj" 327 | type: "Convolution" 328 | bottom: "inception_3a/pool" 329 | top: "inception_3a/pool_proj" 330 | param { 331 | lr_mult: 1.0 332 | decay_mult: 1.0 333 | } 334 | param { 335 | lr_mult: 2.0 336 | decay_mult: 0.0 337 | } 338 | convolution_param { 339 | num_output: 32 340 | kernel_size: 1 341 | weight_filler { 342 | type: "xavier" 343 | std: 0.1 344 | } 345 | bias_filler { 346 | type: "constant" 347 | value: 0.2 348 | } 349 | } 350 | } 351 | layer { 352 | name: "inception_3a/relu_pool_proj" 353 | type: "ReLU" 354 | bottom: "inception_3a/pool_proj" 355 | top: "inception_3a/pool_proj" 356 | } 357 | layer { 358 | name: "inception_3a/output" 359 | type: "Concat" 360 | bottom: "inception_3a/1x1" 361 | bottom: "inception_3a/3x3" 362 | bottom: "inception_3a/5x5" 363 | bottom: "inception_3a/pool_proj" 364 | top: "inception_3a/output" 365 | } 366 | layer { 367 | name: "inception_3b/1x1" 368 | type: "Convolution" 369 | bottom: "inception_3a/output" 370 | top: "inception_3b/1x1" 371 | param { 372 | lr_mult: 1.0 373 | decay_mult: 1.0 374 | } 375 | param { 376 | lr_mult: 2.0 377 | decay_mult: 0.0 378 | } 379 | convolution_param { 380 | num_output: 128 381 | kernel_size: 1 382 | weight_filler { 383 | type: "xavier" 384 | std: 0.03 385 | } 386 | bias_filler { 387 | type: "constant" 388 | value: 0.2 389 | } 390 | } 391 | } 392 | layer { 393 | name: "inception_3b/relu_1x1" 394 | type: "ReLU" 395 | bottom: "inception_3b/1x1" 396 | top: "inception_3b/1x1" 397 | } 398 | layer { 399 | name: "inception_3b/3x3_reduce" 400 | type: "Convolution" 401 | bottom: "inception_3a/output" 402 | top: "inception_3b/3x3_reduce" 403 | param { 404 | lr_mult: 1.0 405 | decay_mult: 1.0 406 | } 407 | param { 408 | lr_mult: 2.0 409 | decay_mult: 0.0 410 | } 411 | convolution_param { 412 | num_output: 128 413 | kernel_size: 1 414 | weight_filler { 415 | type: "xavier" 416 | std: 0.09 417 | } 418 | bias_filler { 419 | type: "constant" 420 | value: 0.2 421 | } 422 | } 423 | } 424 | layer { 425 | name: "inception_3b/relu_3x3_reduce" 426 | type: "ReLU" 427 | bottom: "inception_3b/3x3_reduce" 428 | top: "inception_3b/3x3_reduce" 429 | } 430 | layer { 431 | name: "inception_3b/3x3" 432 | type: "Convolution" 433 | bottom: "inception_3b/3x3_reduce" 434 | top: "inception_3b/3x3" 435 | param { 436 | lr_mult: 1.0 437 | decay_mult: 1.0 438 | } 439 | param { 440 | lr_mult: 2.0 441 | decay_mult: 0.0 442 | } 443 | convolution_param { 444 | num_output: 192 445 | pad: 1 446 | kernel_size: 3 447 | weight_filler { 448 | type: "xavier" 449 | std: 0.03 450 | } 451 | bias_filler { 452 | type: "constant" 453 | value: 0.2 454 | } 455 | } 456 | } 457 | layer { 458 | name: "inception_3b/relu_3x3" 459 | type: "ReLU" 460 | bottom: "inception_3b/3x3" 461 | top: "inception_3b/3x3" 462 | } 463 | layer { 464 | name: "inception_3b/5x5_reduce" 465 | type: "Convolution" 466 | bottom: "inception_3a/output" 467 | top: "inception_3b/5x5_reduce" 468 | param { 469 | lr_mult: 1.0 470 | decay_mult: 1.0 471 | } 472 | param { 473 | lr_mult: 2.0 474 | decay_mult: 0.0 475 | } 476 | convolution_param { 477 | num_output: 32 478 | kernel_size: 1 479 | weight_filler { 480 | type: "xavier" 481 | std: 0.2 482 | } 483 | bias_filler { 484 | type: "constant" 485 | value: 0.2 486 | } 487 | } 488 | } 489 | layer { 490 | name: "inception_3b/relu_5x5_reduce" 491 | type: "ReLU" 492 | bottom: "inception_3b/5x5_reduce" 493 | top: "inception_3b/5x5_reduce" 494 | } 495 | layer { 496 | name: "inception_3b/5x5" 497 | type: "Convolution" 498 | bottom: "inception_3b/5x5_reduce" 499 | top: "inception_3b/5x5" 500 | param { 501 | lr_mult: 1.0 502 | decay_mult: 1.0 503 | } 504 | param { 505 | lr_mult: 2.0 506 | decay_mult: 0.0 507 | } 508 | convolution_param { 509 | num_output: 96 510 | pad: 2 511 | kernel_size: 5 512 | weight_filler { 513 | type: "xavier" 514 | std: 0.03 515 | } 516 | bias_filler { 517 | type: "constant" 518 | value: 0.2 519 | } 520 | } 521 | } 522 | layer { 523 | name: "inception_3b/relu_5x5" 524 | type: "ReLU" 525 | bottom: "inception_3b/5x5" 526 | top: "inception_3b/5x5" 527 | } 528 | layer { 529 | name: "inception_3b/pool" 530 | type: "Pooling" 531 | bottom: "inception_3a/output" 532 | top: "inception_3b/pool" 533 | pooling_param { 534 | pool: MAX 535 | kernel_size: 3 536 | stride: 1 537 | pad: 1 538 | } 539 | } 540 | layer { 541 | name: "inception_3b/pool_proj" 542 | type: "Convolution" 543 | bottom: "inception_3b/pool" 544 | top: "inception_3b/pool_proj" 545 | param { 546 | lr_mult: 1.0 547 | decay_mult: 1.0 548 | } 549 | param { 550 | lr_mult: 2.0 551 | decay_mult: 0.0 552 | } 553 | convolution_param { 554 | num_output: 64 555 | kernel_size: 1 556 | weight_filler { 557 | type: "xavier" 558 | std: 0.1 559 | } 560 | bias_filler { 561 | type: "constant" 562 | value: 0.2 563 | } 564 | } 565 | } 566 | layer { 567 | name: "inception_3b/relu_pool_proj" 568 | type: "ReLU" 569 | bottom: "inception_3b/pool_proj" 570 | top: "inception_3b/pool_proj" 571 | } 572 | layer { 573 | name: "inception_3b/output" 574 | type: "Concat" 575 | bottom: "inception_3b/1x1" 576 | bottom: "inception_3b/3x3" 577 | bottom: "inception_3b/5x5" 578 | bottom: "inception_3b/pool_proj" 579 | top: "inception_3b/output" 580 | } 581 | layer { 582 | name: "pool3/3x3_s2" 583 | type: "Pooling" 584 | bottom: "inception_3b/output" 585 | top: "pool3/3x3_s2" 586 | pooling_param { 587 | pool: MAX 588 | kernel_size: 3 589 | stride: 2 590 | } 591 | } 592 | layer { 593 | name: "inception_4a/1x1" 594 | type: "Convolution" 595 | bottom: "pool3/3x3_s2" 596 | top: "inception_4a/1x1" 597 | param { 598 | lr_mult: 1.0 599 | decay_mult: 1.0 600 | } 601 | param { 602 | lr_mult: 2.0 603 | decay_mult: 0.0 604 | } 605 | convolution_param { 606 | num_output: 192 607 | kernel_size: 1 608 | weight_filler { 609 | type: "xavier" 610 | std: 0.03 611 | } 612 | bias_filler { 613 | type: "constant" 614 | value: 0.2 615 | } 616 | } 617 | } 618 | layer { 619 | name: "inception_4a/relu_1x1" 620 | type: "ReLU" 621 | bottom: "inception_4a/1x1" 622 | top: "inception_4a/1x1" 623 | } 624 | layer { 625 | name: "inception_4a/3x3_reduce" 626 | type: "Convolution" 627 | bottom: "pool3/3x3_s2" 628 | top: "inception_4a/3x3_reduce" 629 | param { 630 | lr_mult: 1.0 631 | decay_mult: 1.0 632 | } 633 | param { 634 | lr_mult: 2.0 635 | decay_mult: 0.0 636 | } 637 | convolution_param { 638 | num_output: 96 639 | kernel_size: 1 640 | weight_filler { 641 | type: "xavier" 642 | std: 0.09 643 | } 644 | bias_filler { 645 | type: "constant" 646 | value: 0.2 647 | } 648 | } 649 | } 650 | layer { 651 | name: "inception_4a/relu_3x3_reduce" 652 | type: "ReLU" 653 | bottom: "inception_4a/3x3_reduce" 654 | top: "inception_4a/3x3_reduce" 655 | } 656 | layer { 657 | name: "inception_4a/3x3" 658 | type: "Convolution" 659 | bottom: "inception_4a/3x3_reduce" 660 | top: "inception_4a/3x3" 661 | param { 662 | lr_mult: 1.0 663 | decay_mult: 1.0 664 | } 665 | param { 666 | lr_mult: 2.0 667 | decay_mult: 0.0 668 | } 669 | convolution_param { 670 | num_output: 208 671 | pad: 1 672 | kernel_size: 3 673 | weight_filler { 674 | type: "xavier" 675 | std: 0.03 676 | } 677 | bias_filler { 678 | type: "constant" 679 | value: 0.2 680 | } 681 | } 682 | } 683 | layer { 684 | name: "inception_4a/relu_3x3" 685 | type: "ReLU" 686 | bottom: "inception_4a/3x3" 687 | top: "inception_4a/3x3" 688 | } 689 | layer { 690 | name: "inception_4a/5x5_reduce" 691 | type: "Convolution" 692 | bottom: "pool3/3x3_s2" 693 | top: "inception_4a/5x5_reduce" 694 | param { 695 | lr_mult: 1.0 696 | decay_mult: 1.0 697 | } 698 | param { 699 | lr_mult: 2.0 700 | decay_mult: 0.0 701 | } 702 | convolution_param { 703 | num_output: 16 704 | kernel_size: 1 705 | weight_filler { 706 | type: "xavier" 707 | std: 0.2 708 | } 709 | bias_filler { 710 | type: "constant" 711 | value: 0.2 712 | } 713 | } 714 | } 715 | layer { 716 | name: "inception_4a/relu_5x5_reduce" 717 | type: "ReLU" 718 | bottom: "inception_4a/5x5_reduce" 719 | top: "inception_4a/5x5_reduce" 720 | } 721 | layer { 722 | name: "inception_4a/5x5" 723 | type: "Convolution" 724 | bottom: "inception_4a/5x5_reduce" 725 | top: "inception_4a/5x5" 726 | param { 727 | lr_mult: 1.0 728 | decay_mult: 1.0 729 | } 730 | param { 731 | lr_mult: 2.0 732 | decay_mult: 0.0 733 | } 734 | convolution_param { 735 | num_output: 48 736 | pad: 2 737 | kernel_size: 5 738 | weight_filler { 739 | type: "xavier" 740 | std: 0.03 741 | } 742 | bias_filler { 743 | type: "constant" 744 | value: 0.2 745 | } 746 | } 747 | } 748 | layer { 749 | name: "inception_4a/relu_5x5" 750 | type: "ReLU" 751 | bottom: "inception_4a/5x5" 752 | top: "inception_4a/5x5" 753 | } 754 | layer { 755 | name: "inception_4a/pool" 756 | type: "Pooling" 757 | bottom: "pool3/3x3_s2" 758 | top: "inception_4a/pool" 759 | pooling_param { 760 | pool: MAX 761 | kernel_size: 3 762 | stride: 1 763 | pad: 1 764 | } 765 | } 766 | layer { 767 | name: "inception_4a/pool_proj" 768 | type: "Convolution" 769 | bottom: "inception_4a/pool" 770 | top: "inception_4a/pool_proj" 771 | param { 772 | lr_mult: 1.0 773 | decay_mult: 1.0 774 | } 775 | param { 776 | lr_mult: 2.0 777 | decay_mult: 0.0 778 | } 779 | convolution_param { 780 | num_output: 64 781 | kernel_size: 1 782 | weight_filler { 783 | type: "xavier" 784 | std: 0.1 785 | } 786 | bias_filler { 787 | type: "constant" 788 | value: 0.2 789 | } 790 | } 791 | } 792 | layer { 793 | name: "inception_4a/relu_pool_proj" 794 | type: "ReLU" 795 | bottom: "inception_4a/pool_proj" 796 | top: "inception_4a/pool_proj" 797 | } 798 | layer { 799 | name: "inception_4a/output" 800 | type: "Concat" 801 | bottom: "inception_4a/1x1" 802 | bottom: "inception_4a/3x3" 803 | bottom: "inception_4a/5x5" 804 | bottom: "inception_4a/pool_proj" 805 | top: "inception_4a/output" 806 | } 807 | layer { 808 | name: "inception_4b/1x1" 809 | type: "Convolution" 810 | bottom: "inception_4a/output" 811 | top: "inception_4b/1x1" 812 | param { 813 | lr_mult: 1.0 814 | decay_mult: 1.0 815 | } 816 | param { 817 | lr_mult: 2.0 818 | decay_mult: 0.0 819 | } 820 | convolution_param { 821 | num_output: 160 822 | kernel_size: 1 823 | weight_filler { 824 | type: "xavier" 825 | std: 0.03 826 | } 827 | bias_filler { 828 | type: "constant" 829 | value: 0.2 830 | } 831 | } 832 | } 833 | layer { 834 | name: "inception_4b/relu_1x1" 835 | type: "ReLU" 836 | bottom: "inception_4b/1x1" 837 | top: "inception_4b/1x1" 838 | } 839 | layer { 840 | name: "inception_4b/3x3_reduce" 841 | type: "Convolution" 842 | bottom: "inception_4a/output" 843 | top: "inception_4b/3x3_reduce" 844 | param { 845 | lr_mult: 1.0 846 | decay_mult: 1.0 847 | } 848 | param { 849 | lr_mult: 2.0 850 | decay_mult: 0.0 851 | } 852 | convolution_param { 853 | num_output: 112 854 | kernel_size: 1 855 | weight_filler { 856 | type: "xavier" 857 | std: 0.09 858 | } 859 | bias_filler { 860 | type: "constant" 861 | value: 0.2 862 | } 863 | } 864 | } 865 | layer { 866 | name: "inception_4b/relu_3x3_reduce" 867 | type: "ReLU" 868 | bottom: "inception_4b/3x3_reduce" 869 | top: "inception_4b/3x3_reduce" 870 | } 871 | layer { 872 | name: "inception_4b/3x3" 873 | type: "Convolution" 874 | bottom: "inception_4b/3x3_reduce" 875 | top: "inception_4b/3x3" 876 | param { 877 | lr_mult: 1.0 878 | decay_mult: 1.0 879 | } 880 | param { 881 | lr_mult: 2.0 882 | decay_mult: 0.0 883 | } 884 | convolution_param { 885 | num_output: 224 886 | pad: 1 887 | kernel_size: 3 888 | weight_filler { 889 | type: "xavier" 890 | std: 0.03 891 | } 892 | bias_filler { 893 | type: "constant" 894 | value: 0.2 895 | } 896 | } 897 | } 898 | layer { 899 | name: "inception_4b/relu_3x3" 900 | type: "ReLU" 901 | bottom: "inception_4b/3x3" 902 | top: "inception_4b/3x3" 903 | } 904 | layer { 905 | name: "inception_4b/5x5_reduce" 906 | type: "Convolution" 907 | bottom: "inception_4a/output" 908 | top: "inception_4b/5x5_reduce" 909 | param { 910 | lr_mult: 1.0 911 | decay_mult: 1.0 912 | } 913 | param { 914 | lr_mult: 2.0 915 | decay_mult: 0.0 916 | } 917 | convolution_param { 918 | num_output: 24 919 | kernel_size: 1 920 | weight_filler { 921 | type: "xavier" 922 | std: 0.2 923 | } 924 | bias_filler { 925 | type: "constant" 926 | value: 0.2 927 | } 928 | } 929 | } 930 | layer { 931 | name: "inception_4b/relu_5x5_reduce" 932 | type: "ReLU" 933 | bottom: "inception_4b/5x5_reduce" 934 | top: "inception_4b/5x5_reduce" 935 | } 936 | layer { 937 | name: "inception_4b/5x5" 938 | type: "Convolution" 939 | bottom: "inception_4b/5x5_reduce" 940 | top: "inception_4b/5x5" 941 | param { 942 | lr_mult: 1.0 943 | decay_mult: 1.0 944 | } 945 | param { 946 | lr_mult: 2.0 947 | decay_mult: 0.0 948 | } 949 | convolution_param { 950 | num_output: 64 951 | pad: 2 952 | kernel_size: 5 953 | weight_filler { 954 | type: "xavier" 955 | std: 0.03 956 | } 957 | bias_filler { 958 | type: "constant" 959 | value: 0.2 960 | } 961 | } 962 | } 963 | layer { 964 | name: "inception_4b/relu_5x5" 965 | type: "ReLU" 966 | bottom: "inception_4b/5x5" 967 | top: "inception_4b/5x5" 968 | } 969 | layer { 970 | name: "inception_4b/pool" 971 | type: "Pooling" 972 | bottom: "inception_4a/output" 973 | top: "inception_4b/pool" 974 | pooling_param { 975 | pool: MAX 976 | kernel_size: 3 977 | stride: 1 978 | pad: 1 979 | } 980 | } 981 | layer { 982 | name: "inception_4b/pool_proj" 983 | type: "Convolution" 984 | bottom: "inception_4b/pool" 985 | top: "inception_4b/pool_proj" 986 | param { 987 | lr_mult: 1.0 988 | decay_mult: 1.0 989 | } 990 | param { 991 | lr_mult: 2.0 992 | decay_mult: 0.0 993 | } 994 | convolution_param { 995 | num_output: 64 996 | kernel_size: 1 997 | weight_filler { 998 | type: "xavier" 999 | std: 0.1 1000 | } 1001 | bias_filler { 1002 | type: "constant" 1003 | value: 0.2 1004 | } 1005 | } 1006 | } 1007 | layer { 1008 | name: "inception_4b/relu_pool_proj" 1009 | type: "ReLU" 1010 | bottom: "inception_4b/pool_proj" 1011 | top: "inception_4b/pool_proj" 1012 | } 1013 | layer { 1014 | name: "inception_4b/output" 1015 | type: "Concat" 1016 | bottom: "inception_4b/1x1" 1017 | bottom: "inception_4b/3x3" 1018 | bottom: "inception_4b/5x5" 1019 | bottom: "inception_4b/pool_proj" 1020 | top: "inception_4b/output" 1021 | } 1022 | layer { 1023 | name: "inception_4c/1x1" 1024 | type: "Convolution" 1025 | bottom: "inception_4b/output" 1026 | top: "inception_4c/1x1" 1027 | param { 1028 | lr_mult: 1.0 1029 | decay_mult: 1.0 1030 | } 1031 | param { 1032 | lr_mult: 2.0 1033 | decay_mult: 0.0 1034 | } 1035 | convolution_param { 1036 | num_output: 128 1037 | kernel_size: 1 1038 | weight_filler { 1039 | type: "xavier" 1040 | std: 0.03 1041 | } 1042 | bias_filler { 1043 | type: "constant" 1044 | value: 0.2 1045 | } 1046 | } 1047 | } 1048 | layer { 1049 | name: "inception_4c/relu_1x1" 1050 | type: "ReLU" 1051 | bottom: "inception_4c/1x1" 1052 | top: "inception_4c/1x1" 1053 | } 1054 | layer { 1055 | name: "inception_4c/3x3_reduce" 1056 | type: "Convolution" 1057 | bottom: "inception_4b/output" 1058 | top: "inception_4c/3x3_reduce" 1059 | param { 1060 | lr_mult: 1.0 1061 | decay_mult: 1.0 1062 | } 1063 | param { 1064 | lr_mult: 2.0 1065 | decay_mult: 0.0 1066 | } 1067 | convolution_param { 1068 | num_output: 128 1069 | kernel_size: 1 1070 | weight_filler { 1071 | type: "xavier" 1072 | std: 0.09 1073 | } 1074 | bias_filler { 1075 | type: "constant" 1076 | value: 0.2 1077 | } 1078 | } 1079 | } 1080 | layer { 1081 | name: "inception_4c/relu_3x3_reduce" 1082 | type: "ReLU" 1083 | bottom: "inception_4c/3x3_reduce" 1084 | top: "inception_4c/3x3_reduce" 1085 | } 1086 | layer { 1087 | name: "inception_4c/3x3" 1088 | type: "Convolution" 1089 | bottom: "inception_4c/3x3_reduce" 1090 | top: "inception_4c/3x3" 1091 | param { 1092 | lr_mult: 1.0 1093 | decay_mult: 1.0 1094 | } 1095 | param { 1096 | lr_mult: 2.0 1097 | decay_mult: 0.0 1098 | } 1099 | convolution_param { 1100 | num_output: 256 1101 | pad: 1 1102 | kernel_size: 3 1103 | weight_filler { 1104 | type: "xavier" 1105 | std: 0.03 1106 | } 1107 | bias_filler { 1108 | type: "constant" 1109 | value: 0.2 1110 | } 1111 | } 1112 | } 1113 | layer { 1114 | name: "inception_4c/relu_3x3" 1115 | type: "ReLU" 1116 | bottom: "inception_4c/3x3" 1117 | top: "inception_4c/3x3" 1118 | } 1119 | layer { 1120 | name: "inception_4c/5x5_reduce" 1121 | type: "Convolution" 1122 | bottom: "inception_4b/output" 1123 | top: "inception_4c/5x5_reduce" 1124 | param { 1125 | lr_mult: 1.0 1126 | decay_mult: 1.0 1127 | } 1128 | param { 1129 | lr_mult: 2.0 1130 | decay_mult: 0.0 1131 | } 1132 | convolution_param { 1133 | num_output: 24 1134 | kernel_size: 1 1135 | weight_filler { 1136 | type: "xavier" 1137 | std: 0.2 1138 | } 1139 | bias_filler { 1140 | type: "constant" 1141 | value: 0.2 1142 | } 1143 | } 1144 | } 1145 | layer { 1146 | name: "inception_4c/relu_5x5_reduce" 1147 | type: "ReLU" 1148 | bottom: "inception_4c/5x5_reduce" 1149 | top: "inception_4c/5x5_reduce" 1150 | } 1151 | layer { 1152 | name: "inception_4c/5x5" 1153 | type: "Convolution" 1154 | bottom: "inception_4c/5x5_reduce" 1155 | top: "inception_4c/5x5" 1156 | param { 1157 | lr_mult: 1.0 1158 | decay_mult: 1.0 1159 | } 1160 | param { 1161 | lr_mult: 2.0 1162 | decay_mult: 0.0 1163 | } 1164 | convolution_param { 1165 | num_output: 64 1166 | pad: 2 1167 | kernel_size: 5 1168 | weight_filler { 1169 | type: "xavier" 1170 | std: 0.03 1171 | } 1172 | bias_filler { 1173 | type: "constant" 1174 | value: 0.2 1175 | } 1176 | } 1177 | } 1178 | layer { 1179 | name: "inception_4c/relu_5x5" 1180 | type: "ReLU" 1181 | bottom: "inception_4c/5x5" 1182 | top: "inception_4c/5x5" 1183 | } 1184 | layer { 1185 | name: "inception_4c/pool" 1186 | type: "Pooling" 1187 | bottom: "inception_4b/output" 1188 | top: "inception_4c/pool" 1189 | pooling_param { 1190 | pool: MAX 1191 | kernel_size: 3 1192 | stride: 1 1193 | pad: 1 1194 | } 1195 | } 1196 | layer { 1197 | name: "inception_4c/pool_proj" 1198 | type: "Convolution" 1199 | bottom: "inception_4c/pool" 1200 | top: "inception_4c/pool_proj" 1201 | param { 1202 | lr_mult: 1.0 1203 | decay_mult: 1.0 1204 | } 1205 | param { 1206 | lr_mult: 2.0 1207 | decay_mult: 0.0 1208 | } 1209 | convolution_param { 1210 | num_output: 64 1211 | kernel_size: 1 1212 | weight_filler { 1213 | type: "xavier" 1214 | std: 0.1 1215 | } 1216 | bias_filler { 1217 | type: "constant" 1218 | value: 0.2 1219 | } 1220 | } 1221 | } 1222 | layer { 1223 | name: "inception_4c/relu_pool_proj" 1224 | type: "ReLU" 1225 | bottom: "inception_4c/pool_proj" 1226 | top: "inception_4c/pool_proj" 1227 | } 1228 | layer { 1229 | name: "inception_4c/output" 1230 | type: "Concat" 1231 | bottom: "inception_4c/1x1" 1232 | bottom: "inception_4c/3x3" 1233 | bottom: "inception_4c/5x5" 1234 | bottom: "inception_4c/pool_proj" 1235 | top: "inception_4c/output" 1236 | } 1237 | layer { 1238 | name: "inception_4d/1x1" 1239 | type: "Convolution" 1240 | bottom: "inception_4c/output" 1241 | top: "inception_4d/1x1" 1242 | param { 1243 | lr_mult: 1.0 1244 | decay_mult: 1.0 1245 | } 1246 | param { 1247 | lr_mult: 2.0 1248 | decay_mult: 0.0 1249 | } 1250 | convolution_param { 1251 | num_output: 112 1252 | kernel_size: 1 1253 | weight_filler { 1254 | type: "xavier" 1255 | std: 0.03 1256 | } 1257 | bias_filler { 1258 | type: "constant" 1259 | value: 0.2 1260 | } 1261 | } 1262 | } 1263 | layer { 1264 | name: "inception_4d/relu_1x1" 1265 | type: "ReLU" 1266 | bottom: "inception_4d/1x1" 1267 | top: "inception_4d/1x1" 1268 | } 1269 | layer { 1270 | name: "inception_4d/3x3_reduce" 1271 | type: "Convolution" 1272 | bottom: "inception_4c/output" 1273 | top: "inception_4d/3x3_reduce" 1274 | param { 1275 | lr_mult: 1.0 1276 | decay_mult: 1.0 1277 | } 1278 | param { 1279 | lr_mult: 2.0 1280 | decay_mult: 0.0 1281 | } 1282 | convolution_param { 1283 | num_output: 144 1284 | kernel_size: 1 1285 | weight_filler { 1286 | type: "xavier" 1287 | std: 0.09 1288 | } 1289 | bias_filler { 1290 | type: "constant" 1291 | value: 0.2 1292 | } 1293 | } 1294 | } 1295 | layer { 1296 | name: "inception_4d/relu_3x3_reduce" 1297 | type: "ReLU" 1298 | bottom: "inception_4d/3x3_reduce" 1299 | top: "inception_4d/3x3_reduce" 1300 | } 1301 | layer { 1302 | name: "inception_4d/3x3" 1303 | type: "Convolution" 1304 | bottom: "inception_4d/3x3_reduce" 1305 | top: "inception_4d/3x3" 1306 | param { 1307 | lr_mult: 1.0 1308 | decay_mult: 1.0 1309 | } 1310 | param { 1311 | lr_mult: 2.0 1312 | decay_mult: 0.0 1313 | } 1314 | convolution_param { 1315 | num_output: 288 1316 | pad: 1 1317 | kernel_size: 3 1318 | weight_filler { 1319 | type: "xavier" 1320 | std: 0.03 1321 | } 1322 | bias_filler { 1323 | type: "constant" 1324 | value: 0.2 1325 | } 1326 | } 1327 | } 1328 | layer { 1329 | name: "inception_4d/relu_3x3" 1330 | type: "ReLU" 1331 | bottom: "inception_4d/3x3" 1332 | top: "inception_4d/3x3" 1333 | } 1334 | layer { 1335 | name: "inception_4d/5x5_reduce" 1336 | type: "Convolution" 1337 | bottom: "inception_4c/output" 1338 | top: "inception_4d/5x5_reduce" 1339 | param { 1340 | lr_mult: 1.0 1341 | decay_mult: 1.0 1342 | } 1343 | param { 1344 | lr_mult: 2.0 1345 | decay_mult: 0.0 1346 | } 1347 | convolution_param { 1348 | num_output: 32 1349 | kernel_size: 1 1350 | weight_filler { 1351 | type: "xavier" 1352 | std: 0.2 1353 | } 1354 | bias_filler { 1355 | type: "constant" 1356 | value: 0.2 1357 | } 1358 | } 1359 | } 1360 | layer { 1361 | name: "inception_4d/relu_5x5_reduce" 1362 | type: "ReLU" 1363 | bottom: "inception_4d/5x5_reduce" 1364 | top: "inception_4d/5x5_reduce" 1365 | } 1366 | layer { 1367 | name: "inception_4d/5x5" 1368 | type: "Convolution" 1369 | bottom: "inception_4d/5x5_reduce" 1370 | top: "inception_4d/5x5" 1371 | param { 1372 | lr_mult: 1.0 1373 | decay_mult: 1.0 1374 | } 1375 | param { 1376 | lr_mult: 2.0 1377 | decay_mult: 0.0 1378 | } 1379 | convolution_param { 1380 | num_output: 64 1381 | pad: 2 1382 | kernel_size: 5 1383 | weight_filler { 1384 | type: "xavier" 1385 | std: 0.03 1386 | } 1387 | bias_filler { 1388 | type: "constant" 1389 | value: 0.2 1390 | } 1391 | } 1392 | } 1393 | layer { 1394 | name: "inception_4d/relu_5x5" 1395 | type: "ReLU" 1396 | bottom: "inception_4d/5x5" 1397 | top: "inception_4d/5x5" 1398 | } 1399 | layer { 1400 | name: "inception_4d/pool" 1401 | type: "Pooling" 1402 | bottom: "inception_4c/output" 1403 | top: "inception_4d/pool" 1404 | pooling_param { 1405 | pool: MAX 1406 | kernel_size: 3 1407 | stride: 1 1408 | pad: 1 1409 | } 1410 | } 1411 | layer { 1412 | name: "inception_4d/pool_proj" 1413 | type: "Convolution" 1414 | bottom: "inception_4d/pool" 1415 | top: "inception_4d/pool_proj" 1416 | param { 1417 | lr_mult: 1.0 1418 | decay_mult: 1.0 1419 | } 1420 | param { 1421 | lr_mult: 2.0 1422 | decay_mult: 0.0 1423 | } 1424 | convolution_param { 1425 | num_output: 64 1426 | kernel_size: 1 1427 | weight_filler { 1428 | type: "xavier" 1429 | std: 0.1 1430 | } 1431 | bias_filler { 1432 | type: "constant" 1433 | value: 0.2 1434 | } 1435 | } 1436 | } 1437 | layer { 1438 | name: "inception_4d/relu_pool_proj" 1439 | type: "ReLU" 1440 | bottom: "inception_4d/pool_proj" 1441 | top: "inception_4d/pool_proj" 1442 | } 1443 | layer { 1444 | name: "inception_4d/output" 1445 | type: "Concat" 1446 | bottom: "inception_4d/1x1" 1447 | bottom: "inception_4d/3x3" 1448 | bottom: "inception_4d/5x5" 1449 | bottom: "inception_4d/pool_proj" 1450 | top: "inception_4d/output" 1451 | } 1452 | layer { 1453 | name: "inception_4e/1x1" 1454 | type: "Convolution" 1455 | bottom: "inception_4d/output" 1456 | top: "inception_4e/1x1" 1457 | param { 1458 | lr_mult: 1.0 1459 | decay_mult: 1.0 1460 | } 1461 | param { 1462 | lr_mult: 2.0 1463 | decay_mult: 0.0 1464 | } 1465 | convolution_param { 1466 | num_output: 256 1467 | kernel_size: 1 1468 | weight_filler { 1469 | type: "xavier" 1470 | std: 0.03 1471 | } 1472 | bias_filler { 1473 | type: "constant" 1474 | value: 0.2 1475 | } 1476 | } 1477 | } 1478 | layer { 1479 | name: "inception_4e/relu_1x1" 1480 | type: "ReLU" 1481 | bottom: "inception_4e/1x1" 1482 | top: "inception_4e/1x1" 1483 | } 1484 | layer { 1485 | name: "inception_4e/3x3_reduce" 1486 | type: "Convolution" 1487 | bottom: "inception_4d/output" 1488 | top: "inception_4e/3x3_reduce" 1489 | param { 1490 | lr_mult: 1.0 1491 | decay_mult: 1.0 1492 | } 1493 | param { 1494 | lr_mult: 2.0 1495 | decay_mult: 0.0 1496 | } 1497 | convolution_param { 1498 | num_output: 160 1499 | kernel_size: 1 1500 | weight_filler { 1501 | type: "xavier" 1502 | std: 0.09 1503 | } 1504 | bias_filler { 1505 | type: "constant" 1506 | value: 0.2 1507 | } 1508 | } 1509 | } 1510 | layer { 1511 | name: "inception_4e/relu_3x3_reduce" 1512 | type: "ReLU" 1513 | bottom: "inception_4e/3x3_reduce" 1514 | top: "inception_4e/3x3_reduce" 1515 | } 1516 | layer { 1517 | name: "inception_4e/3x3" 1518 | type: "Convolution" 1519 | bottom: "inception_4e/3x3_reduce" 1520 | top: "inception_4e/3x3" 1521 | param { 1522 | lr_mult: 1.0 1523 | decay_mult: 1.0 1524 | } 1525 | param { 1526 | lr_mult: 2.0 1527 | decay_mult: 0.0 1528 | } 1529 | convolution_param { 1530 | num_output: 320 1531 | pad: 1 1532 | kernel_size: 3 1533 | weight_filler { 1534 | type: "xavier" 1535 | std: 0.03 1536 | } 1537 | bias_filler { 1538 | type: "constant" 1539 | value: 0.2 1540 | } 1541 | } 1542 | } 1543 | layer { 1544 | name: "inception_4e/relu_3x3" 1545 | type: "ReLU" 1546 | bottom: "inception_4e/3x3" 1547 | top: "inception_4e/3x3" 1548 | } 1549 | layer { 1550 | name: "inception_4e/5x5_reduce" 1551 | type: "Convolution" 1552 | bottom: "inception_4d/output" 1553 | top: "inception_4e/5x5_reduce" 1554 | param { 1555 | lr_mult: 1.0 1556 | decay_mult: 1.0 1557 | } 1558 | param { 1559 | lr_mult: 2.0 1560 | decay_mult: 0.0 1561 | } 1562 | convolution_param { 1563 | num_output: 32 1564 | kernel_size: 1 1565 | weight_filler { 1566 | type: "xavier" 1567 | std: 0.2 1568 | } 1569 | bias_filler { 1570 | type: "constant" 1571 | value: 0.2 1572 | } 1573 | } 1574 | } 1575 | layer { 1576 | name: "inception_4e/relu_5x5_reduce" 1577 | type: "ReLU" 1578 | bottom: "inception_4e/5x5_reduce" 1579 | top: "inception_4e/5x5_reduce" 1580 | } 1581 | layer { 1582 | name: "inception_4e/5x5" 1583 | type: "Convolution" 1584 | bottom: "inception_4e/5x5_reduce" 1585 | top: "inception_4e/5x5" 1586 | param { 1587 | lr_mult: 1.0 1588 | decay_mult: 1.0 1589 | } 1590 | param { 1591 | lr_mult: 2.0 1592 | decay_mult: 0.0 1593 | } 1594 | convolution_param { 1595 | num_output: 128 1596 | pad: 2 1597 | kernel_size: 5 1598 | weight_filler { 1599 | type: "xavier" 1600 | std: 0.03 1601 | } 1602 | bias_filler { 1603 | type: "constant" 1604 | value: 0.2 1605 | } 1606 | } 1607 | } 1608 | layer { 1609 | name: "inception_4e/relu_5x5" 1610 | type: "ReLU" 1611 | bottom: "inception_4e/5x5" 1612 | top: "inception_4e/5x5" 1613 | } 1614 | layer { 1615 | name: "inception_4e/pool" 1616 | type: "Pooling" 1617 | bottom: "inception_4d/output" 1618 | top: "inception_4e/pool" 1619 | pooling_param { 1620 | pool: MAX 1621 | kernel_size: 3 1622 | stride: 1 1623 | pad: 1 1624 | } 1625 | } 1626 | layer { 1627 | name: "inception_4e/pool_proj" 1628 | type: "Convolution" 1629 | bottom: "inception_4e/pool" 1630 | top: "inception_4e/pool_proj" 1631 | param { 1632 | lr_mult: 1.0 1633 | decay_mult: 1.0 1634 | } 1635 | param { 1636 | lr_mult: 2.0 1637 | decay_mult: 0.0 1638 | } 1639 | convolution_param { 1640 | num_output: 128 1641 | kernel_size: 1 1642 | weight_filler { 1643 | type: "xavier" 1644 | std: 0.1 1645 | } 1646 | bias_filler { 1647 | type: "constant" 1648 | value: 0.2 1649 | } 1650 | } 1651 | } 1652 | layer { 1653 | name: "inception_4e/relu_pool_proj" 1654 | type: "ReLU" 1655 | bottom: "inception_4e/pool_proj" 1656 | top: "inception_4e/pool_proj" 1657 | } 1658 | layer { 1659 | name: "inception_4e/output" 1660 | type: "Concat" 1661 | bottom: "inception_4e/1x1" 1662 | bottom: "inception_4e/3x3" 1663 | bottom: "inception_4e/5x5" 1664 | bottom: "inception_4e/pool_proj" 1665 | top: "inception_4e/output" 1666 | } 1667 | layer { 1668 | name: "pool4/3x3_s2" 1669 | type: "Pooling" 1670 | bottom: "inception_4e/output" 1671 | top: "pool4/3x3_s2" 1672 | pooling_param { 1673 | pool: MAX 1674 | kernel_size: 3 1675 | stride: 2 1676 | } 1677 | } 1678 | layer { 1679 | name: "inception_5a/1x1" 1680 | type: "Convolution" 1681 | bottom: "pool4/3x3_s2" 1682 | top: "inception_5a/1x1" 1683 | param { 1684 | lr_mult: 1.0 1685 | decay_mult: 1.0 1686 | } 1687 | param { 1688 | lr_mult: 2.0 1689 | decay_mult: 0.0 1690 | } 1691 | convolution_param { 1692 | num_output: 256 1693 | kernel_size: 1 1694 | weight_filler { 1695 | type: "xavier" 1696 | std: 0.03 1697 | } 1698 | bias_filler { 1699 | type: "constant" 1700 | value: 0.2 1701 | } 1702 | } 1703 | } 1704 | layer { 1705 | name: "inception_5a/relu_1x1" 1706 | type: "ReLU" 1707 | bottom: "inception_5a/1x1" 1708 | top: "inception_5a/1x1" 1709 | } 1710 | layer { 1711 | name: "inception_5a/3x3_reduce" 1712 | type: "Convolution" 1713 | bottom: "pool4/3x3_s2" 1714 | top: "inception_5a/3x3_reduce" 1715 | param { 1716 | lr_mult: 1.0 1717 | decay_mult: 1.0 1718 | } 1719 | param { 1720 | lr_mult: 2.0 1721 | decay_mult: 0.0 1722 | } 1723 | convolution_param { 1724 | num_output: 160 1725 | kernel_size: 1 1726 | weight_filler { 1727 | type: "xavier" 1728 | std: 0.09 1729 | } 1730 | bias_filler { 1731 | type: "constant" 1732 | value: 0.2 1733 | } 1734 | } 1735 | } 1736 | layer { 1737 | name: "inception_5a/relu_3x3_reduce" 1738 | type: "ReLU" 1739 | bottom: "inception_5a/3x3_reduce" 1740 | top: "inception_5a/3x3_reduce" 1741 | } 1742 | layer { 1743 | name: "inception_5a/3x3" 1744 | type: "Convolution" 1745 | bottom: "inception_5a/3x3_reduce" 1746 | top: "inception_5a/3x3" 1747 | param { 1748 | lr_mult: 1.0 1749 | decay_mult: 1.0 1750 | } 1751 | param { 1752 | lr_mult: 2.0 1753 | decay_mult: 0.0 1754 | } 1755 | convolution_param { 1756 | num_output: 320 1757 | pad: 1 1758 | kernel_size: 3 1759 | weight_filler { 1760 | type: "xavier" 1761 | std: 0.03 1762 | } 1763 | bias_filler { 1764 | type: "constant" 1765 | value: 0.2 1766 | } 1767 | } 1768 | } 1769 | layer { 1770 | name: "inception_5a/relu_3x3" 1771 | type: "ReLU" 1772 | bottom: "inception_5a/3x3" 1773 | top: "inception_5a/3x3" 1774 | } 1775 | layer { 1776 | name: "inception_5a/5x5_reduce" 1777 | type: "Convolution" 1778 | bottom: "pool4/3x3_s2" 1779 | top: "inception_5a/5x5_reduce" 1780 | param { 1781 | lr_mult: 1.0 1782 | decay_mult: 1.0 1783 | } 1784 | param { 1785 | lr_mult: 2.0 1786 | decay_mult: 0.0 1787 | } 1788 | convolution_param { 1789 | num_output: 32 1790 | kernel_size: 1 1791 | weight_filler { 1792 | type: "xavier" 1793 | std: 0.2 1794 | } 1795 | bias_filler { 1796 | type: "constant" 1797 | value: 0.2 1798 | } 1799 | } 1800 | } 1801 | layer { 1802 | name: "inception_5a/relu_5x5_reduce" 1803 | type: "ReLU" 1804 | bottom: "inception_5a/5x5_reduce" 1805 | top: "inception_5a/5x5_reduce" 1806 | } 1807 | layer { 1808 | name: "inception_5a/5x5" 1809 | type: "Convolution" 1810 | bottom: "inception_5a/5x5_reduce" 1811 | top: "inception_5a/5x5" 1812 | param { 1813 | lr_mult: 1.0 1814 | decay_mult: 1.0 1815 | } 1816 | param { 1817 | lr_mult: 2.0 1818 | decay_mult: 0.0 1819 | } 1820 | convolution_param { 1821 | num_output: 128 1822 | pad: 2 1823 | kernel_size: 5 1824 | weight_filler { 1825 | type: "xavier" 1826 | std: 0.03 1827 | } 1828 | bias_filler { 1829 | type: "constant" 1830 | value: 0.2 1831 | } 1832 | } 1833 | } 1834 | layer { 1835 | name: "inception_5a/relu_5x5" 1836 | type: "ReLU" 1837 | bottom: "inception_5a/5x5" 1838 | top: "inception_5a/5x5" 1839 | } 1840 | layer { 1841 | name: "inception_5a/pool" 1842 | type: "Pooling" 1843 | bottom: "pool4/3x3_s2" 1844 | top: "inception_5a/pool" 1845 | pooling_param { 1846 | pool: MAX 1847 | kernel_size: 3 1848 | stride: 1 1849 | pad: 1 1850 | } 1851 | } 1852 | layer { 1853 | name: "inception_5a/pool_proj" 1854 | type: "Convolution" 1855 | bottom: "inception_5a/pool" 1856 | top: "inception_5a/pool_proj" 1857 | param { 1858 | lr_mult: 1.0 1859 | decay_mult: 1.0 1860 | } 1861 | param { 1862 | lr_mult: 2.0 1863 | decay_mult: 0.0 1864 | } 1865 | convolution_param { 1866 | num_output: 128 1867 | kernel_size: 1 1868 | weight_filler { 1869 | type: "xavier" 1870 | std: 0.1 1871 | } 1872 | bias_filler { 1873 | type: "constant" 1874 | value: 0.2 1875 | } 1876 | } 1877 | } 1878 | layer { 1879 | name: "inception_5a/relu_pool_proj" 1880 | type: "ReLU" 1881 | bottom: "inception_5a/pool_proj" 1882 | top: "inception_5a/pool_proj" 1883 | } 1884 | layer { 1885 | name: "inception_5a/output" 1886 | type: "Concat" 1887 | bottom: "inception_5a/1x1" 1888 | bottom: "inception_5a/3x3" 1889 | bottom: "inception_5a/5x5" 1890 | bottom: "inception_5a/pool_proj" 1891 | top: "inception_5a/output" 1892 | } 1893 | layer { 1894 | name: "inception_5b/1x1" 1895 | type: "Convolution" 1896 | bottom: "inception_5a/output" 1897 | top: "inception_5b/1x1" 1898 | param { 1899 | lr_mult: 1.0 1900 | decay_mult: 1.0 1901 | } 1902 | param { 1903 | lr_mult: 2.0 1904 | decay_mult: 0.0 1905 | } 1906 | convolution_param { 1907 | num_output: 384 1908 | kernel_size: 1 1909 | weight_filler { 1910 | type: "xavier" 1911 | std: 0.03 1912 | } 1913 | bias_filler { 1914 | type: "constant" 1915 | value: 0.2 1916 | } 1917 | } 1918 | } 1919 | layer { 1920 | name: "inception_5b/relu_1x1" 1921 | type: "ReLU" 1922 | bottom: "inception_5b/1x1" 1923 | top: "inception_5b/1x1" 1924 | } 1925 | layer { 1926 | name: "inception_5b/3x3_reduce" 1927 | type: "Convolution" 1928 | bottom: "inception_5a/output" 1929 | top: "inception_5b/3x3_reduce" 1930 | param { 1931 | lr_mult: 1.0 1932 | decay_mult: 1.0 1933 | } 1934 | param { 1935 | lr_mult: 2.0 1936 | decay_mult: 0.0 1937 | } 1938 | convolution_param { 1939 | num_output: 192 1940 | kernel_size: 1 1941 | weight_filler { 1942 | type: "xavier" 1943 | std: 0.09 1944 | } 1945 | bias_filler { 1946 | type: "constant" 1947 | value: 0.2 1948 | } 1949 | } 1950 | } 1951 | layer { 1952 | name: "inception_5b/relu_3x3_reduce" 1953 | type: "ReLU" 1954 | bottom: "inception_5b/3x3_reduce" 1955 | top: "inception_5b/3x3_reduce" 1956 | } 1957 | layer { 1958 | name: "inception_5b/3x3" 1959 | type: "Convolution" 1960 | bottom: "inception_5b/3x3_reduce" 1961 | top: "inception_5b/3x3" 1962 | param { 1963 | lr_mult: 1.0 1964 | decay_mult: 1.0 1965 | } 1966 | param { 1967 | lr_mult: 2.0 1968 | decay_mult: 0.0 1969 | } 1970 | convolution_param { 1971 | num_output: 384 1972 | pad: 1 1973 | kernel_size: 3 1974 | weight_filler { 1975 | type: "xavier" 1976 | std: 0.03 1977 | } 1978 | bias_filler { 1979 | type: "constant" 1980 | value: 0.2 1981 | } 1982 | } 1983 | } 1984 | layer { 1985 | name: "inception_5b/relu_3x3" 1986 | type: "ReLU" 1987 | bottom: "inception_5b/3x3" 1988 | top: "inception_5b/3x3" 1989 | } 1990 | layer { 1991 | name: "inception_5b/5x5_reduce" 1992 | type: "Convolution" 1993 | bottom: "inception_5a/output" 1994 | top: "inception_5b/5x5_reduce" 1995 | param { 1996 | lr_mult: 1.0 1997 | decay_mult: 1.0 1998 | } 1999 | param { 2000 | lr_mult: 2.0 2001 | decay_mult: 0.0 2002 | } 2003 | convolution_param { 2004 | num_output: 48 2005 | kernel_size: 1 2006 | weight_filler { 2007 | type: "xavier" 2008 | std: 0.2 2009 | } 2010 | bias_filler { 2011 | type: "constant" 2012 | value: 0.2 2013 | } 2014 | } 2015 | } 2016 | layer { 2017 | name: "inception_5b/relu_5x5_reduce" 2018 | type: "ReLU" 2019 | bottom: "inception_5b/5x5_reduce" 2020 | top: "inception_5b/5x5_reduce" 2021 | } 2022 | layer { 2023 | name: "inception_5b/5x5" 2024 | type: "Convolution" 2025 | bottom: "inception_5b/5x5_reduce" 2026 | top: "inception_5b/5x5" 2027 | param { 2028 | lr_mult: 1.0 2029 | decay_mult: 1.0 2030 | } 2031 | param { 2032 | lr_mult: 2.0 2033 | decay_mult: 0.0 2034 | } 2035 | convolution_param { 2036 | num_output: 128 2037 | pad: 2 2038 | kernel_size: 5 2039 | weight_filler { 2040 | type: "xavier" 2041 | std: 0.03 2042 | } 2043 | bias_filler { 2044 | type: "constant" 2045 | value: 0.2 2046 | } 2047 | } 2048 | } 2049 | layer { 2050 | name: "inception_5b/relu_5x5" 2051 | type: "ReLU" 2052 | bottom: "inception_5b/5x5" 2053 | top: "inception_5b/5x5" 2054 | } 2055 | layer { 2056 | name: "inception_5b/pool" 2057 | type: "Pooling" 2058 | bottom: "inception_5a/output" 2059 | top: "inception_5b/pool" 2060 | pooling_param { 2061 | pool: MAX 2062 | kernel_size: 3 2063 | stride: 1 2064 | pad: 1 2065 | } 2066 | } 2067 | layer { 2068 | name: "inception_5b/pool_proj" 2069 | type: "Convolution" 2070 | bottom: "inception_5b/pool" 2071 | top: "inception_5b/pool_proj" 2072 | param { 2073 | lr_mult: 1.0 2074 | decay_mult: 1.0 2075 | } 2076 | param { 2077 | lr_mult: 2.0 2078 | decay_mult: 0.0 2079 | } 2080 | convolution_param { 2081 | num_output: 128 2082 | kernel_size: 1 2083 | weight_filler { 2084 | type: "xavier" 2085 | std: 0.1 2086 | } 2087 | bias_filler { 2088 | type: "constant" 2089 | value: 0.2 2090 | } 2091 | } 2092 | } 2093 | layer { 2094 | name: "inception_5b/relu_pool_proj" 2095 | type: "ReLU" 2096 | bottom: "inception_5b/pool_proj" 2097 | top: "inception_5b/pool_proj" 2098 | } 2099 | layer { 2100 | name: "inception_5b/output" 2101 | type: "Concat" 2102 | bottom: "inception_5b/1x1" 2103 | bottom: "inception_5b/3x3" 2104 | bottom: "inception_5b/5x5" 2105 | bottom: "inception_5b/pool_proj" 2106 | top: "inception_5b/output" 2107 | } 2108 | layer { 2109 | name: "pool5/7x7_s1" 2110 | type: "Pooling" 2111 | bottom: "inception_5b/output" 2112 | top: "pool5/7x7_s1" 2113 | pooling_param { 2114 | pool: AVE 2115 | kernel_size: 7 2116 | stride: 1 2117 | } 2118 | } 2119 | layer { 2120 | name: "pool5/drop_7x7_s1" 2121 | type: "Dropout" 2122 | bottom: "pool5/7x7_s1" 2123 | top: "pool5/7x7_s1" 2124 | dropout_param { 2125 | dropout_ratio: 0.4 2126 | } 2127 | } 2128 | layer { 2129 | name: "loss3/tclassifier" 2130 | type: "InnerProduct" 2131 | bottom: "pool5/7x7_s1" 2132 | top: "loss3/tclassifier" 2133 | param { 2134 | lr_mult: 1.0 2135 | decay_mult: 1.0 2136 | } 2137 | param { 2138 | lr_mult: 2.0 2139 | decay_mult: 0.0 2140 | } 2141 | inner_product_param { 2142 | num_output: 3 2143 | weight_filler { 2144 | type: "xavier" 2145 | } 2146 | bias_filler { 2147 | type: "constant" 2148 | value: 0.0 2149 | } 2150 | } 2151 | } 2152 | layer { 2153 | name: "softmax" 2154 | type: "Softmax" 2155 | bottom: "loss3/tclassifier" 2156 | top: "softmax" 2157 | } 2158 | -------------------------------------------------------------------------------- /model/labels.txt: -------------------------------------------------------------------------------- 1 | background 2 | red 3 | green 4 | -------------------------------------------------------------------------------- /model/mean.binaryproto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asavihay/TrafficLights-DeepLearning-iOS/037f5d7a921deff206b8fc8a8bdd01ba88ece099/model/mean.binaryproto -------------------------------------------------------------------------------- /screenshots/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asavihay/TrafficLights-DeepLearning-iOS/037f5d7a921deff206b8fc8a8bdd01ba88ece099/screenshots/screenshot.png --------------------------------------------------------------------------------