In[]:=
data[folder_]:=Module[{img,txt,dat,output},​​img=Table[Import[ToString[folder]<>"\\"<>ToString[i]<>".png"],{i,Length[FileNames[All,folder]]/2}];​​txt=Table[If[Length[Import[ToString[folder]<>"\\"<>ToString[i]<>".txt","Data"]]==1,{ToExpression[#]&/@Import[ToString[folder]<>"\\"<>ToString[i]<>".txt","Words"]},Import[ToString[folder]<>"\\"<>ToString[i]<>".txt","Data"]],{i,Length[FileNames[All,ToString[folder]]]/2}];;​​output=Table[Thread[img[[i]]->{Thread[(Rectangle[{(#2-#4/2),((1-#3)-#5/2)},{(#2+#4/2),((1-#3)+#5/2)}]&@@@txt[[i]])->(ToString[#1]&@@@txt[[i]])]}],{i,Length[txt]}];​​Flatten[output]​​]
In[]:=
anchorboxes[folder_,k_]:=Module[{txt,wh,clusters,anchors},​​txt=Flatten[Table[If[Length[Import[ToString[folder]<>"\\"<>ToString[i]<>".txt","Data"]]==1,{ToExpression[#]&/@Import[ToString[folder]<>"\\"<>ToString[i]<>".txt","Words"]},Import[ToString[folder]<>"\\"<>ToString[i]<>".txt","Data"]],{i,Length[FileNames[All,ToString[folder]]]/2}],1];​​wh={#4,#5}&@@@txt;​​clusters=FindClusters[wh,k,Method"KMeans"];​​anchors=Mean/@clusters​​]
In[]:=
dataset=data["E:\\University Assignments\\Thesis 1\\Nueral net\\Bassel"];
In[]:=
anchors=anchorboxes["E:\\University Assignments\\Thesis 1\\Nueral net\\Bassel",3]
Out[]=
{{0.0984638,0.108101},{0.0755408,0.0256554},{0.205848,0.0250436}}
In[]:=
trainingset[folder_]:=Module[{img,txt,classes,enc,set},​​img=Table[File[ToString[folder]<>"\\"<>ToString[i]<>".png"],{i,Length[FileNames[All,folder]]/2}];​​txt=Table[If[Length[Import[ToString[folder]<>"\\"<>ToString[i]<>".txt","Data"]]==1,{ToExpression[#]&/@Import[ToString[folder]<>"\\"<>ToString[i]<>".txt","Words"]},Import[ToString[folder]<>"\\"<>ToString[i]<>".txt","Data"]],{i,Length[FileNames[All,ToString[folder]]]/2}];​​classes=#1&@@@Flatten[txt,1]//DeleteDuplicates;​​enc=NetEncoder[{"Class",classes,"IndicatorVector"}];​​set=Table[Thread[img[[i]]]->Join[{#2,#3,#4,#5}&@@@txt[[i]],enc[#1]&@@@txt[[i]],2],{i,Length[txt]}]​​]
In[]:=
trainingset["E:\\University Assignments\\Thesis 1\\Nueral net\\Bassel"];
In[]:=
ncoords=4;
In[]:=
nclasses=2;
In[]:=
w=h=13;
In[]:=
yolov2=NetModel["YOLO V2 Trained on MS-COCO Data"]
Out[]=
NetGraph
InputPort
Input
:
expression
OutputPorts
Boxes
:
matrix(size: 845×4)
ClassProb
:
matrix(size: 845×80)
Objectness
:
vector(size: 845)
Region:
NetGraph
Input Port
​
Input
:
array(size: 425×13×13)
Output Ports
Coordinates
:
array(size: 4×5×13×13)
Objectness
:
vector(size: 845)
ClassProb
:
matrix(size: 845×80)

In[]:=
conv=NetTake[yolov2,{NetPort["Input"],NetPort[{"Conv","Output"}]}]
Out[]=
NetGraph
InputPort
Input
:
expression
OutputPort
Output
:
array(size: 425×13×13)
Conv:
NetGraph
Input Port
​
Input
:
array(size: 3×416×416)
Output Port
Output
:
array(size: 425×13×13)

In[]:=
newconv=NetReplacePart[conv,{{"Conv","end",1}->ConvolutionLayer[Length[anchors]*(ncoords+1+nclasses),1,"PaddingSize"0,1,"Dilation"1],​​{"Output"}->{Length[anchors](ncoords+1+nclasses),w,h}​​}]
Out[]=
NetGraph
uniniti
aliz
ed
Inputport:
expression
Outputport:
array(size: 21×13×13)

regionLayerNet[gridSize:{w_,h_},anchors_,nCoords_,nClasses_]:=NetGraph[​​{​​"Reshape"ReshapeLayer[{Length[anchors],nCoords+1+nClasses,w,h}],​​"Transpose"TransposeLayer[],​​"Centers"{PartLayer[1;;2],ElementwiseLayer["Sigmoid"]},​​"Sizes"PartLayer[3;;4],​​"Coordinates"CatenateLayer[],​​"Confidence"{PartLayer[nCoords+1],ElementwiseLayer["Sigmoid"],FlattenLayer[]},​​"ClassScore"{PartLayer[nCoords+2;;All],SoftmaxLayer[1],FlattenLayer[-2],TransposeLayer[]}​​},​​{"Reshape""Transpose",​​"Transpose""Centers""Coordinates",​​"Transpose""Sizes""Coordinates",​​"Coordinates"NetPort["Coordinates"],​​"Transpose""Confidence"NetPort["Objectness"],​​"Transpose""ClassScore"NetPort["ClassProb"]},​​"Input"{Length[anchors](nCoords+1+nClasses),w,h}​​];
coord2box[gridSize:{w_,h_},anchors_,nCoords_,nClasses_]:=With[​​{​​grid=Transpose[Table[{i,j},{j,0,w-1},{i,0,h-1}],{2,3,1}],​​n=Length[anchors]​​},​​With[​​{​​gridLayer=NetArrayLayer["Array"ReplicateLayer[n,2][grid]],​​anchorLayer=NetArrayLayer["Array"ReplicateLayer[{w,h},3][Transpose[anchors]]],​​scaleLayer=NetArrayLayer["Array"ReplicateLayer[{n,w,h},2][{w,h,w,h}]]​​},​​NetGraph[​​{"Centers"PartLayer[1;;2,"Input"{nCoords,n,w,h}],​​"ScaledCenters"TotalLayer[],​​"Sizes"{PartLayer[3;;4],ElementwiseLayer[Exp]},​​"ScaledSizes"ThreadingLayer[Times],​​"ScaledCoord"CatenateLayer[],​​"NormalizedCoord"ThreadingLayer[Divide],​​"FlattenedCoord"FlattenLayer[-2],​​"CoordList"TransposeLayer[],​​"Grid"gridLayer,​​"Scale"scaleLayer,​​"Anchors"anchorLayer},​​{​​NetPort["Input"]"Centers""ScaledCenters""ScaledCoord",​​"Grid""ScaledCenters",​​NetPort["Input"]"Sizes""ScaledSizes""ScaledCoord",​​"Anchors""ScaledSizes",​​{"ScaledCoord","Scale"}"NormalizedCoord""FlattenedCoord""CoordList"​​},​​"Input"{nCoords,n,w,h}​​]​​]​​];