Beri anotasi data cloud titik padat menggunakan SageMaker Ground Truth

Node Sumber: 834877

Perusahaan kendaraan otonom biasanya menggunakan LiDAR sensor untuk menghasilkan pemahaman 3D tentang lingkungan di sekitar kendaraan mereka. Misalnya, mereka memasang sensor LiDAR di kendaraan mereka untuk terus menangkap snapshot point-in-time dari lingkungan 3D di sekitarnya. Keluaran sensor LiDAR adalah urutan bingkai awan titik 3D (tingkat penangkapan tipikal adalah 10 bingkai per detik). Kebenaran Dasar Amazon SageMaker memudahkan pelabelan objek dalam satu bingkai 3D atau di seluruh urutan bingkai cloud titik 3D untuk membuat set data pelatihan machine learning (ML). Ground Truth juga mendukung fusi sensor kamera dan data LiDAR hingga delapan input kamera video.

Karena sensor LiDAR menjadi lebih mudah diakses dan hemat biaya, pelanggan semakin banyak menggunakan data point cloud di ruang baru seperti robotika, pemetaan sinyal, dan augmented reality. Beberapa perangkat seluler baru bahkan menyertakan sensor LiDAR, salah satunya menyuplai data untuk postingan kali ini! Ketersediaan sensor LiDAR yang terus meningkat telah meningkatkan minat pada data point cloud untuk tugas-tugas ML, seperti deteksi dan pelacakan objek 3D, segmentasi 3D, sintesis dan rekonstruksi objek 3D, dan bahkan menggunakan data 3D untuk memvalidasi estimasi kedalaman 2D.

Meskipun data cloud titik padat kaya akan informasi (lebih dari 1 juta titik cloud), sulit untuk memberi label karena workstation pelabelan sering kali memiliki memori terbatas, dan kemampuan grafik serta anotator cenderung didistribusikan secara geografis, yang dapat meningkatkan latensi. Meskipun sejumlah besar titik dapat dirender di stasiun kerja pelabel, keluaran pelabel dapat dikurangi karena waktu perenderan saat menangani awan titik berukuran jutaan, sangat meningkatkan biaya pelabelan dan mengurangi efisiensi.

Cara untuk mengurangi biaya dan waktu ini adalah dengan mengubah tugas pelabelan cloud titik menjadi tugas yang lebih kecil dan lebih mudah dirender yang menyimpan sebagian besar informasi asli cloud titik untuk anotasi. Kami menyebut pendekatan ini secara luas pengambilan sampel bawah, mirip dengan pengambilan sampel bawah di domain pemrosesan sinyal. Seperti dalam domain pemrosesan sinyal, pendekatan point cloud downsampling mencoba untuk menghapus titik sambil mempertahankan ketepatan point cloud asli. Saat membuat anotasi awan titik downsampled, Anda dapat menggunakan output 3D kubus untuk pelacakan objek dan deteksi objek tugas langsung untuk pelatihan atau validasi pada point cloud ukuran penuh dengan sedikit atau tidak ada dampak pada kinerja model sambil menghemat waktu pelabelan. Untuk modalitas lain, seperti segmentasi semantik, di mana setiap titik memiliki labelnya sendiri, Anda dapat menggunakan label downsampled Anda untuk memprediksi label pada setiap titik di point cloud asli, memungkinkan Anda untuk melakukan tradeoff antara biaya pelabel (dan karenanya jumlah data berlabel) dan sejumlah kecil kesalahan klasifikasi poin dalam point cloud ukuran penuh.

Dalam posting ini, kami menjelaskan cara melakukan teknik downsampling untuk menyiapkan data cloud titik Anda untuk pelabelan, lalu mendemonstrasikan cara meningkatkan label keluaran untuk diterapkan ke set data ukuran penuh asli Anda menggunakan beberapa in-sampel inferensi dengan model ML sederhana. Untuk mencapai ini, kami menggunakan Ground Truth dan Instans notebook Amazon SageMaker untuk melakukan pelabelan dan semua langkah preprocessing dan postprocessing.

Data

Data yang kami gunakan dalam posting ini adalah pemindaian atap gedung apartemen yang dihasilkan menggunakan Aplikasi Pemindai 3D pada iPhone12 Pro. Aplikasi ini memungkinkan Anda untuk menggunakan pemindai LiDAR bawaan pada perangkat seluler untuk memindai area tertentu dan mengekspor file point cloud. Dalam kasus ini, data point cloud dalam format xyzrgb, format yang diterima untuk point cloud Ground Truth. Untuk informasi selengkapnya tentang tipe data yang diizinkan di cloud titik Ground Truth, lihat Format Data 3D Mentah yang Diterima.

Gambar berikut menunjukkan pemindaian 3D kami.

metode

Kami pertama-tama membahas beberapa pendekatan untuk mengurangi ukuran kumpulan data untuk pelabelan titik cloud: ubin, sampel langkah tetap, dan rata-rata voxel. Kami mendemonstrasikan mengapa teknik downsampling dapat meningkatkan throughput pelabelan Anda tanpa mengorbankan kualitas anotasi secara signifikan, lalu kami mendemonstrasikan cara menggunakan label yang dibuat pada point cloud downsampling dan menerapkannya ke point cloud asli Anda dengan pendekatan upsampling.

Pendekatan downsampling

Downsampling adalah mengambil kumpulan data ukuran penuh Anda dan memilih subkumpulan titik dari sana untuk diberi label, atau membuat kumpulan titik baru yang representatif yang tidak harus ada dalam kumpulan data asli, tetapi cukup dekat untuk memungkinkan pelabelan.

Ubin

Salah satu pendekatan yang naif adalah memecah ruang cloud titik Anda menjadi kubus 3D, atau dikenal sebagai voxel, dari (misalnya) masing-masing 500,000 titik yang diberi label secara terpisah secara paralel. Pendekatan ini, disebut ubin, secara efektif mengurangi ukuran adegan untuk pelabelan.

Namun, hal ini dapat sangat meningkatkan waktu dan biaya pelabelan, karena umumnya adegan dengan 8 juta poin mungkin perlu dipecah menjadi lebih dari 16 sub-adegan. Banyaknya jumlah tugas independen yang dihasilkan dari metode ini berarti lebih banyak waktu anotator dihabiskan untuk peralihan konteks antar tugas, dan pekerja mungkin kehilangan konteks saat adegan terlalu kecil, mengakibatkan data yang salah label.

Sampel langkah tetap

Pendekatan alternatif adalah memilih atau membuat jumlah titik yang dikurangi dengan subsampel linier, yang disebut a sampel langkah tetap. Misalkan Anda ingin mencapai target 500,000 poin (kami telah mengamati bahwa ini biasanya dapat ditampilkan di laptop konsumen โ€” lihat Format Data 3D Mentah Diterima), tetapi Anda memiliki cloud titik dengan 10 juta poin. Anda dapat menghitung ukuran langkah Anda sebagai step = 10,000,000 / 500,000 = 20. Setelah Anda memiliki ukuran langkah, Anda dapat memilih setiap titik ke-20 dalam kumpulan data Anda, membuat awan titik baru. Jika data point cloud Anda memiliki kepadatan yang cukup tinggi, pemberi label masih dapat melihat fitur yang relevan untuk pelabelan meskipun Anda mungkin hanya memiliki 1 poin untuk setiap 20 di adegan aslinya.

Kelemahan dari pendekatan ini adalah tidak semua poin berkontribusi pada hasil akhir downsampled, yang berarti bahwa jika suatu titik adalah salah satu dari sedikit yang penting, tetapi bukan bagian dari sampel, anotator Anda mungkin kehilangan fitur sepenuhnya.

Voxel artinya

Bentuk alternatif dari downsampling yang menggunakan semua titik untuk menghasilkan cloud titik downsampling adalah dengan melakukan pemfilteran jaringan. Filter kisi berarti Anda memecah ruang input menjadi kotak 3D biasa (atau voxel) melintasi titik cloud dan mengganti semua titik dalam voxel dengan satu titik perwakilan (titik rata-rata, misalnya). Diagram berikut menunjukkan contoh kotak merah voxel.

Jika tidak ada titik dari kumpulan data masukan dalam voxel tertentu, tidak ada titik yang ditambahkan ke awan titik downsampled untuk voxel tersebut. Pemfilteran kisi berbeda dari sampel langkah tetap karena Anda dapat menggunakannya untuk mengurangi kebisingan dan menyesuaikannya lebih lanjut dengan menyesuaikan ukuran kernel dan fungsi rata-rata untuk menghasilkan awan titik akhir yang sedikit berbeda. Awan titik berikut menunjukkan hasil downsampling sederhana (sampel langkah tetap) dan lanjutan (rata-rata voxel). Titik cloud yang diambil sampelnya menggunakan metode lanjutan lebih halus, ini terutama terlihat saat membandingkan dinding bata merah di belakang kedua adegan.

Pendekatan upsampling

Setelah downsampling dan pelabelan data Anda, Anda mungkin ingin melihat label yang dihasilkan pada point cloud yang lebih kecil dan downsampled diproyeksikan ke point cloud ukuran penuh, yang kami sebut pengambilan sampel. Deteksi objek atau pelacakan pekerjaan tidak memerlukan pemrosesan pasca untuk melakukan ini. Label di awan titik downsampled (seperti kubus) secara langsung berlaku untuk awan titik yang lebih besar karena mereka ditentukan dalam ruang koordinat dunia yang digunakan bersama oleh awan titik ukuran penuh (x, y, z, tinggi, lebar, panjang). Label-label ini secara minimal rentan terhadap kesalahan yang sangat kecil di sepanjang batas objek ketika titik batas tidak ada dalam kumpulan data downsampled, tetapi kesalahan kecil dan sesekali seperti itu sebanding dengan jumlah poin ekstra yang diberi label dengan benar di dalam kubus yang juga bisa dilatih.

Namun, untuk pekerjaan segmentasi semantik cloud titik 3D, label tidak langsung berlaku untuk set data ukuran penuh. Kami hanya memiliki subset label, tetapi kami ingin memprediksi label dataset lengkap lainnya berdasarkan subset ini. Untuk melakukan ini, kita bisa menggunakan sederhana Pengklasifikasi K-Nearest Neighbours (K-NN) dengan poin yang sudah diberi label berfungsi sebagai set pelatihan. K-NN adalah algoritme ML yang diawasi sederhana yang memprediksi label suatu titik menggunakan titik berlabel terdekat "K" dan suara berbobot. Dengan K-NN, kita dapat memprediksi kelas titik dari sisa titik tak berlabel dalam kumpulan data ukuran penuh berdasarkan kelas mayoritas dari tiga titik terdekat (menurut jarak Euclidean). Kita dapat lebih menyempurnakan pendekatan ini dengan memvariasikan hyperparameter dari pengklasifikasi K-NN, seperti jumlah titik terdekat untuk dipertimbangkan serta metrik jarak dan skema pembobotan titik.

Setelah Anda memetakan label sampel ke kumpulan data lengkap, Anda dapat memvisualisasikan ubin dalam kumpulan data ukuran penuh untuk melihat seberapa baik strategi upsampling bekerja.

Sekarang setelah kami meninjau metode yang digunakan dalam posting ini, kami mendemonstrasikan teknik ini dalam notebook SageMaker pada contoh adegan cloud titik segmentasi semantik.

Prasyarat

Untuk menelusuri solusi ini, Anda memerlukan yang berikut:

  • An Akun AWS.
  • Sebuah buku catatan Identitas AWS dan Manajemen Akses (IAM) dengan izin yang diperlukan untuk menyelesaikan panduan ini. Peran IAM Anda harus memiliki kebijakan terkelola AWS berikut yang dilampirkan:
    • AmazonS3FullAccess
    • AmazonSageMakerFullAccess
  • An Layanan Penyimpanan Sederhana Amazon (Amazon S3) tempat penyimpanan artefak notebook (data input dan label).
  • Tim kerja SageMaker. Untuk posting ini, kami menggunakan tim kerja pribadi. Anda dapat membuat tim kerja di konsol SageMaker.

Pengaturan notebook

Kami menggunakan notebook ground_truth_annotation_dense_point_cloud_tutorial.ipynb dalam Contoh SageMaker bagian dari instance notebook untuk mendemonstrasikan pendekatan downsampling dan upsampling ini. Notebook ini berisi semua kode yang diperlukan untuk melakukan preprocessing, labeling, dan postprocessing.

Untuk mengakses buku catatan, selesaikan langkah-langkah berikut:

  1. Buat instance notebook. Anda dapat menggunakan jenis instance, ml.t2.xlarge, untuk meluncurkan instance notebook. Pilih instance dengan setidaknya 16 GB RAM.
    1. Anda perlu menggunakan peran IAM notebook yang Anda buat lebih awal. Peran ini memungkinkan notebook Anda untuk mengunggah kumpulan data Anda ke Amazon S3 dan memanggil API solusi.
  2. Buka Jupyter Lab atau Jupyter ke mengakses instance notebook Anda.
  3. Di Jupyter, pilih Contoh SageMaker Di Jupyter Lab, pilih ikon SageMaker.
  4. Pilih Pekerjaan Pelabelan Kebenaran di Tanah dan kemudian pilih ipynb buku catatan.
  5. Jika Anda menggunakan Jupyter, pilih penggunaan untuk menyalin notebook ke instance Anda dan menjalankannya. Jika Anda berada di lab Jupyter, pilih Buat Salinan.

Berikan masukan notebook

Pertama, kami memodifikasi notebook untuk menambahkan ARN tim kerja pribadi kami dan lokasi bucket yang kami gunakan untuk menyimpan dataset kami serta label kami.

Bagian 1: Ambil dataset dan visualisasikan point cloud

Kami mengunduh data kami dengan menjalankan Bagian 1 dari buku catatan kami, yang mengunduh kumpulan data kami dari Amazon S3 dan memuat titik cloud ke dalam instans buku catatan kami. Kami mengunduh data yang disiapkan khusus dari ember milik AWS. Sebuah benda bernama rooftop_12_49_41.xyz harus berada di root bucket S3. Data ini adalah scan dari custom rooftop gedung apartemen yang dibuat di perangkat mobile. Dalam hal ini, data cloud titik dalam format xyzrgb.

Kita dapat memvisualisasikan point cloud menggunakan Matplotlib pencar3d fungsi. File cloud titik berisi semua poin yang benar tetapi tidak diputar dengan benar. Kita dapat memutar objek di sekitar porosnya dengan mengalikan titik cloud dengan matriks rotasi. Kita bisa mendapatkan matriks rotasi menggunakan licik dan tentukan perubahan derajat yang ingin kita buat untuk setiap sumbu menggunakan from_euler Metode:

!aws s3 cp s3://smgt-downsampling-us-east-1-322552456788/rooftop_12_49_41.xyz pointcloud.xyz # Let's read our dataset into a numpy file pc = np.loadtxt("pointcloud.xyz", delimiter=",") print(f"Loaded points of shape {pc.shape}") # playing with view of 3D scene from scipy.spatial.transform import Rotation def plot_pointcloud(pc, rot = [[30,90,60]], color=True, title="Simple Downsampling 1", figsize=(50,25), verbose=False): if rot: rot1 = Rotation.from_euler('zyx', [[30,90,60]], degrees=True) R1 = rot1.as_matrix() if verbose: print('Rotation matrix:','n',R1) # matrix multiplication between our rotation matrix and pointcloud pc_show = np.matmul(R1, pc.copy()[:,:3].transpose() ).transpose() if color: try: rot_color1 = np.matmul(R1, pc.copy()[:,3:].transpose() ).transpose().squeeze() except: rot_color1 = np.matmul(R1, np.tile(pc.copy()[:,3],(3,1))).transpose().squeeze() else: pc_show = pc fig = plt.figure( figsize=figsize) ax = fig.add_subplot(111, projection="3d") ax.set_title(title, fontdict={'fontsize':20}) if color: ax.scatter(pc_show[:,0], pc_show[:,1], pc_show[:,2], c=rot_color1[:,0], s=0.05) else: ax.scatter(pc_show[:,0], pc_show[:,1], pc_show[:,2], c='blue', s=0.05) # rotate in z direction 30 degrees, y direction 90 degrees, and x direction 60 degrees rot1 = Rotation.from_euler('zyx', [[30,90,60]], degrees=True) print('Rotation matrix:','n', rot1.as_matrix()) plot_pointcloud(pc, rot = [[30,90,60]], color=True, title="Full pointcloud", figsize=(50,30)) 

Bagian 2: Menurunkan sampel kumpulan data

Selanjutnya, kami menurunkan sampel kumpulan data menjadi kurang dari 500,000 poin, yang merupakan jumlah poin ideal untuk visualisasi dan pelabelan. Untuk informasi lebih lanjut, lihat Batas Resolusi Awan Titik in Format Data 3D Mentah yang Diterima. Kemudian kami memplot hasil downsampling kami dengan menjalankan Bagian 2.

Seperti yang kita bahas sebelumnya, bentuk downsampling yang paling sederhana adalah memilih nilai menggunakan ukuran langkah tetap berdasarkan seberapa besar yang kita inginkan untuk menghasilkan point cloud.

Pendekatan yang lebih maju adalah memecah ruang masukan menjadi kubus, atau dikenal sebagai voxel, dan memilih satu titik per kotak menggunakan fungsi rata-rata. Implementasi sederhana ini ditunjukkan pada kode berikut.

Anda dapat menyesuaikan jumlah target poin dan ukuran kotak yang digunakan untuk melihat pengurangan kejernihan cloud titik saat downsampling yang lebih agresif dilakukan.

#Basic Approach target_num_pts = 500_000 subsample = int(np.ceil(len(pc) / target_num_pts)) pc_downsample_simple = pc[::subsample] print(f"We've subsampled to {len(pc_downsample_simple)} points") #Advanced Approach boxsize = 0.013 # 1.3 cm box size. mins = pc[:,:3].min(axis=0) maxes = pc[:,:3].max(axis=0) volume = maxes - mins num_boxes_per_axis = np.ceil(volume / boxsize).astype('int32').tolist() num_boxes_per_axis.extend([1]) print(num_boxes_per_axis) # For each voxel or "box", use the mean of the box to chose which points are in the box. means, _, _ = scipy.stats.binned_statistic_dd( pc[:,:4], [pc[:,0], pc[:,1], pc[:,2], pc[:,3]], statistic="mean", bins=num_boxes_per_axis, ) x_means = means[0,~np.isnan(means[0])].flatten() y_means = means[1,~np.isnan(means[1])].flatten() z_means = means[2,~np.isnan(means[2])].flatten() c_means = means[3,~np.isnan(means[3])].flatten() pc_downsample_adv = np.column_stack([x_means, y_means, z_means, c_means]) print(pc_downsample_adv.shape) 

Bagian 3: Visualisasikan rendering 3D

Kita dapat memvisualisasikan awan titik menggunakan plot pencar 3D dari titik-titik tersebut. Meskipun titik cloud kita memiliki warna, transformasi kita memiliki efek yang berbeda pada warna, jadi membandingkannya dalam satu warna memberikan perbandingan yang lebih baik. Kita dapat melihat bahwa metode mean voxel tingkat lanjut menciptakan point cloud yang lebih halus karena rata-rata memiliki efek pengurangan noise. Dalam kode berikut, kita dapat melihat awan titik kita dari dua perspektif terpisah dengan mengalikan awan titik kita dengan matriks rotasi yang berbeda.

Saat Anda menjalankan Bagian 3 di buku catatan, Anda juga melihat perbandingan pendekatan langkah linier versus pendekatan kisi kotak, khususnya tentang bagaimana filter kisi kotak memiliki sedikit efek penghalusan pada keseluruhan titik cloud. Pemulusan ini mungkin penting tergantung pada tingkat kebisingan set data Anda. Memodifikasi fungsi pemfilteran kisi dari mean ke median atau beberapa fungsi rata-rata lainnya juga dapat meningkatkan kejernihan awan titik akhir. Perhatikan baik-baik dinding belakang contoh downsampled sederhana (ukuran langkah tetap) dan lanjutan (rata-rata voxel), perhatikan efek penghalusan metode rata-rata voxel dibandingkan dengan metode ukuran langkah tetap.

rot1 = Rotation.from_euler('zyx', [[30,90,60]], degrees=True) R1 = rot1.as_matrix() simple_rot1 = pc_downsample_simple.copy() simple_rot1 = np.matmul(R1, simple_rot1[:,:3].transpose() ).transpose() advanced_rot1 = pc_downsample_adv.copy() advanced_rot1 = np.matmul(R1, advanced_rot1[:,:3].transpose() ).transpose() fig = plt.figure( figsize=(50, 30)) ax = fig.add_subplot(121, projection="3d") ax.set_title("Simple Downsampling 1", fontdict={'fontsize':20}) ax.scatter(simple_rot1[:,0], simple_rot1[:,1], simple_rot1[:,2], c='blue', s=0.05) ax = fig.add_subplot(122, projection="3d") ax.set_title("Voxel Mean Downsampling 1", fontdict={'fontsize':20}) ax.scatter(advanced_rot1[:,0], advanced_rot1[:,1], advanced_rot1[:,2], c='blue', s=0.05) # to look at any of the individual pointclouds or rotate the pointcloud, use the following function plot_pointcloud(pc_downsample_adv, rot = [[30,90,60]], color=True, title="Advanced Downsampling", figsize=(50,30)) 

Bagian 4: Meluncurkan Pekerjaan Segmentasi Semantik

Jalankan Bagian 4 di notebook untuk menggunakan point cloud ini dan meluncurkan tugas pelabelan segmentasi semantik cloud titik Ground Truth menggunakannya. Sel-sel ini menghasilkan file manifes masukan yang diperlukan dan memformat point cloud dalam representasi yang kompatibel dengan Ground Truth.

Untuk mempelajari lebih lanjut tentang format masukan dari Ground Truth yang berkaitan dengan data point cloud, lihat Memasukan data dan Format Data 3D Mentah yang Diterima.

Di bagian ini, kami juga melakukan pelabelan di portal pekerja. Kami memberi label pada subset point cloud untuk memiliki beberapa anotasi untuk melakukan upampling. Saat pekerjaan selesai, kami memuat anotasi dari Amazon S3 ke dalam array NumPy untuk pemrosesan pasca kami. Berikut ini adalah tangkapan layar dari alat segmentasi awan titik Ground Truth.

Bagian 5: Lakukan upampling label

Sekarang setelah kami memiliki label downsampled, kami melatih pengklasifikasi K-NN dari SKLearn untuk memprediksi label kumpulan data lengkap dengan memperlakukan poin beranotasi kami sebagai data pelatihan dan melakukan inferensi pada sisa poin tak berlabel di cloud titik ukuran penuh kami.

Anda dapat menyesuaikan jumlah titik yang digunakan serta metrik jarak dan skema pembobotan untuk memengaruhi cara inferensi label dilakukan. Jika Anda memberi label beberapa ubin dalam kumpulan data ukuran penuh, Anda dapat menggunakan ubin berlabel itu sebagai kebenaran dasar untuk mengevaluasi keakuratan prediksi K-NN. Anda kemudian dapat menggunakan metrik akurasi ini untuk penyetelan hyperparameter K-NN atau mencoba algoritme inferensi yang berbeda untuk mengurangi jumlah titik yang salah diklasifikasikan di antara batas objek, sehingga menghasilkan tingkat kesalahan sampel serendah mungkin. Lihat kode berikut:

# There's a lot of possibility to tune KNN further # 1) Prevent classification of points far away from all other points (random unfiltered ground point) # 2) Perform a non-uniform weighted vote # 3) Tweak number of neighbors knn = KNeighborsClassifier(n_neighbors=3) print(f"Training on {len(pc_downsample_adv)} labeled points") knn.fit(pc_downsample_adv[:,:3], annotations) print(f"Upsampled to {len(pc)} labeled points") annotations_full = knn.predict(pc[:,:3]) 

Bagian 6: Visualisasikan label yang dicontohkan

Sekarang setelah kami melakukan upampling dari data berlabel kami, kami dapat memvisualisasikan ubin dari titik cloud ukuran penuh asli. Kami tidak merender semua point cloud ukuran penuh karena hal itu dapat mencegah alat visualisasi kami untuk merender. Lihat kode berikut:

pc_downsample_annotated = np.column_stack((pc_downsample_adv[:,:3], annotations)) pc_annotated = np.column_stack((pc[:,:3], annotations_full)) labeled_area = pc_downsample_annotated[pc_downsample_annotated[:,3] != 255] min_bounds = np.min(labeled_area, axis=0) max_bounds = np.max(labeled_area, axis=0) min_bounds = [-2, -2, -4.5, -1] max_bounds = [2, 2, -1, 256] def extract_tile(point_cloud, min_bounds, max_bounds): return point_cloud[ (point_cloud[:,0] > min_bounds[0]) & (point_cloud[:,1] > min_bounds[1]) & (point_cloud[:,2] > min_bounds[2]) & (point_cloud[:,0] < max_bounds[0]) & (point_cloud[:,1] < max_bounds[1]) & (point_cloud[:,2] < max_bounds[2]) ] tile_downsample_annotated = extract_tile(pc_downsample_annotated, min_bounds, max_bounds) tile_annotated = extract_tile(pc_annotated, min_bounds, max_bounds) rot1 = Rotation.from_euler('zyx', [[30,90,60]], degrees=True) R1 = rot1.as_matrix() down_rot = tile_downsample_annotated.copy() down_rot = np.matmul(R1, down_rot[:,:3].transpose() ).transpose() down_rot_color = np.matmul(R1, np.tile(tile_downsample_annotated.copy()[:,3],(3,1))).transpose().squeeze() full_rot = tile_annotated.copy() full_rot = np.matmul(R1, full_rot[:,:3].transpose() ).transpose() full_rot_color = np.matmul(R1, np.tile(tile_annotated.copy()[:,3],(3,1))).transpose().squeeze() fig = plt.figure(figsize=(50, 20)) ax = fig.add_subplot(121, projection="3d") ax.set_title("Downsampled Annotations", fontdict={'fontsize':20}) ax.scatter(down_rot[:,0], down_rot[:,1], down_rot[:,2], c=down_rot_color[:,0], s=0.05) ax = fig.add_subplot(122, projection="3d") ax.set_title("Upsampled Annotations", fontdict={'fontsize':20}) ax.scatter(full_rot[:,0], full_rot[:,1], full_rot[:,2], c=full_rot_color[:,0], s=0.05) 

Karena kumpulan data kami padat, kami dapat memvisualisasikan label upampled dalam ubin untuk melihat label downsampled upampled ke awan titik ukuran penuh. Meskipun sejumlah kecil kesalahan klasifikasi mungkin ada di sepanjang wilayah batas antar objek, Anda juga memiliki lebih banyak titik yang diberi label dengan benar di cloud titik ukuran penuh daripada cloud titik awal, yang berarti akurasi ML Anda secara keseluruhan dapat meningkat.

Membersihkan

Contoh notebook: Anda memiliki dua opsi jika Anda tidak ingin membiarkan instance notebook yang dibuat tetap berjalan. Jika Anda ingin menyimpannya untuk nanti, Anda dapat berhenti daripada menghapusnya.

  • Untuk berhenti contoh notebook: klik Contoh notebook link di panel kiri halaman beranda konsol SageMaker. Selanjutnya, klik berhenti link di bawah kolom 'Tindakan' di sebelah kiri nama instance notebook Anda. Setelah instance notebook dihentikan, Anda dapat memulainya lagi dengan mengklik Start tautan. Ingatlah bahwa jika Anda berhenti daripada menghapusnya, Anda akan dikenakan biaya untuk penyimpanan yang terkait dengannya.
  • Untuk hapus contoh notebook: hentikan dulu sesuai instruksi di atas. Selanjutnya, klik tombol radio di samping instance notebook Anda, lalu pilih Delete dari tindakan menu drop down.

Kesimpulan

Awan titik downsampling dapat menjadi metode yang layak saat memproses data sebelumnya untuk deteksi objek dan pelabelan pelacakan objek. Ini dapat mengurangi biaya pelabelan sambil tetap menghasilkan label keluaran berkualitas tinggi, terutama untuk tugas deteksi dan pelacakan objek 3D. Dalam posting ini, kami mendemonstrasikan bagaimana metode downsampling dapat memengaruhi kejelasan point cloud untuk pekerja, dan menunjukkan beberapa pendekatan yang memiliki kompromi berdasarkan tingkat kebisingan set data.

Terakhir, kami menunjukkan bahwa Anda dapat melakukan pekerjaan segmentasi semantik cloud titik 3D pada kumpulan data downsampled dan memetakan label ke cloud titik ukuran penuh melalui prediksi dalam sampel. Kami menyelesaikan ini dengan melatih pengklasifikasi untuk melakukan inferensi pada poin ukuran kumpulan data penuh yang tersisa, menggunakan poin yang sudah diberi label sebagai data pelatihan. Pendekatan ini memungkinkan pelabelan hemat biaya untuk adegan titik cloud yang sangat padat sambil tetap mempertahankan kualitas label yang baik secara keseluruhan.

Uji notebook ini dengan scene cloud titik padat Anda sendiri di Ground Truth, cobalah teknik downsampling baru, dan bahkan coba model baru di luar K-NN untuk prediksi final in-sample untuk melihat apakah teknik downsampling dan upsampling dapat mengurangi biaya pelabelan Anda.


Tentang Penulis

 Vidya Sagar Ravipati adalah Arsitek Pembelajaran Mendalam di Lab Solusi Amazon ML, di mana dia memanfaatkan pengalamannya yang luas dalam sistem terdistribusi skala besar dan hasratnya pada pembelajaran mesin untuk membantu pelanggan AWS di berbagai vertikal industri mempercepat adopsi AI dan cloud mereka. Sebelumnya, dia adalah Insinyur Pembelajaran Mesin di Layanan Konektivitas di Amazon yang membantu membangun platform personalisasi dan pemeliharaan prediktif.

Ishak Privitera adalah Arsitek Solusi Spesialis Pembelajaran Mesin dan membantu pelanggan merancang dan membangun solusi visi komputer tingkat perusahaan di AWS. Isaac memiliki latar belakang dalam menggunakan pembelajaran mesin dan komputasi yang dipercepat untuk visi komputer dan analisis sinyal. Isaac juga suka memasak, mendaki, dan mengikuti kemajuan terbaru dalam pembelajaran mesin di waktu luangnya.

Jeremy Feltracco adalah Insinyur Pengembangan Perangkat Lunak dengan Lab Solusi Amazon ML di Amazon Web Services. Dia menggunakan latar belakangnya dalam visi komputer, robotika, dan pembelajaran mesin untuk membantu pelanggan AWS mempercepat adopsi AI mereka.

Sumber: https://aws.amazon.com/blogs/machine-learning/annotate-dense-point-cloud-data-using-sagemaker-ground-truth/

Stempel Waktu:

Lebih dari Blog Pembelajaran Mesin AWS