1. 서론
최근 딥러닝은 모델의 발전과 더불어 빅데이터를 활용하여 기존의 전문가 경험을 토대로 하는 알고리즘을 훨씬 웃도는 정확도를 산출하며, 지속적인 발전으로 현재는 인간의 시각보다 더 좋은 분류 정확도를 보인다. 이때의 빅데이터는 데이터의 다양성이 매우 높은 것으로서, 예를 들어 자동차의 영상이라면 해당 영상을 획득한 배경이나, 그것의 종류, 브랜드, 자동차의 모양 즉, 정면, 측면, 후면 등, 최대한 다양한 영상이 균형을 이루어 구성되어 있는 것이라고 할 수 있다[1,2].
본 연구에서는 PCB 조립을 위해 사용되는 부품이 제대로 부착되었는지, 혹은 상단면 인쇄가 잘못되지 않았는지 등을 검사할 때 사용되는 데이터세트 구성에 관하여 연구하고자 한다. 이때 사용되는 데이터세 트의 구성들에 대해 딥러닝을 활용하여 검증하고자 하며, 검증된 데이터베이스 중 가장 효과가 높은 데이터세트를 코어세트로 정의하여 실제 PCB조립 공장에서 사용하는 검사기에 활용할 수 있도록 한다. 또한, 데이터를 수집한 공장 외에도 여러 공장에서 사용할 수 있도록 하는 것이 주요 목표이다. 일반적으로 딥러닝에서 물체 검지(objectdetection) 모델보다 분류(classification) 모델이 더욱 좋은 결과를 보이므로 부품 상단면의 문자열을 단일 문자로 잘라내어 딥러닝 분류 모델로 인식하고자 하며 단일 문자로 잘린 상태에서 실험하는 것을 가정한다.
Fig. 1의 왼쪽은 연구에 활용한 PCB중 하나의 예시를 보여준다. 부품 상단 면에 인쇄된 글자들을 보면 글꼴이 통일되어 있지 않음과, 글자 크기가 부품 크기마다 다르다는 것을 보여준다. 여러 가지 부품에서 클래스 0으로 수집된 데이터는 Fig. 1의 오른쪽 그림과 같다. 수집된 데이터의 극히 일부이긴 하나, 몇 가지 다른 글꼴과 색상으로 이루어진 영상을 제외하면 대부분이 중복된 영상이므로 편향성이 매우 높은 것을 알 수 있다[3,4].
Fig. 1. Example of PCB. (a) the PCB and the top face of the part and (b) Examples of data collected by class 0.
학습과 테스트 목적으로 데이터를 수집할 수 있도록 실제 검사 장비를 제작하는 회사와 협의를 하였으며, 분할된 문자 영상을 약 5개의 조립 공장의 일부 라인들에서 약 이 주 간 문자 영상을 획득하였는데, 그 양은 모두 5,368,069장으로 엄청나게 많은 양을 수집할 수 있었다. 이는 PCB생산 및 검사 공정이 매우 빠르기 때문에 단 시간에 많은 양을 수집할 수 있었으나 검수과정에서 의미 없는 중복데이터가 많이 존재한다는 것을 확인하였다. 즉, 한 라인 당 이주 동안 생산한 PCB는 공장별로 1개 혹은 2개 정도의 종류였으므로 조립에 사용된 부품의 세트가 정해져 있었으며, 분할된 문자 역시 고정된 세트가 반복적으로 수집되는 것이다. 단, 가격 변동에 의해 부품 제작사가 달라질 경우에만 100장 중 몇 장의 영상에 있는 폰트 모양이 달라질 뿐이다. 따라서 수집한 데이터로 딥러닝 모델을 학습하게 되면 데이터를 수집한 공장에서는 좋은 결과를 보이겠지만, 다른 폰트를 사용해서 표면이 인쇄된 부품을 사용하는 공장에서는 좋은 결과를 기대하기 힘들다[5].
여러 공장에 적용할 수 있는 단일 모델을 학습하기 위해서는 매우 많은 PCB 조립 공장에서 데이터를 장시간 오래 확보해야 하지만, 데이터를 수집할 때 발생하는 영상 저장시간에 의해 생산량이 줄어들기 때문에 공장에서는 이러한 작업을 쉽게 허락해주지 않아서 데이터를 수집하는 것이 매우 힘들다. 또한 실제로는 공장에서 사용하는 부품의 영상을 외부에 공개하는 것을 꺼려하므로 연구자들이 실험을 위해 데이터를 구하기가 힘들다[3-5].
이 연구에서 확보한 데이터는 양은 충분하지만 질적으로 충분한 데이터라고 할 수 없기 때문에 단기간에 수집한 한정된 데이터세트를 활용하여 대표성을 가지는 데이터로 축소를 하고, 데이터 보강을 수행한 뒤 몇 가지 방법 데이터를 섞어 딥러닝을 활용하여 데이터세트를 검증한다. 이때 검증된 데이터세트 중 가장 효과적인 것을 코어세트(coreset)[6]로 볼 수 있다.
본 연구에서는 수집된 데이터의 중복성을 최소화하고 편향성이 낮은 데이터를 보존하기 위하여 이전 연구에서 제안한 격자 알고리즘을 통해 데이터를 축소하고, PCB에서 자주 등장하는 글꼴과 전경 배경색을 적용하여 데이터 증강방법을 제안한다. 또한 다양한 방법과 조건으로 데이터를 섞어 총 16가지의 데이 터세트들을 정의하여 데이터 조합과 양의 상관관계를 분석할 수 있도록 한다. 조합된 데이터를 딥러닝 모델을 활용하여 검증하여 가장 효율적인 데이터세트를 코어세트로 정의할 수 있다.
본 연구는 2장에서 관련 연구를 살펴보고, 3장에서 수집한 데이터세트에 대한 상세한 분석을 다룬다.
4장에서는 데이터세트를 축소하고 보강하는 방법에 대해 언급하고 이를 검증하는 방안에 대해 언급한다. 마지막으로 5장에서 본 연구의 결론과 향후 연구를 논한다.
2. 관련연구
2.1 PCB 관련 OCR (Optical Character Recognition) 연구 및 부품 조립 불량 검사 분야
PCB 불량 검사와 관련해서는 생산업이 국가 주요 산업인 동남아시아 및 중국, 또한 국내에서 연구가 주로 이루어지고 있다. 특히 이미 다른 연구 분야에서 딥러닝을 활발하게 사용하기 시작했던 시기인 2010년대 중반에는 PCB 분야에서 그다지 연구되지 않았으나, 이후 최근 3년 정도 딥러닝이 활발하게 이용된 것으로 보인다. PCB 분야 특성상 데이터베이스 수급이 힘들고, 데이터베이스를 확보한다고 해도 데이터 자체가 대외비인 경우 등 다양한 이유로 연구가 제한되기 때문에 여러 연구에서 PCB 생산라인이 있는 기업에서 연구논문을 작성하는 경우도 종종 보인다[7-12].
본 연구의 주목적은 부품에 인쇄된 문자를 딥러닝 기반으로 분류하는 것이나, 국내에서는 이와 같은 기존 연구는 거의 드물기 때문에 부품을 분류하거나 부품의 부착 불량 혹은 PCB 회로 불량에 관하여 딥러닝을 적용한 연구에 대해 간략히 살펴보았다.PCB 검사에서는 아주 작은 오류나 결함이 있어도 폭발과 같은 큰 피해를 입을 수 있기 때문에 정확도를 높이고자 하는 시도가 있었고, 이를 위해 정확도 면에서 매우 뛰어난 딥러닝을 활용하고자 하는 연구가 2010년 중반 이후 조금씩 등장하였다. 이때 대부분의 연구는 딥러닝 단일 모델로 문제를 해결하고 있는데 대다수의 연구가 데이터 양이 적고, 데이터 불균형 문제를 언급하고 않다. 따라서 실제 생산라인의 환경을 고려하지 못한 아쉬움이 있다[7-12].
빅데이터와 딥러닝은 필수적인 관계이므로 PCB와 관련된 공개 데이터세트가 적다는 것은 곧 PCB 분야에 딥러닝을 적용하고자 하는 연구가 힘들다는 것을 의미한다. 따라서 데이터 수집, 분석에 걸쳐 증강, 유연성 높은 모델 혹은 학습 방법에 관한 기여가 필요하다고 할 수 있다.
2.2 데이터세트 검증을 위한 ResNet[13] 모델
일반적으로 망이 깊어진다는 인식에 따라 실험을 수행한 결과 단순하게 망의 깊이를 늘린 모델에서 더욱 나쁜 결과를 보여준다는 것을 발견한 [13]의 저자는 잔차 특징 값을 더하는 것으로 망을 늘릴 시 더욱 좋은 결과를 보여주는 ResNet모델을 연구 및 발표하였다. 최대 152개의 계층으로 구성된 매우 깊은 네트워크를 가질 수 있으나, 본 연구에서는 56개 레이어를 사용한 ResNet을 활용한다. ResNet은 이전 레이어의 입력을 다음 레이어에 더해주는 역할을 하며 앞선 컨볼루션의 정보를 뒤에 전달해주는 역할을 한다. 이를 skipconnection으로 칭한다. 이를 통해 네트워크가 더 깊어짐에도 불구하고 앞선 정보를 잃지 않는 장점이 있다.
본 연구에서는 ResNet을 사용하여 여러 조합의 데이터세트를 검증하며, 그 이유는 과거에 제안된 모델의 경우 상대적으로 특징을 잘 추출하지 못하여 최근에 제안된 모델에 비해 분류 정확도가 낮다고 판단했기 때문이다. 즉, 최근에 제안된 모델일수록 특징을 더욱 잘 추출하여 약간의 데이터 조합 차이에도 큰 영향 없이 결과가 비슷할 것이다. 모든 데이터세트의 조합을 좋은 모델으로 확인하는 것이 더욱 효과적이겠으나 이는 시간적으로 손실이 크고 결과가 확연하게 차이나지 않을 것으로 예상되므로 데이터세트의 조합과 코어세트의 정의를 빠른 시간에 ResNet과 같은 모델로 수행하고자 하는 것이며, 데이터세트의 검증을 딥러닝 모델로 수행하고자 한다.
연구 대상은 제한된 시간과 데이터로 충분한 성능을 보이는 코어세트를 제작하는 것이며, 여러 데이터 세트를 조합한 뒤 검증하는 시간을 최소화하여 실제 데이터를 학습 및 적용하는 시간을 절약하고자 한다. 따라서 산업현장에서는 효과적인 데이터를 확인하는 시간을 최소화하고 데이터 보강을 수행해 학습 및 적용을 빠르게 수행할 수 있다.
2.3 데이터 샘플링(sampling)과 격자 샘플링(grid sampling)
본 연구에서 다루고자 하는 PCB조립 부품면에 인쇄된 문자 데이터는 편향성과 중복성이 높고, 수집한 장소에 따라 특징이 달라질 수도 있다. 또 다른 문제는 데이터의 각 클래스별로 사용 빈도가 다르다는 문제가 있다. 숫자의 사용빈도는 영문의 사용빈도에 비해 높고, 다른 숫자보다 0과 1의 사용빈도가 매우 높다고 할 수 있다. 이 데이터의 불균형 문제는 클래스 안에서도 발생하지만, 클래스 간에도 발생하기 때문에 일괄적인 다운샘플링(downsampling)이나 업샘플링(upsampling)을 수행하기 어렵다. 이러한 데이터의 고유 특성은 3절에서 상세히 다룰 예정이다.
일반적으로 표준 분포를 따르는 임의 표본을 사용하는 표본 방법과 달리, 이전에 제안한 연구[3,4]에서 격자 샘플링 방법을 제안했는데, 이는 색조 분포를 통한 분포별 샘플링 방법이다. 이 방법은 전체 RGB 영상의 색조를 HSV 색상 시스템으로 변환하고 그 중 명도에 해당하는 V값만 사용하여 영상 전체 화소의 평균을 구한다. 그 평균을 활용해서 전체 화소에 대해 표준편차값의 평균을 구한 뒤 시각화 한 다.그 후 x축과 y축을 5씩 잘라 격자를 구성하였으며 이때 5*5격자 내에 분포하고 있는 점에 대한 분포 비율을 저장한다. 이후 줄여야 할 데이터의 양이 같은 분포표에 동일 분포를 가지도록 한다. 즉 한 격자에 10퍼센트의 데이터가 들어있다면, 총량이 줄더라도 동일하게 10퍼센트를 차지하도록 해야 한다. 격자 내에서는 항상 동일한 비율의 데이터가 들어가 있다.이 때 격자 내의 데이터는 임의 표준으로 추출한다[3,4].
다루어야 할 데이터는 배경과 전경이 명확하게 분리되는 영상이며, 폰트의 모양에 따라 화소의 평균이 달라질 수 있다. 예를 들어 같은 ‘0’의 영상이더라도 폰트가 두꺼운 경우 전경이 더 많은 비율을 차지하기 때문에 폰트의 달라진 정도를 화소 평균과, 평균과의 표준편차에 대한 평균으로 이를 구분할 수 있을 것으로 판단하였다. 또한, 전경 혹은 배경이 달라지는 경우 역시 다른 분포를 가지는 데이터로 간주할 수 있다.
Fig. 2의 왼쪽은 ‘0’ 클래스에 대해 원래의 데이터 분포를 보여주며, Fig. 2의 오른쪽은 격자 알고리즘을 활용하여 데이터를 축소하고 난 뒤의 결과를 보인 다.이때의 x축은 영상의 V채널 전체 화소 값을 더한 후 화소의 개수만큼 나눠준 평균을 의미하며, y축은 각 화소 값과 앞서 구한 평균의 차를 구한 값의 제곱을 모두 더하여 화소 개수만큼 나눠준 후 이의 제곱 근을 구한 표준편차값이다.즉, 하나의 영상이 가지고 있는 화소의 평균과 그 평균에서 얼마나 분포가 넓은지를 동시에 볼 수 있다. 따라서 한 격자 내에 데이터가 적은 경우 그 모든 데이터가 다운샘플링된 데이터에 포함될 것이며, 격자 내에 데이터가 너무 많은 경우 몇 개의 데이터만 취함으로써 과적합을 피하기 위한 방법을 고안하였다. 본 연구에서도 [4,5]에서 제안한 방법을 활용하여 다운샘플링을 수행한다.
Fig. 2. Data reduction using grid algorithm.
3. 데이터베이스 분석
3.1 데이터 전처리
이 연구에서 사용되는 데이터베이스는 현재 조립 및 검사 라인에서 사용하는 검사기에서 자동 수집 된 것을 활용하였다. 이때 검사과정에서 사용되는 소프트웨어는 부품면에 인쇄된 문자열에서 문자를 분리하고 이것을 레이블링하는 것이 가능하다. 이 소프트웨어가 전혀 오류가 없다면 딥러닝을 적용할 필요가 없겠지만, 안타깝게도 이 소프트웨어는 아직까지 한계가 있다. 실제로 수집한 데이터를 열어보면 레이블링이 제대로 되어있지 않거나, 대소문자를 하나의 레이블로 분류하는 문제가 있다. 그뿐만 아니라 문자를 제대로 분리하지 못하는 문제도 있다.
데이터 전처리를 위하여 Fig. 3과 같은 문제가 있는 데이터를 삭제하거나, 혹은 단일 문자 영상으로 잘라내어 제대로 된 레이블을 매겨주는 수작업을 수행했다. 이러한 문제는 문자 간 간격이 너무 좁을 때 제대로 잘라내지 못해서 문제가 발생할 수 있고, 문자가 아니지만 마치 문자의 패턴과 유사한 경우 문자로 볼 수 있어 발생한 오류이다[4].
Fig. 3. Examples of error images.
3.2 클래스 정의
데이터는 총 52개의 클래스로 정의하였다. 원래 총 클래스 수는 PCB부품에 사용할 수 있는 문자인 10자리 숫자와 52개의 대문자와 소문자 영문, 총 62개의 클래스로 구성되어 있지만 그대로 사용하는 데 몇 가지 문제가 있다.
이 중 딥러닝 모델에서 혼동을 방지하기 위해 모양은 같지만 크기만 다를 뿐인 형태의 대문자와 소문자를 동일한 클래스로 결합하였다. 일반적으로 CNN(ConvoultionalNeuralNetworks)의 풀링(pooling) 혹은 스트라이드(stride)를 적용한 컨볼루션(convo-lution)과정에서 물체의 크기에 강건한 특징을 추출할 수 있기 때문에 C나, W와 같은 대소문자의 크기만 다른 문자는 딥러닝 모델로 데이터를 이해하는 과정에서 크기 차이가 같은 클래스로 이해될 가능성이 높다. 따라서 모델의 혼동을 방지하기 위하여 클래스를 하나로 합쳤다. Fig. 4는 클래스 구조와 각 클래스의 데이터 샘플을 보여준다.
Fig. 4. Class configuration and image of each classes.
3.3 데이터 불균형 문제 분석
앞서 데이터의 문제를 몇 가지 언급하였다. 이 절에서는 데이터가 클래스 내외적으로 가지는 데이터 불균형에 대해서 다룬다. 이 연구에서 수집한 데이터는 한 공장에서 취급하는 PCB 문자가 다양하지 않기 때문에 데이터 불균형 문제가 있다.
Table 1은 데이터의 불균형을 보여주며 1개의 공장에서 거의 2주 동안 수집한 데이터, 이것을 ‘데이터세트 1’이라고 명칭하며, 그 수를 보여준다. 부품에 자주 사용되지 않는 문자의 경우 하나도 데이터가 수집되지 않은 클래스도 있으며, 0부터 9까지 숫자 클래스를 모두 합하면 약 36만장에 달하는데, 총 개수 대비 이는 거의 70%를 차지하는 비율이라고 할 수 있다. 그 중 가장 많이 사용되는 클래스 0의 경우, 전체 데이터 개수의 13%를 차지한다. 대다수의 클래스가 많은 양의 데이터를 가지고 있다면 일괄적인 다운샘플링이 가능하다. 하지만 X, Z, e와 같은 클래스에 주목할 필요가 있다. 이 데이터들을 수치적으로 볼 때는 데이터가 매우 적은 편이어서 업샘플링으로 다른 데이터만큼의 양을 만들어낼 수 있을 것이라고 생각되지만 몇 개의 클래스에서는 거의 복제한 것과 같아서 학습에는 의미가 없는 데이터가 중복적으로 많은 문제가 있었다.
Table 1. Number of data by class.
각 클래스마다 몇 가지의 클래스 내 폰트 종류가 존재하는지 확인하였고, Fig. 5는 각 클래스별로 포함된 영상 종류 중 폰트 종류가 적은 클래스 몇 가지 예시를 보여준다. 즉 i, o, Z와 같은 클래스는 약간의 화소 변화는 있지만 단일 영상이 중복되어 구성되어 있다. 특히 i의 경우 하나의 영상이 1551개가 구성되어 있었다.
Fig. 5. Examples of classes with fewer font types in the class.
일반적으로 많은 데이터가 딥러닝 모델에 도움이 되는 것으로 판단되지만, 본 연구에는 너무 많은 편향된 데이터가 있고 그 편향성이 약간의 화소 차이를 제외하고는 거의 같은 영상라고 봐야 하므로, 단순한 업샘플링이나 다운샘플링으로 문제를 해결하기 힘들다[14-16].
3.2 문자 데이터 보강
앞선 절에서 살펴 본 데이터의 문제는 한정된 영상이 반복적으로 구성된다는 것이므로 이러한 한계 를 극복하기 위해서 실제 인쇄된 표면과 같은 환경을 구성하여 문제를 극복하고자 하였다. 앞선 Table 1에서 수집이 전혀 되지 않은 글꼴도 존재하였는데, 이러한 글꼴이 전혀 사용되지 않는 경우에는 클래스로서 고려할 필요가 없으나 데이터 수집에 협조해준 기관에 문의 해본 결과 수집이 되지 않았더라도 부품의 종류가 매우 많기 때문에 사용될 가능성을 전혀 배제 할 수 없다고 하였다. 즉 어떠한 현장에서는 분류할 필요가 없는 클래스가, 다른 현장에서는 분류되어야 할 가능성이 있으므로 처음부터 52개의 클래스를 정의하여 데이터가 전혀 없는 클래스에도 데이터를 추가해주어야 한다.
이 연구를 위해 총 35개의 무료 폰트 데이터를 사용하였으며, Fig. 6은 같이 PCB 보드에 자주 출현했던 유사 색조를 설정하여 임의로 데이터를 생성한 예시이다. 이때의 방법은 우선 배경이 흰색, 전경이 검은색인 영상을 HSV로 채널 변환을 한 후 H 채널을 활용하여 영상 색상을 PCB에서 자주 등장하는 색상으로 전경과 배경을 변경하였다. 이때 전경은 검은색, 배경은 흰색이므로 전경과 배경만 한정하여 색상을 변경할 수 있다. PCB 영상을 전처리할 때 매우 많은 영상을 직접 확인하였으므로 경험적으로 PCB에 자주 등장하는 색상을 정의할 수 있었다. 생성된 영상은 실제 PCB에서 추출된 분할 문자 영상과 유사하게 만들기 위하여 전경이 불포함된 불필요한 외곽을 잘라내는 방법을 통해 최종 영상을 생성할 수 있었다. 그 중 일부 한정된 양을 무작위로 선택하여 데이터세트를 생성하였다.
Fig. 6. Examples of generated data using random fore·background color and font.
앞선 과정에서 생성한 폰트 데이터는 제한된 개수로 격자 알고리즘을 적용한 오리지널 데이터와 섞어 혼합 데이터를 만드는데, 이때의 데이터 개수가 클래스별로 상이할 수 있음을 고려하여 보편적인 데이터 보강방법을 활용하여 데이터 개수를 균등하게 맞추 었다.
각 클래스별로 영상을 무작위로 추첨하여 가우시 안 노이즈를 섞은 데이터를 만들어 데이터를 보강하고, 실제 획득한 영상이 -5에서 +5도 정도의 회전을 가지고 있으므로 약간의 회전을 적용하여 데이터를 보강하였다.
앞선 모든 데이터 증강 및 보강과정을 수행한 뒤 Fig. 7과 같이, 전체적인 오리지널 데이터세트의 분포는 그대로 유지하면서 빈 공간의 색조를 더 채워주는 것을 알 수 있다. Fig. 7의 왼쪽 그림은 오리지널 클래스 0의 데이터 분포이며 데이터세트가 많아 상대적으로 작은 점군들이 빽빽하게 채워져 있는 것을 볼 수 있다. 오리지널 데이터를 4000장 기준으로 다운샘플링하고, 4000장의 보강 데이터를 넣어준 Fig. 7의 오른쪽 점그래프는 전체적으로 채워진 분포를 보여준다.
Fig. 7. Distribution of the dataset. (a) Distribution of the original class 0 dataset and (b) Distribution of class 0 dataset with augmented data.
4. 제안한 방법
4.1 제안한 방법의 프로세스
본 연구에서는 불균형이 심한 데이터베이스에 대해 데이터 특성을 충분히 고려하여 데이터 보강을 수행하였다. 또한 제한적인 환경에서 데이터를 수집하였으나, 이러한 데이터를 활용해서 딥러닝 모델을 학습하여 여러 환경에 적용해야 한다고 가정한다.
보강된 데이터의 혼합을 여러 가지로 달리하여 데이터세트를 검증하는 방법을 딥러닝으로 수행하고, 가장 결과가 좋은 데이터세트를 코어세트로 정의한 후 실제 환경에 적용 가능한 딥러닝 모델을 생성 및 적용하고자 한다. Fig. 8은 전체 프로세스를 보여준다.
Fig. 8. The process of the proposed method.
4.2 코어세트 정의를 위한 다양한 조합의 데이터베이스 검증
여러 가지 조합의 데이터베이스를 조합하여 낮은 정확도를 가지지만 학습이 빠른 모델인 ResNet을 통해 데이터베이스를 검증한다. 이때 ResNet을 사용하는 이유는 학습시간이 매우 빠르지만 정확도가 상대적으로 낮아 데이터베이스의 구성에 민감할 것으로 가정하였기 때문이다. 즉, 데이터베이스의 조합이 좋으면 매우 좋은 결과를 보일 것이고, 그렇지 않으면 매우 대조적으로 나쁜 결과를 보일 것이므로 정확도가 높은 모델에 비해 좋은 데이터베이스를 구분해내기 좋을 것으로 판단하였다.
딥러닝 모델을 훈련하기 위해 양질의 데이터베이스를 만드는 것이 일반적이다. 본 연구에서 다루어야 할 데이터베이스는 각기 다른 공장에서 사용되는 모든 PCB 캐릭터에 대한 일반적인 사례가 아니기 때문에 훈련 데이터의 검증이 필요하다.
데이터는 Table 2와 같이 구성된다. 데이터의 분포에 의해 결과가 달라진다는 것을 앞선 데이터 분석에서 가정하였으므로 각 공장에서 수집한 데이터를 달리 구분하여 데이터세트 1, 2로 명칭하였고, 혼합을 달리 구성하기 위해 폰트로 생성한 데이터세트 3, 회전과 노이즈를 섞은 데이터를 데이터세트 4로 명명하였다.이때 데이터세트 4는 보편적으로 사용하는 데이터 증강방법이므로 이러한 방식의 증강이 얼마나 효과적인지를 알 수 있다. 테스트 데이터는 1, 2번 공장에서 수집한 데이터를 일부 사용하지만 수집한 시기를 달리 하였으며 그 외에 다른 공장에서 수집한 데이터가 훨씬 많도록 구성하였다.
Table 2. Database description.
일반적으로 테스트를 위한 데이터는 수집한 데이터를 약 8대 2로 분리하여 20%의 데이터를 대상으로 성능을 평가하는 것이 보편적인 딥러닝 학습 모델의 실험 방법이다. 하지만 연구에서 테스트 데이터의 수집 기간이나 장소를 달리한 이유는 제한적인 생산라인에서 수집하더라도 다른 생산라인에 적용할 수 있는지를 평가하기 위해서이다.
실제 환경의 베타테스트를 수행하여야 실제 검사기에 탑재될 수 있겠으나 테스트는 제한적인 실험실 환경의 성능평가보다 좀 더 효과적이다.
Fig. 9의 조합을 기본으로 하여 Table 3에서는 각각 사용한 데이터 개수를 보여준다. 각 4개의 데이터 세트들에서 각 4개씩의 조합을 볼 수 있다. Table 3의 번호 1, 2, 3, 4는 각 클래스별 2000장, 3000장, 4000장, 그리고 8000장이며 학습과 검증은 2대 8로 나누어 학습하였다.
Fig. 9. Design of datasets generation.
Table 3. Number of data used in each experiment
기본적인 데이터세트 조합 구성은 항상 두 개의 생산공장에서 수집한 데이터를 기본으로 하는 것이다. 즉 두 개의 생산공장에서 수집한 데이터를 클래스별로 혼합하고, 각 클래스별로 8000개의 데이터세트를 추출한다. 데이터가 없거나 부족한 경우 노이즈를 넣어 강제적으로 업샘플링하여 개수를 균등하게 만든다. 총 1+2, 1+2+3, 1+2+4, 1+2+3+4의 조합을 모두 확인하며, 각 클래스별 영상 개수가 8000, 4000, 3000, 2000이므로 총 16개의 데이터 조합을 구성했다.
데이터세트를 검증하는 조건은 두 가지로써 첫 번째는 데이터양이고, 두 번째는 데이터의 증·보강 조합이다. 데이터양을 검증하는 이유는 검사 장비에 새로운 학습 모델을 적용할 때 데이터양이 많을 경우 학습시간이 오래 걸릴 것이며, 모델 적용을 위해 필요한 시간이 길어지므로 클래스별로 다른 데이터양을 사용할 때 어느 정도의 성능 차이를 보이는지 확인하기 위해서이다. 또한 두 번째로 데이터 증강의 조합별로 성능을 평가하는 것은 향후 지속적으로 학습 모델을 업그레이드할 때 어떤 조합이 더 효과적인지를 확인하기 위해서이다.
Fig. 10은 각 데이터세트의 클래스를 모두 합하여 분포표로 도식화 한 것이며 데이터세트 1과 데이터세트 2는 다른 공장에서 수집한 데이터인데 전체적인 데이터 분포가 다른 것을 알 수 있다.테스트 데이터 역시 데이터 분포가 다른 것을 볼 때 우리의 데이터세트 구성과 조합 및 테스트 환경이 학습과 테스트가 서로 다른 데이터분포일 때를 검증할 수 있음을 확인할 수 있다.
Fig. 10. Distribution of datasets. (a) dataset 1, (b) dataset 2, and (c) testset.
5. 구현 및 실험 결과
5.1 실험 비교군 설정
실험 전에 실제 데이터를 샘플링하지 않은 상태에서 각 모델의 결과를 살펴본다. ResNet 모델 중 가장 깊은 계층의 56계층 모델을 사용하고 비교 대상으로 EfficientNet[17]이라는 최근 좋은 성능을 보이는 딥러닝 모델을 통해 비교군을 구성하였다. EfficientNet에서는 레이어 구성이 얕은 B0과 가장 깊은 B7을 살펴보고 데이터 샘플링 및 보강을 하지 않은 데이터의 성능을 평가한다.
이 실험에서 모델은 Table 2의 데이터세트 1을 사용하여 학습하며, 이때의 데이터는 클래스 간 데이터 불균형을 고려하지 않고 그대로 집어넣었다. 즉, 각 클래스 및 클래스 내 데이터 불균형을 실험하여 제안된 실험과 비교할 수 있는 대조군을 생성한다. 실험은 Table 4의 환경에서 수행되었다.
Table 5에서 볼 수 있듯이 최근 제안된 모델인 EffcientNet의 결과는 매우 좋지만 두 모델 모두 약간의 차이만을 보이므로 데이터베이스의 구성을 비교하기에는 적합하지 않다. ResNet의 결과 보면, 이 학습된 모델을 그대로 사용할 가치가 있다고 말하기는 어렵다. ResNet56은 실험에서 다루게 될 ResNet 레이어 중 가장 깊은 모델이지만 EfficientNet에 비해 결과가 매우 나쁘다. 즉, 데이터베이스에 민감한 결과를 보여줄 것을 기대할 수 있다.
Table 4. Development and experimental environment.
5.2 ResNet을 사용한 데이터세트 검증 실험
응용 프로그램을 위한 모델 교육에 앞서 ResNet의 각 레이어 모델별로 데이터세트들을 활용하여 모델을 학습하고, 그 성능을 비교하여 코어세트를 정의한다.
Table 6의 결과를 보면 전반적으로 데이터세트 1+2+3은 좋은 결과인 것을 알 수 있고, 각 클래스에 대해 8000개의 영상을 사용한 실험에서 특히 좋은 결과를 보여준다. 주목할 만한 점은 dataset 1과 2를 단순히 섞어 2000개씩 샘플링 한 데이터세트의 실험에 대해서 볼 때 Table 5의 ResNet 56 layers 결과에 비해 입력 데이터양이 더 적지만 더 좋은 결과를 발견할 수 있다. 이것은 딥러닝 모델이 알지 못하는 데이터에 대해서는 분류 성능이 떨어진다는 것을 증명한다. 또한 일반적인 딥러닝 학습 방법에서 사용하는 데이터 보강방법에 비해 폰트를 섞은 실험에서 더 좋은 결과가 있는 것을 볼 때, 폰트로 생성한 데이터로 충분히 이러한 문제를 해결할 수 있음을 실험 결과에서 알 수 있다. 클래스 당 영상 개수가 적더라도 데이터세트 1+2+3에서 좋은 결과를 보여주고, 테스트 데이터에 대한 상위 5개 결과에서도 데이터세트 1+2+3이 더 우수하다는 것을 보여준다. 즉, 실험을 통해 데이터세트 1+2+3의 8000장이 코어세트라고 할 수 있으며 클래스 당 총량이 줄어들 경우에도 상위 5개 클래스 결과 결과를 함께 고려하여 데이터세트 1+2+3을 사용하는 것이 효과적이라고 할 수 있다.
Table 5. Experimental accuracy (%) results using the original data set.
Table 6. Top 1 and top 5 accuracy of each experiments in ResNet models (%).
이 실험에서 상위 5개 클래스 결과를 함께 제시하는데, 그 이유는 Fig. 11과 같이 사람의 시각으로도 혼란스러운 캐릭터가 있다는 사실을 고려하기 위해서이다. 이런 경우는 사람이 분류하더라도 오류가 있을 수 있으므로 추후 현장에 적용할 시 몇 개의 혼동되는 클래스는 다른 결과로 분류하더라도 최종적으로는 프로그램에서 하나로 보도록 하여 정확도를 증가시킬 수 있다.
Fig. 11. The examples of similar shapes of data.
Table 7에서는 CPU와 GPU의 속도를 비교하였다. 실제 PCB 조립 및 검사 장비의 경우 딥러닝 프레임워크를 지원하지 않는 GPU가 있거나(내장 그래픽카드), 혹은 GPU가 없는 경우도 있다. 실험에서 두 가지 유형의 시간을 비교하여 PCB 결함 검사 장비에 대한 딥러닝 적용 가능성을 고려할 수 있다. 즉, 딥러닝 모델의 계산 속도는 기존 장비에서 사용되는 소프트웨어보다 느릴 수 있다. 그러나 정확도를 높이면 당연히 연산속도가 증가하므로 사용자의 판단이 중요하다.
Table 7. CPU, GPU computational speed per image for each model in ResNet (Sec.),
Fig. 12는 데이터세트 1+2의 각 클래스별 분포를 한꺼번에 합쳐서 보여주며 두 개의 공장에서 수집한 데이터의 분포를 합쳤기 때문에 점그래프의 대부분 공간을 잘 차지하는 것을 알 수 있다. 하지만 해당 분포에서 좌 상단, 우 상단은 점이 하나도 없는데 이는 이 분포를 구성한 방법을 볼 때 당연한 결과이며, 전경과 배경이 모두 어두운 경우 당연히 평균과 편차는 거의 차이가 없으며 그 반대의 경우(배경과 전경이 밝은 경우)도 마찬가지이기 때문이다.
Fig. 12. The pixel distribution in dataset 1+2.
실험의 결과 중 클래스 당 8000장 영상과 ResNet 56 layers의 조합 실험에서 보면 보편적으로 1+2+3 >1+2+3+4>1+2+4>1+2의 순서로 결과가 좋은 것을 확인할 수 있다. 이는 데이터세트 4가 큰 도움을 주지 않는다는 것을 알 수 있다. 원래의 영상 데이터에 노이즈나 회전을 시켜 약간의 변화를 주는 것은 학습에 약간 도움을 줄 수는 있으나 과적합을 완전히 해결하지는 못한다.
즉, Fig. 13을 보면 데이터세트 1+2+3과 1+2+3+4를 비교한 것이며 흰색 박스 안쪽을 보면 같은 클래스임에도 불구하고 1+2+3+4쪽에서 유사 색조가 군집되어있는 것을 확인할 수 있다. 이것은 원래의 영상을 약간 변환시키는 데이터 증강보다 새로운 데이터가 실제 환경에 적용할 시 도움이 된다는 것을 의미한다.
Fig. 13. The distribution comparison. (a) Dataset 1+2+3 and (b) Dataset 1+2+3+4.
Fig. 14를 Fig. 12와 비교하여 볼 때 거의 분포가 변하지 않은 것을 확인할 수 있다. 즉, 데이터 세트 4가 분포에 큰 영향을 미치지 않는다. 하지만 약간의 증강효과는 있으므로 1+2+4의 실험에서는 클래스 당 8000개의 영상을 실험한 결과 1+2에 비해 약간 더 나은 결과를 보여준다.
Fig. 14. The pixel distribution of datasets 1+2+4.
Fig. 15는 오류 사례의 실제 결과이다. 97.763%의 결과에서 오검지에 해당하는 사례를 실제로 확인해본 결과 인간의 시각으로 볼 때 오인되는 경우의 문제가 있으며, 앞서 살펴본 Fig. 11의 사례 외에서도 A의 글꼴 중에서도 R의 모양과 유사하게 판단될 수 있는 글꼴이 있음을 확인할 수 있다. 몇 개의 잘리거나 손상된 문자들은 앞으로 주목해야 할 부분이며 새로운 데이터 보강 방법이 고려되어야 함을 알 수 있다.
Fig. 15. Error cases of dataset 1+2+3(8000) result.
6. 결론
본 연구에서 제안한 부품 면에 인쇄된 문자 데이터세트 증강 방법은 실제 PCB 산업현장에서 반드시 필요하며, 장기간 다양한 공장에서 데이터를 수집하지 않더라도 여러 공장에서 사용 가능한 데이터세트를 만들 수 있어 산업적 측면에서 데이터 수집 및 학습과 적용시간의 단축이 가능하다.
연구에서는 대량의 데이터세트를 수집 할 수 있었기 때문에 데이터에 대한 면밀한 분석으로 향후 다른 연구에서 참고할 만한 데이터 증강 방법의 제안을 다루었으며, 다양한 데이터세트를 조합하여 현장에서 사용할 수 있는 코어세트를 선정하는 프로세스에 대해 논할 수 있었다. 또한 여러 조합의 보강된 데이터 세트들의 검증 방법이 없으므로 딥러닝을 활용하여 데이터세트의 효율성을 검증하고자 할 수 있었다.
본 연구를 통해 데이터세트를 검증할 때는 데이터세트의 변화에 민감한 정확도가 낮은 모델을 활용하는 것이 효과적이라는 것을 확인할 수 있었으며, 이때 선정된 코어세트는 정확도가 높은 모델에 대해 조금이라도 더 좋은 영향을 끼칠 수 있으므로 제안한 프로세스의 방법대로 코어세트를 선정할 시 다른 조합의 데이터세트보다 좋은 생산력을 기대할 수 있다.
일반적으로 성능이 매우 좋은 딥러닝 모델에서도 데이터베이스의 편향성 문제로 적은 값의 정확도 차이가 일어나는데, PCB 산업현장에서는 단 0.1%의 정확도가 차이가 나더라도 제품 신뢰도와 직결되는 문제이므로 이 연구에서 제안하는 방법을 활용하여 가장 효과적인 학습이 가능하게 하는 데이터베이스를 생성할 수 있다. 또한 실제 상황의 시나리오를 고려하여 수집환경과 적용환경이 다를 것임을 가정하고 학습 세트와 테스트 세트를 달리 구성하여 실제 산업계에서 수집과 적용에 대한 고민을 낮출 수 있는 실험을 구성하여 향후 PCB 부품면에 인쇄된 문자를 인식하는 실제 인라인 상황을 고려하였다.
향후 데이터세트의 훼손을 고려할 수 있는 증강방법을 고민해야 하며, 잘린 문자들을 추가로 구성하기 위하여 GAN과 같은 데이터 생성 딥러닝 모델에 초점을 맞추어 연구를 확장하고자 한다.
References
- Q. Zhang, L. T. Yang, Z. Chen, and P. Li, "A Survey On Deep Learning For Big Data," Information Fusion, Vol. 42, pp. 146-157, 2018. https://doi.org/10.1016/j.inffus.2017.10.006
- S.J. You. "4th Industrial Revolution And Artificial Intelligence," Journal of Korea Multimedia Society, Vol. 21, No. 4, pp. 1-8, 2017.
- S. Gang, N. Fabrice, and J. Lee, "Coresets for PCB Character Recognition based on Deep Learning," 2020 International Conference on Artificial Intelligence in Information and Communication (ICAI IC), Fukuoka, Japan, 2020, pp. 637-642, 2020.
- N. Fabrice, S. Gang, and J. Lee, "Training Data Sets Construction from Large Data Set for PCB Character Recognition," Journal of Multimedia Information System, Vol. 6. pp, 225-234, 2019. https://doi.org/10.33851/JMIS.2019.6.4.225
- S. Lee and J. Lee, "In-Line 3-D Inspection for PCB Solder Paste," The Fall Conforence on Korea Multimedia Society, pp. 492-495, Nov. 2004.
- O. Bachem, M. Lucic, and A. Krause. "Practical Coreset Constructions For Machine Learning," arXiv preprint arXiv:1703.06476, 2017.
- J. Song and T. Park, "Segmentation of Feature Extraction Regions for PCB Solder Joint Defect Classification," Information and Control Symposium, pp. 13-14, 2017.
- Y. Baek, J. Sim, C. Pak, and S. Lee, "PCB Defect Inspection using Deep Learning," Proceedings of the Korean Society of Computer Information Conference, Vol. 26, No. 2, pp. 325-326, 2018.
- T. Cho, "Detection of PCB Components Using Deep Neural Nets," Journal of the Semiconductor & Display Technology, Vol. 19, No. 2. pp. 11-15, 2020.
- Y. Li and I. Jiun, "A VGG-16 Based Faster RCNN Model for PCB Error Inspection in Industrial AOI Applications," 2018 IEEE International Conference on Consumer Electronics-Taiwan (ICCE-TW). pp. 1-2, 2018.
- C. W. Kuo, J. Ashmore, D. Huggins, and Z. Kira, "Data-Efficient Graph Embedding Learning for PCB Component Detection," 2019 IEEE Winter Conference on Applications of Computer Vision (WACV). IEEE, pp. 551-560, 2019.
- Y. Li, P. Kuo, and J. Guo. "Automatic Industry PCB Board DIP Process Defect Detection with Deep Ensemble Method," 2020 IEEE 29th International Symposium on Industrial Electronics (ISIE). pp. 453-459, 2020.
- K. He, X. Zhang, S. Ren, and J. Sun. "Deep Residual Learning for Image Recognition," In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pp. 770-778, 2016.
- J.M. Johnson and T.M. Khoshgoftaar. "Survey on Deep Learning with Class Imbalance," Journal of Big Data, Vol. 6, No. 1, 2019.
- C. Shorten and T.M. Khoshgoftaar, "A survey on Image Data Augmentation for Deep Learning," Journal of Big Data, Vol. 6, No. 1, 2019.
- E.D. Cubuk, B. Zoph, D. Mane, V. Vasudevan, and Q.V. Le, "Autoaugment: Learning Augmentation Strategies from Data," Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pp. 113-123, 2019.
- M. Tan and Q.V. Le, "Efficientnet: Rethinking Model Scaling for Convolutional Neural Networks," arXiv preprint arXiv:1905.11946, 2019.