mirror of
https://github.com/lltcggie/waifu2x-caffe.git
synced 2025-11-24 10:34:54 +00:00
テスト中
This commit is contained in:
parent
ea6af02321
commit
a63b2510c6
@ -280,8 +280,11 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
void reg();
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
CV_DNN_REGISTER_LAYER_CLASS(CropCenter, CropCenterLayer);
|
||||
//CV_DNN_REGISTER_LAYER_CLASS(CropCenter, CropCenterLayer);
|
||||
reg();
|
||||
|
||||
// ImageNet Caffeリファレンスモデル
|
||||
string protoFile = "models/upresnet10/noise0_scale2.0x_model.prototxt";
|
||||
@ -298,7 +301,7 @@ int main(int argc, char** argv) {
|
||||
//net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);
|
||||
//net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);
|
||||
|
||||
//net.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV);
|
||||
net.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV);
|
||||
net.setPreferableTarget(cv::dnn::DNN_TARGET_CPU);
|
||||
}
|
||||
catch (const cv::Exception& e) {
|
||||
@ -326,8 +329,8 @@ int main(int argc, char** argv) {
|
||||
const auto probMat = net.forward();
|
||||
|
||||
std::vector<cv::Mat> outImgs;
|
||||
//cv::dnn::imagesFromBlob(probMat, outImgs);
|
||||
cv::dnn::imagesFromBlob(inputBlob, outImgs);
|
||||
cv::dnn::imagesFromBlob(probMat, outImgs);
|
||||
//cv::dnn::imagesFromBlob(inputBlob, outImgs);
|
||||
auto outImg = outImgs[0];
|
||||
|
||||
// 値を0~1にクリッピング
|
||||
|
||||
@ -23,14 +23,11 @@
|
||||
using namespace cv::dnn::cuda4dnn;
|
||||
#endif
|
||||
|
||||
namespace cv
|
||||
namespace
|
||||
{
|
||||
namespace dnn
|
||||
cv::Range normalizeRange(const cv::Range& input_range, int n)
|
||||
{
|
||||
|
||||
Range normalizeRange(const Range& input_range, int n)
|
||||
{
|
||||
Range range = input_range;
|
||||
cv::Range range = input_range;
|
||||
|
||||
if (range.start != n) {
|
||||
range.start = std::min(std::max(range.start, -n), n - 1);
|
||||
@ -50,7 +47,7 @@ namespace cv
|
||||
}
|
||||
|
||||
// TODO: support cv::Range with steps and negative steps to get rid of this transformation
|
||||
void tranformForNegSteps(const MatShape& inpShape, std::vector<std::vector<Range> >& sliceRanges, std::vector<std::vector<int> >& sliceSteps)
|
||||
void tranformForNegSteps(const cv::dnn::MatShape& inpShape, std::vector<std::vector<cv::Range> >& sliceRanges, std::vector<std::vector<int> >& sliceSteps)
|
||||
{
|
||||
// in case of negative steps,
|
||||
// x of shape [5, 10], x[5:0:-1, 10:1:-3] <=> np.flip(x[1:5:1, 2:10:3], aixs=(0, 1))
|
||||
@ -77,7 +74,7 @@ namespace cv
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<std::vector<cv::Range> > finalizeSliceRange(const MatShape& inpShape, int& axis,
|
||||
std::vector<std::vector<cv::Range> > finalizeSliceRange(const cv::dnn::MatShape& inpShape, int& axis,
|
||||
const std::vector<std::vector<cv::Range> >& inputSliceRanges)
|
||||
{
|
||||
std::vector<std::vector<cv::Range> > sliceRanges = inputSliceRanges;
|
||||
@ -86,10 +83,10 @@ namespace cv
|
||||
axis = (axis + static_cast<int>(inpShape.size())) % inpShape.size();
|
||||
|
||||
for (size_t i = 0; i < sliceRanges.size(); ++i) {
|
||||
std::vector<Range>& ranges = sliceRanges[i];
|
||||
std::vector<cv::Range>& ranges = sliceRanges[i];
|
||||
if (axisNeg)
|
||||
{
|
||||
ranges.insert(ranges.begin(), axis, Range::all());
|
||||
ranges.insert(ranges.begin(), axis, cv::Range::all());
|
||||
}
|
||||
|
||||
for (size_t j = 0; j < ranges.size(); ++j)
|
||||
@ -106,6 +103,14 @@ namespace cv
|
||||
|
||||
return sliceRanges;
|
||||
}
|
||||
}
|
||||
|
||||
namespace cv
|
||||
{
|
||||
namespace dnn
|
||||
{
|
||||
|
||||
|
||||
|
||||
class SliceLayerImpl : public SliceLayer
|
||||
{
|
||||
@ -826,10 +831,10 @@ namespace cv
|
||||
bool hasSteps;
|
||||
};
|
||||
|
||||
class CropLayerImpl CV_FINAL : public SliceLayerImpl
|
||||
class CropCenterLayerImpl CV_FINAL : public SliceLayerImpl
|
||||
{
|
||||
public:
|
||||
CropLayerImpl(const LayerParams& params) : SliceLayerImpl(LayerParams())
|
||||
CropCenterLayerImpl(const LayerParams& params) : SliceLayerImpl(LayerParams())
|
||||
{
|
||||
setParamsFrom(params);
|
||||
axis = params.get<int>("axis", 2);
|
||||
@ -840,6 +845,21 @@ namespace cv
|
||||
for (int i = 0; i < paramOffset->size(); i++)
|
||||
offset.push_back(paramOffset->get<int>(i));
|
||||
}
|
||||
|
||||
if (params.has("crop_size"))
|
||||
{
|
||||
const auto& paramCropSize = params.get("crop_size");
|
||||
const auto& str = paramCropSize.getStringValue();
|
||||
|
||||
const int s = atoi(str.c_str());
|
||||
offset.resize(4);
|
||||
offset[0] = 0;
|
||||
offset[1] = 0;
|
||||
offset[2] = s;
|
||||
offset[3] = s;
|
||||
|
||||
axis = 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool getMemoryShapes(const std::vector<MatShape>& inputs,
|
||||
@ -847,26 +867,75 @@ namespace cv
|
||||
std::vector<MatShape>& outputs,
|
||||
std::vector<MatShape>& internals) const CV_OVERRIDE
|
||||
{
|
||||
CV_Assert(inputs.size() == 2);
|
||||
//CV_Assert(inputs.size() == 2);
|
||||
|
||||
//MatShape dstShape = inputs[0];
|
||||
//int start = normalize_axis(axis, dstShape);
|
||||
//for (int i = start; i < dstShape.size(); i++)
|
||||
//{
|
||||
// dstShape[i] = inputs[1][i];
|
||||
//}
|
||||
//outputs.resize(1, dstShape);
|
||||
|
||||
MatShape dstShape = inputs[0];
|
||||
int start = normalize_axis(axis, dstShape);
|
||||
for (int i = start; i < dstShape.size(); i++)
|
||||
{
|
||||
dstShape[i] = inputs[1][i];
|
||||
dstShape[i] = dstShape[i] - offset[i] * 2;
|
||||
}
|
||||
outputs.resize(1, dstShape);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void finalize(InputArrayOfArrays inputs_arr, OutputArrayOfArrays) CV_OVERRIDE
|
||||
{
|
||||
//std::vector<Mat> inputs;
|
||||
//inputs_arr.getMatVector(inputs);
|
||||
//CV_Assert(2 == inputs.size());
|
||||
|
||||
//const Mat& inpBlob = inputs[0];
|
||||
//const Mat& inpSzBlob = inputs[1];
|
||||
|
||||
//int dims = inpBlob.dims;
|
||||
//int start_axis = normalize_axis(axis, dims);
|
||||
|
||||
//std::vector<int> offset_final(dims, 0);
|
||||
//if (offset.size() == 1)
|
||||
//{
|
||||
// for (int i = start_axis; i < dims; i++)
|
||||
// offset_final[i] = offset[0];
|
||||
//}
|
||||
//else if (offset.size() > 1)
|
||||
//{
|
||||
// if ((int)offset.size() != dims - start_axis)
|
||||
// CV_Error(Error::StsBadArg, "number of offset values specified must be "
|
||||
// "equal to the number of dimensions following axis.");
|
||||
|
||||
// for (int i = start_axis; i < dims; i++)
|
||||
// offset_final[i] = offset[i - start_axis];
|
||||
//}
|
||||
|
||||
//finalSliceRanges.resize(1);
|
||||
//finalSliceRanges[0].resize(dims);
|
||||
//for (int i = 0; i < start_axis; i++)
|
||||
//{
|
||||
// finalSliceRanges[0][i] = Range(0, inpBlob.size[i]);
|
||||
//}
|
||||
//for (int i = start_axis; i < dims; i++)
|
||||
//{
|
||||
// if (offset_final[i] < 0 || offset_final[i] + inpSzBlob.size[i] > inpBlob.size[i])
|
||||
// CV_Error(Error::StsBadArg, "invalid crop parameters or blob sizes");
|
||||
|
||||
// finalSliceRanges[0][i] = Range(offset_final[i], offset_final[i] + inpSzBlob.size[i]);
|
||||
//}
|
||||
|
||||
|
||||
std::vector<Mat> inputs;
|
||||
inputs_arr.getMatVector(inputs);
|
||||
CV_Assert(2 == inputs.size());
|
||||
CV_Assert(1 == inputs.size());
|
||||
|
||||
const Mat& inpBlob = inputs[0];
|
||||
const Mat& inpSzBlob = inputs[1];
|
||||
|
||||
int dims = inpBlob.dims;
|
||||
int start_axis = normalize_axis(axis, dims);
|
||||
@ -895,25 +964,29 @@ namespace cv
|
||||
}
|
||||
for (int i = start_axis; i < dims; i++)
|
||||
{
|
||||
if (offset_final[i] < 0 || offset_final[i] + inpSzBlob.size[i] > inpBlob.size[i])
|
||||
int w = inpBlob.size[i] - offset_final[i] * 2;
|
||||
if (offset_final[i] < 0 || w < 0)
|
||||
CV_Error(Error::StsBadArg, "invalid crop parameters or blob sizes");
|
||||
|
||||
finalSliceRanges[0][i] = Range(offset_final[i], offset_final[i] + inpSzBlob.size[i]);
|
||||
finalSliceRanges[0][i] = Range(offset_final[i], offset_final[i] + w);
|
||||
}
|
||||
}
|
||||
|
||||
static cv::Ptr<cv::dnn::Layer> create(cv::dnn::LayerParams& params)
|
||||
{
|
||||
return cv::Ptr<CropCenterLayerImpl>(new CropCenterLayerImpl(params));
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector<int> offset;
|
||||
};
|
||||
|
||||
Ptr<SliceLayer> SliceLayer::create(const LayerParams& params)
|
||||
{
|
||||
return Ptr<SliceLayer>(new SliceLayerImpl(params));
|
||||
}
|
||||
|
||||
Ptr<Layer> CropLayer::create(const LayerParams& params)
|
||||
{
|
||||
return Ptr<Layer>(new CropLayerImpl(params));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# include <opencv2/dnn/layer.details.hpp>
|
||||
|
||||
void reg()
|
||||
{
|
||||
CV_DNN_REGISTER_LAYER_CLASS(CropCenter, cv::dnn::CropCenterLayerImpl);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user