Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv_contrib
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv_contrib
Commits
a4e8622c
Commit
a4e8622c
authored
Apr 23, 2018
by
Vadim Pisarevsky
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1617 from alalek:drop_dnn_modern
parents
1c4b8b2f
f7ca9ef2
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
0 additions
and
831 deletions
+0
-831
CMakeLists.txt
modules/dnn_modern/CMakeLists.txt
+0
-180
README.md
modules/dnn_modern/README.md
+0
-50
FindNNPACK.cmake
modules/dnn_modern/cmake/FindNNPACK.cmake
+0
-54
FindTinyDNN.cmake
modules/dnn_modern/cmake/FindTinyDNN.cmake
+0
-47
dnn_modern.hpp
modules/dnn_modern/include/opencv2/dnn_modern.hpp
+0
-106
simple_test.cpp
modules/dnn_modern/samples/simple_test.cpp
+0
-93
caffe_converter.cpp
modules/dnn_modern/src/caffe_converter.cpp
+0
-204
dnn_modern_init.cpp
modules/dnn_modern/src/dnn_modern_init.cpp
+0
-47
precomp.hpp
modules/dnn_modern/src/precomp.hpp
+0
-50
No files found.
modules/dnn_modern/CMakeLists.txt
deleted
100644 → 0
View file @
1c4b8b2f
set
(
the_description
"Modern Deep Learning module"
)
if
(
${
CMAKE_VERSION
}
VERSION_LESS 3.2
)
message
(
STATUS
"Module opencv_dnn_modern disabled because CMake version is less than 3.2"
)
ocv_module_disable
(
dnn_modern
)
return
()
endif
()
# Using cmake scripts and modules
list
(
APPEND CMAKE_MODULE_PATH
${
CMAKE_CURRENT_SOURCE_DIR
}
/cmake
)
# ----------------------------------------------------------------------------
# MODULE REQUIREMENTS
# ----------------------------------------------------------------------------
set
(
TINY_DNN_CPP_PATH
"
${
OpenCV_BINARY_DIR
}
/3rdparty/tinydnn"
)
set
(
TINY_DNN_CPP_ROOT
"
${
TINY_DNN_CPP_PATH
}
/tiny-dnn-1.0.0a3"
)
ocv_download
(
FILENAME
"v1.0.0a3.tar.gz"
HASH
"adb1c512e09ca2c7a6faef36f9c53e59"
URL
"
${
OPENCV_TINY_DNN_URL
}
"
"$ENV{OPENCV_TINY_DNN_URL}"
"https://github.com/tiny-dnn/tiny-dnn/archive/"
DESTINATION_DIR
"
${
TINY_DNN_CPP_PATH
}
"
STATUS TINY_DNN_DOWNLOAD_SUCCESS
ID
"tiny-dnn"
UNPACK RELATIVE_URL
)
if
(
NOT TINY_DNN_DOWNLOAD_SUCCESS
)
message
(
STATUS
"Failed to download tiny-dnn sources"
)
endif
()
find_package
(
TinyDNN QUIET
)
include
(
CheckCXXCompilerFlag
)
CHECK_CXX_COMPILER_FLAG
(
"-std=c++11"
COMPILER_SUPPORTS_CXX11
)
if
(
NOT TinyDNN_FOUND
)
message
(
STATUS
"Module opencv_dnn_modern disabled because tiny-dnn was not found"
)
ocv_module_disable
(
dnn_modern
)
return
()
elseif
(
NOT COMPILER_SUPPORTS_CXX11
)
message
(
STATUS
"Module opencv_dnn_modern disabled because your compiler does not support C++11"
)
ocv_module_disable
(
dnn_modern
)
return
()
elseif
(
APPLE_FRAMEWORK OR ANDROID
)
message
(
STATUS
"Module opencv_dnn_modern disabled because you are not under Linux or Win"
)
ocv_module_disable
(
dnn_modern
)
return
()
endif
()
# ----------------------------------------------------------------------------
# OPTIMIZATION OPTIONS
# ----------------------------------------------------------------------------
option
(
TINYDNN_USE_SSE
"Build tiny-dnn with SSE library support"
ON
)
option
(
TINYDNN_USE_AVX
"Build tiny-dnn with AVX library support"
ON
)
option
(
TINYDNN_USE_TBB
"Build tiny-dnn with TBB library support"
OFF
)
option
(
TINYDNN_USE_OMP
"Build tiny-dnn with OMP library support"
OFF
)
option
(
TINYDNN_USE_NNPACK
"Build tiny-dnn with NNPACK library support"
OFF
)
if
(
TINYDNN_USE_TBB AND HAVE_TBB
)
add_definitions
(
-DCNN_USE_TBB
)
elseif
(
NOT TINYDNN_USE_TBB AND
TINYDNN_USE_OMP AND HAVE_OPENMP
)
add_definitions
(
-DCNN_USE_OMP
)
endif
()
if
(
TINYDNN_USE_NNPACK
)
find_package
(
NNPACK REQUIRED
)
add_definitions
(
-DCNN_USE_NNPACK
)
include_directories
(
SYSTEM
${
NNPACK_INCLUDE_DIR
}
)
include_directories
(
SYSTEM
${
NNPACK_INCLUDE_DIR
}
/../third-party/pthreadpool/include
)
list
(
APPEND REQUIRED_LIBRARIES
${
NNPACK_LIB
}
)
endif
()
# we need to disable seializer unless we import cereal and we gonna use caffe converter
add_definitions
(
-DCNN_NO_SERIALIZATION -DCNN_USE_CAFFE_CONVERTER
)
# NOTE: In case that proto files already exist,
# this is not needed anymore.
if
(
NOT BUILD_PROTOBUF
)
find_package
(
Protobuf QUIET
)
endif
()
if
(
NOT
${
Protobuf_FOUND
}
)
message
(
STATUS
"Module opencv_dnn_modern disabled because Protobuf is not found"
)
ocv_module_disable
(
dnn_modern
)
return
()
endif
()
if
(
DEFINED PROTOBUF_PROTOC_EXECUTABLE AND EXISTS
${
PROTOBUF_PROTOC_EXECUTABLE
}
)
execute_process
(
COMMAND
${
PROTOBUF_PROTOC_EXECUTABLE
}
caffe.proto --cpp_out=./
WORKING_DIRECTORY
${
TINYDNN_INCLUDE_DIRS
}
/tiny_dnn/io/caffe
)
else
()
message
(
STATUS
"The protocol buffer compiler is not found (PROTOBUF_PROTOC_EXECUTABLE='
${
PROTOBUF_PROTOC_EXECUTABLE
}
')"
)
ocv_module_disable
(
dnn_modern
)
return
()
endif
()
list
(
APPEND REQUIRED_LIBRARIES
${
PROTOBUF_LIBRARIES
}
)
include_directories
(
SYSTEM
${
PROTOBUF_INCLUDE_DIRS
}
)
####
# Setup the compiler options
# set c++ standard to c++11.
# Note: not working on CMake 2.8. We assume that user has
# a compiler with C++11 support.
set
(
CMAKE_CXX_STANDARD 11
)
set
(
CMAKE_CXX_STANDARD_REQUIRED ON
)
# Unix
if
(
CMAKE_COMPILER_IS_GNUCXX OR MINGW OR
CMAKE_CXX_COMPILER_ID MATCHES
"Clang"
)
include
(
CheckCXXCompilerFlag
)
check_cxx_compiler_flag
(
"-msse3"
COMPILER_HAS_SSE_FLAG
)
check_cxx_compiler_flag
(
"-mavx"
COMPILER_HAS_AVX_FLAG
)
check_cxx_compiler_flag
(
"-mavx2"
COMPILER_HAS_AVX2_FLAG
)
check_cxx_compiler_flag
(
"-mfma"
COMPILER_HAS_AVX2_FLAG
)
# set Streaming SIMD Extension (SSE) instructions
if
(
USE_SSE AND COMPILER_HAS_SSE_FLAG
)
add_definitions
(
-DCNN_USE_SSE
)
set
(
EXTRA_C_FLAGS
"
${
EXTRA_C_FLAGS
}
-msse3"
)
endif
(
USE_SSE AND COMPILER_HAS_SSE_FLAG
)
# set Advanced Vector Extensions (AVX)
if
(
USE_AVX AND COMPILER_HAS_AVX_FLAG
)
add_definitions
(
-DCNN_USE_AVX
)
set
(
EXTRA_C_FLAGS
"
${
EXTRA_C_FLAGS
}
-mavx"
)
endif
(
USE_AVX AND COMPILER_HAS_AVX_FLAG
)
# set Advanced Vector Extensions 2 (AVX2)
if
(
USE_AVX2 AND COMPILER_HAS_AVX2_FLAG
)
add_definitions
(
-DCNN_USE_AVX2
)
set
(
EXTRA_C_FLAGS
"
${
EXTRA_C_FLAGS
}
-mavx2 -mfma -march=core-avx2"
)
endif
(
USE_AVX2 AND COMPILER_HAS_AVX2_FLAG
)
# include extra flags to the compiler
# TODO: add info about those flags.
set
(
EXTRA_C_FLAGS
"
${
EXTRA_C_FLAGS
}
-Wall -Wpedantic -Wno-narrowing"
)
set
(
EXTRA_C_FLAGS_RELEASE
"
${
EXTRA_C_FLAGS_RELEASE
}
-O3"
)
set
(
EXTRA_C_FLAGS_DEBUG
"
${
EXTRA_C_FLAGS_DEBUG
}
-g3 -pthread"
)
elseif
(
MSVC
)
if
(
USE_SSE
)
add_definitions
(
-DCNN_USE_SSE
)
set
(
EXTRA_C_FLAGS
"
${
EXTRA_C_FLAGS
}
/arch:SSE2"
)
endif
(
USE_SSE
)
if
(
USE_AVX
)
add_definitions
(
-DCNN_USE_AVX
)
set
(
EXTRA_C_FLAGS
"
${
EXTRA_C_FLAGS
}
/arch:AVX"
)
endif
(
USE_AVX
)
if
(
USE_AVX2
)
add_definitions
(
-DCNN_USE_AVX2
)
set
(
EXTRA_C_FLAGS
"
${
EXTRA_C_FLAGS
}
/arch:AVX2"
)
endif
(
USE_AVX2
)
# include specific flags for release and debug modes.
set
(
EXTRA_C_FLAGS_RELEASE
"
${
EXTRA_C_FLAGS_RELEASE
}
/Ox /Oi /Ot /Oy /GL /fp:fast /GS-"
)
set
(
CMAKE_EXE_LINKER_FLAGS_RELEASE
"
${
CMAKE_EXE_LINKER_FLAGS_RELEASE
}
/LTCG"
)
set
(
EXTRA_C_FLAGS_DEBUG
"
${
EXTRA_C_FLAGS_DEBUG
}
"
)
set
(
EXTRA_C_FLAGS
"
${
EXTRA_C_FLAGS
}
/W4 /bigobj"
)
# this is fine
add_definitions
(
-D _CRT_SECURE_NO_WARNINGS
)
add_definitions
(
-D _SCL_SECURE_NO_WARNINGS
)
add_definitions
(
-D NO_STRICT
)
# prolly powerless with header-only project
set
(
EXTRA_C_FLAGS
"
${
EXTRA_C_FLAGS
}
/MP"
)
endif
()
# ----------------------------------------------------------------------------
# DNN-MODERN MODULE
# ----------------------------------------------------------------------------
ocv_define_module
(
dnn_modern opencv_core opencv_imgproc WRAP python
)
ocv_target_link_libraries
(
${
the_module
}
${
REQUIRED_LIBRARIES
}
)
ocv_target_include_directories
(
${
the_module
}
${
TINYDNN_INCLUDE_DIRS
}
)
ocv_warnings_disable
(
CMAKE_CXX_FLAGS
-Wnon-virtual-dtor -Wunused-parameter -Wshadow -Wundef
/wd4265 /wd4100 /wd4458 /wd4244 /wd4456
)
modules/dnn_modern/README.md
deleted
100644 → 0
View file @
1c4b8b2f
Modern Deep Learning Module
===========================
The module is wrapper to
[
tiny-dnn
](
https://github.com/tiny-dnn/tiny-dnn
)
,
a header only, dependency-free deep learning framework in C++11.
Installation
------------
**Required Dependencies**
-
System under Unix or Windows
-
C++11 compiler
-
tiny-dnn headers
-
protoc compiler (part of the
[
protobuf
](
https://developers.google.com/protocol-buffers/docs/overview
)
library)
**How to install tiny-dnn?**
CMake will try to download a certain version of tiny-dnn which was tested to build with OpenCV.
If the latest version is needed, location of the tiny-dnn folder can be specified manually:
-
Download tiny-dnn project somewhere in your system
```
cd /opt
git clone https://github.com/tiny-dnn/tiny-dnn.git
```
-
Run your OpenCV CMake pointing to your tiny-dnn headers location
```
cd /opt/opencv/build
cmake -DTINYDNN_ROOT=/opt/tiny-dnn ..
make -j4
```
**Extra**
You can enable some optimizations just for tiny-dnn backend
cmake -DTINYDNN_USE_SSE=ON ..
cmake -DTINYDNN_USE_AVX=ON ..
Use third-party multithreading libs: TBB or OMP.
cmake -DTINYDNN_USE_TBB=ON .. // then disable OMP
cmake -DTINYDNN_USE_OMP=ON .. // then disable TBB
NNPACK: Acceleration package for neural networks on multi-core CPUs.
<br
/>
Check project site for installation:
[
https://github.com/Maratyszcza/NNPACK
](
https://github.com/Maratyszcza/NNPACK
)
cmake -DTINYDNN_USE_NNPACK=ON .. // not supported yet for Caffe loader
See detailed module API documentation in http://docs.opencv.org/trunk/d1/df7/group__dnn__modern.html
modules/dnn_modern/cmake/FindNNPACK.cmake
deleted
100644 → 0
View file @
1c4b8b2f
SET
(
NNPACK_INCLUDE_SEARCH_PATHS
/usr/include
/usr/local/include
/opt/NNPACK/include
$ENV{NNPACK_ROOT}
$ENV{NNPACK_ROOT}/include
)
SET
(
NNPACK_LIB_SEARCH_PATHS
/lib/
/lib64/
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
/opt/NNPACK/lib
$ENV{NNPACK_ROOT}
$ENV{NNPACK_ROOT}/lib
)
FIND_PATH
(
NNPACK_INCLUDE_DIR NAMES nnpack.h PATHS
${
NNPACK_INCLUDE_SEARCH_PATHS
}
)
FIND_LIBRARY
(
NNPACK_LIB NAMES nnpack PATHS
${
NNPACK_LIB_SEARCH_PATHS
}
)
SET
(
NNPACK_FOUND ON
)
# Check include files
IF
(
NOT NNPACK_INCLUDE_DIR
)
SET
(
NNPACK_FOUND OFF
)
MESSAGE
(
STATUS
"Could not find NNPACK include. Turning NNPACK_FOUND off"
)
ENDIF
()
# Check libraries
IF
(
NOT NNPACK_LIB
)
SET
(
NNPACK_FOUND OFF
)
MESSAGE
(
STATUS
"Could not find NNPACK lib. Turning NNPACK_FOUND off"
)
ENDIF
()
IF
(
NNPACK_FOUND
)
add_definitions
(
-DUSE_NNPACK
)
IF
(
NOT NNPACK_FIND_QUIETLY
)
MESSAGE
(
STATUS
"Found NNPACK libraries:
${
NNPACK_LIB
}
"
)
MESSAGE
(
STATUS
"Found NNPACK include:
${
NNPACK_INCLUDE_DIR
}
"
)
ENDIF
(
NOT NNPACK_FIND_QUIETLY
)
ELSE
(
NNPACK_FOUND
)
IF
(
NNPACK_FIND_REQUIRED
)
MESSAGE
(
FATAL_ERROR
"Could not find NNPACK"
)
ENDIF
(
NNPACK_FIND_REQUIRED
)
ENDIF
(
NNPACK_FOUND
)
MARK_AS_ADVANCED
(
NNPACK_INCLUDE_DIR
NNPACK_LIB
NNPACK
)
modules/dnn_modern/cmake/FindTinyDNN.cmake
deleted
100644 → 0
View file @
1c4b8b2f
# Locate the tiny-dnn library.
#
# Defines the following variables:
#
# TinyDNN_FOUND - TRUE if the tiny-dnn headers are found
# TINYDNN_INCLUDE_DIRS - The path to tiny-dnn headers
#
# Accepts the following variables as input:
#
# TinyDNN_ROOT - (as a CMake or environment variable)
# The root directory of the tiny-dnn install prefix
message
(
STATUS
"Looking for tiny_dnn.h"
)
set
(
TINYDNN_INCLUDE_SEARCH_PATHS
/usr/include/tiny_dnn
/usr/local/include/tiny_dnn
/opt/tiny_dnn
$ENV{TINYDNN_ROOT}
${
TINYDNN_ROOT
}
${
TINYDNN_ROOT
}
/tiny_dnn
${
TINY_DNN_CPP_ROOT
}
)
find_path
(
TINYDNN_INCLUDE_DIR
NAMES tiny_dnn/tiny_dnn.h
HINTS
${
TINYDNN_INCLUDE_SEARCH_PATHS
}
)
# handle the QUIETLY and REQUIRED arguments and set TinyDNN_FOUND to TRUE if
# all listed variables are TRUE
include
(
FindPackageHandleStandardArgs
)
find_package_handle_standard_args
(
TinyDNN
FOUND_VAR TinyDNN_FOUND
REQUIRED_VARS TINYDNN_INCLUDE_DIR
)
if
(
TinyDNN_FOUND
)
set
(
TINYDNN_INCLUDE_DIRS
${
TINYDNN_INCLUDE_DIR
}
)
message
(
STATUS
"Looking for tiny_dnn.h - found"
)
message
(
STATUS
"Found tiny-dnn in:
${
TINYDNN_INCLUDE_DIRS
}
"
)
else
()
message
(
STATUS
"Looking for tiny_dnn.h - not found"
)
endif
()
mark_as_advanced
(
TINYDNN_INCLUDE_DIRS
)
modules/dnn_modern/include/opencv2/dnn_modern.hpp
deleted
100644 → 0
View file @
1c4b8b2f
/*
By downloading, copying, installing or using the software you agree to this license.
If you do not agree to this license, do not download, install,
copy or use the software.
License Agreement
For Open Source Computer Vision Library
(3-clause BSD License)
Copyright (C) 2000-2016, Intel Corporation, all rights reserved.
Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
Copyright (C) 2009-2016, NVIDIA Corporation, all rights reserved.
Copyright (C) 2010-2013, Advanced Micro Devices, Inc., all rights reserved.
Copyright (C) 2015-2016, OpenCV Foundation, all rights reserved.
Copyright (C) 2015-2016, Itseez Inc., all rights reserved.
Third party copyrights are property of their respective owners.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the names of the copyright holders nor the names of the contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
This software is provided by the copyright holders and contributors "as is" and
any express or implied warranties, including, but not limited to, the implied
warranties of merchantability and fitness for a particular purpose are disclaimed.
In no event shall copyright holders or contributors be liable for any direct,
indirect, incidental, special, exemplary, or consequential damages
(including, but not limited to, procurement of substitute goods or services;
loss of use, data, or profits; or business interruption) however caused
and on any theory of liability, whether in contract, strict liability,
or tort (including negligence or otherwise) arising in any way out of
the use of this software, even if advised of the possibility of such damage.
*/
#ifndef __OPENCV_DNN_M_HPP__
#define __OPENCV_DNN_M_HPP__
#include "opencv2/core.hpp"
/** @defgroup dnn_modern Deep Learning Modern Module
* This module is based on the [tiny-dnn](https://github.com/tiny-dnn/tiny-dnn) framework.
* The module uses tiny-dnn to load and run pre-trained Caffe models.
* tiny-dnn's converter only supports single input/single output network without branches.
*/
namespace
cv
{
namespace
dnn2
{
//! @addtogroup dnn_modern
//! @{
/** @brief Base class for tiny-dnn converter.
*/
class
CV_EXPORTS_W
BaseConverter
{
public
:
virtual
~
BaseConverter
()
{};
/**
@brief Evaluates single model output on single model input.
@param image input image.
@param results output form model.
*/
CV_WRAP
virtual
void
eval
(
InputArray
image
,
std
::
vector
<
float
>&
results
)
=
0
;
};
/** @brief Class implementing the CaffeConverter.
Implementation of tiny-dnn Caffe converter.
Loads a pretrained Caffe model. Only support simple sequential models.
*/
class
CV_EXPORTS_W
CaffeConverter
:
public
BaseConverter
{
public
:
/**
@brief Creates a CaffeConverter object.
@param model_file path to the prototxt file.
@param trained_file path to the caffemodel file.
@param mean_file path to binaryproto file.
*/
CV_WRAP
static
Ptr
<
CaffeConverter
>
create
(
const
String
&
model_file
,
const
String
&
trained_file
,
const
String
&
mean_file
=
String
());
CV_WRAP
virtual
void
eval
(
InputArray
image
,
CV_OUT
std
::
vector
<
float
>&
results
)
=
0
;
};
//! @}
}
// namespace dnn2
}
// namespace cv
#endif
/* End of file. */
modules/dnn_modern/samples/simple_test.cpp
deleted
100644 → 0
View file @
1c4b8b2f
#include <opencv2/dnn_modern.hpp>
#include <opencv2/imgcodecs.hpp>
#include <iostream>
#include <fstream>
using
namespace
std
;
using
namespace
cv
;
using
namespace
cv
::
dnn2
;
static
void
help
()
{
cout
<<
"
\n
----------------------------------------------------------------------------
\n
"
<<
" This program shows how to import a Caffe model using the
\n
"
<<
" OpenCV Modern Deep Learning module (DNN2).
\n
"
<<
" Usage:
\n
"
<<
" example_dnn_modern_simple_test <model_file> <trained_file> <mean_file>
\n
"
<<
" <label_file> <image_file>
\n
"
<<
" where: model_file is the path to the *.prototxt
\n
"
<<
" trained_file is the path to the *.caffemodel
\n
"
<<
" mean_file is the path to the *.binaryproto
\n
"
<<
" label_file is the path to the labels file
\n
"
<<
" image_file is the path to the image to evaluate
\n
"
<<
"----------------------------------------------------------------------------
\n\n
"
<<
endl
;
}
vector
<
string
>
get_label_list
(
const
string
&
label_file
);
void
print_n_labels
(
const
vector
<
string
>&
labels
,
const
vector
<
float_t
>&
result
,
const
int
top_n
);
vector
<
string
>
get_label_list
(
const
string
&
label_file
)
{
string
line
;
ifstream
ifs
(
label_file
.
c_str
());
if
(
ifs
.
fail
()
||
ifs
.
bad
())
{
throw
runtime_error
(
"failed to open:"
+
label_file
);
}
vector
<
string
>
lines
;
while
(
getline
(
ifs
,
line
))
lines
.
push_back
(
line
);
return
lines
;
}
void
print_n_labels
(
const
vector
<
string
>&
labels
,
const
vector
<
float_t
>&
result
,
const
int
top_n
)
{
vector
<
float_t
>
sorted
(
result
.
begin
(),
result
.
end
());
partial_sort
(
sorted
.
begin
(),
sorted
.
begin
()
+
top_n
,
sorted
.
end
(),
greater
<
float_t
>
());
for
(
int
i
=
0
;
i
<
top_n
;
i
++
)
{
size_t
idx
=
distance
(
result
.
begin
(),
find
(
result
.
begin
(),
result
.
end
(),
sorted
[
i
]));
cout
<<
labels
[
idx
]
<<
","
<<
sorted
[
i
]
<<
endl
;
}
}
int
main
(
int
argc
,
char
*
argv
[])
{
if
(
argc
<
6
)
{
help
();
exit
(
0
);
}
int
arg_channel
=
1
;
string
model_file
=
argv
[
arg_channel
++
];
string
trained_file
=
argv
[
arg_channel
++
];
string
mean_file
=
argv
[
arg_channel
++
];
string
label_file
=
argv
[
arg_channel
++
];
string
img_file
=
argv
[
arg_channel
++
];
// load Caffe model
Ptr
<
CaffeConverter
>
caffe_ptr
=
CaffeConverter
::
create
(
model_file
,
trained_file
,
mean_file
);
// load input image
cv
::
Mat
img
=
cv
::
imread
(
img_file
,
-
1
);
// inference !
vector
<
float_t
>
scores
;
caffe_ptr
->
eval
(
img
,
scores
);
// retrieve n labels
const
int
n
=
5
;
vector
<
string
>
labels
=
get_label_list
(
label_file
);
print_n_labels
(
labels
,
scores
,
n
);
return
0
;
}
modules/dnn_modern/src/caffe_converter.cpp
deleted
100644 → 0
View file @
1c4b8b2f
/*
By downloading, copying, installing or using the software you agree to this license.
If you do not agree to this license, do not download, install,
copy or use the software.
License Agreement
For Open Source Computer Vision Library
(3-clause BSD License)
Copyright (C) 2000-2016, Intel Corporation, all rights reserved.
Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
Copyright (C) 2009-2016, NVIDIA Corporation, all rights reserved.
Copyright (C) 2010-2013, Advanced Micro Devices, Inc., all rights reserved.
Copyright (C) 2015-2016, OpenCV Foundation, all rights reserved.
Copyright (C) 2015-2016, Itseez Inc., all rights reserved.
Third party copyrights are property of their respective owners.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the names of the copyright holders nor the names of the contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
This software is provided by the copyright holders and contributors "as is" and
any express or implied warranties, including, but not limited to, the implied
warranties of merchantability and fitness for a particular purpose are disclaimed.
In no event shall copyright holders or contributors be liable for any direct,
indirect, incidental, special, exemplary, or consequential damages
(including, but not limited to, procurement of substitute goods or services;
loss of use, data, or profits; or business interruption) however caused
and on any theory of liability, whether in contract, strict liability,
or tort (including negligence or otherwise) arising in any way out of
the use of this software, even if advised of the possibility of such damage.
*/
#include "precomp.hpp"
#include <opencv2/imgproc.hpp>
#include <tiny_dnn/tiny_dnn.h>
#include <tiny_dnn/io/caffe/caffe.pb.cc>
using
namespace
tiny_dnn
;
using
namespace
tiny_dnn
::
activation
;
using
namespace
std
;
namespace
cv
{
namespace
dnn2
{
/*
!CaffeConverter Implementation
*/
class
CaffeConverter_Impl
:
public
CaffeConverter
{
public
:
explicit
CaffeConverter_Impl
(
const
String
&
model_file
,
const
String
&
trained_file
,
const
String
&
mean_file
)
{
net_
=
create_net_from_caffe_prototxt
(
model_file
);
reload_weight_from_caffe_protobinary
(
trained_file
,
net_
.
get
());
const
size_t
width
=
(
*
net_
)[
0
]
->
in_data_shape
()[
0
].
width_
;
const
size_t
height
=
(
*
net_
)[
0
]
->
in_data_shape
()[
0
].
height_
;
mean_
=
compute_mean
(
mean_file
,
width
,
height
);
}
~
CaffeConverter_Impl
()
{}
virtual
void
eval
(
InputArray
image
,
std
::
vector
<
float
>&
results
);
private
:
Mat
compute_mean
(
const
string
&
mean_file
,
const
size_t
width
,
const
size_t
height
);
ColorConversionCodes
get_cvt_codes
(
const
int
src_channels
,
const
int
dst_channels
);
void
preprocess
(
const
Mat
&
img
,
const
Mat
&
mean
,
const
int
num_channels
,
const
Size
&
geometry
,
vector
<
Mat
>*
input_channels
);
Mat
mean_
;
std
::
shared_ptr
<
network
<
sequential
>>
net_
;
};
Mat
CaffeConverter_Impl
::
compute_mean
(
const
string
&
mean_file
,
const
size_t
width
,
const
size_t
height
)
{
caffe
::
BlobProto
blob
;
::
detail
::
read_proto_from_binary
(
mean_file
,
&
blob
);
vector
<
Mat
>
channels
;
auto
data
=
blob
.
mutable_data
()
->
mutable_data
();
const
size_t
offset
=
blob
.
height
()
*
blob
.
width
();
for
(
int
i
=
0
;
i
<
blob
.
channels
();
i
++
,
data
+=
offset
)
{
channels
.
emplace_back
(
blob
.
height
(),
blob
.
width
(),
CV_32FC1
,
data
);
}
Mat
meanChannel
;
merge
(
channels
,
meanChannel
);
return
Mat
(
Size
(
width
,
height
),
meanChannel
.
type
(),
mean
(
meanChannel
));
}
ColorConversionCodes
CaffeConverter_Impl
::
get_cvt_codes
(
const
int
src_channels
,
const
int
dst_channels
)
{
assert
(
src_channels
!=
dst_channels
);
if
(
dst_channels
==
3
)
{
return
src_channels
==
1
?
COLOR_GRAY2BGR
:
COLOR_BGRA2BGR
;
}
else
if
(
dst_channels
==
1
)
{
return
src_channels
==
3
?
COLOR_BGR2GRAY
:
COLOR_BGRA2GRAY
;
}
else
{
throw
runtime_error
(
"unsupported color code"
);
}
}
void
CaffeConverter_Impl
::
preprocess
(
const
Mat
&
img
,
const
Mat
&
mean
,
const
int
num_channels
,
const
Size
&
geometry
,
vector
<
Mat
>*
input_channels
)
{
Mat
sample
;
// convert color
if
(
img
.
channels
()
!=
num_channels
)
{
cvtColor
(
img
,
sample
,
get_cvt_codes
(
img
.
channels
(),
num_channels
));
}
else
{
sample
=
img
;
}
// resize
Mat
sample_resized
;
resize
(
sample
,
sample_resized
,
geometry
);
Mat
sample_float
;
sample_resized
.
convertTo
(
sample_float
,
num_channels
==
3
?
CV_32FC3
:
CV_32FC1
);
// subtract mean
if
(
mean
.
size
().
width
>
0
)
{
Mat
sample_normalized
;
subtract
(
sample_float
,
mean
,
sample_normalized
);
split
(
sample_normalized
,
*
input_channels
);
}
else
{
split
(
sample_float
,
*
input_channels
);
}
}
void
CaffeConverter_Impl
::
eval
(
InputArray
image
,
std
::
vector
<
float
>&
results
)
{
const
Mat
img
=
image
.
getMat
();
const
size_t
channels
=
(
*
net_
)[
0
]
->
in_data_shape
()[
0
].
depth_
;
const
size_t
width
=
(
*
net_
)[
0
]
->
in_data_shape
()[
0
].
width_
;
const
size_t
height
=
(
*
net_
)[
0
]
->
in_data_shape
()[
0
].
height_
;
vector
<
Mat
>
input_channels
;
vector
<
float
>
inputvec
(
width
*
height
*
channels
);
for
(
size_t
i
=
0
;
i
<
channels
;
i
++
)
{
input_channels
.
emplace_back
(
height
,
width
,
CV_32FC1
,
&
inputvec
[
width
*
height
*
i
]);
}
// subtract mean from input
preprocess
(
img
,
mean_
,
3
,
Size
(
width
,
height
),
&
input_channels
);
const
vector
<
tiny_dnn
::
float_t
>
vec
(
inputvec
.
begin
(),
inputvec
.
end
());
// perform inderence
auto
result
=
net_
->
predict
(
vec
);
// allocate output
results
.
clear
();
results
.
reserve
(
result
.
size
());
for
(
size_t
i
=
0
;
i
<
result
.
size
();
i
++
)
{
results
.
push_back
(
result
[
i
]);
}
}
Ptr
<
CaffeConverter
>
CaffeConverter
::
create
(
const
String
&
model_file
,
const
String
&
trained_file
,
const
String
&
mean_file
)
{
return
makePtr
<
CaffeConverter_Impl
>
(
model_file
,
trained_file
,
mean_file
);
}
}
// namespace dnn2
}
// namespace cv
modules/dnn_modern/src/dnn_modern_init.cpp
deleted
100644 → 0
View file @
1c4b8b2f
/*
By downloading, copying, installing or using the software you agree to this license.
If you do not agree to this license, do not download, install,
copy or use the software.
License Agreement
For Open Source Computer Vision Library
(3-clause BSD License)
Copyright (C) 2000-2016, Intel Corporation, all rights reserved.
Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
Copyright (C) 2009-2016, NVIDIA Corporation, all rights reserved.
Copyright (C) 2010-2013, Advanced Micro Devices, Inc., all rights reserved.
Copyright (C) 2015-2016, OpenCV Foundation, all rights reserved.
Copyright (C) 2015-2016, Itseez Inc., all rights reserved.
Third party copyrights are property of their respective owners.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the names of the copyright holders nor the names of the contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
This software is provided by the copyright holders and contributors "as is" and
any express or implied warranties, including, but not limited to, the implied
warranties of merchantability and fitness for a particular purpose are disclaimed.
In no event shall copyright holders or contributors be liable for any direct,
indirect, incidental, special, exemplary, or consequential damages
(including, but not limited to, procurement of substitute goods or services;
loss of use, data, or profits; or business interruption) however caused
and on any theory of liability, whether in contract, strict liability,
or tort (including negligence or otherwise) arising in any way out of
the use of this software, even if advised of the possibility of such damage.
*/
#include "precomp.hpp"
//#include <tiny_cnn/tiny_cnn.h>
modules/dnn_modern/src/precomp.hpp
deleted
100644 → 0
View file @
1c4b8b2f
/*
By downloading, copying, installing or using the software you agree to this license.
If you do not agree to this license, do not download, install,
copy or use the software.
License Agreement
For Open Source Computer Vision Library
(3-clause BSD License)
Copyright (C) 2000-2016, Intel Corporation, all rights reserved.
Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
Copyright (C) 2009-2016, NVIDIA Corporation, all rights reserved.
Copyright (C) 2010-2013, Advanced Micro Devices, Inc., all rights reserved.
Copyright (C) 2015-2016, OpenCV Foundation, all rights reserved.
Copyright (C) 2015-2016, Itseez Inc., all rights reserved.
Third party copyrights are property of their respective owners.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the names of the copyright holders nor the names of the contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
This software is provided by the copyright holders and contributors "as is" and
any express or implied warranties, including, but not limited to, the implied
warranties of merchantability and fitness for a particular purpose are disclaimed.
In no event shall copyright holders or contributors be liable for any direct,
indirect, incidental, special, exemplary, or consequential damages
(including, but not limited to, procurement of substitute goods or services;
loss of use, data, or profits; or business interruption) however caused
and on any theory of liability, whether in contract, strict liability,
or tort (including negligence or otherwise) arising in any way out of
the use of this software, even if advised of the possibility of such damage.
*/
#ifndef __OPENCV_PRECOMP_H__
#define __OPENCV_PRECOMP_H__
#include "opencv2/dnn_modern.hpp"
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment