diff --git a/src/main/java/org/wlld/MatrixTools/MatrixOperation.java b/src/main/java/org/wlld/MatrixTools/MatrixOperation.java index 11c476c..b5a6332 100644 --- a/src/main/java/org/wlld/MatrixTools/MatrixOperation.java +++ b/src/main/java/org/wlld/MatrixTools/MatrixOperation.java @@ -254,7 +254,8 @@ public class MatrixOperation { xr = i + x; for (int j = 0; j < kyMax; j++) { yr = j + y; - allNub = matrix.getNumber(xr, yr) * kernel.getNumber(i, j) + allNub; + allNub = ArithUtil.add(ArithUtil.mul(matrix.getNumber(xr, yr), kernel.getNumber(i, j)), allNub); + // allNub = matrix.getNumber(xr, yr) * kernel.getNumber(i, j) + allNub; } } return allNub; diff --git a/src/main/java/org/wlld/imageRecognition/Convolution.java b/src/main/java/org/wlld/imageRecognition/Convolution.java index 0feea04..35c23bb 100644 --- a/src/main/java/org/wlld/imageRecognition/Convolution.java +++ b/src/main/java/org/wlld/imageRecognition/Convolution.java @@ -40,7 +40,7 @@ public class Convolution { private void normalization(Matrix matrix) throws Exception { for (int i = 0; i < matrix.getX(); i++) { for (int j = 0; j < matrix.getY(); j++) { - matrix.setNub(i, j, ArithUtil.div(matrix.getNumber(i, j), 10000000)); + matrix.setNub(i, j, ArithUtil.div(matrix.getNumber(i, j), 1000000)); } } } diff --git a/src/main/java/org/wlld/imageRecognition/TempleConfig.java b/src/main/java/org/wlld/imageRecognition/TempleConfig.java index 5ca8529..5e8d50b 100644 --- a/src/main/java/org/wlld/imageRecognition/TempleConfig.java +++ b/src/main/java/org/wlld/imageRecognition/TempleConfig.java @@ -31,7 +31,7 @@ public class TempleConfig { private NerveManager convolutionNerveManagerB;//卷积神经网络管理器 private int row = 5;//行的最小比例 private int column = 3;//列的最小比例 - private int deep = 1;//默认深度 + private int deep = 3;//默认深度 private int classificationNub = 2;//分类的数量 private int studyPattern;//学习模式 private boolean isHavePosition = false;//是否需要锁定物体位置 @@ -211,7 +211,7 @@ public class TempleConfig { private void initNerveManager(boolean initPower, int sensoryNerveNub , int deep) throws Exception { - nerveManager = new NerveManager(sensoryNerveNub, 6, + nerveManager = new NerveManager(sensoryNerveNub, 9, classificationNub, deep, new Sigmod(), false); nerveManager.init(initPower, false); } @@ -242,7 +242,7 @@ public class TempleConfig { } //加载各识别分类的期望矩阵 matrixMap.put(0, new Matrix(height, width)); - double nub = 0.5;//每个分类期望参数的跨度 + double nub = 1;//每个分类期望参数的跨度 for (int k = 1; k <= classificationNub; k++) { Matrix matrix = new Matrix(height, width);//初始化期望矩阵 double t = k * nub;//期望矩阵的分类参数数值 diff --git a/src/main/java/org/wlld/nerveEntity/Nerve.java b/src/main/java/org/wlld/nerveEntity/Nerve.java index 4187850..9364836 100644 --- a/src/main/java/org/wlld/nerveEntity/Nerve.java +++ b/src/main/java/org/wlld/nerveEntity/Nerve.java @@ -110,8 +110,8 @@ public abstract class Nerve { powerMatrix = MatrixOperation.add(powerMatrix, matrix.getSonOfMatrix(i, j, 3, 3)); } double dm = MatrixOperation.convolution(matrix, nerveMatrix, i, j); - //dm = ArithUtil.sub(ArithUtil.div(dm, 9), threshold);//减偏置项 - dm = dm / 9 - threshold; + dm = ArithUtil.sub(ArithUtil.div(dm, 9), threshold);//减偏置项 + //dm = dm / 9 - threshold; //设置输出矩阵 经过激活函数 myMatrix.setNub(i / 3, j / 3, activeFunction.function(dm)); } diff --git a/src/test/java/coverTest/CoverTest.java b/src/test/java/coverTest/CoverTest.java index 1de3a13..69e63a9 100644 --- a/src/test/java/coverTest/CoverTest.java +++ b/src/test/java/coverTest/CoverTest.java @@ -41,8 +41,8 @@ public class CoverTest { Operation operation = new Operation(templeConfig);//初始化运算类 Picture picture = new Picture(); Matrix pic1 = picture.getImageMatrixByLocal(url);//从本地磁盘读取图片 - Matrix pic2 = picture.getImageMatrixByIo(inputStream);//从输入流读取图片 double point = operation.coverPoint(pic1, 1);//获取覆盖率 + Matrix pic2 = picture.getImageMatrixByIo(inputStream);//从输入流读取图片 } public static void fireStudy() throws Exception {//土壤扰动,桔梗焚烧等识别 diff --git a/src/test/java/org/wlld/HelloWorld.java b/src/test/java/org/wlld/HelloWorld.java index 05dc7d2..253ef0b 100644 --- a/src/test/java/org/wlld/HelloWorld.java +++ b/src/test/java/org/wlld/HelloWorld.java @@ -91,6 +91,29 @@ public class HelloWorld { System.out.println("错误率:" + (wrongPoint * 100) + "%"); } + public static void food2() throws Exception { + Picture picture = new Picture(); + TempleConfig templeConfig = new TempleConfig(false); + templeConfig.init(StudyPattern.Speed_Pattern, true, 1000, 1000, 2); + Operation operation = new Operation(templeConfig); + Map right = new HashMap<>(); + Map wrong = new HashMap<>(); + right.put(1, 1.0); + wrong.put(2, 1.0); + for (int j = 0; j < 20; j++) { + for (int i = 1; i < 1500; i++) {//一阶段 + System.out.println("study1===================" + i); + //读取本地URL地址图片,并转化成矩阵 + Matrix a = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/a" + i + ".jpg"); + Matrix c = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/c" + i + ".jpg"); + operation.study(a, right); + operation.study(c, wrong); + + } + } + + } + public static void food() throws Exception { Picture picture = new Picture(); TempleConfig templeConfig = new TempleConfig(false); @@ -103,29 +126,34 @@ public class HelloWorld { // templeConfig.setFrame(frame); templeConfig.setClassifier(Classifier.DNN); templeConfig.init(StudyPattern.Accuracy_Pattern, true, 1000, 1000, 2); +// ModelParameter modelParameter2 = JSON.parseObject(ModelData.DATA, ModelParameter.class); +// templeConfig.insertModel(modelParameter2); Operation operation = new Operation(templeConfig); //a b c d 物品 e是背景 - //一阶段 - for (int i = 1; i < 300; i++) {//一阶段 - System.out.println("study1===================" + i); - //读取本地URL地址图片,并转化成矩阵 - Matrix a = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/a" + i + ".jpg"); - //Matrix b = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/b" + i + ".jpg"); - Matrix c = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/c" + i + ".jpg"); - //Matrix d = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/d" + i + ".jpg"); - //Matrix f = picture.getImageMatrixByLocal("D:\\share\\picture/f" + i + ".png"); - //将图像矩阵和标注加入进行学习,Accuracy_Pattern 模式 进行第二次学习 - //第二次学习的时候,第三个参数必须是 true - // operation.learning(f, 0, false); - operation.learning(a, 1, false); - // operation.learning(b, 2, false); - operation.learning(c, 2, false); - //operation.learning(d, 4, false); + // 一阶段 + for (int j = 0; j < 2; j++) { + + for (int i = 1; i < 1500; i++) {//一阶段 + System.out.println("study1===================" + i); + //读取本地URL地址图片,并转化成矩阵 + Matrix a = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/a" + i + ".jpg"); + //Matrix b = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/b" + i + ".jpg"); + Matrix c = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/c" + i + ".jpg"); + //Matrix d = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/d" + i + ".jpg"); + //Matrix f = picture.getImageMatrixByLocal("D:\\share\\picture/f" + i + ".png"); + //将图像矩阵和标注加入进行学习,Accuracy_Pattern 模式 进行第二次学习 + //第二次学习的时候,第三个参数必须是 true + // operation.learning(f, 0, false); + operation.learning(a, 1, false); + // operation.learning(b, 2, false); + operation.learning(c, 2, false); + //operation.learning(d, 4, false); + } } // ModelParameter modelParameter = JSON.parseObject(ModelData.DATA8, ModelParameter.class); // templeConfig.insertModel(modelParameter); //二阶段 - for (int i = 1; i < 300; i++) { + for (int i = 1; i < 1500; i++) { Matrix a = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/a" + i + ".jpg"); //Matrix b = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/b" + i + ".jpg"); Matrix c = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/c" + i + ".jpg"); @@ -137,8 +165,8 @@ public class HelloWorld { //operation.normalization(d, templeConfig.getConvolutionNerveManager()); } templeConfig.getNormalization().avg(); - for (int j = 0; j < 3; j++) { - for (int i = 1; i < 300; i++) { + for (int j = 0; j < 1; j++) { + for (int i = 1; i < 1500; i++) { System.out.println("study2==================" + i); //读取本地URL地址图片,并转化成矩阵 Matrix a = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/a" + i + ".jpg"); @@ -162,15 +190,15 @@ public class HelloWorld { ModelParameter modelParameter = templeConfig.getModel(); String model = JSON.toJSONString(modelParameter); System.out.println(model); - ModelParameter modelParameter2 = JSON.parseObject(model, ModelParameter.class); - TempleConfig templeConfig2 = new TempleConfig(false); - templeConfig2.init(StudyPattern.Accuracy_Pattern, true, 1000, 1000, 2); - templeConfig2.insertModel(modelParameter2); - - Operation operation2 = new Operation(templeConfig2); +// ModelParameter modelParameter2 = JSON.parseObject(model, ModelParameter.class); +// TempleConfig templeConfig2 = new TempleConfig(false); +// templeConfig2.init(StudyPattern.Accuracy_Pattern, true, 1000, 1000, 2); +// templeConfig2.insertModel(modelParameter2); +// +// Operation operation2 = new Operation(templeConfig2); int wrong = 0; int allNub = 0; - for (int i = 300; i <= 320; i++) { + for (int i = 1500; i <= 1572; i++) { //读取本地URL地址图片,并转化成矩阵 Matrix a = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/a" + i + ".jpg"); //Matrix b = picture.getImageMatrixByLocal("/Users/lidapeng/Desktop/myDocment/picture/b" + i + ".jpg"); @@ -235,8 +263,13 @@ public class HelloWorld { operation.coverStudy(right, rightTagging, wrong, wrongTagging); } System.out.println("学习完成"); + long sys = System.currentTimeMillis(); double point = operation.coverPoint(right, 1); + long sys2 = System.currentTimeMillis(); + long sys3 = sys2 - sys; double point2 = operation.coverPoint(wrong, 1); + System.out.println("识别耗时:" + sys3); + System.out.println("测试覆盖1:" + point + ",测试覆盖2:" + point2); } diff --git a/src/test/java/org/wlld/ModelData.java b/src/test/java/org/wlld/ModelData.java index 2945a30..a0debf3 100644 --- a/src/test/java/org/wlld/ModelData.java +++ b/src/test/java/org/wlld/ModelData.java @@ -6,8 +6,8 @@ package org.wlld; * @date 9:49 上午 2020/1/31 */ public class ModelData { - //3 300 1 - public static final String DATA = "{\"avg\":0.0,\"borderMap\":{},\"depthNerves\":[],\"dnnAvg\":0.0,\"dymNerveStudies\":[{\"list\":[0.21386561317212516,0.009488977515904384,0.2580300322361818,0.4155623366958594,0.2809883242300064,0.22757431818957274,0.7070233073204675,0.9963383321391794,0.2974674171095313],\"threshold\":0.927980009954601},{\"list\":[0.6139824138406837,0.848592149992762,0.11995668047582697,0.17403917571056982,0.596247928711875,0.1393545841985424,0.8544983006621639,0.6993232783746578,0.0654296158591735],\"threshold\":0.724568522705215},{\"list\":[0.12401829967617672,0.45860989137861896,0.5488276504363337,0.23189301491257874,0.838329140376511,0.36308478272515643,0.6513967078157683,0.27750404816046725,0.04824515867946633],\"threshold\":1.013707467214271},{\"list\":[0.2832448384717695,0.8793199516114596,0.9036631767376881,0.11754402128323371,0.5306081170631864,0.025053066877304686,0.16551488971527617,0.6754107564660323,0.2626782358746901],\"threshold\":1.012338636154329}],\"dymOutNerveStudy\":{\"list\":[0.424119922930295,0.19666754613193516,0.4176647621081778,0.8141387378801389,0.8118335001862937,0.2402037476137422,0.07503053582018648,0.3258679983214372,0.2921011111059505],\"threshold\":0.520419311934906},\"matrixK\":{1:[1.1151047938677752,1.0389059715718838,1.096190163013303,0.0,0.9579145567495949,0.6564978691371489,0.5345890640407466,0.0,0.9221994024897776,0.5368114297533536,0.5955657922130423,0.0,0.0,0.0,0.0,0.0],2:[1.0400421086476799,0.9419389067023733,0.8791312075456774,0.0,0.9719522609262787,0.5710431194961899,0.5197201684885815,0.0,0.9538420082679987,0.4831765736178256,0.48228503593213723,0.0,0.0,0.0,0.0,0.0]},\"outNerves\":[]}"; + //2 1500 0.5 + public static final String DATA = "{\"avg\":0.0,\"borderMap\":{},\"depthNerves\":[[{\"dendrites\":{1:0.38904568233380277,2:0.6633940639014895,3:0.629814491711715,4:0.5738444856556356,5:0.07249696443551484,6:1.046211155415244,7:1.2327543160091252,8:0.8969648570003653,9:-0.4404830625896401,10:1.1570218259074765,11:1.5887294195668724,12:0.9305976874705643,13:0.5064727215372424,14:0.5581347467371587,15:0.6966855032284728,16:0.8190442286182935},\"threshold\":0.7562931398008536},{\"dendrites\":{1:0.8145401111810332,2:0.39973799510605523,3:0.7121419317348341,4:0.7170490897901117,5:-0.4232441777827144,6:0.9972695437257612,7:0.8612192989760706,8:0.19532417292973026,9:-0.6069076265976897,10:1.4834196619297941,11:1.6446032734565201,12:0.41215989681249754,13:0.01012500328455479,14:0.9050418922657123,15:0.3896838809442019,16:0.8700312476638682},\"threshold\":0.6205626804130108},{\"dendrites\":{1:0.984918732338632,2:0.2923300931407979,3:0.2847792332336034,4:0.0955765594225838,5:0.10331851504945923,6:0.28927307750396725,7:1.2676895702802071,8:0.04419694408429431,9:-0.2847223432412148,10:1.17585422311609,11:1.5359382511154331,12:0.2967695400039868,13:0.9789499352072292,14:0.32049103596937023,15:0.4529703070834039,16:0.5109052312555138},\"threshold\":0.6873942138072012},{\"dendrites\":{1:1.118137872244848,2:-0.04850002335127799,3:-0.07338300206061506,4:0.9408675065318051,5:0.13817320136321606,6:0.6751313189439846,7:1.2733651882727755,8:0.7328829111525487,9:-0.7707584151323703,10:0.7606603220850652,11:0.9364356445884545,12:0.36570176244933883,13:0.15756159607200948,14:0.07274743366354586,15:0.3752849720519018,16:0.47254144880438786},\"threshold\":0.6706342021569386},{\"dendrites\":{1:0.787093806451497,2:0.2847428835366069,3:0.3047844780921124,4:0.8820732656023924,5:-0.09182031652240683,6:0.04577265462175559,7:0.9806193015785053,8:0.2508378353199935,9:0.14276516005722503,10:0.5961956055639397,11:1.289396932511229,12:0.9255809923643152,13:0.6869705422428859,14:0.8815027751339323,15:0.37279205519516645,16:0.019852828531542577},\"threshold\":0.8506375811396233},{\"dendrites\":{1:0.2941344674547892,2:0.12581255094932722,3:0.6583211053456861,4:0.9986034396407214,5:-0.14616474560869502,6:0.39037655422083983,7:1.166442810520499,8:0.9648868340985458,9:-0.2896149958976333,10:0.879376095192525,11:0.818142261529324,12:0.9238063324263234,13:0.5243959692998819,14:0.33952211378181707,15:0.8825137114707816,16:0.48434776933047263},\"threshold\":0.7812351064237409}]],\"dnnAvg\":0.9886548522,\"dymNerveStudies\":[{\"list\":[0.9775260456078234,0.04180342703989559,0.218089881637602,0.0605492598305829,0.18824268150789036,0.9235855327200455,0.3695647965879345,0.6633913615464357,0.6187932570867407],\"threshold\":0.681919882668911},{\"list\":[0.06487810003978678,0.729686717139961,0.07938354313681495,0.6539519471647538,0.8188208905572278,0.02400388364765882,0.08678638162934382,0.9023633991922552,0.8877900412268956],\"threshold\":0.2315269696100414},{\"list\":[0.5267034131079242,0.04965316313973822,0.597606562938609,0.5423673621285535,0.1786098612192032,0.19556332348709082,0.13845473963721455,0.5887461537807523,0.06650501396847375],\"threshold\":0.2309912816506139},{\"list\":[0.4023666528344487,0.2011752376902769,0.8584762691668126,0.04597220234345556,0.7542922559062994,0.3425561788173397,0.20348600817847662,0.17590207806890878,0.24811006065796926],\"threshold\":0.815988640091906}],\"dymOutNerveStudy\":{\"list\":[0.913651950835573,0.4498343849822899,0.08711705218076393,0.6199164439770612,0.7321136313272706,0.1848057595018936,0.061936653042037215,0.8734767080449894,0.7100012013993113],\"threshold\":0.659679490192578},\"matrixK\":{},\"outNerves\":[{\"dendrites\":{1:1.107527711662196,2:1.0017143479718804,3:0.8678425117891808,4:1.015849779613516,5:0.45069082068764554,6:0.962766536726954},\"threshold\":1.001808001052424},{\"dendrites\":{1:-0.8020273990163316,2:-1.4351776138812866,3:-0.9035615481516915,4:-0.8047280101862307,5:-0.5862170141269747,6:-0.30705022728119524},\"threshold\":-0.8910706305542014}]}"; // 3 1500 1 public static final String DATA2 = "{\"borderMap\":{},\"depthNerves\":[],\"dymNerveStudies\":[{\"list\":[0.5992498041989176,0.9926179996606052,0.2226186951769814,0.626014877801968,0.41777548580985047,0.5568339809097999,0.4553301785025139,0.8986926580019458,0.006675229011633643],\"threshold\":0.144183721483083},{\"list\":[0.18613381329455836,0.7771421795458648,0.4425601037862027,0.405464967359739,0.7856853392297681,0.4695959784637539,0.5294530572970207,0.9692845726825765,0.7264871890036256],\"threshold\":0.583093688785858},{\"list\":[0.9471842752031596,0.3995683085317374,0.7477195010925697,0.4049622756191821,0.9382658206535007,0.20702488461382695,0.9199611908187407,0.9013998239273493,0.4267215156562749],\"threshold\":0.422794485948362},{\"list\":[0.060941945090878136,0.2661890863915305,0.1722666050945334,0.9879141320902391,0.9987637494050916,0.8029205429981493,0.1687199517742487,0.13708224319845608,0.8503774749629872],\"threshold\":0.689402140612162}],\"dymOutNerveStudy\":{\"list\":[0.21112229956632178,0.005112892022949733,0.4414460069608359,0.5348759353647939,0.0324423149676758,0.498326757782078,0.3288659531837589,0.31799689769781514,0.5999508479679976],\"threshold\":2.468958698521815},\"outNerves\":[]}"; //3 1500 10