C++意味分割を実現deeplab_v3
9318 ワード
にある
https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md
には複数のモデルがあります.
まず次の効果を試してみましょう.http://download.tensorflow.org/models/deeplabv3_mnv2_dm05_pascal_trainaug_2018_10_01.tar.gz
私のTensoflowは1.0版なので.直接実行することはできません.まずモデルを編集して、削除します.
「Conv 2 D」の属性「dilations」と「data_format」
および「Cast」の属性「Truncate」
「ArgMax」の属性「output_type」が実行されます.
モデル内の空洞の畳み込みはSpaceToBatchNDとBatchToSpaceNDであり,まずC++でこの2つの関数を実現する
1.SpaceToBatchND関数:
2.BatchToSpaceND関数:
それほど悪くないです.
効果を見てみましょう.
入力図5.jpg
実行スクリーンショット
5_背景_自転車_人.jpg
5-分割重ね合わせ.jpg
これは21種類の物体を識別することができます
もう何枚か見て
ダウンロード:
win画像意味分割deeplab-v 3プログラム
win画像意味分割ユーティリティは、「model_zoo.md」のモデル「mobilenetv 2_dm 05_coco_voc_trainaug」を改編したものです.
https://download.csdn.net/download/juebai123/12160594
https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md
には複数のモデルがあります.
まず次の効果を試してみましょう.http://download.tensorflow.org/models/deeplabv3_mnv2_dm05_pascal_trainaug_2018_10_01.tar.gz
私のTensoflowは1.0版なので.直接実行することはできません.まずモデルを編集して、削除します.
「Conv 2 D」の属性「dilations」と「data_format」
および「Cast」の属性「Truncate」
「ArgMax」の属性「output_type」が実行されます.
モデル内の空洞の畳み込みはSpaceToBatchNDとBatchToSpaceNDであり,まずC++でこの2つの関数を実現する
1.SpaceToBatchND関数:
// pad1( 、 ),pad2( 、 )
* SpaceToBatchND( &in,int block_shape,int pad1,int pad2)
{
* out= new (in.num);
out->value=new int[out->num];
// // , , , N,H,W,C
// [b, h, w, c], padding [b, new_h, new_w, c]
//x = np.pad(out_in, ((0,0), (4,7),(4,7), (0,0)), 'constant') // from shape (1, 2, 2, 1) to (1, 6, 6, 1)
//x_shape=x.shape
//b = x_shape[0]
//new_h = x_shape[1]
//new_w = x_shape[2]
//c = x_shape[3]
// , , , N,C,H,W
//
for(int i=0;ivalue[i]=in.value[i];
}
int in_w=in.value[3];
int new_w=in_w+pad1+pad2;
int new_h=in.value[2]+pad1+pad2;
out->value[3]=new_w;
out->value[2]=new_h;
out->data=new float[out->size()];
//
(*out);
float *s=in.data;
float *d=out->data+pad1;//
for(int i=0;ivalue[0];
int c=out->value[1];
int dilation=block_shape;
//h_dilation=int(new_h / dilation)
int h_dilation=new_h / dilation;
//w_dilation=int(new_w / dilation)
int w_dilation=new_w / dilation;
//reshape [b, new_h / dilation_h, dilation_h, new_w / dilation_w, dilation_w, c].
//y = np.reshape(x, (b, h_dilation, dilation, w_dilation, dilation, c))
//B, C, h_dilation, dilation, w_dilation, dilation
view(*out,b,c,h_dilation, dilation, w_dilation, dilation);
// [dilation_h, dilation_w, b, new_h / dilation_h, new_w / dilation_w, c].
//z = np.transpose(y, (2, 4, 0, 1, 3, 5))
//B, C, h_dilation, dilation, w_dilation, dilation
//dilation_h, dilation_w, B, C, new_h / dilation_h, new_w / dilation_w
* z= permute(*out,3, 5, 0, 1, 2, 4);
//reshape, [b x dilation_h x dilation_w, new_h / dilation_h, new_w / dilation_w, c]
//r = np.reshape(z, (b * dilation * dilation, h_dilation, w_dilation, c))
//B * dilation * dilation, C, h_dilation, w_dilation
view(*z,b * dilation * dilation, c, h_dilation, w_dilation);//block_shape);
return z;
}
2.BatchToSpaceND関数:
// crop1( 、 ),crop2( 、 )
* BatchToSpaceND( &in,int block_shape,int crop1,int crop2)
{
int dilation=block_shape;
// b = int(x_shape[0]/(dilation * dilation))
int b=in.value[0]/(dilation * dilation);
// c = x_shape[3]
int c=in.value[1];
int h=in.value[2];
int w=in.value[3];
//# input reshaped
// r = np.reshape(out_in, (dilation, dilation, b, h, w, c))
view(in,dilation, dilation, b, c, h, w);
//# permuted reshaped_permuted
// #(dilation, dilation, b, h, w, c)
// #(b, h_dilation, dilation, w_dilation, dilation, c)
// z = np.transpose(r, (2, 3, 0, 4, 1, 5))
//(b, c, h, dilation, w, dilation)
* z = permute(in,2, 3, 4, 0, 5, 1);
//# h_dilation=int(new_h / dilation)
// new_h=h*dilation
int new_h=h*dilation;
//# w_dilation=int(new_w / dilation)
// new_w=w*dilation
int new_w=w*dilation;
// #b, h_dilation, dilation, w_dilation, dilation, c
// #b,h,w,c
// y = np.reshape(z, (b, new_h, new_w, c))
view(*z,b, c, new_h, new_w);
//#
// x = y[:, 0:new_h-3,0:new_w-3,:]
* out= (z,crop1,crop2);
return out;
}
それほど悪くないです.
効果を見てみましょう.
入力図5.jpg
実行スクリーンショット
5_背景_自転車_人.jpg
5-分割重ね合わせ.jpg
これは21種類の物体を識別することができます
もう何枚か見て
ダウンロード:
win画像意味分割deeplab-v 3プログラム
win画像意味分割ユーティリティは、「model_zoo.md」のモデル「mobilenetv 2_dm 05_coco_voc_trainaug」を改編したものです.
https://download.csdn.net/download/juebai123/12160594