소비재 기업에서는 제품 개발 초기 단계에서 제품의 유통기한이나 장기 안정성 실패 위험을 예측하기 위해 예측 안정성 모델을 개발하는 것이 중요합니다. 타임랩스 사진(TLP)은 액상 소비재의 물리적 안정성을 측정하는 주요 도구로 자리 잡았습니다.
이전에는 TLP 이미지에서 물리적 안정성 고장 모드를 예측하기 위해 Python을 사용하여 AI/딥러닝 모델을 개발했습니다. JMP Pro용 Torch Deep Learning Add-In을 새롭게 출시함으로써, 별도의 프로그래밍 없이도 이미지에서 물리적 안정성 고장을 감지하는 AI/딥러닝 모델을 빠르게 개발할 수 있습니다. 본 발표에서는 이미지 분류 문제에 이 애드인을 적용하여 제형화된 소비재의 물리적 안정성 고장을 감지하는 방법을 소개합니다.
저는 팡이 루오입니다. P&G에서 통계학자이자 데이터 과학자로 일하고 있습니다. 오늘 저는 JMP의 러스 울핑거와 함께 포스터 발표를 할 예정입니다. 저는 P&G에서 약 28년간 근무해 왔으며, 현재 통계와 데이터 과학 기법을 활용하여 제품 및 포장 혁신을 가속화하는 데 주력하고 있습니다. 러스, 간단히 자기소개 부탁드립니다.
네. Fangyi님, 감사합니다. 이 프로젝트에서 함께하게 되어 기쁩니다. 아시다시피 AI 머신 러닝은 정말 뜨거운 주제이고, 저희는 이처럼 실용적인 응용 프로그램을 좋아합니다. 제 생각에는 지금 큰 변화를 만들어내고 있고, 새로운 Torch 추가 기능을 이미지 분류에 활용할 수 있다는 점이 정말 좋습니다. 정말 강력하고 실용적이라고 생각합니다. 오늘 이 프로젝트에서 어떻게 진전을 이루셨는지 공유해 드릴 수 있는 좋은 사례가 될 것 같습니다. 개인적으로도 이 프로젝트가 어떻게 진행되는지 정말 기대됩니다. 이 프로젝트는 수년간 준비해 왔으며, 이제 본격적으로 관심을 받기 시작했습니다.
Russ님, 감사합니다. 오늘은 새로운 JMP Torch Deep Learning 추가 기능을 활용한 이미지 분류 문제를 공유해 드리겠습니다. 먼저, 문제의 배경에 대해 이야기해 보겠습니다. P&G는 다양한 소비재를 생산하는데, 그중 일부는 샴푸, 컨디셔너, 액체 세제, 주방 세제 등과 같은 액상 제품입니다.
제품을 시장에 출시하기 전에 시제품에 대한 많은 테스트를 거쳐야 합니다. 저희는 타임랩스 사진 기법이라는 기술을 사용하여 시간 경과에 따라 다양한 온도에 놓인 시제품의 이미지를 추적합니다. 오른쪽 그림에서 상 분리, 크림형 등 일부 액상 시제품의 안정성 저하 모드를 확인할 수 있습니다. 상단에는 얇은 층이 있는데, 이는 변동, 균열, 결정화 현상입니다.
수천 개의 시제품을 테스트했기 때문입니다. 이 디지털 카메라를 사용하여 모든 시제품을 시간 경과에 따라 추적하고 수백만 장의 이미지를 촬영했습니다. 이러한 이미지를 여러 고장 모드로 수동 분류하는 것은 불가능했습니다. 몇 년 전 PNG에 팀을 구성하여 파이썬으로 개발된 딥러닝 모델을 사용하여 이러한 이미지를 안정적 고장 모드와 물리적 안정성 고장 모드로 분류하는 딥러닝 알고리즘을 개발했습니다.
JMP Pro Torch Deep Learning이 새롭게 출시되었으므로 이를 이미지 분류 문제에 적용해보고 싶습니다.
저희는 이진 분류(이미지를 안정된 클래스와 불안정한 클래스로 분류하는 것)를 사용하여 문제에 이미지 분류를 시도했습니다. 또한 이미지를 안정적인 클래스와 다양한 물리적 안정성 실패 모드처럼 여러 클래스로 분류해 보았습니다. 이 두 가지 유형의 분류 문제에는 최고의 딥러닝 추가 기능을 사용해 보았습니다. 훈련 세트에는 약 3,500개의 이미지, 테스트 세트에는 500개 이상의 이미지를 포함했습니다. 몇 가지 결과를 보여드리겠습니다.
이진 분류에 Torch Deep Learning Add-in을 사용해 보았을 때, 처음에는 Torch Deep Learning Add-in의 매개변수 기본 설정을 그대로 사용하고 ResNet-34라는 이미지 모델을 선택했습니다. 매우 빠르게 95%의 예측 검증 정확도를 가진 매우 좋은 모델을 얻을 수 있었고, 이는 매우 빠르고 쉬웠습니다. 가운데는 학습 이력 그래프의 예시인데, 에포크 횟수가 증가함에 따라 손실이 감소하는 모습과 학습 반복 횟수가 증가하는 모습을 보고 싶습니다. 저희의 목표는 95%의 검증 정확도를 달성하는 모델을 개발하는 것이기 때문입니다. 이 초기 모델은 매우 좋았지만, 모델 검증 정확도를 지속적으로 향상시킬 수 있을지 확인하고 싶습니다.
제가 한 일은 일부 하이퍼파라미터를 수동으로 변경해 보는 것이었습니다. ResNet-50과 같은 더 복잡한 이미지 모델을 사용하고 학습률을 낮추고 에포크 수를 늘려 보았습니다. 몇 번 시도해 본 결과, 99%의 검증 정확도를 가진 이진 분류 모델을 빠르게 얻을 수 있었습니다. 이 결과에 매우 만족했습니다. 하지만 JMP Torch Deep Learning Add-in을 사용한 다중 클래스 분류의 경우, 시간이 조금 더 걸렸고, 처음에는 원하는 모델을 얻을 수 없었습니다.
JMP의 Peter Hirsch에게 Torch Deep Learning 추가 기능용 하이퍼파라미터 튜닝을 수행할 수 있는 Torch Companion 추가 기능이 있다는 이야기를 들었습니다. 저도 이 추가 기능을 다운로드했고, marketplace.jmp.com에서도 확인하실 수 있습니다. Torch Deep Learning 추가 기능과 Torch Companion 추가 기능을 모두 다운로드할 수 있습니다. 이 추가 기능을 사용해 본 결과, 하이퍼파라미터 실험 계획을 설계할 수 있었습니다.
20개를 사용했습니다. 이 모델은 에포크 수, 학습률, 배치 크기, 레이어 수, 레이어 크기, 그리고 이미지 크기가 서로 다른 20가지 하이퍼파라미터 조합을 생성했습니다. Torch Companion 추가 기능을 사용해 본 결과, 이 다중 클래스 분류에 가장 적합한 모델의 검증 정확도는 약 78%였습니다. 저희의 목표는 약 95% 이상의 검증 정확도를 가진 모델을 만드는 것이기 때문에, 이 모델은 충분하지 않습니다. 그 후, 다양한 하이퍼파라미터를 사용하여 모델을 수동으로 튜닝해 보았습니다. 다양한 이미지 모델과 ResNet-50도 사용해 보았습니다. 또한, 에포크 수를 늘리거나, 학습률을 낮추거나, 배치 크기를 변경하거나, 이미지 크기를 변경해 보았습니다.
다중 클래스 분류의 경우, 실행 시간이 훨씬 더 오래 걸립니다. 여기, 하루가 지난 후에도 모델이 계속 실행되는 스크린샷이 있습니다. 가끔 NVIDIA GPU의 메모리가 부족하다는 메시지가 표시될 때도 있지만, 계속 시도해 보았고, 여러 번 시도한 끝에 이미지를 안정 모드와 다른 페이드 모드 범주처럼 여러 클래스로 분류하는 매우 훌륭한 딥 러닝 모델을 얻을 수 있었습니다. 검증 정확도는 95%였습니다. 결과에 매우 만족했습니다. 또한, Russ에게서 메모리를 줄이려면 배치 크기나 에포크 수를 줄이는 것이 좋다는 제안을 받았습니다. 이것이 우리가 얻은 학습의 일부이며, 이제 살펴보겠습니다.
다시 돌아가 보겠습니다. 보시다시피 Torch Deep Learning Add-in을 사용하면 이진 분류 모델을 매우 쉽고 빠르게 개발할 수 있으며, Torch Companion Add-in을 사용하여 하이퍼파라미터 튜닝을 수행할 수 있습니다. 또한, 하이퍼파라미터를 수동으로 튜닝하여 다중 클래스 분류 문제에 대한 좋은 모델을 개발할 수 있습니다. Russ, 추가하고 싶은 말씀이 있으신가요?
네, 정말 멋진 발전이네요, Fangyi. 저희 고객 중에도 이런 방식을 택하는 분들이 꽤 있다는 걸 알고 있습니다. JMP에서 익숙했던 일반적인 빠른 분석 방식은 아니죠. 데이터가 너무 많고 계산도 엄청 복잡하거든요. 게다가 NVIDIA GPU를 사용할 수 있다는 점도 정말 좋습니다. 혹시 그 GPU 카드의 메모리 용량이 어떻게 되는지 기억하시나요, Fangyi?
200, 256기가바이트가 넘을 것 같아요.
일반적으로 GPU는 12GB 또는 16GB 정도입니다. CPU가 아니라 GPU의 메모리에 대해 이야기하고 있습니다. 알아봐야겠지만 NVIDIA가 매우 다양한 카드를 가지고 있다는 것은 알고 있습니다. 말하기 어렵습니다. 요즘 어떤 카드를 사야 할지 묻는 사람들이 많은데, 다행인 점은 NVIDIA가 잘하고 있기 때문에 더 저렴한 비용으로 점점 더 나은 카드를 내놓고 있다는 것입니다. 새로운 제품이 출시될 것이라고 들었습니다. 더 저렴한 비용으로 더 강력해질 것이므로 런타임이 단축될 것으로 예상됩니다. 특히 더 큰 이미지를 작업하는 경우 모두 함수입니다.
결국 2에서 4로 늘린 것 같아요. 기본 크기죠. 그래도 꽤 괜찮은 크기이고, 카드를 제대로 활용할 수 있게 되면서 가격이 비싸지긴 하죠. 어쨌든, 그래서 저희가 카드를 쓰는 거니까요. 인내심과 튜닝만 있으면 고성능 컴퓨팅 성능을 활용할 수 있다는 게 정말 좋습니다. 추가 애드인을 만들어 주신 Peter Hirsch와 Scott Allen에게 감사드립니다. 많은 분들이 아시겠지만, Torch 자체에 추가된 정말 멋진 애드인입니다. 더 나은 모델을 더 빨리 만들고 일부 작업을 자동화할 수 있게 해 줍니다.
영어: 분명히 중요한 것은, 그 길고 긴 실행 시간이 때로는 하룻밤 동안 그대로 두고 다음 날 다시 와서 확인하고 싶어한다는 것입니다. 제 생각에는 자동화를 사용하는 측면에서 정말 올바른 단계를 밟았지만 약간의 수동 조정과 몇 가지를 시도하는 것이 바람직하다고 생각합니다. 이는 종종 최상의 모델을 얻는 방법일 뿐만 아니라 문제에 대해 조금 더 배우는 데 도움이 되어 어떤 요소가 실제로 개선을 주도하는지, 그렇지 않은지 파악하는 데 도움이 됩니다. 제가 본 것은 종종 알 수 없다는 것입니다. 때로는 그러한 이미지 모델 중 하나가 이미지의 특성을 포착하는 것처럼 보이고 종종 다른 모델보다 훨씬 더 나은 결과를 낼 수 있습니다.
때로는 모두 비슷할 때도 있고, 이미지 크기나 훈련 방식에 따라 달라질 때도 있습니다. 기본적으로 여러 가지를 시도해 보기 위해 몇 가지 실험을 해야 하는데, 저희가 설정한 방식입니다. 훈련 손실 곡선을 보여주셔서 감사합니다. 곡선이 감소하다가 평평해지는지 확인하는 것이 중요하기 때문입니다. 보기에는 괜찮아 보입니다. 하지만 주의해야 할 점은, 곡선이 감소하다가 다시 증가하는 경우, 특히 실선 곡선은 사용하지 않는 것이 좋습니다.
이는 과적합을 나타내는데, 때때로 발생할 수 있습니다. 또 다른 경우는 여전히 꾸준히 감소하는 경우입니다. 일반적으로 더 많은 수렴을 얻을 때까지 에포크를 더 실행하고 싶을 것입니다. 하지만 이러한 것들은 모두 진행하면서 배우는 작은 것들, 작은 요령들입니다. 저에게는 이것이 정말 재밌습니다. 코드가 필요 없는 인터페이스이기 때문에 Python 코드를 작성하거나 약간 다른 것을 시도할 때마다 코드를 변경하지 않고도 빠르게 모델링에 들어갈 수 있습니다. 와, 정말 훌륭한 애플리케이션이네요, Fangyi. 축하합니다. 정말 기쁩니다.
감사합니다, 러스. 마무리로, 몇 가지 참고 자료를 공유합니다. JMP Torch Deep Learning Add-in 문서 링크와 Torch Companion Add-in 링크입니다. 또한, 몇 년 전 통계 컨퍼런스(ASA, IMS, Spring Research Conference)에서 Python을 사용하여 모델을 개발할 때 비슷한 문제를 제시한 적이 있습니다.
또한, 과거에 이 문제를 함께 해결해 주신 P&G 팀에도 감사드립니다. Russ가 언급했듯이, 스토리지 컴패니언 애드인을 공유해 주신 Peter Hirsch에게도 감사드립니다. 이 정도면 충분합니다. 궁금한 점이 있으시면 누구에게 문의해야 할지 아실 겁니다. Russ에게 연락하시거나 저에게 연락하시면 됩니다. Russ에게 JMP Torch Deep Learning 애드인을 배우는 것은 정말 즐거웠고, P&G에서 더 많은 활용 사례를 만들어낼 수 있을 것 같습니다. 감사합니다.
잘했어요, 팡이. 고맙습니다.