본문 바로가기

끄적끄적

Non-Sequential Model 묶기 - Part 2

어제의 삽질을 뒤로 하고, 오늘은 그래도 유의미한 결과를 가져왔다.

 

내가 생각했던것처럼, output의 정보를 가지고 있고, 이전 layer에 대한 정보를 가지고 있다면!

 

잘 작동하는것을 발견했다.

 

result = np.expand_dims(test_images[0],0)
result = result.astype(np.float32)

for layer in model.layers:
    if predecessorInfo[layer.name]: 
        if len(predecessorInfo[layer.name]) == 1:
            result = OutputSaver[predecessorInfo[layer.name][0]]
            result = layer.call(result)   
            OutputSaver[layer.name] = result
        else:
            result=[]
            for predecessor in predecessorInfo[layer.name]:
                result.append(OutputSaver[predecessor])
            result = layer.call(result)
            OutputSaver[layer.name] = result
    else:
        result = layer.call(result)
        OutputSaver[layer.name] = result

for idx, rlt in enumerate(result):
    print(test_labels[idx])
    print(tf.argmax(rlt,0))
    
'''
result:
7
tf.Tensor(7, shape=(), dtype=int64)
'''

 

다음 단계로는 Yolo v4에 대해서 테스트해보는 단계가 남았다.

 

위와 비슷하게 Output을 저장하는 Output Saver와 이전 레이어의 정보를 포함하는 predecessorInfo를 이용해서 제작을 해보았다.

 

        pred_bbox = batch_data
        
        print(len(infer.layers))
        for layer in infer.layers:
            print(layer.name)
            if predecessorInfo[layer.name]: 
                if len(predecessorInfo[layer.name]) == 1:
                    pred_bbox = OutputSaver[predecessorInfo[layer.name][0]]
                    pred_bbox = layer.call(pred_bbox)   
                    OutputSaver[layer.name] = pred_bbox
                else:
                    pred_bbox=[]
                    for predecessor in predecessorInfo[layer.name]:
                        pred_bbox.append(OutputSaver[predecessor])
                    pred_bbox = layer.call(pred_bbox)
                    OutputSaver[layer.name] = pred_bbox
            else:
                pred_bbox = layer.call(pred_bbox)
                OutputSaver[layer.name] = pred_bbox

 

기존에 infer(batch_data) 부분을 다음과 같이 수정했지만, 오류를 피할수는 없었다.

 

raise e.ag_error_metadata.to_exception(e)
AssertionError: in user code:

AssertionError:

[ WARN:0] global C:\projects\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (674) SourceReaderCB::~SourceReaderCB terminating async callback

 

대충...다음과 같은 에러인데... 일단은 이걸 해결하는데 힘을 써야 할것같다.

 

오류가 난 위치

 

오류가 난 위치는 저 파란색 박스부분에서 오류가 발생했다.

layer의 이름은 tf_op_layer_Sigmoid 레이어로, 해결 방안을 찾아야 할것같다.

 

yolo v4 마지막 부분

 

yolo v4추론까지는 거의다 왔기 때문에, 이 부분만 잘 진행한다면 거뜬히 해낼 수 있다고 생각된다.