논문: Generating 3D Adversarial Point Clouds
우리는 항상 사용하는 데이터, 수집하는 데이터가 우리가 원하는 정보를 정확하게 담고 있다는 것을 가정하고 feature를 추출하여 여러가지 task를 수행하고 있습니다. 여러가지 task 중에 object classification이 있을 것이고, 그것은 autonomous vehicle에 사용됩니다. 만약 누군가 센서로 들어오는 데이터를 악의적으로 교묘하게 조작하게 된다면, 잘못된 정보로 인해 사고를 유발시킬 수 있습니다. 의도적으로 잘못된 결과를 나오도록 만든 것이 toxic data 또는 adversarial data라고 합니다.
그림 1은 DARTS[1]에서 발췌한 그림입니다. 그림에서 볼 수 있듯이 사람의 인지 능력으로는 속도 제한을 읽을 수 있지만 기계는 잘못된 분류를 하고 있습니다. 이 같은 상황이 실제로 일어나게 된다면 큰 사고로 이어질 수 있습니다. 그래서 이와 같은 문제를 해결하고자 의도적으로 이와 같은 데이터를 활용하여 보다 강인한 모델을 연구하기도 합니다.
2D 이미지를 사용하는 adversarial attack은 [2]에서 설명한 FGSM(Fast Gradient Signed Method) attack 등이 있으며 근래에는 인공신경망을 기반으로 한 여러가지 방법이 있습니다. (FGSM을 자세히 알고 싶다면 TensorFlow 예제[3]를 참고하세요.)
그렇다면 3D data 혹은 point clouds에 대한 adversarial attack은 어떻게 할까요? 아직 뚜렷하게 제시된 방법이 없었으며 Generate 3D Adversarial Point Clouds 논문이 그 방법에 대한 첫 제시라고 볼 수 있습니다.
Point clouds dataset(이하 pcd)가 public하게 공유된 지가 오래되지 않았던 문제도 있지만 가장 결정적인 문제는 pcd는 이미지와 달리 데이터의 분포가 불규칙하며 규격화된 공간에 정의될 수 없기 때문입니다. 다시 말해 adversarial example을 만들기 위해서는 매우 방대한 공간에서 작업을 수행해야하는 어려움이 있었습니다. 그래서 소개하는 논문에서는 크게 두 가지 방법을 제시하고 있습니다.
- Point perturbation: 포인트의 이동으로 생성
- Point generation: 1-3개의 다른 cluster의 point를 혼합
이 논문에서는 PointNet[4]을 사용하여 classification을 진행하고 있으며, 그림 2에서 빨간색 점선을 기준으로 왼쪽이 point perturbation, 오른쪽이 point generation 방법입니다. 육안으로는 모두 bottle로 보이지만 전혀 다른 class로 예측을 하고 있습니다.
\min f(x^{\prime}) = (\max_{i \neq t^{\prime}} (Z (x^{\prime})_{i}) - Z(x^{\prime})_{t^{\prime}})^{+}: 성공적인 공격 확률을 나타냄
D(x, x^{\prime}) : original과 target의 거리
\min f(x^{\prime}) + \lambda * D(x, x^{\prime}) \cdots 수식 1
\min f(x^{\prime}) + \lambda * (\sum^{m}_{i} D_{far}(S_{i}) + \mu \cdot D_{C}(S_{0}, S_{i})) \cdots 수식 2
수식 1은 point perturbation, 수식 2는 point generation을 할 때 사용하는 loss function입니다. Z(x)_{i} 는 softmax layer의 i 번째 원소를 나타냅니다. Point perturbbation은 수식 3을 사용하며, S 는 original set, S^{\prime} 는 adversarial set을 의미합니다. Point generation은 위와 마찬가지로 L_{2} Norm (수식 3), Hausdorff distance, Chamfer measurement를 사용하고 있습니다. (참고: Hausdorff distance[5][6], Chamfer measurement[6])
Point perturbation으로 point를 생성해줄 경우 수식 1의 계산을 통해 생성된 point가 original point들과 일정 threshold 이상을 만족할 때 추가해주도록 합니다. 뒤의 방법도 비슷한 이치인데 근거리에 포인트가 모여있게 되면 지역최소값으로 빠질 수 있기 때문에 생성된 point가 일정 거리를 유지하기 위한 장치로 보면 됩니다. 그리고 adversarial point를 생성하는 것 자체가 computational resource가 많이 들기 때문에 이 논문에서 제안하는 optimization 방법이 있는데요. 그것은 attack target의 critical points를 찾는 것입니다. 이렇게 되면 class를 정할 때 attack target으로 결정될 확률이 올라갑니다. critial points를 찾는 정확한 방법은 코드[7]의 get_critical_points() 함수를 살펴봐야 합니다.
Adversarial cluster를 생성하는 것은 DBSCAN[8]에서 사용한 clustering 방법을 사용하여 초기 point가 k largest cluster에 들어가는 것을 선택하여 수식 2와 같이 계산해줍니다.
Adversarial object를 생성하는 것은 위 방법의 DBSCAN[8]을 사용하는 것까지 일치하고, k largest cluster와 cluster의 center position을 계산합니다. 그리고 계산한 center position이 겹치는 object의 중심을 찾아 선택합니다. 그리고 수식 2를 계산해주어 최적의 cluster 위치와 형태를 찾게 합니다.
사용한 데이터는 ModelNet40[9]인데요, 이 dataset의 불균형이 매우 심해서 실험을 할 때는 top 10 개수의 class에서 임의로 선택한 25개의 sample data를 사용하였습니다.
표 1, 표 2 모두 각 distance measure 마다 실험을 진행했으며, 세 방법 모두 PointNet을 상대로 adversarial attack의 성공 확률이 매우 높게 나타나고 있습니다. 무려 100%(perturbation)도 있고, 가장 성공률이 낮은 것도 97.3%(objects)입니다.
특히 그림 3과 같이 point perturbation 결과는 original 형태에서 크게 벗어나지 않고 주변의 다른 점들이 거의 보이지 않습니다. 그에 비해 그림 4는 주변에 scatter되어 있거나 일정 형태를 이루는 point 군집이 보입니다.
다음은 supplement에 나와 있는 point generation 방법들을 사용해서 각 class에 대한 결과를 보여주는 것입니다.
이 논문에서는 아직까지 pcd에 관련한 adversarial attack 방법이 많지 않아 base로 제안한 생성 방법과 metric 방법입니다. 2D의 GAN[10]과 같이 3D에서도 domain에 따른 새로운 object를 생성할 수 있을지도 모르겠습니다. 그렇지만 서두에 언급한 바와 같이 pcd는 규격화되지 않았기 때문에 극복해야할 문제가 아주 많습니다. 이 논문에서는 단순한 datasets인 ModelNet40을 사용했지만 필드에서 얻을 수 있는 다른 class 등에도 적용할 수 있을지에 대해 궁금하기도 하네요.
참고:
[1] DARTS: Deceiving Autonomous Cars with Toxic Signs
[2] Explaining and Harnessing Adversarial Examples
[3] Tutorial: Adversarial example using FGSM
[4] PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
[5] Haussdorff distance between convex polygons
[6] Matching binary images
[7] GitHub: Generating 3D Adversarial Point Clouds
[8] A density- based algorithm for discovering clusters in large spatial databases with noise
[9] ModelNet
[10] Generate Adversarial Nets
3D에도 Adversarial attack이 발생할 수 있다는 점과 실제 Adversarial attack을 수행했다는 점이 흥미로운것 같습니다. 궁금한점은 지금은 pointNet의 결과가 Adversarial attack으로 성능저하가 크게 일어났는데 3D 포인트를 2D로 투영시켜서 진행하는 연구(3D 포인트 그 자체로 사용하는 연구가 아닌 다른 방법의 연구)로는 Adversarial attack의 효과가 동일하게 일어나는지에 대한 결과는 따로 없나요? 즉 다시 질문을 정리하자면 2D 이미지에서 Adversarial attack이 발생할 경우 이를 해결하는 방법은 쉽지 않지만, 3D 포인트에서 Adverasarial attack이 발생한다면 2D로 투영시켜서 해결하면 쉽게 해결될 문제일것 같다는 생각이 들었습니다.!